我刚刚在一个站点上进行了一些渗透测试,我注意到(我以前也注意到,但现在似乎是提出它的好点)在搜索字符串中放置一个空字节实际上会终止那里的字符串。
这对于像 C 这样的低级语言来说很好,我知道它是如何工作的,但是为什么这适用于 Web 应用程序,我在 PHP 和 ASPX 页面中都看到了这种情况。
这是一个漏洞,语言的预期功能还是只是语言的错误?
我刚刚在一个站点上进行了一些渗透测试,我注意到(我以前也注意到,但现在似乎是提出它的好点)在搜索字符串中放置一个空字节实际上会终止那里的字符串。
这对于像 C 这样的低级语言来说很好,我知道它是如何工作的,但是为什么这适用于 Web 应用程序,我在 PHP 和 ASPX 页面中都看到了这种情况。
这是一个漏洞,语言的预期功能还是只是语言的错误?
实际上 PHP 字符串可以包含空字节;.NET 字符串也可以(因此是 ASP.NET)。在 PHP 级别,这个字节没什么特别的;字符 U+0000 只是另一个 Unicode 代码点。当字符串被传递到另一个系统时,问题就开始了,空字节是一个字符串终止符。特别是对于文件访问:如果 PHP 代码尝试打开文件foo.txt\0.php(其中\0代表空字节),那么操作系统将只看到对 的请求foo.txt,而忽略字符串的其余部分。
在您的情况下,必须假设作为“搜索字符串”接收的字节未经修改地发送到底层搜索系统,其中空字节具有终止字符串的特殊含义。虽然这本身不是一个漏洞,但它表明该网站没有过滤输入字符,这可能会导致麻烦。