URL 附加 .php 时包含本地文件?

信息安全 Web应用程序 php
2021-09-03 05:40:39

在渗透测试期间,我遇到了一个容易受到本地文件包含的目标:

include("$rootpath/includes/dir/".$_GET["section"].".php");

当我访问的URL http://target.com/img?section=images它完美的images.php出现在$rootpath/includes/dir/目录中。当我访问时,http://target.com/img?section=images.php我什么也没得到,表明服务器找不到任何images.php.php文件。

有没有办法绕过.php附加限制?我试过http://target.com/img?section=images.php%00了,但网络服务器现在正在尝试查找http://target.com/img?section=images.php%00.php文件。我想阅读/etc/passwd文件。

3个回答

不幸的是(对于攻击者)这种特定技术仅适用于 PHP 5.3 及以下版本考虑到 PHP 5.3 的最后一个版本是 2014 年 8 月,您很可能会遇到更新的版本

这是 PHP 的错误列表,有多个文章和资源特别提到 LFI 中的空字节绕过被限制在 PHP 5.4 之前:

注意:一些参考资料专门说 5.3.4 及以下版本,我对此进行了更深入的研究,但我停止追捕兔子,因为“5.3 及以下”​​可能回答了为什么旁路不起作用:)。

我不知道有什么方法可以绕过这个限制,但是阅读 /etc/passwd 无论如何都很无聊。是否有文件上传功能可用于将 .php 文件上传到服务器?然后,您可以使用此包含错误来执行您上传的代码,即使它不在 webroot 内或无法通过正常的 GET 请求访问。这使您可以在服务器上执行任意代码,这比任意本地文件包含更强大。

您是否尝试过使用允许您控制对服务器的请求/响应的工具,例如 Peter 建议的 Burp Suite?通过这种方式,您可以尝试各种技巧,例如拦截可能导致绕过 php 附加的请求和响应。

而且由于您的目标是查看服务器是否容易受到目录遍历或访问管理不佳的影响,您可以简单地在 URL 或 Burp Suite 上尝试一系列操作,../直到收到错误消息表明您直接正确,或者如果幸运的话中奖,应用程序允许您下载 passwd 文件,例如 http://target.com/img?section=images.php/../../../../etc/passwd