PHP上的空字节注入?

信息安全 php 空字节注入
2021-08-20 19:27:39

是否可以对 PHP 代码执行空字节注入?而且,易受攻击的代码会是什么样子?你能给我一些例子吗,因为我注意到:

<?php

echo $_GET['get'];

不会使代码易受攻击。我想知道,如果可能的话,代码中有哪些可能的安全漏洞会导致这种漏洞。任何示例都会受到赞赏和有用。

2个回答

PHP 中的空字节注入涉及在文件系统操作中如何处理空字节。如果攻击者可以将空字节注入文件路径,则底层 C 函数将忽略恶意字符之后的任何内容。这可以用来绕过诸如预期文件扩展名之类的约束。

以下示例来自 php.net:

<?php
$file = $_GET['file']; // "../../etc/passwd\0"
if (file_exists('/home/wwwrun/'.$file.'.php')) {
    // file_exists will return true as the file /home/wwwrun/../../etc/passwd exists
    include '/home/wwwrun/'.$file.'.php';
    // the file /etc/passwd will be included
}
?>

http://www.php.net/manual/en/security.filesystem.nullbytes.php

在这种情况下,如果用户在文件参数的末尾提交空字符,则在文件操作期间将忽略“.php”扩展名。结合目录遍历字符串,它允许攻击者“包含”将被披露的任意文件。

此信息仅与旧的(不受支持的)PHP 版本相关。

空字节注入已在 PHP 5.3.4 中得到修复(它本身已经是一个旧的且不受支持的 PHP 版本):https ://bugs.php.net/bug.php?id=39863 。