SECCON2016 Online 参加記&Writeup
開催期間(JST)
12/10 PM3:00 ~ 12/11 PM3:00
はじめに
大学の中間テストが終わり一段落した(まだ一つ残っているけど)ので, 書いてる.
先週開催されたSECCON2016 Onlineに, 同期の友人達と組んでいるチームであるwabisabiで参加した.
結果は以下の通り.
結果
・チーム名:wabisabi
・得点:400pt
・順位:272/1834
解いた問題
・Anti-Debugging (rev100)
・Memory Analysis (for100)
2問だけWriteup書いても寂しいので, 参加記としていろいろ書く.
開催前
・PM 2:00 起床
前日にバイト先に集まって皆でやろうみたいな話になってた.
・PM 3:05 会場到着 〜 解き始める
シャワー浴びずに寝てしまっていたので, 急いで準備してしていたけど, 遅刻. (申し訳なかった)
さぁ解き始めるぞ!と思いきや,
登録をしていなかったことに気がつく
急いで登録を済ませて, スタート.
最初はrev問が出てなくて, forensicsで解けそうな Memory Analysis があったのでそれに取り掛かる.
与えられたzipファイルはパスワードが必要(60分後には配布されるけど)なので, fcrackzipでブルートフォース.
数字だけで回してみたけどダメで, 次アルファベットで回してた.
(この時点では解けていないので, Writeupは後述)
他に解けそうなやつもなかったので暇だな〜と待っていたところ, 確かPM 3:30辺りでrev問が追加される.
・PM 3:30 Anti-Debugging を解き始める
Anti-Debugging (rev100)
問題文が
Reverse it.
ファイルの詳細.
bin: PE32 executable (console) Intel 80386, for MS Windows
EXEのほうが好きなので, 嬉しかった.
実行してみると
Input password >hoge password is wrong.
となって, どうやらパスワードチェッカーらしい
IDAで開く.
最初の分岐で正解かどうか判定してるっぽい.
正解ルーチンのほうを見ていくと, ファイル名から推測できる通りアンチデバッギングと思われるものがあった.
どうするかなぁとか思ったけど,
「直接書き換えれば勝ちっしょw」
っていう風にすぐに思って, やってみる.
とりあえず最初の分岐を書き換えて, 間違っているパスワードでも全て正解ルーチンにいくようにする.
書き換える場所.
objdumpでも確認する.
目的箇所のマシン語が特定できたので, vimで書き換えていく.
場所.
nop埋め.
これでどうだろうと思って実行してみる.
Input password >hoge Your password is correct.
認証を回避できてるけど, flagが出てこない.
もう一度IDAを見てみる.
ここ.
このcheck!ってところをどうやら通っていないっぽかったので, 通るように上のほうの分岐をいじる.
ここを書き換える.
またまたnop埋め.
実行してみると
こんな風にウィンドウがでてきて終わり.
SECCON{check_Ascii85}
PM 4:00 〜 絶頂期
Anti-Debuggingを解き終わって, 自分はMemory Analysisに取り掛かる.
ここからの30分が絶頂期.
チームの暗号担当が Vigenere を解き, もう一人が VoIP を解いたのでこの時点で300pt.
32位とかになっててビビる.
「やべぇよやべぇ!!!」とか騒いでて, チームでは超盛り上がる.
・PM 6:15 〜 バイト先の忘年会へ
結構調子良かったけど, バイト先の忘年会がPM 6:30 〜あったので移動を開始.
PM 6:30 〜 忘年会開始
CTFに響くし, そんな飲みすぎないようにしようと思っていてチョビチョビ飲んでいた.
お酒を飲んでいる間に順位は下がっていってたけど, 気にしない精神で.
先輩に大学院の話を聞けたり, その他普段話さないような人たちとも話せたので良かった.
AM 0:45 〜
飲み過ぎてしまった
頭が痛い
気持ち悪い
元々お酒はめっちゃ弱いので(ビール一杯でキツい), 気をつけてはいたが美味しかったのでだいぶ飲んでしまった.
AM 1:30 〜 頭痛と闘いながら気合のCTF開始
気合があればなんとかなるって誰かが言ってた気がする.
とにかく再開.
Memory Analysis とひたすら闘う.
忘年会へ行く前にある程度のところまでは解けていて, あともう一歩って感じだった.
Memory Analysis(for100)
問題文
Memory Analysis Find the website that the fake svchost is accessing. You can get the flag if you access the website!!
Hint
Hint1: http://www.volatilityfoundation.org/ Hint2: Check the hosts file
偽のsvchostがあるっぽくて, system32ディレクトリ以下に無いsvchostが一つあったのでこれだろうというのはわかった.
こいつがhosts fileを改ざんしたんだろうというところまでは考えていたんだけど,
問題文の
You can get the flag if you access the website!!
これにずっと惑わされていて, hosts file に書いてある"153.127.200.178"にアクセスしてもflag降ってこないやんけ!ってずっと四苦八苦していた.
AM 4:00 〜
会場がお通夜ムードになっていて, みんな解けないし疲れているし苦しんでいた時間帯.
仮眠を取るメンバーもでてきたり, やる人はやっていたりした.
身体も結構キツかったし, 問題も詰まっていたので一旦寝ることにした.
AM 8:30 〜
起床
再開
改めて考察した.
今までの, "偽のsvchostがhosts fileを改ざんして,
153.127.200.178 crattack.tistory.com
を追加した"
ということと, "そのsvchostはsystem32ディレクトリ以下にないやつ"という考察は絶対に間違っていないと思い, では何をすればいいのかと考えた時に, svchostがhosts fileを改ざんしたのは目的があって改ざんしたのだから, svchostがどういう動きをするのか確認すればいいのではないかと思い, そのsvchostを見てみることにした.
volatility -f forensic_100.raw --profile=WinXPSP2x86 filescan |grep host
で, svchostを列挙.
0x0201ef90 1 0 R--rw- \Device\HarddiskVolume1\WINDOWS\system32\svchost.exe 0x020f0268 1 0 R--r-d \Device\HarddiskVolume1\WINDOWS\svchost.exe 0x0217b748 1 0 R--rw- \Device\HarddiskVolume1\WINDOWS\system32\drivers\etc\hosts 0x024a7a90 1 0 R--rwd \Device\HarddiskVolume1\WINDOWS\system32\svchost.exe
この2つ目が目的のsvchostなので,
volatility -f forensic_100.raw --profile=WinXPSP2x86 dumpfiles -Q 0x020f0268 -D OUTDIR --name
こうして, ファイルを取り出す.
ファイルに対して strings してみると
C:\Program Files\Internet Explorer\iexplore.exe http://crattack.tistory.com/entry/Data-Science-import-pandas-as-pd
というのが気になった.
IEで, このURLにアクセスしにいっているのがわかる.
もしやと思い
153.127.200.178/entry/Data-Science-import-pandas-as-pd
にアクセスしてみると・・・
Data-Science-import-pandas-as-pdというテキストファイルが降ってきたので見てみると, flagが書かれていた.
SECCON{h3110_w3_h4ve_fun_w4rg4m3}
AM 11:00 〜
他のrev問も出ていたので, Retrospective(rev200)を解いていたけどそのままタイムアップ.
終了のPM 3:00までご飯も食べずにみんなで頑張ってやっていた.
まとめ
集まってやると, モチベがいい感じだし, 詰まった時に気軽に相談できたりして良い. (なにより一人でやる時より楽しい)
SECCON2015 Online の時より, 300位近く上がっているので成長はしていると思う.
来年は2桁目指して頑張っていきたい.
お酒飲み過ぎ良くない.