miniCTF3 write-up
作った問題の解説(雑だけど…)
Binary 200 michael
バイナリを解析すると、3つの素数をかけて25935にしなければならないとわかります
checkというシンボルを残して判定を行っていることがわかるようにした(つもり)
is_primeとかにしとけばよかったかもしれない
25935 = 3 * 5 * 7 * 13 * 19 なので、3つの素数では表現できません
これで実装している素数判定法は「フェルマーテスト」と呼ばれるものです
randの呼び出しや、最後の「Be careful, this doesn't necessarily mean you are wrong.」から確率的アルゴリズムだと予測がたつ(たってほしい)
合成数であるにもかかわらず、素数だと判定されがちな数(カーマイケル数)があります
car micheal = カーマイケル数
561, 1729など
1729を使えば、3つの数で25935を表現できます
NITAC{3_5_1729}
「3つの数字の積」ということだけ読んで総当りで解いたチームもある
ちょっとでもデコンパイルなり逆アセンブルなりで読んでもらうのが目的だったので、まあいいかな
大きい数字にすれば普通に難しくなるとは思う
Misc 100 taiwan
アンケートの結果が圧倒的に悪い、出さなきゃよかった
馴染みが薄いジャンルなのでしょうがないっちゃしょうがない
OSINT
まずはこの写真が取られた場所を特定しましょう
中央のオブジェを切り取って画像検索をしてみます
https://gyazo.com/be8812b440e0d44d259621c1f41d0b72
2番目のサイトを見に行きます
スマホカメラのレビュー記事があるので、画像をダウンロードして見てみます
見るだけでは、例の建物は写っていないようです
exifを見てみると、位置情報が残っています
code:bash
$ exiftool
GPS Latitude : 25 deg 2' 43.97" N
GPS Longitude : 121 deg 31' 44.72" E
Focal Length : 3.9 mm
GPS Position : 25 deg 2' 43.97" N, 121 deg 31' 44.72" E
Light Value : 14.1
Mapsで見てみます
N25.0453459,E121.5291205
https://gyazo.com/6e8fa87ffc4792606616090523ffe07f
NITAC{ATP1}
Web 200 Akhan Academy
まとめると:scriptつきのSVGを表示させて、管理者(クローラ)が見ているページの中身を取ってくる
数式を書き込めます
katex.jsだけCDNではなく問題サーバに置いている
クローラとなったAdminが掲示板を巡回しています
LaTeXの \includegraphics で画像を入れられるよ、という誘導のためにスタンプを作りました
https://gyazo.com/b6a14756151978c928f55b882637184e
プロフィール画像投稿機能で、好きなSVGをアップロードできます
SVGの中身はXMLで、<script>を持てます
ライブラリは<object>タグでSVGを読み込むので、スクリプトも実行されます
もともとは <img> で受け取るところを書き換えた
そんなSVGを投稿すると、管理者が見に行ってXSSが引き起こせます
「Good」スタンプだけがなぜか不人気でした
https://gyazo.com/2d0f83aa90266ad411409eeac17f3d04
あーあ、show_exceptions切り忘れてましたね…→再デプロイ
https://gyazo.com/205b5d42e85ee6c2c9444244cc3a8254
Binary 100 shellcode
実行可能形式が渡されます
code:bash
checksec ./shellcode
Arch: amd64-64-little
RELRO: Full RELRO
Stack: Canary found
NX: NX disabled
PIE: PIE enabled
RWX: Has RWX segments
NX が無効になっています
動かしてみると「機械語命令をくれ」みたいなことをいうので、system("/bin/sh")をするシェルコードを与えてやります NITAC{I_g4ve_up_cr0ss_comp1ling}
クロスコンパイルして別アーキにしようかな、とも思いましたが手間に対してそんなに楽しくもならないと思ったのでやめました