## 起因
起因是想要写一个自动填写这个健康平台的脚本,每天被导员催着实在是不爽。无意间打开了个人纪录查看的界面。
可以看出来这里存在明显的注入。于是拿出了尘封已久的burp。
## 第一次利用
最明显的思路是利用div标签的属性,闭合前一个的双引号,然后在后面加上onclick或者onmouseenter的事件属性。
直接开始抓包,整个的通信结构其实并不复杂,开启应用时请求json形式表格,然后点鸡确认时候请求一个flowkey作为单次通信标志(其实没有时间限制,经过测试)。
确认后点鸡提交,提交时直接发送全部表格的json形式文件,这里有一个技巧是搜索手机号,在整个数据包中只发现了唯一的手机号,于是可以断定该处的上下文部分就是提交的表格数据(其余的部分可能是验证信息)
这个是明显的数据结构。要利用就要闭合双引号,想闭合引号还不简单
" onclick=alert('果果最帅')//
直接开整,然后暴毙,因为json数据包中解析了引号,所以这个不是人家后端的问题,是在数据包的构造上就出了问题。
于是现在问题集中在了,怎样不使用引号来闭合前一个引号。
首先想到的是HTMLEncode,测试后直接暴毙,插进去的没有问题,但是不解析。具体的效果截图没有了,导员发现我在搞事情后直接给我把我之前插的代码全弄没了。后来搜一下发现HTML编码是用来防止xss的。除了编码,还有一个思路就是。。
## 第二次利用
除了闭合双引号,还有一个方法就是闭合尖括号。思路的来源是,除了div的tittle标签里面插入了可执行代码之外,地下的文字也加入了,所以不如直接暴力把div标签闭合掉。
这次测试的主要难点是每天只能提交一次,之前好多看起来有效的payload都失效了,很离谱,最离谱的是`<script>`标签不执行,保存下来本地点开才能执行,可能他们前端有一些安全策略吧,超纲了。
这里直接省略中间做过的一万次测试,包括插入哔哩哔哩播放器和其他乱起八糟的东西,后来发现是不能有双引号,哔哩哔哩播放器那里主要是出现了冒号,之后的任务是思考如何绕过这个冒号。。。。。。。
最后测试的payload是
//></div><img src='http://ggalaxy.top/file/mm.php' onclick='alert(`果果最帅`)'><div>
## 还有可以做的地方
可以注入一些更可恶的代码,现在的问题是冒号没有办法绕过了,style属性就不大行。之后再说吧。
希望早点开学吧,在家里快闲出病了。
参考:moxiaoxi . XSS测试备忘录[EB/OL].https://momomoxiaoxi.com/2017/10/10/XSS/
网友评论