实战之另辟蹊径绕过waf并getshell拿下站群
字数 1279 2025-08-25 22:59:02
绕过WAF并GetShell的实战技术分析
背景概述
本文记录了一次针对站群系统的渗透测试过程,攻击者通过弱口令进入后台后,发现文件上传功能,但遭遇WAF拦截。经过多次尝试后,采用内网IP绕过技术成功上传WebShell。
初始发现
- 通过弱口令进入目标系统后台
- 发现文件上传配置功能,可以自定义允许上传的文件后缀
- 尝试直接上传PHP文件被WAF拦截
常规WAF绕过尝试
攻击者尝试了多种常见的WAF绕过技术,均告失败:
-
文件名混淆:
1.jpg.php1.php.jpg1.php%00.jpg
-
Content-Disposition修改:
Content-Disposition: form1-data; name="Filedata"; filename="3.php" Content-Disposition: form-data; name="filename"; filename="3.jpg" -
长文件名攻击:
垃圾数据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上传文件语法:
curl -F "key=@file" [URL] - 测试确认可以绕过WAF上传文件
后端验证机制分析
虽然配置允许php后缀,上传仍失败,推测后端验证逻辑类似:
$store = ['jpg','png','php']; // 配置允许的后缀
$ext = 获取的文件后缀;
if(in_array($ext,$store) && $ext!="php" && $ext!="php3" && $ext!="pht"...) {
// 允许上传
} else {
echo "上传类型不允许";
}
最终绕过技术
-
Windows空格特性利用:
- Windows会自动去掉文件名末尾的空格
- 配置允许
p(p加空格)后缀 - 上传
shell.p文件,服务器存储为shell.p
-
目录穿越:
- 发现上传路径包含
module参数值 - 使用
../实现目录穿越:module=content/../
- 发现上传路径包含
成功GetShell
- 通过上述方法上传WebShell
- 使用蚁剑成功连接
- 执行命令确认权限(whoami)
技术要点总结
-
WAF绕过思路:
- 当常规方法失效时,考虑网络层面的绕过(内网IP/白名单)
- 已控服务器作为跳板可避开外部WAF
-
Windows特性利用:
- 文件名末尾空格自动去除
- 特殊字符处理特性(::$DATA等)
-
后端验证绕过:
- 理解黑名单+白名单的混合验证机制
- 找到验证逻辑中的"缝隙"
-
目录穿越技巧:
- 观察路径构造方式
- 利用参数注入实现路径控制
防御建议
-
文件上传安全措施:
- 严格限制上传目录的执行权限
- 使用不可预测的存储文件名
- 禁止目录穿越字符
-
WAF配置:
- 内网流量同样需要安全检测
- 对空格等特殊字符进行规范化处理
-
系统加固:
- 避免使用弱口令
- 定期审计配置功能
-
网络隔离:
- 不同系统间实施适当的网络隔离
- 避免使用相同的认证凭据
通过这次渗透测试,展示了即使存在WAF保护,通过多角度思考和系统特性利用,仍然可能找到突破口的完整过程。