2013-02-09 10 views
7

アップロードフォームにNullバイトインジェクション攻撃を再現しようとしています。はそれがSUBSTR()をバイパスし、move_uploaded_fileので、file.phpとしてアップロードされますfile.php%の00jpg(:私はこのような名前のファイルをアップロードしようとしているアップロードフォームのヌルバイトインジェクション

<?php 
if(substr($_FILES['file']['name'], -3) != "php") { 
    if(move_uploaded_file($_FILES['file']['tmp_name'], $_FILES['file']['name'])) 
    echo '<b>File uploaded</b>'; 
    else 
    echo '<b>Can not upload</b>'; 
} 
else 
    echo '<b>This is not a valid file/b>'; 
?> 

:私はこのコードを持っています)はヌルバイト(%00)で停止する必要があります。

問題は、アップロードされたファイルをサーバー上のfile.phpが、URLバーに/file.php%2500jpgを入力してアクセスすることができますfile.php%の00jpgを(名前が付いていないということです)。
move_uploaded_file()はヌルバイトを気にしないようですが、これはどのように機能しますか?拡張子が.phpのファイルを自分のコードでアップロードすることは可能ですか?

ありがとうございました。

+0

「.cgi」や「.asp」や「.phtml」のような「アクティブな」拡張子でファイルをアップロードすることが可能です。 – duskwuff

+2

PHPでNULLバイトの中毒が修正されました。 4 '。 –

+3

**ファイルのアップロードにブラックリストを使用しないでください**。ホワイトリストを使用します。また、私はそれについていくつかの簡単な方法を考えることができます。あなたは消毒するべきです。 – Amelia

答えて

7

HTML形式urlencodesはファイル名を%2500にし、PHPは%00(パーセント記号、ゼロ、ゼロ)に再度デコードします。あなたのテストにはどこにもヌルバイトはありません.HTMLフォームではなく、実際のヌルバイト(不可能)またはHTTP要求を手動で入力する必要があります。それでも、現在のPHPのバージョンはであり、はこの攻撃の影響を受けません。PHPは内部的にはZValというコンテナで変数を囲み、文字列の途中でnullバイトを有効にします。

関連する問題