CyberRebeat CTF Write-up

概要

生活習慣崩壊ズとして出ました 全完して同率1位でした f:id:kobaryo222912:20180909113313j:plain

先に↓のチームメンバーのWrite-upを読むことをおすすめします keymoon.hatenablog.com

ecasd-qina.hatenablog.com

僕が解いたのは6問でやるだけ問題を除くと実質2問+αでした f:id:kobaryo222912:20180909113328j:plain ↑zohe君が解いた問題をぼくとkeymoonがそれぞれ1つずつ代理で提出しています(どちらともBinary) 以下に解いた問題を載せます(解いた順、ジャンルの右の数字はdifficulty)

Write-up

Readme(Misc, 100)

f:id:kobaryo222912:20180909035858j:plain 上の画像が与えられます ぐっと睨んで感じるとflagが出ます(コツは日本語を忘れることです)

Secret.pdf(Stegano, 10)

黒塗り部分があるpdfファイルが与えられます Ctrl+A Ctrl+C Ctrl+V

Whitepage(Web, 10)

<form action="index.php" method="post">
   <input type="text" name="id" style="visibility:hidden" />
   <input type="text" name="password" style="visibility:hidden" />
   <button>LOGIN</button>
</form>

このままだと入力フォームが見えないのでhtmlを書き換えましょう 最初出題ミスでidが"Hiro"じゃなくて"Hero"になっていた 少し時間を溶かされた

Alpha(Stegano, 100)

GIMP

f:id:kobaryo222912:20180909045738p:plain

えいw

f:id:kobaryo222912:20180909045902p:plain

Uploader(Web, 100)

f:id:kobaryo222912:20180909041957p:plain ファイルの検索ページが与えられます

f:id:kobaryo222912:20180909042050p:plain 適当に試すとSQL Injectionっぽいです URLとエラーメッセージからSQLite3っぽいことが分かります 定番の

' OR 1=1;

を試すと f:id:kobaryo222912:20180909042210p:plain

secret.zipが出てきます これを落としてunzipするとパスワードを要求されます guestでログインするとsamle.zipのパスワードが表示されることから、haradaでログインしてパスワードを表示させたくなります これにはharadaの(アカウントの)パスワードが欲しくなります 最初えかすどがBlind SQL Injectionっぽいと言っていてテーブル名がほしいと言われたので頑張ります これはSQLiteのマスターテーブルの情報を検索結果の後につけてあげると通って、

' union select name, sql from sqlite_master --";

としてあげると

f:id:kobaryo222912:20180909042253p:plain

と言われるので0でパディングしてあげます

' union select name, sql, 0, 0 from sqlite_master --";

とすると

f:id:kobaryo222912:20180909042500p:plain

とテーブル名とCREATE TABLEしたときの情報が見れます ここで冷静に考えるとテーブル名を取る要領でUsersの情報が取れそうなことが分かるので、

' union select userid, password, 0, 0 from Users --";

としてあげるとパスワードが

f:id:kobaryo222912:20180909042313p:plain

出てくるのでログインするとzipのパスワードが分かります 解凍すると平文のflagが出てきます (SQL Injectionの問題を初めて解くことが出来たのですごく嬉しかった)

FLAG.encrypted(Crypto, 200)

とりあえず暗号文と公開鍵を見てみます 暗号文は特に特徴は無いですが、公開鍵をopenssl public-key.pemとかして出してみると明らかにeの値が大きいことが分かります ググるとeの値が極端に小さいor大きい時に使えるWiener's attackというものが出てきます

github.com

GitHubにサンプルがあるので落とします 適当に書き換えてあげるとdが出てきます あとはpow(C, d, n)とすると出てきます 最初暗号文を取り違えていてつらかった

番外編

f31337(Binary, 200)

99%zoheが解きます ただ出てきたflagが不正解になるので見てみます

CRCTF{y0ur_m4chine_1s_v3ry_f3st!!}

天才なので見た瞬間に'f3st'の違和感に気づきます まあダメ元で出してみるかと思い

CRCTF{y0ur_m4chine_1s_v3ry_f4st!!}

としてあげると通ります

Signature(Crypto, 200)

問題文を見ます PHP AND md5という検索クエリを脳に投げるとあんぐすとろむCTFでsei0oプロが解いていた問題を思い出したのでWrite-up

scrapbox.io

を見ます ただし問題が全く異なっていたので関係なくて悲しいな〜と思いながら眺めていると "cryptoをちょくちょく学んでいたためか伸長攻撃かな?と一瞬思ったが、そもそもハッシュが与えられないのでそれは違った。" という1文を見つけます これをチームメンバーに投げて少し考えて2時間ほど寝るとチームメンバーが解きます

感想

  • 問題が基本的に簡単なのが100%原因ではあるけどプロのチームと同じ順位ですごく嬉しい
  • 解いている問題が被る(特にkeymoon 死んで詫びるつもりは無いけどごめんなさい)ことはあったけどいい感じに協力しつつ解けてよかった 特にぼくのWrite-upの最後の4問は本当にチームワークだった(f31337は違うけど)
  • PPCをえかすどがすぐ倒してzoheがRevを一人で倒してkeymoonもSignature以外は一人で回答数が少ない問題を倒しまくっててこわかった チームを追い出されないように頑張りたい
  • sei0oを崇めよ