XSS_tricks
2025-12-11
XSS_tricks
记录一些适用于bypass waf的XSS小tricks
以及一些不是很容易想到的可以测试XSS的场景
巧用反引号
该trick来自于0xsdeo师傅的Spade sec公众号
反引号可以达到一个不用括号的效果,很适合用于()括号被转义后的情况
比如下面几个demo:
控制台输出:
<script>console.log`1`;</script>弹窗:
<script>alert`1`;</script>
在这里,反引号引起来的内容叫做模板字面量,又称模板字符串,在es6中一般用来字符串插值:
let name = 'Yuy0ung';
`hello ${name}`
效果如下:

在除了这种用法外,就是我们payload的用法了,即配合默认或自定义标签函数
那么,除了弹窗和控制台输出,获取cookie就需要再构造一下了,思路和上面的字符串插值很像:
console.log`${document.cookie}`

可以注意到这里有一个多余的数组,具体原因可以查阅es6文档,这里不做赘述
当然这个数组会导致我们使用alet弹不出cookie,所以推荐使用console.log
**总结:**上面的payload优势在于反引号、$、{}三种符号不容易被转义,巧用了模板字面量的特性
文件上传XSS的content-type绕过
除了常规的text/html的content-type,还可以有一些其他的:
- text/htm
- htm/text
- html/text
都可以试一试,主要基于后端的配置,在思考bypass的时候可以从这方面进行思考
可能存在XSS的非常规场景
OCR服务处
比如有些功能点支持OCR识别发票文字内容并输出,那么我们可以在图片上P一个XSS的payload进行测试,这是一个很巧妙的思路
hidden标签处
F12全局搜索hidden标签,可能找到一些不显示但是内容可控的标签,比如用于页面跳转功能的隐藏标签,比如下面这个demo:

name是ReturnUrl,这里尝试直接GET传参:

发现value可控,那么就可以尝试构造闭合:

可以看见成功闭合了,那么接下来就是直接打XSS:
