HackAll v3 簡易Writeup

fogot Password?に書いてある問題文から解いていくゲーム。Usernameは入力しなくても進める。問題のスクショは省略。初心者に向けていつもより易しく書いてみた。
# Level1
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3563446/d9deec32-5960-64d6-4648-f8bd2c3bd34b.png)
F12からElementsのコメントにパスワードがある。
password:mypass

# Level2
ソースコードを見ると、base64らしい文字列がある。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3563446/69fb6690-f218-6428-b397-d2193c9e9c1b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3563446/fb65738e-e017-3d4f-7ad5-ee75e998bdbd.png)
password:hirake-goma!

# Level3
パスワードは、ASCIIで「4D 61 74 65 72 69 61 6C 69 7A 65」です。
cyberchefに入れる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3563446/4ab37e06-4466-8f9d-ef62-3472f72b25e3.png)
password:Materialize

# Level4
パスワードは、お使いの端末の「ユーザーエージェント」です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3563446/72e8e775-a4bd-55cd-cd65-ebb87e2da608.png)
書き換えておく。F12→右上の3点→More Tools→Network conditionsから変更できる。
password:任意のUseragent

# Level5
ユーザーエージェントを「HackAll」に変更して、ログインしてください。パスワードは「現在接続に使用しているIPアドレス」で、https://hackall.tech/cdn-cgi/trace から確認できます。
(なぜか認証されなかったから、TorでIPを偽装して通した。IPv6で行ったが、通った。（別のブラウザで行いたいときは、F12→Applicationもしくはstrage→cookie→hackall_sessionを共有して、リロードすると通るようになる。）)
password:your Ipaddress.

# Level6
Cookieの[UserID]の値を「hackar_1285」にしてください。パスワードはCookieの[password]の値です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3563446/4c995ea9-4098-bbdb-3e6b-5e7330ad924a.png)
スクショのように、UserIDという項目を付け足して、hackar_1285とするパスワードはtoor。
password: toor

# Level7
パスワードはヘッダー情報に隠されています。
BurpSuiteを使ってリロード、Proxyでinterceptをonにしてキャッチ、ctrl+rでRepeaterに送って、ヘッダーを見る。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3563446/48086a82-efba-714d-ade3-0cfdb20afbef.png)
password:border-gateway
interceptをoffにしたら通常通り通信が流れるので、おかしいな？と思ったらoffになっているか確認してみましょう。

# Level8
パスワードはhackall.techのDNSレコードにTXTとして保存されています。
wslを使って、`dig hackall.tech TXT`と入力する。
```
└─$ dig hackall.tech TXT

; <<>> DiG 9.19.21-1-Debian <<>> hackall.tech TXT
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31393
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;hackall.tech.                  IN      TXT

;; ANSWER SECTION:
hackall.tech.           300     IN      TXT     "google-site-verification=esFA0QSkBJXiyF1mM3C0OsAGo4hw95Arq6pVIZamQXs"
hackall.tech.           300     IN      TXT     "hackall-level8-key is 82589933"

;; Query time: 840 msec
;; SERVER: 10.255.255.254#53(10.255.255.254) (UDP)
;; WHEN: Fri Sep 20 16:42:15 JST 2024
;; MSG SIZE  rcvd: 165
```
password:82589933

# Level9
パスワードは2の10000乗の最後の8桁です。「調べること」もハッキングの一つ。Google検索によって機密情報を詮索することを「Google Hacking」と呼びます。
ChatGPTに聞いたら帰ってきた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3563446/3d894043-4b7b-bd36-ece1-7040726722cb.png)
password:96709376

