ぷらおり

適当にプログラムとかCTFとか

高専SECCON2019 Writeup

高専secconお疲れ様でした。emacs1s9でリーダー(名前だけ)として参加させて頂きました。僕個人としては昨年よりは頑張れたかなといった感じでしたし,うちのチームとしてもだいぶ実力が伸びてきたのではないかと感じています。

結果は17位ですが一応writeup書いておきます(

僕が解いた問題は

  • [01 sample] sample 10p

  • [06 Binary] 無言のELF 100p

  • [07 Binary] 暖かく包み込む 150p

  • [20 Web] 偉くなりたい 100p

の4つでした(1つも200点問題がない…)。

 [01 sample] sample 10p

問題文からflagをコピペします。flagは忘れました。

[06 Binary] 無言のELF 100p

a.outが渡されるので,とりあえず実行してみると入力を求められます(最初はなんも出ないから固まったと勘違いしました)。login incorrectと出るのでどうやら正しい文字列を入力してやる必要があるようです。

最初にobjdump -d a.out -M intelを実行しアセンブラを見ます。 mainを見ると文字列を取得→分割→比較しているようです。しかし,jne命令のあとにflag生成部分らしきものが丸々乗っかっているのでここを動かしてあげればflagが出てきそうです。

次にgdbを使って動的解析をしていきます。 先程の解析を元に文字列の取得からjne命令までを飛ばしてあげます。 f:id:Mahoroa:20191027212949p:plain
fgetsをcallするアドレスにbreakpointを設定し,そこまでを動かしたあとjneのあとまでjumpさせています。

flag : CTFKIT{hpb5iphbr_et3phet5o} 

stringsコマンドで解けることが後々判明して悲しい思いをしました...とりあえず一番最初はfileとstringsで間違いない

[07 Binary] 暖かく包み込む 150p

Oops.exeを渡されます。fileコマンドで見るとWindows用の32bitアプリケーション(?)のようでした。とりあえずdnSpyに突っ込みましたが逆アセンブル結果が出なかったので , string Oops.exe | grep -C 3 T{ で出てきたフラグっぽいものを適当に整形(エスパー)して解きました。 f:id:Mahoroa:20191027214221p:plain

flag : CTFKIT{sao_alice_}

T{でgrepしてるのは別の問題で使った時のを流用しただけなのでCTFでやっても問題ないと思います

[20 Web] 偉くなりたい 100p

htmlソースを見るとpostメソッドでhidden要素のis_not_adminを送っています。ここを書き換えるとadminになれそうなので,is_adminにしてログインするとフラグが出てきます。 flagは忘れました。  

感想

だいぶBinaryやReversingは解けるようになったと思っていましたが,エスパーした部分もあり,まだまだ地力不足なのを痛感しています。(てかBinary全部stringsとエスパーで解けるし解いた問題結局全部自明だったし...)

それから今回はBinaryが1問減ったのもあり,WebやMiscをやっていた時間が長かったのでもう少しBinary増やしてほしいなぁと思いました((。

来年は200点1つは解けるように頑張ります(200点以上のBinary問題よろしくお願いします()