Advent Calendar CTF 2014 write up

冬休みに入って暇だったのでAdvent Calendar CTF 2014をやってみた。

基本的にNetwork問とWeb問しか問題見ない食わず嫌い勢の私なので、とりあえず克服のために一日目から順番にやっていこうという感じで取り組んでみました。

1日目Warm up 0x41444354465f57334c43304d335f37305f414443374632303134という16進数が与えられたので、とりあえずバイナリエディタに突っ込んでみたらFLAGがでてきた。

f:id:pugi_tsubash:20141226000747p:plain

2日目 alert man

入力フォームに任意の文字を入力してtweetボタンを押すと入力した文字列が入力フォームの下あたりにリストとして追加される問題です。問題文にCan you alert('XSS')?と書いてあるので、とりあえず典型的な<script>タグを使ったXSSをやってみたら、検知に引っかかって入力した文字が消えた。まぁこれでフラグでるわけないよなって感じで、次にタグでXSSやってみたらalert(1)がでた!!が..........flagがでないwww 冷静になってもう一回問題文みたらalert('XSS')しろとかいてあるので、1の部分を'XSS'に変更してみることに。しかしこれではalertがでなかった。とういことは ' と " がエスケープされていのかなということで<img src=x onerror=alert('XSS')><img src=x onerror=alert(String.fromCharCode(88,83,83))>に変更。alertがでてFLAGが出てきた!!

the flag is: ADCTF_I_4M_4l3Rt_M4n

3日目 listen

listen.wavという音声ファイルが渡されたが、そのファイルを再生してもなにも聞こえない。とりあえず、listen.wavファイルをfileコマンドで見てみたら、Hzが1Hzと書いてある。ここらへん怪しいなと思い、liste.wavファイルをバイナリエディタに突っ込み、ここを参考に、Hzをラジオ音質の22,050Hz (リトルエンディアンなので22 56)に書き換えたら綺麗に聞こえるようになった。

ADCTF_SOUNDS_GOOD

5日目 shooting

この問題はシューティングゲームで10000ptを獲得しろという問題なのだが、これチートしないでクリアできる人いるの??ってくらい難易度が高い。とりあえずDeveloper tool 開いてごにょごにょ値を弄ってみる。gamé.scoreの値が弄れたので、scoreを10000点にしてみたがチート検知をされフラグがでない。その後、Javascriptを見つめながら色々な値を弄って、結局コンソールでgamé.rootScene._matrix=[1111111]と入力したら、フィールドの比!?がおかしくなり相手の攻撃があたらなくなり、ミサイル連打でクリアできた。

f:id:pugi_tsubash:20141226012406p:plain

8日目 rotate

これプログラミング力なくて、とても辛かった。自分のやり方より効率的なやり方があると思うので、あまり参考にしないで下さい。 rotate.zipというファイルが渡され、解凍すると、flag.jpg.encという暗号化されたファイルとrotate.pyというflag.jpgを暗号化するのに用いられたであろうファイルが渡されました。 とりあえず、暗号化される前のflag.jpgはjpgファイルなので、バイナリの最初の2byteは\xff\xd8で始まる。それと暗号化した後のflag.jpg.encのバイナリの最初の8byteの\xa8\x5d\x08\x42\x3c\x93\xA7\x41からkeyを得る。得られたkeyを使ってx*cos(key)-y*sin(key)x*sin(key) + y*cos(key)連立方程式を解きx,yの値を求めることができる。 そのx,yの値をバイナリに変換してファイルに書き出してやると複合できる。

f:id:pugi_tsubash:20141226020758p:plain

pythonで書いた問題を解くコードはもうすこし整形してから追記で掲げようと思います。

今回私が解いた問題は以上です。相変わらずPwnとReversingはやらず嫌い(やってもたぶんできない)で問題文すら見ない状況なので、簡単な問題から手を出していこうかなと思います。またSQLiの問題は今取り組んでいる最中なので解き次第追記しようかなと思います。