# Level10
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3563446/e3225fb0-ba2a-9fb2-5404-6cb39c5c5439.png)
右クリックでの一部機能が制限されているのが不審。URLの最初にview-source:を付けることで、ソースコードを見ることができる。
`view-source:https://hackall.tech/level10`
```
    * 僕は「レベル9までを全て突破した皆さんは」としか書いていません。
    * HackAllが全て終了したような演出を意図的にしているだけです。
    * その証拠にタイトルは「Level 10 - HackAll v3」になっています。
    *
    * 情報セキュリティの分野においても、気を抜いた瞬間こそが一番危ないというのは、言うまでもありません。
    * ランサムウェア攻撃は、金曜日の夜に多いのだとかなんとか。
    *
    * ここまでは、ちょっとした遊びみたいなものです。あなたがHackAllの"本体"に挑戦する資格を有しているか、確認させていただきました。
    * 情報セキュリティの現場で、ソースコードにパスワードが書いてあるなんてことはまずないでしょう。
    *
    * どんどん先へ進もう！ 
    *
    * レベル11 : https://hackall.tech/level10?msg=keep_it_up
```

# Level11
GETパラメータの文字列に基づいて特定のファイルの中身を表示しています。
'https://hackall.tech/level11?page=login.php#!'
現在はlogin.phpが表示されているようだ。URLに直接ファイルを指定することで、別のファイルを表示させることができそう。
../../../../etc/passwdや空文字列、`http://localhost/`などを試したが、正解はindex.phpだった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3563446/10870461-f04d-1dcb-ffe1-579e60349aa3.png)
` isset($_POST["password"])) { if ($_POST["password"] == "traversal") { SetLevelAndUserName(StageLevel, GetName()); define("MoveToNextLevel", true); } else { header("Location: https://hackall.tech/level" . StageLevel .`とあるので、パスワードはtraversal
password:traversal

# Level12
パスワードは「なし」です！！
普通にLOGINを押すと、パスワードが入力されていません。とのエラーが出るので、Burpsuiteを使用する。
適当な文字列を入力した後、proxyのinterceptをoffにして、requestを見る。`username=&password=test&btn_login=`を`username=&password=&btn_login=`に書き換え、Forwardを押す。
成功した後はinterceptをoffにしよう。
password:

# Level13
以下のZIPファイルの暗号化を解除してください。
https://hackall.tech/files/very-secret-file.zip

ただし、パスワードは5桁の数字です。
john the ripperというツールを使う。zipファイルからハッシュを取り出して、総当たりで解読を試みる。
まずは以下のコマンドでhashを抽出する。
`zip2john yourfile.zip > hashes.txt`
次に、パスワードファイルを作る。
`seq -w 00000 99999 > numbers.txt`
それらを組み合わせて総当たりをする。
`john --wordlist=numbers.txt hashes.txt`
パスワードが見つかったら、解凍する。
`unzip -P 00000 yourfile.zip`
だとバージョンが不足していたので、
`7z x -p00000 very-secret-file.zip`
```
(HackAll v3, Level 13)

UserName:PassWord(MD5)
 = isaac:0f359740bd1cda994f8b55330c86d845
```
hashcatなどで解読してもいいが、Crackstationを利用する。
https://crackstation.net/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3563446/0c87a9b3-66c3-8066-7779-23f3a3aabfa6.png)
username:isaac
passsword:p@ssw0rd

# Level14
Torネットワークで発信元を匿名化しながら、ユーザーエージェントを「HackAll」に偽装してログインしてください。
Torブラウザーをインストールし、firefox用のuseragentswicherを入れる。
挙動が不安定か、僕が見つけていない条件があるので、なぜか条件をそろえても先に進めないことがある。
祈りながらLoginを連打する。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3563446/d9b528b4-6e40-0835-b855-0efd49934dd2.png)
ここから、Torがつながっているか確認できる。
https://check.torproject.org/?lang=ja

