一些BAT的XSS实例(六)续集篇
字数 1522 2025-08-26 22:11:40

Nginx解析特性与XSS绕过技术详解

前言

本文基于BAT XSS实例系列的第11、12题,深入分析利用Nginx解析特性进行XSS绕过的技术细节。这两道题目展示了如何结合服务器解析规则、JavaScript语法特性和路径处理机制来实现XSS攻击。

基础知识

location.pathname属性

location.pathname返回URL中域名后的路径部分,不包括hash(#)和search(?)部分。

参考文档:

Nginx的%2f解析特性

Nginx会自动将URL中的%2f解码为斜杠/,而IIS和Apache则不会。这是本题的关键知识点。

参考文档:

第11题解析

题目源码分析

eval(location.pathname);

解题思路

  1. 基本思路:需要在URL路径中构造XSS payload,但直接添加字符会导致404,因为路径不存在。

  2. 路径合法化

    • 尝试构造:http://px1624.sinaapp.com/test/xsstest11/1111111111/../
    • 但URL解析优先级会将其还原为/test/xsstest11/
  3. 利用Nginx特性

    • 使用%2f代替斜杠:http://px1624.sinaapp.com/test/xsstest11/1111111111%2f..%2f
    • 这样Nginx会解析为合法路径,而JavaScript仍看到原始字符
  4. JavaScript语法构造

    • 需要确保eval执行的代码语法正确
    • 可利用:
      • //单行注释
      • /* */多行注释
      • /regex/正则表达式
      • /除法运算符
  5. 最终payload

    /*/..%2ftest/xsstest11/*/alert(11);/..%2f../
    
    • 路径解析:/*/../test/xsstest11/*/alert(11)/../ → 实际指向/test/xsstest11/
    • JavaScript解析:
      • /*/..%2ftest/xsstest11/*/被注释
      • alert(11);执行
      • /..%2f../作为正则表达式

第12题解析

题目源码分析

if(location.pathname.indexOf('xsstest12')>0){
    eval(location.pathname);
}

解题思路

  1. 限制条件

    • 路径必须包含'xsstest12'
    • 路径长度有限制
  2. 基本构造

    /test//xsstest12/alert(12)/..%2f
    
    • 但会导致JavaScript语法错误
  3. 语法修正

    • 使用//作为正则表达式开始和注释
    • 最终构造:
      /test//xsstest12/alert(12);var/**/xsstest12=1//..%2f..%2f..%2f..%2f
      
    • 解释:
      • /test/作为正则表达式
      • //除法运算符
      • xsstest12作为变量名
      • var/**/xsstest12=1定义变量避免未定义错误
      • //..%2f..%2f..%2f..%2f注释掉剩余部分并确保路径合法
  4. 更简洁解法(Huuuuu提供):

    /test//xsstest12/alert(12);var[xsstest12]=/..%2f/
    
    • 使用ES6解构赋值定义变量

其他优秀解法

第11题最短解(lala提供)

/test/;alert(11)//..%2f../xsstest11/
  • 利用//注释掉路径后半部分

第10题解法

/test/xsstest10/?px=`}\%27-{a:`}-alert(1)script>
  • 使用模板字符串构造

第3题解法

/test/xsstest3/?px=*/{alert(1)
  • 利用两次注释符配合构造

技术要点总结

  1. Nginx解析特性%2f自动解码为/
  2. 路径处理:需要构造既符合服务器路径解析又符合JavaScript语法的URL
  3. JavaScript语法技巧
    • 注释(//, /* */)
    • 正则表达式
    • 运算符
    • ES6特性(解构赋值)
  4. 调试方法
    • 断点调试
    • 控制台分析
    • 本地代码映射

学习建议

  1. 深入理解Web服务器(如Nginx)的URL解析规则
  2. 熟练掌握JavaScript的各种语法特性
  3. 练习多种XSS构造技巧的组合使用
  4. 通过实际调试理解浏览器和服务器对URL的不同处理方式

这些技术虽然用于XSS绕过,但同样适用于Web安全防御,理解攻击方法才能更好地防护。

Nginx解析特性与XSS绕过技术详解 前言 本文基于BAT XSS实例系列的第11、12题,深入分析利用Nginx解析特性进行XSS绕过的技术细节。这两道题目展示了如何结合服务器解析规则、JavaScript语法特性和路径处理机制来实现XSS攻击。 基础知识 location.pathname属性 location.pathname 返回URL中域名后的路径部分,不包括hash(#)和search(?)部分。 参考文档: 菜鸟教程 - location.pathname MDN - Location.pathname Nginx的%2f解析特性 Nginx会自动将URL中的 %2f 解码为斜杠 / ,而IIS和Apache则不会。这是本题的关键知识点。 参考文档: Nginx自动解码特性 StackOverflow讨论 第11题解析 题目源码分析 解题思路 基本思路 :需要在URL路径中构造XSS payload,但直接添加字符会导致404,因为路径不存在。 路径合法化 : 尝试构造: http://px1624.sinaapp.com/test/xsstest11/1111111111/../ 但URL解析优先级会将其还原为 /test/xsstest11/ 利用Nginx特性 : 使用 %2f 代替斜杠: http://px1624.sinaapp.com/test/xsstest11/1111111111%2f..%2f 这样Nginx会解析为合法路径,而JavaScript仍看到原始字符 JavaScript语法构造 : 需要确保 eval 执行的代码语法正确 可利用: // 单行注释 /* */ 多行注释 /regex/ 正则表达式 / 除法运算符 最终payload : 路径解析: /*/../test/xsstest11/*/alert(11)/../ → 实际指向 /test/xsstest11/ JavaScript解析: /*/..%2ftest/xsstest11/*/ 被注释 alert(11); 执行 /..%2f../ 作为正则表达式 第12题解析 题目源码分析 解题思路 限制条件 : 路径必须包含'xsstest12' 路径长度有限制 基本构造 : 但会导致JavaScript语法错误 语法修正 : 使用 // 作为正则表达式开始和注释 最终构造: 解释: /test/ 作为正则表达式 // 除法运算符 xsstest12 作为变量名 var/**/xsstest12=1 定义变量避免未定义错误 //..%2f..%2f..%2f..%2f 注释掉剩余部分并确保路径合法 更简洁解法 (Huuuuu提供): 使用ES6解构赋值定义变量 其他优秀解法 第11题最短解(lala提供) 利用 // 注释掉路径后半部分 第10题解法 使用模板字符串构造 第3题解法 利用两次注释符配合构造 技术要点总结 Nginx解析特性 : %2f 自动解码为 / 路径处理 :需要构造既符合服务器路径解析又符合JavaScript语法的URL JavaScript语法技巧 : 注释( // , /* */ ) 正则表达式 运算符 ES6特性(解构赋值) 调试方法 : 断点调试 控制台分析 本地代码映射 学习建议 深入理解Web服务器(如Nginx)的URL解析规则 熟练掌握JavaScript的各种语法特性 练习多种XSS构造技巧的组合使用 通过实际调试理解浏览器和服务器对URL的不同处理方式 这些技术虽然用于XSS绕过,但同样适用于Web安全防御,理解攻击方法才能更好地防护。