高専セキュリティコンテストに参加した(Write Up)

はじめに

おととい,昨日と高専セキュリティコンテストに参加してきました. 先輩,クラスメイト,後輩との4人で参加しまして結果は,4位でした.

f:id:tadaren:20180903091951p:plain

頑張りましたけどやっぱり難しいですね. ですので,自分が解いた問題のWriteUpを書きたいと思います.

Write Up

Misc

大した問題ではないけど一応書いておきます.

更新されたIoTデバイス(50pt)

問題文(要約?)
HTTPリクエストで418が返されたらしいけど,その後,ある日のアップデートで返されなくなって美味しいお茶が出力されたらしい. これを定義したプロトコルRFCの番号をフラグにせよ.

418エラーコードでググるHyper Text Coffee Pot Control Protocol - Wikipediaが出てくる. お茶が出力されたらしいのでRFC-7168でフラグがわかる.

君の名は(50pt)

CVE-2017-5753
CVE-2017-5715
が書かれているのでググるSpectre - Wikipediaがわかる.

サイトを見ていただけなのに(50pt)

問題文 Webサイトを見ていたら,ウィルスがダウンロードされて起動された.
この攻撃手法の名前をフラグにせよ.

自分は名前がわからなかったのでググったけどドライブバイダウンロード - Wikipediaでわかる.

謎のファイル(100pt)

まず,ファイルをダウンロードするとZipなのがわかる. なので,解凍してみると色々ファイルとかがある. その中に,rename_me.xmlというファイルがある. つい最近,docxファイルを解凍したので知っていたがこれはdocxファイルだった. なので,rename_me.xmlを[Content_Types].xmlに書き換えて再び圧縮すれば開けるはずだった. しかし,開けなかった. なので,仕方なくword/document.xmlの中身を見てみたら.SCKOSENを構成できそうな文字が色々あった. なので抽出してみた.

S
{
S
C
D
_
K
O
Z
O
C
I
S
X
P
E
_
}
N
I

すると,こんな感じだった. ここから,FLAG先頭のSCKOSENを選ぶと

S
{
S

C
D
_

K
O
Z

O
C
I

S
X
P

E
_
}

N
I

こんな感じでいい感じに順番になっているなのでそれぞれのブロックの1,2,3で揃えるとFLAGになる.

Crypto

exchangeable if(100pt)

f:id:tadaren:20180903100933j:plain

こんなが画像が渡される. これをみると4文字分がわからない. なので,strings out.jpegで見た所md5=2009....となっているところがあった. なので,4文字分を総当たりしてFLAGを作ってそのmd5ハッシュを比較し,一致すれば出力のコードを書いた.

import hashlib

md5_ = "2009d1c114ed83f57cf8adde69fd6ca8"

out = ["SCKOSEN{sHDtF1"+chr(i)+chr(j)+chr(k)+chr(l)+"NLTIWp}" for i in range(32, 127) for j in range(32, 127) for k in range(32, 127) for l in range(32, 127) if hashlib.md5("SCKOSEN{sHDtF1"+chr(i)+chr(j)+chr(k)+chr(l)+"NLTIWp}").hexdigest() == md5_]

print(out)

(コードが汚いのは見逃してください) 最初はわからない4文字のmd5かと思ってしばらく解けなかったのはないしょです.

シンプルなQRコード(200pt)

右半分だけのQRコードを渡された. これは,GitHub - waidotto/strong-qr-decoder: 強力なQRコードデコーダを使って解いた. 画像を見ながら人力で白:0,黒:1,不明:?となるtxtファイルを作って,./sqrt.py -e 2 -m 3 QR.txtで実行した.この時,エラー訂正レベルは最大だと思ってマスクパターンはわからなかったから総当たりした.

Web

サーバーから情報を抜き出せ(100pt)

まず,ページにアクセスするとレゴの画像が3枚あったからデベロッパーツールでソースを見ると画像のリンクが/image?filename=1.jpegみたいになっていた. だから,/image?filename=flag.txtとかすれば行けると思ったけど無理だった.けど,/image?filename=../flag.txtで1つ上の階層なだけだった.これでFLAGが出てくる.

進撃せよ(300pt)

まず,ページにアクセスするとflag.txtとtest.txtの2つのファイル名が書かれているリンクがある. flag.txtにアクセスするとWAFがflagの文字列でアクセスを拒否してきた.test.txtの方は普通にアクセスできたがtestと書かれているだけだった.そして,リンクを見るとbase64エンコードされているみたいだったので一応確認したらbase64だった.ディレクトリトラバーサルbase64エンコードしてアクセスしたりしたけど,うまくいかなかった.なので,base64を2回すればいけるやろと適当にやったら通ってしまった.

終わり

進撃せよが解けたのは嬉しかったけど,CryptoとかBinaryの問題に関してあまり手が出なかったのが反省.次に向けてもっと精進しなければ...