实战之另辟蹊径绕过waf并getshell拿下站群
字数 1279 2025-08-25 22:59:02

绕过WAF并GetShell的实战技术分析

背景概述

本文记录了一次针对站群系统的渗透测试过程,攻击者通过弱口令进入后台后,发现文件上传功能,但遭遇WAF拦截。经过多次尝试后,采用内网IP绕过技术成功上传WebShell。

初始发现

  1. 通过弱口令进入目标系统后台
  2. 发现文件上传配置功能,可以自定义允许上传的文件后缀
  3. 尝试直接上传PHP文件被WAF拦截

常规WAF绕过尝试

攻击者尝试了多种常见的WAF绕过技术,均告失败:

  1. 文件名混淆

    • 1.jpg.php
    • 1.php.jpg
    • 1.php%00.jpg
  2. Content-Disposition修改

    Content-Disposition: form1-data; name="Filedata"; filename="3.php"
    Content-Disposition: form-data; name="filename"; filename="3.jpg"
    
  3. 长文件名攻击

    • 垃圾数据30w.jpg.php
  4. Windows特性利用

    • php::$DATA(自动去掉::$DATA部分)
    • 尝试使用::data?.!等特殊字符作为文件结尾
  5. 非常规后缀尝试

    • pht, php, phtml, php3-7, aspx, asmx, asp, jsp, jspx

突破思路:内网IP/白名单绕过

当常规方法失效后,攻击者尝试利用内网IP或IP白名单绕过WAF:

  1. 已控制同体系下的A站(Linux环境)
  2. 尝试通过A站建立代理访问目标B站
    • 首先尝试Neo-reGeorg的PHP代理(失败)
    • 考虑使用EarthWorm(EW)建立隧道(认为较复杂未采用)

使用Curl直接发包

更高效的解决方案:

  1. 利用A站的shell和curl命令直接发送POST请求
  2. curl上传文件语法:
    curl -F "key=@file" [URL]
    
  3. 测试确认可以绕过WAF上传文件

后端验证机制分析

虽然配置允许php后缀,上传仍失败,推测后端验证逻辑类似:

$store = ['jpg','png','php']; // 配置允许的后缀
$ext = 获取的文件后缀;

if(in_array($ext,$store) && $ext!="php" && $ext!="php3" && $ext!="pht"...) {
    // 允许上传
} else {
    echo "上传类型不允许";
}

最终绕过技术

  1. Windows空格特性利用

    • Windows会自动去掉文件名末尾的空格
    • 配置允许p (p加空格)后缀
    • 上传shell.p 文件,服务器存储为shell.p
  2. 目录穿越

    • 发现上传路径包含module参数值
    • 使用../实现目录穿越:
      module=content/../
      

成功GetShell

  1. 通过上述方法上传WebShell
  2. 使用蚁剑成功连接
  3. 执行命令确认权限(whoami)

技术要点总结

  1. WAF绕过思路

    • 当常规方法失效时,考虑网络层面的绕过(内网IP/白名单)
    • 已控服务器作为跳板可避开外部WAF
  2. Windows特性利用

    • 文件名末尾空格自动去除
    • 特殊字符处理特性(::$DATA等)
  3. 后端验证绕过

    • 理解黑名单+白名单的混合验证机制
    • 找到验证逻辑中的"缝隙"
  4. 目录穿越技巧

    • 观察路径构造方式
    • 利用参数注入实现路径控制

防御建议

  1. 文件上传安全措施:

    • 严格限制上传目录的执行权限
    • 使用不可预测的存储文件名
    • 禁止目录穿越字符
  2. WAF配置:

    • 内网流量同样需要安全检测
    • 对空格等特殊字符进行规范化处理
  3. 系统加固:

    • 避免使用弱口令
    • 定期审计配置功能
  4. 网络隔离:

    • 不同系统间实施适当的网络隔离
    • 避免使用相同的认证凭据

通过这次渗透测试,展示了即使存在WAF保护,通过多角度思考和系统特性利用,仍然可能找到突破口的完整过程。

绕过WAF并GetShell的实战技术分析 背景概述 本文记录了一次针对站群系统的渗透测试过程,攻击者通过弱口令进入后台后,发现文件上传功能,但遭遇WAF拦截。经过多次尝试后,采用内网IP绕过技术成功上传WebShell。 初始发现 通过弱口令进入目标系统后台 发现文件上传配置功能,可以自定义允许上传的文件后缀 尝试直接上传PHP文件被WAF拦截 常规WAF绕过尝试 攻击者尝试了多种常见的WAF绕过技术,均告失败: 文件名混淆 : 1.jpg.php 1.php.jpg 1.php%00.jpg Content-Disposition修改 : 长文件名攻击 : 垃圾数据30w.jpg.php Windows特性利用 : php::$DATA (自动去掉 ::$DATA 部分) 尝试使用 ::data 、 ? 、 . 、 ! 等特殊字符作为文件结尾 非常规后缀尝试 : pht , php , phtml , php3-7 , aspx , asmx , asp , jsp , jspx 突破思路:内网IP/白名单绕过 当常规方法失效后,攻击者尝试利用内网IP或IP白名单绕过WAF: 已控制同体系下的A站(Linux环境) 尝试通过A站建立代理访问目标B站 首先尝试Neo-reGeorg的PHP代理(失败) 考虑使用EarthWorm(EW)建立隧道(认为较复杂未采用) 使用Curl直接发包 更高效的解决方案: 利用A站的shell和curl命令直接发送POST请求 curl上传文件语法: 测试确认可以绕过WAF上传文件 后端验证机制分析 虽然配置允许php后缀,上传仍失败,推测后端验证逻辑类似: 最终绕过技术 Windows空格特性利用 : Windows会自动去掉文件名末尾的空格 配置允许 p (p加空格)后缀 上传 shell.p 文件,服务器存储为 shell.p 目录穿越 : 发现上传路径包含 module 参数值 使用 ../ 实现目录穿越: 成功GetShell 通过上述方法上传WebShell 使用蚁剑成功连接 执行命令确认权限(whoami) 技术要点总结 WAF绕过思路 : 当常规方法失效时,考虑网络层面的绕过(内网IP/白名单) 已控服务器作为跳板可避开外部WAF Windows特性利用 : 文件名末尾空格自动去除 特殊字符处理特性(::$DATA等) 后端验证绕过 : 理解黑名单+白名单的混合验证机制 找到验证逻辑中的"缝隙" 目录穿越技巧 : 观察路径构造方式 利用参数注入实现路径控制 防御建议 文件上传安全措施: 严格限制上传目录的执行权限 使用不可预测的存储文件名 禁止目录穿越字符 WAF配置: 内网流量同样需要安全检测 对空格等特殊字符进行规范化处理 系统加固: 避免使用弱口令 定期审计配置功能 网络隔离: 不同系统间实施适当的网络隔离 避免使用相同的认证凭据 通过这次渗透测试,展示了即使存在WAF保护,通过多角度思考和系统特性利用,仍然可能找到突破口的完整过程。