Web 应用程序以空字节终止字符串

信息安全 Web应用程序 php
2021-08-26 07:19:36

我刚刚在一个站点上进行了一些渗透测试,我注意到(我以前也注意到,但现在似乎是提出它的好点)在搜索字符串中放置一个空字节实际上会终止那里的字符串。

这对于像 C 这样的低级语言来说很好,我知道它是如何工作的,但是为什么这适用于 Web 应用程序,我在 PHP 和 ASPX 页面中都看到了这种情况。

这是一个漏洞,语言的预期功能还是只是语言的错误?

1个回答

实际上 PHP 字符串可以包含空字节;.NET 字符串也可以(因此是 ASP.NET)。在 PHP 级别,这个字节没什么特别的;字符 U+0000 只是另一个 Unicode 代码点。当字符串被传递到另一个系统时,问题就开始了,空字节是一个字符串终止符。特别是对于文件访问:如果 PHP 代码尝试打开文件foo.txt\0.php(其中\0代表空字节),那么操作系统将只看到对 的请求foo.txt,而忽略字符串的其余部分。

这是记录在案的。 在其他语言中也是如此。

在您的情况下,必须假设作为“搜索字符串”接收的字节未经修改地发送到底层搜索系统,其中空字节具有终止字符串的特殊含义。虽然这本身不是一个漏洞,但它表明该网站没有过滤输入字符,可能会导致麻烦。