![見出し画像](https://assets.st-note.com/production/uploads/images/94101338/rectangle_large_type_2_f38f900eb40b9d357eb3bb22ffb61595.jpeg?width=1200)
#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
この記事が気に入ったらサポートをしてみませんか?