田舎院生のセキュログ

自分用のメモとかWrite-up

SECCON Beginers 2017 in 長崎

SECCON Beginners 2017の長崎に参加してきたので、解けた問題のWrite-upを書きます。
ちなみに5位入賞(*‘∀‘)
バイナリは解き方が分かってても、短時間で解く気が起きない…笑

Misc

スコアサーバ入門 100

テスト用問題なのでパス!

てけいさん for びぎなーず 200

簡単な四則演算を100回連続で正解する問題
実はこの問題は去年解いたことあって、その時は自力で解いた(笑)
そこで今回は自動で解く!
f:id:swime:20171203155520j:plain
ソースコードを見ると、問題の数式だけ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)

一瞬で計算終わってフラグゲット!

QR Puzzle 200

この3枚の画像を
f:id:swime:20171203162720j:plain
画像編集で繋げて絵文字部分を修正するだけ。
f:id:swime:20171203162909p:plain
あとはこのサイトにアクセスしてフラグゲット!

QRの仕組みを少しだけ知ってれば即解ける問題('ω')

Web

Fix it! 100

HTTP通信を見て、HTTPレスポンスのLoctionヘッダがリダイレクト先URL。
このURLにアクセスしてフラグゲット!
f:id:swime:20171203163439j:plain

Login 100

ゲストユーザで不正ログインする問題
普通にSQLインジェクションするだけ。
f:id:swime:20171203163635j:plain

Password 200

ログイン画面が問題だったと思う…
とりあえずソースコードを見ると、怪しいJavaScriptが。
f:id:swime:20171203164820j:plain

base64ってヒントが書いてあるので、それ以降の文字列をbase64でデコード。
するとJavaScriptコードが生成される。
あとはそのコードの処理を追って行くと、フラグゲット!

Forensic

Simple 100

Wiresharkで問題のpcapを開いて「ctf4b」で検索。
ダミーが含まれているけど、フラグ発見!
f:id:swime:20171203165943j:plain

Export 200

HTTP通信を見ると、tar.gzファイルをダウンロードしていることが分かる。
あとはWiresharkでこのファイルを復元して、解凍し、フラグが書かれたテキストファイルをゲット!

W4nn4cry? 300

ファイルシステムデータが渡される。
stringsコマンドで見てみると、何かのファイルをOpenSSLで暗号化していることが分かる。ついでに暗号化時のパスワードも記録されてる。
f:id:swime:20171203171935j:plain

flsコマンドで見ると、削除してるファイルが分かる。
f:id:swime:20171203172131j:plain

これをicatで抽出するが、中身は暗号化されている。
そこで、stringsコマンドで得た情報を基に、ファイルを復号する。
コマンドは以下。

openssl enc -d -aes-256-cbc -salt -k パスワード -in 復号対象のファイル名 -out 復号後に出力するファイル名

復号したファイルの中身にフラグあり!
WannaCryもAESで暗号化してるのかな?

Reversing

Raw 100

実行ファイルが渡される。
とりあえず実行したら笑われた('Д')
f:id:swime:20171203173830j:plain

が、stringsコマンドで簡単にゲット
f:id:swime:20171203173858j:plain