眠いので寝ます

お勉強のメモを置いていこうと思いまふ

BeginnersCTF writeup

初投稿です。5/26~27の24時間開催されていたCTFに参加しました。友達と二人で参加したチームhiYは最終的に498point,193/844位 でした。チームとしては8問解けて、その中で自分の解いた問題のwriteupを書いていこうと思います。

[warmup]condition(pwn)

Host: pwn1.chall.beginners.seccon.jp

Port: 16268

が問題サーバで、実行バイナリも配られたので早速手元で実行すると

Please tell me your name...

と出てくるので適当に文字を打ち込むと

Permission denied

と返ってきます。radare2のデバッガモードで中を見ると0x40078fからgets関数の流れがあり、入力を格納する開始番地が[rbp-0x30]であることがわかります。

そのすぐ後ろでcmp命令でdword[rbp-4]と0xdeadbeefを比較して等しければflagを出力するputs関数にいくので[rbp-4]をその文字列にすればいいとわかります。リトルエンディアンに注意して

$python -c 'print("A"*44+"¥xef¥xbe¥xad¥xde")'| nc pwn1.chall.beginners.seccon.jp 16268

でflagが出ました。

[Warmup] Simple Auth(Rev)

配られたファイルを実行すると

Input Password:

と出力され適当に文字列を返すと

Umm...Auth failed...

と返ってくるのでまた中身を見ます。

main関数の流れはprintf後、scanfで入力したあとauth関数というところに飛んでいます。auth関数の返り値が1だとflagが出力されるようなので(というか入力した文字列番地を"Flag is %s"の引数としているので入力そのものがflag)早速auth関数の番地まで飛んで見ると、スタックに1文字ずつ律儀に何かを積んでいます。"ctf4b{"から始まることからこれがflagだと推測できます。radare2のデバッガモードで見ていたのでアセンブラの横にコメントで対応するASCIIを表示してくれました。

[Warmup] plain mail(Misc)

pcapファイルが渡されたのでwiresharkで中身を見ます。

$wireshark packet.pcap

パケット一覧のウインドウで右クリックからの追跡>TCPストリームを押すと通信の内容が見えます。右下のストリームというボタンでストリームを変更しながら中身を見ていきます。ストリーム0では、「秘密の情報を送るよ。まず暗号化したファイルを送って、次にパスワードを送るよ」的な内容が書かれています。ストリーム2を見て見るとbase64エンコードされた文字列が並んでいるのでこれをあとで復号するためにテキストファイルに落とします。ストリーム4ではパスワードが書かれています。

復号化を行うのにはpythonを使い、テキストファイルからzipファイルに復号しました。ここで解凍して見るとパスワードを求められるので先ほど得たパスワードを使うと無事解凍でき、中にはflag.txtが入ってました。

[Warmup] Welome(Misc)

今回のサービス問題。公式IRCに適当にログインするとflagが拾えます。

てけいさんえくすとりーむず(Misc)

$nc tekeisan-ekusutoriim.chall.beginners.seccon.jp 8690

上のコマンドを打つとサーバーに繋がり簡単な3桁以下同士の四則演算(割り算はなかった)を100問させられます。最初何問あるか知らなかったのでコード書くのだるいなぁと思い暗算してたのですが最初に100問って出てたのですぐやめました。 手計算してたら時間がないです。なのでpythonで文字列受け取って空白文字で分割して計算するコードを書きました。てけいさんとは。

-----------以下は手をつけたけど解けなかった問題です-----------------

Find the messages(Misc)

ディスクイメージが渡されたのでマウントしようと思ったのですが、あまり経験がないものでかなり手こずりました。結局開始セクタ番号などを調べてオプションをつけながら

$sudo mount -o loop,offset=1048576 disk.img /mnt/diskimg

でマウントでき/mnt/diskimgまで移動するとmessage1~3とlost+foundというディレクトリがありmessage1にはbase64エンコードされたテキスト、message2にはマジックナンバー8バイトが壊れたpngファイルがあり、それぞれがflagの断片となっていました。message3には何もなくおそらくファイルが壊れていて、その情報がlost+foundに入っているのだと予想して、fsckコマンドやら色々試したのですが最後までわかりませんでした。solve数が多かったので解きたかったです。自分のググり力の低さを感じました。

BBS (Pwn)

スタックオーバーフローがありripが取れたところまでいったのですが、それ以降分からず。要復習です。

(まとめ)

SANS Netwars2017ぶりにチームでの参加となりました。自分は半年以上前くらいから国内 CTFに数回参加したことがある程度で、毎回だいたいサービス問題含め4~5問解ける程度でしたが、今回は友達もいるおかげでチームで8問解けました。友達はCTF初参加らしく、前日に困ったらこれ読め的な感じで僕がハリネズミ本を渡してたくらいなのですが、僕の苦手なcryptoを2問、webを1問解いてくれて大活躍でした。しかもチームで一番得点高いのはその中のcrypto問だったので僕の人権は失われました。結局今回も自分は5問しか解けず進歩がなく辛かったですが、とても楽しかったです。また誘って参加したいです。少し落ち着いたらプロのwriteupを見て復習していこうと思います。

初投稿でソースコードとか書きづらい書式を選んだまま進めていったので次からはqiitaに投稿するなり、見やすく書いていこうと思うのでご容赦ください。