一、漏洞概述
php默认配置中”allow_url_include”默认设置为关闭,使PHP无法加载远程http(s)或FTP url,防止文件包含攻击。即使” allow_url_include”和” allow_url_fopen”都Off也不会阻止SMB URL的加载。
当有漏洞的PHP程序,试图从攻击者的SMB共享中加载文件时,如果SMB共享允许访问该文件。攻击者需要将SMB服务器配置为允许匿名浏览访问。所以当受攻击程序从SMB共享中加载访问文件时,SMB服务器将不会要求凭据,并且受攻击程序会成功包含文件中的WEB SHELL PHP代码。
二、漏洞复现
1.复现环境
Ubuntu
Windows
PHP 5.4.5
2.漏洞触发场景
当PHP中“allow_url_fopen”和“allow_url_include”都配置为Off时,会解析SMB服务器中的文件。
3.漏洞复现
第一步
模拟场景,修改PHP的配置文件,将allow_url_fopen”和“allow_url_include”设置为Off。效果如图:
测试下函数配置是否生效,结果如图所示:
第二步
在ubuntu上安装samba服务器和相关配置
sudo apt-get install daemonsudo apt-get install samba
修改samba的配置文件
vim /etc/samba/smb.conf
在[golbal]标签下添加一行:
security=user
再 在文件末尾添加共享标签配置
[share]path= /home/share browseable=yesread only=yesguest ok =yes
保存并退出
更改共享目录权限
sudo chmod 757 /home
重启服务
service smbd restartservice nmbd restart
查看下共享
第三步
环境搭建完毕,测试一下
经测试,PHP在allow_url_fopen
和allow_url_include
设置为Off
的情况下,不允许包含HTTP和FTP协议文件但是可以从远程SMB服务器包含文件。