gpt4 book ai didi

php - 上传表单中的空字节注入(inject)

转载 作者:可可西里 更新时间:2023-11-01 12:53:28 24 4
gpt4 key购买 nike

我正在尝试在上传表单上重现空字节注入(inject)攻击。我有这段代码:

<?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>';
?>

我正在尝试上传一个这样命名的文件:file.php%00jpg 这样它将绕过 substr() 并将作为 file.php 上传,因为 move_uploaded_file() 应该停止在空字节 (%00)。

问题是上传的文件在服务器上的名称不是file.php而是file.php%00jpg(可以通过输入/file.php%2500jpg 在 url 栏中)。
看起来 move_uploaded_file() 并不关心空字节,那么它是如何工作的呢?是否可以使用我的代码上传扩展名为 .php 的文件?

谢谢 :).

最佳答案

HTML 表单将文件名 urlencode 为 %2500,PHP 再次将其解码为 %00(百分号、零、零)。在您的测试中任何地方都没有空字节,您必须用实际的空字节命名文件(不可能)或手动摆弄 HTTP 请求而不是使用 HTML 表单。不过,当前的 PHP 版本不会容易受到这种攻击,PHP 在内部将变量装箱在所谓的 ZVal 容器中,并允许字符串中间的空字节没有任何影响。

关于php - 上传表单中的空字节注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14791790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com