見出し画像

#57 natas

 今日はクリスマスです。そんなことはお構いなしに、今日も記事を書きます。

 以前、OverTheWireのbehemothにチャレンジしました。Pwnable系の問題でバッファオーバーフローの勉強になりました。今回はWeb問題のnatasに挑戦しました。序盤は簡単で、0-8まで一気にクリアしたので解説していきます。


Natas

natas0

 一見、ページには何も情報がないようですが、ブラウザの開発ツールでソースを見てみましょう。コメントにパスワードが記されています。

natas1

 右クリックが禁止されています。が、F12ボタンで開発ツールが開けます。natas0と同様、コメントにパスワードが書かれています。


natas2

 画面ではよく見えないですが、/files/pixel.pngが読み込まれています。/filesにアクセスすると、ディレクトリ内のファイル一覧が確認できます。ここにあるusers.txtを開くと、natas3のパスワードが確認できます。

natas3

 Googleなどのクローラーに対する設定ファイルにrobots.txtというものがあります。/robots.txtにアクセスすると、以下のように書かれています。

User-agent: *
Disallow: /s3cr3t/

/s3cr3t/にアクセスすると、またもusers.txtが見つかりました。ここにnatas4のパスワードが書き込まれています。

natas4

 特定のページから移動してきた場合のみアクセスが許可されますというメッセージが表示されています。HTTPで移動元ページを表すものとしてまず思いつくのは、ヘッダーのRefererでしょう。ヘッダーは任意の値に書き換えることができます。ここでは、以下のように変更します。

Referer: http://natas5.natas.labs.overthewire.org/

すると、natas5のパスワードが表示されます。

natas5

 ログインしないとアクセスできませんと言っております。Cookieを確認すると、「loggedin:"0"」という値が保存されています。ログイン判定のフラグのようですね。0を1に書き換えて再度ページを開くと、natas6のパスワードが表示されました。


natas6

 ソースを確認すると、入力したパスワードの比較処理に、外部ファイルから読み込んだ値を使っていることが見て取れます。

include "includes/secret.inc";

/includes/secret.incにアクセスすると、コメントでパスワードが書かれていました。これを、フィールドに入力して送信すると、画面にnatas7のパスワードが表示されます。


natas7

 GETパラメーターでpageを受け取っています。「page=../../../etc/passwd」などと入れてみると、エラーが発生します。

Warning: include(../../../etc/passwd): failed to open stream: No such file or directory in /var/www/natas/natas7/index.php on line 21

Warning: include(): Failed opening '../../../etc/passwd' for inclusion (include_path='.:/usr/share/php') in /var/www/natas/natas7/index.php on line 21

LFI(Local File Inclusion)が狙えそうです。

「page=../../../../../../../etc/natas_webpass/natas8」としたところ、natas8のパスワードが書かれたファイルを画面に表示させることができました。

natas8

 ソースを見ると、パスワードが暗号化されていることがわかります。複雑な暗号化ではないので、そのまま逆の処理を行えば復元できそうです。

$encodedSecret = "3d3d516343746d4d6d6c315669563362";

function encodeSecret($secret) {
    return bin2hex(strrev(base64_encode($secret)));
}

まず、$encodedSecretの値は、バイナリから16進文字列に変換されているので、もとに戻します。

3d3d516343746d4d6d6c315669563362
-> ==QcCtmMml1ViV3b

続いて、PHPのstrrevは、文字列を逆順にする関数です。

==QcCtmMml1ViV3b
-> b3ViV1lmMmtCcQ==

そして、base64エンコードを解きます。

b3ViV1lmMmtCcQ==
-> oubWYf2kBq

復号した値を送信すると、画面にnatas9のパスワードが表示されました。


まとめ

 Web開発に携わっているためか、拍子抜けするほど簡単に感じました。今回、8までクリアしましたが、Natasは全部で34問あります。難しい問題もガンガン解いて、レベルアップしたいです!OSCPとりたい!

EOF

この記事が気に入ったらサポートをしてみませんか?