SECCON Beginners 2017の長崎に参加してきたので、解けた問題のWrite-upを書きます。
ちなみに5位入賞(*‘∀‘)
バイナリは解き方が分かってても、短時間で解く気が起きない…笑
Misc
スコアサーバ入門 100
テスト用問題なのでパス!
てけいさん for びぎなーず 200
簡単な四則演算を100回連続で正解する問題
実はこの問題は去年解いたことあって、その時は自力で解いた(笑)
そこで今回は自動で解く!
ソースコードを見ると、問題の数式だけdivタグを使っていることが分かる。
だからあとは、divタグから数式を抽出して計算し、結果を送信すれば良いだけ。
Pythonで書いたプログラムはこんな感じ。
# coding:utf-8 import requests from bs4 import BeautifulSoup url = 'http://172.20.1.1/php_math.php' s = requests.session() req = s.get(url) for i in range(103): soup = BeautifulSoup(req.text, "lxml") if soup.find("div") is None: print(soup.text) else: div = soup.find("div").text quest = div.split(' ') x = int(quest[0]) y = int(quest[2]) if "+" in div: ans = x + y elif "-" in div: ans = x - y elif "*" in div: ans = x * y elif "/" in div: ans = x / y else: print(soup) req = s.post(url, data={"answer": ans}) print(ans)
一瞬で計算終わってフラグゲット!
Web
Fix it! 100
HTTP通信を見て、HTTPレスポンスのLoctionヘッダがリダイレクト先URL。
このURLにアクセスしてフラグゲット!
Login 100
ゲストユーザで不正ログインする問題
普通にSQLインジェクションするだけ。
Password 200
ログイン画面が問題だったと思う…
とりあえずソースコードを見ると、怪しいJavaScriptが。
base64ってヒントが書いてあるので、それ以降の文字列をbase64でデコード。
するとJavaScriptコードが生成される。
あとはそのコードの処理を追って行くと、フラグゲット!
Forensic
Simple 100
Wiresharkで問題のpcapを開いて「ctf4b」で検索。
ダミーが含まれているけど、フラグ発見!
Export 200
HTTP通信を見ると、tar.gzファイルをダウンロードしていることが分かる。
あとはWiresharkでこのファイルを復元して、解凍し、フラグが書かれたテキストファイルをゲット!
W4nn4cry? 300
ファイルシステムデータが渡される。
stringsコマンドで見てみると、何かのファイルをOpenSSLで暗号化していることが分かる。ついでに暗号化時のパスワードも記録されてる。
flsコマンドで見ると、削除してるファイルが分かる。
これをicatで抽出するが、中身は暗号化されている。
そこで、stringsコマンドで得た情報を基に、ファイルを復号する。
コマンドは以下。
openssl enc -d -aes-256-cbc -salt -k パスワード -in 復号対象のファイル名 -out 復号後に出力するファイル名
復号したファイルの中身にフラグあり!
WannaCryもAESで暗号化してるのかな?
Reversing
Raw 100
実行ファイルが渡される。
とりあえず実行したら笑われた('Д')
が、stringsコマンドで簡単にゲット