Skip to content

Instantly share code, notes, and snippets.

@koike koike/* WirteUp.md
Last active Dec 6, 2015

Embed
What would you like to do?
SECCON 2015 予選 WriteUp

SECCON 2015 予選のWriteUpです

login.pwn.seccon.jp:10000

Chromeで開くと

CONNECT 300

Welcome to SECCON server.

The server is connected via slow dial-up connection.
Please be patient, and do not brute-force.
S� �E� �C� �C� �O� �N� �{� �S� �o� �m� �e� �t� �i� �m� �e� �s� �_� �w� �h� �a� �t� �_� �y� �o� �u� �_� �s� �e� �e� �_� �i� �s� �_� �N� �O� �T� �_� �w� �h� �a� �t� �_� �y� �o� �u� �_� �g� �e� �t� �}� �
login: 

Login timer timed out.
Thank you for your cooperation.

HINT: It is already in your hands.

Good bye.

と書かれたファイルが降ってくる

よってflagはSECCON{Sometimes_what_you_see_is_not_what_you_get}

ex1
Cipher:PXFR}QIVTMSZCNDKUWAGJB{LHYEO
Plain: ABCDEFGHIJKLMNOPQRSTUVWXYZ{}

ex2
Cipher:EV}ZZD{DWZRA}FFDNFGQO
Plain: {HELLOWORLDSECCONCTF}

quiz
Cipher:A}FFDNEA}}HDJN}LGH}PWO
Plain: ??????????????????????

There is no bonus in this question

Start SECCON CTFと全く同じ

テキトーに目視でSECCON{SEEYOUNEXTYEAR}だと分かる

じゃんけんに1000回連続で勝ち続けよ
http://scontents.quals.seccon.jp/files/rps.apk

apkファイルが配布されるのでひたすらデコンパイルしていく (この記事が参考になった)

dex2jarとjadを使ってclassclasses.dexをバラしていくとcom\example\seccon2015\rock_paper_scissorsMainActivityというファイルがあったので読んでみると

if(1000 == cnt)
    textview.setText((new StringBuilder()).append("SECCON{").append(String.valueOf((cnt + calc()) * 107)).append("}").toString());

と書いてある部分を見つけた

cntは1000だと分かっているので, flagは

String.valueOf((1000 + calc()) * 107)

で生成されているようだが, calc()が何だか分からない

そのままMainActivityを読んでいくと

static 
{
    System.loadLibrary("calc");
}

と書かれてあった

よく探してみるとlibフォルダにsoファイルが置いてあった

$ ls -la
total 4
drwxrwx---+ 1 kkrnt None 0 Dec  5 15:46 .
drwxrwx---+ 1 kkrnt None 0 Dec  5 15:55 ..
drwxrwx---+ 1 kkrnt None 0 Dec  5 16:09 armeabi
drwxrwx---+ 1 kkrnt None 0 Dec  5 15:46 armeabi-v7a
drwxrwx---+ 1 kkrnt None 0 Dec  5 16:09 mips
drwxrwx---+ 1 kkrnt None 0 Dec  5 22:12 x86

x86フォルダのlibcalc.soを逆アセンブルしてみると

00000400 <Java_com_example_seccon2015_rock_1paper_1scissors_MainActivity_calc>:
 400:	b8 07 00 00 00       	mov    eax,0x7
 405:	c3                   	ret    

と書かれてあるので, calc()は7を返す関数らしい (IDAに突っ込んでも一瞬で分かる)

なのでflagを生成する部分は

String.valueOf((1000 + 7 * 107)

よってflagはSECCON{107749}だと分かる

Find image files in the file
http://scontents.quals.seccon.jp/files/MrFusion.gpjb
Please input flag like this format-->SECCON{*** ** **** ****}
There is no bonus in this question

画像ファイルが降ってくるので色々見てみると, サイズに対してファイルサイズが明らかにオカシイ

ジャンルがstegoだし, ファイルが埋め込まれてるパターンの問題だと予想し, 010 Editorに読み込ませて調べてみると, 4つのpngファイルと4つのjpgファイルと3つのbmpファイルと3つのgifファイルが見付かる

見付かった順番に見ていくとOCT 21 2015 0728という文字列が出てくるので, flagはSECCON{OCT 21 2015 0728}

(最初O0だと思ってて解くのに時間掛かった…)

Unzip the file
http://scontents.quals.seccon.jp/files/unzip

zipが配布されているので取り敢えずunzipしてみる

$ unzip unzip.zip
Archive:  unzip.zip
[unzip.zip] backnumber08.txt password: 
   skipping: backnumber08.txt        incorrect password
   skipping: backnumber09.txt        incorrect password
   skipping: flag                    incorrect password

パスワードが掛かっているみたいで開けない

backnumber08.txtとbacknumber09.txtを見た時点でSECCONのメールマガジンのバックナンバーだろうと予想してバックナンバーをダウンロードしてくる

ダウンロードしてきたbacknumber08.txtとbacknumber09.txtとunzip.zipのbacknumber08.txtとbacknumber09.txtが同じサイズなので同一ファイルであると推測し, 既知平文攻撃を試す

pkcrackをダウンロードしてきてビルドして試す

$ ./pkcrack -C ./unzip.zip -c backnumber09.txt -p backnumber09.txt -P backnumber09.zip -d dec.zip
Files read. Starting stage 1 on Sun Dec  5 20:46:27 2015
Generating 1st generation of possible key2_4850 values...done.
Found 4194304 possible key2-values.
Now we're trying to reduce these...
Done. Left with 3342 possible Values. bestOffset is 24.
Stage 1 completed. Starting stage 2 on Sun Dec  5 20:46:44 2015
Ta-daaaaa! key0=270293cd, key1=b1496a17, key2=8fd0945a
Probabilistic test succeeded for 4831 bytes.
Ta-daaaaa! key0=270293cd, key1=b1496a17, key2=8fd0945a
Probabilistic test succeeded for 4831 bytes.
Ta-daaaaa! key0=270293cd, key1=b1496a17, key2=8fd0945a
Probabilistic test succeeded for 4831 bytes.
Ta-daaaaa! key0=270293cd, key1=b1496a17, key2=8fd0945a
Probabilistic test succeeded for 4831 bytes.
Ta-daaaaa! key0=270293cd, key1=b1496a17, key2=8fd0945a
Probabilistic test succeeded for 4831 bytes.
Ta-daaaaa! key0=270293cd, key1=b1496a17, key2=8fd0945a
Probabilistic test succeeded for 4831 bytes.
Stage 2 completed. Starting zipdecrypt on Sun Dec  5 20:48:19 2015
Decrypting backnumber08.txt (5315a01322ab296c211eecba)... OK!
Decrypting backnumber09.txt (83e6640cbec32aeaf10ed1ba)... OK!
Decrypting flag (34e4d2ab7fe1e2421808bab2)... OK!
Finished on Sun Dec  5 20:48:19 2015

Windows環境だと上手くいかなかったり, backnumber08.txtだとダメだったりしたけど, パスワードを解除出来たのでunzipするとflagというファイルが出てくる

fileコマンドで調べてみると

$ file flag
flag: Microsoft Word 2007+

と出てくるので拡張子をdocにして開くと白背景に白文字でSECCON{1s_th1s_passw0rd_ weak?}と書いてあった

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.