# Level15
NULLバイト攻撃の脆弱性があります。
ただし、ブラウザの開発者ツールでは、リダイレクト直前のレスポンスボディが見られないことに注意してください。
NULLバイト攻撃とは、入力に%00や\0（NULLバイト）を含めることで、文字列がその位置で終端と見なされるようにし、プログラムの意図しない動作を引き起こす攻撃のことです。
リダイレクト直前のレスポンスト言っているので、burpでキャッチした後にctrl+rでリピータータブに送ります。
passwordに%00を入れて送ると、画像のようにパスワードが出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3563446/a9a77999-d039-ab1b-2fc6-dc8899593bc7.png)
password:identity-mapping

# Level16
パスワードは4桁の数字です。総当たりしてください。
hydraやwfuzzで行ったほうが速いのですが、通った後の挙動を調べるのがめんどくさかったのでBurpのIntruderを使いました。また、それらを使用する場合はcroudflareの上限に引っかからないように十分遅くする必要があります。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3563446/853805b4-1a4f-62e5-1ba2-858f4ede6bec.png)
このように記号で囲った後、payloadsタブに移動し、1000から総当たりを行いました。
~~0000から試さなかったのはめんどくさかったから~~
数時間後に確認すると、1729で200レスポンスが返ってきていたので、1729が答えでした。hydraで十分でした。
password:1729

# Level17
パスワードリストファイル
https://hackall.tech/files/HackAll_password_dictionary.txt
に基づいて、辞書攻撃をしてください。
同じく、Intruderを使用しました。すべてコピーして、payloadsのpasteを押すだけです。丸一日かかりました。
password:MaTRiX2w

# Level18
80桁の合成数
41131230896906266568421250948005105396640805366178123028001617187226097369970881
の素因数のうち、最も小さいものがパスワードです。

約256ビットのRSA暗号なんて、簡単に分解できますよね！
一般数体篩法がお勧めです。手元の環境では1分58秒かかりました。
以下のサイトで素因数分解を行いました。5分くらいでできました。
https://www.alpertron.com.ar/ECM.HTM
だれかfacterDBに登録しておいてください。(他力本願)

password:4958316916428320106286111082957922130667

## Level19
このページの「ソースコード」を閲覧してみてください。
JSで難読化されたパスワードが見える。
```js:Level19
function check() {
    const X = [0x2, 0x1]['reduce']((...D) => D[0x0] + D[0x1], -0x1) 
        + atob['toString']()[0xb] 
        + [0x8, 0x9]['reduce']((...D) => D[0x0] + D[0x1], -Math['pow'](0x2, 0x4))
        + btoa['toString']()[0x3 ** 0x2]
        + Math['pow'](0x2, [0x2, 0x1]['reduce']((...D) => D[0x0] + D[0x1], 0x0))
        + console['log']['toString']()['split']('')['shift']()
        + [0x1, 0x2, 0x3]['map'](D => D | 0x1)['reduce']((...D) => D[0x0] * D[0x1], 0x1);

    if (_(S(ap.T))['value'] === X) {
        ShowMessageBox("ログイン成功", "次のステージに進みます");
    } else {
        SomethingWentWrong("パスワードが違います。");
    }
}
```

なんやかんやあって
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3563446/43757b2b-5f43-fd34-c19c-98d68045cf94.png)

password:2o1b8f9

# あとがき
現在公開しているのはLevel18までのようです。最終問題以外のネタバレはOKとのことで、このwriteupを書きました。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ちなみに、HackAll v3の解答解説の作成は大歓迎です。<br>最終問題以外の解説記事は自由に公開してください。<br>また、サイトのリンクやスクショに許可は必要ありません。<br>(逆にヒントが欲しければ、こっそりDMしてください。)</p>&mdash; ActiveTK․ (@ActiveTK5929) <a href="https://twitter.com/ActiveTK5929/status/1836430396189479232?ref_src=twsrc%5Etfw">September 18, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
まだ最終問題は公開していないとの判断ですべての問題の解説を書きましたが、まずかったらTwitterは@kumama_nuiまでDMください。さくさく進めて楽しかったです。