XCTF-Web 新しい質問-PHP2 (NO.GFSJ0234)

XCTF の新しい質問 - PHP2 (NO.GFSJ0234)

ターゲットマシンの電源を入れて仮想環境を起動しますここに画像の説明を挿入します

URLをコピーしてFirefoxで開きます
ここに画像の説明を挿入します

「このWebサイトにログインできますか?」と表示され、どこをクリックしても反応がありませんが、このとき「F12」を押すとWebページのソースコードが開き、表示されます。
ここに画像の説明を挿入します

コマンド ライン コンソールに入力して、“curl -i 网址”返された結果を表示することもできます。
ここに画像の説明を挿入します

Firefox はソース コードをチェックしましたが、何も見つかりませんでした。質問プロンプトを振り返ると、それは PHP コンテンツに関するものであると推測できます。Yujian を使用して背景をスキャンしてファイルを確認できますindex.php
ここに画像の説明を挿入します

そこで、スキャン結果の URL に従って確認したところ、結果はまだ前の内容しか表示されませんでした。
ここに画像の説明を挿入します

このとき、phpsファイルはphpのソースコードファイルだと思っていましたが、通常はphpコードの内容をWebブラウザ上のユーザー(訪問者)に直接表示するために使用されます。ユーザーは Web ブラウザから php ファイルの内容を直接見ることができないため、代わりに phps ファイルを使用する必要があります。Firefox とコマンドライン コンソールで表示します。
ここに画像の説明を挿入します
ここに画像の説明を挿入します

メインのコードは次のとおりです。

<?php
if("admin"===$_GET[id]) {
    
    
  echo("<p>not allowed!</p>");
  exit();
}

$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "admin")
{
    
    
  echo "<p>Access granted!</p>";
  echo "<p>Key: xxxxxxx </p>";
}
?>

コードの解釈:
受信 ID の値は、“$_GET[id] = urldecode($_GET[id])”関数処理後も "admin" である値と等しくなります。この関数は URL デコード関数です。つまり、ID 値を入力する必要がある URL の値です。 「admin」は 16 進数で暗号化されています。オンラインで追加するには URL を使用してください。
ここに画像の説明を挿入します

URLの直後に変換結果「?=%61%64%6d%69%6e」を追加してもフラグが取得できない
ここに画像の説明を挿入します

「%」も URL エンコードが必要な場合があります。ここでは、「%61%64%6d%69%6e」がエンコードされ、再度変換されて「%2561%2564%256d%2569%256e」になります。送信後、フラグが取得される
ここに画像の説明を挿入します

知らせ:

コード内で、この関数が存在し、PHP 構文に関連していることが判明しましたif("admin"===$_GET[id]) if("admin"==$_GET[id])つまり“==”“==”演算子は変数のデータ型に関係なく値を比較するだけであり、期待と一致しない比較結果が発生する可能性があります。演算子“===”はPHPにおける合同演算子で、2つの変数の値とデータ型が等しいかどうかを比較するために使用されます。

参照:
XCTF 攻撃と防御の世界 PHP2
CTF_EXP02: XCTF PHP2

おすすめ

転載: blog.csdn.net/MANCXUARY/article/details/132199781