🕊️

[Level 0 ~ 9] OverTheWire Natas Writeup

に公開

はじめに

サイト

https://overthewire.org/wargames/natas/

環境

Level0~7

  • macOS
  • Intelチップ
  • Chrome バージョン: 129.0.6668.90(Official Build) (x86_64)
    Level8~
  • macOS
  • Appleチップ
  • バージョン 137.0.7151.104(Official Build) (arm64)

Tips

macOS 使いは,パスワードをコピーした度に,下記のコマンドをローカルで実行すると,良い感じにパスワードが保存できてタイヘンヨーイ

pbpaste >> password && echo "" >> password && cat -n password

ルール

Level0

  • http://natas0.natas.labs.overthewire.org にアクセスして,ユーザー名:natas0 とパスワード:natas0 を指定する.
  • F12 or ⌘+⌥+iDevTools を開く.
  • コメントに <パスワード> が書いてある.

→Level1

  • Level0 と一緒の解法.
  • Level0 では右クリックして,検証 をクリックすることを想定されたのか?

→Level2

  • files/pixel.png をダウンロードしても特に何もない.
  • files/ にアクセスすると,users.txt が存在していることがわかる.

→Level3

  • DevTools を見ても特に何もない.Google ですらわからねえんだったら,クローリングで使われている robots.txt をみるか.
  • http://natas3.natas.labs.overthewire.org/robots.txt にアクセスすると以下が得られる.
User-agent: *
Disallow: /s3cr3t/
  • http://natas3.natas.labs.overthewire.org/s3cr3t/ にアクセスすると users.txt にさらにアクセスすれば良いことがわかる.
  • よって,http://natas3.natas.labs.overthewire.org/s3cr3t/users.txt をアクセスするとフラグが得られる.

→Level4

  • アクセスすると,http://natas5.natas.labs.overthewire.org/ から飛んで来いと言われたので,以下のコマンドで実現する.
$ curl --referer http://natas5.natas.labs.overthewire.org/ -u natas4:<パスワード> http://natas4.natas.labs.overthewire.org

→Level5

  • どうやら,一見さんお断りらしい.
  • DevTools->Application->Cookies を見ると,loggedin0 になっているので,これを 1 にしてリロードすれば良さそう.
  • 別解として,以下のように,curl コマンドの -v オプションで,Set-Cookie を確認し,その項目(loggedin)を -b で指定してもいける.
$ curl -v -u natas5:<パスワード> http://natas5.natas.labs.overthewire.org
$ curl -b "loggedin=1" -u natas5:<パスワード> http://natas5.natas.labs.overthewire.org

→Level6

  • とりあえず,View sourcecode をクリックしてみると,以下のスクリプトが閲覧できる.
~~~省略~~~
<?

include "includes/secret.inc";

    if(array_key_exists("submit", $_POST)) {
        if($secret == $_POST['secret']) {
        print "Access granted. The password for natas7 is <censored>";
    } else {
        print "Wrong secret";
    }
    }
?>
~~~省略~~~
  • おそらく,http://natas6.natas.labs.overthewire.org/includes/secret.inc にアクセスすれば,$secret が得られそう.
  • そして,その内容を送信すればOK

→Level7

  • Home とか About に移動するときはクエリパラメータにその情報を渡しているようだ.
  • ディレクトリトラバーサル攻撃を試みれば良さそう.以下のいずれかにアクセスすると答えが得られる.
相対パス
http://natas7.natas.labs.overthewire.org/index.php?page=../../../../etc/natas_webpass/natas8
絶対パス
http://natas7.natas.labs.overthewire.org/index.php?page=/etc/natas_webpass/natas8
  • ソースコードにヒントが書いてあるように,今作のパスワードは一般的に /etc/natas_webpass/natas<レベル> に格納されていそう.

→Level8

  • 逆向きにデコードすれば良い。
ソースコードの中身
$encodedSecret = "3d3d516343746d4d6d6c315669563362";

function encodeSecret($secret) {
    return bin2hex(strrev(base64_encode($secret)));
}
デコードコマンド
<$encodedSecret> | xxd -r -p | rev | base64 -d

→Level9

  • ソースコード上にOSコマンドを直書きしてる!!
  • OSコマンドインジェクションってやつかな?
けしからんソースコード
if($key != "") {
    passthru("grep -i $key dictionary.txt");
}
パスワード取得コマンド
;cat /etc/natas_webpass/natas10;

おわりに

参考文献

https://qiita.com/Koukyosyumei/items/250911c4cc2f788a37b9

筆者について

https://mattsun-kun-portfolio.vercel.app/

Discussion