0x1 如果一个XSS的利用点过滤了“.”,你有办法继续利用吗?

在刷SRC的时候,就机缘巧合的遇到了这个问题,那么问题来了,我们能否利用这个XSS呢?

答案是可以:<script src='//www。baidu。com'></script>

一开始我也只是依稀记得有这样一个骚姿势,于是顺手尝试了一下,没想到真的给我弹了个cookie回来。

0x2 本地复现

这里使用余弦的xssor持续化控制功能来复现场景。

 

生成一个恶意JS

然后需要将payload地址,缩略成只有一个”.”的URL,这里使用Ph神的conote中的短域名功能。

刚好一个.

 

接下来本地测试一下~

payload需要指定编码

这个地方得指定编码UTF-8,原因就是为了防止浏览器将”。”以GBK编码导致乱码。

完全Ok,但是由于好奇心,我想弄懂这个操作为什么会造成这样一个结果?

0x3 寻根探宝

难道是因为浏览器自带“中文纠错“功能吗?天知道那群写bug的人会不会有这种闲工夫

我一开始也是单纯的以为是这个理由。直到我在cURL中尝试了一下。

cURL

这就奇了怪了,讲道理,如果是”纠错功能”的话,连HTML解析都没有的cURL是不应该做这么高级的功能的。

我开始怀疑是不是DNS解析的某种特性?

然后抓包后发现并不是,包数据跟正常DNS请求一模一样,这里就不演示了。

这也就说明这个奇怪的转换是在访问URL之后,DNS解析之前的动作。

十分疑惑的我,去问了一下妹子酒师傅,没想到他那边一直没办法使用cURL复现我的操作,正巧,他的报错信息,让我嗅探到了这个现象真正的原因…

我自己的。后来不知道为啥也没办法用了23333

* IDN support not present, can't parse Unicode domains

很明显是IDN没能解析unicode域名,而这个IDN是个什么东西呢?

国际化域名英语:Internationalized Domain Name,缩写:IDN

维基百科—国际化域名

说白了就是可以使得域名解析别的语言(除了英文)的一个协议。

看到文中提到使用Punycode对域名进行编码,看到Punycode很难不联想到之前搞得轰轰烈烈的一个漏洞。

一种几乎无法被检测到的Punycode钓鱼攻击,Chrome、Firefox和Opera等浏览器都中招

突然惊醒,“。”==>“.” 的转换也是一次编码转换,大胆猜测这个莫名奇妙的转换就是由于Punycode编码的行为造成的!

那么,Punycode到底是何方神圣呢?在搜集大量信息后,将视野范围定在了rfc3492

其中对Punycode编码进行了规范。

[IDNA] describes an architecture for supporting internationalized
   domain names.  Labels containing non-ASCII characters can be
   represented by ACE labels, which begin with a special ACE prefix and
   contain only ASCII characters.  The remainder of the label after the
   prefix is a Punycode encoding of a Unicode string satisfying certain
   constraints.  For the details of the prefix and constraints, see
   [IDNA] and [NAMEPREP].

写了一大堆,翻译成大白话:我,Punycode,生来就是为了把域名中所有非Ascii字符转成Ascii字符哒!

 

果然果然,不出所料,这个Punycode就是这次事件的背后黑手!

找到一个在线IDN加密的工具,来辅助我们验证。

验证成功

0x4 一些杂谈

IDN早不是什么新鲜玩意儿,很多前辈都对此进行研究了。通过跟Ph师傅交流,学习到了一个drops上的文章。

短域名进化史

正常的男人都喜欢比谁长,而狂热的XSSer都喜欢比谁短。因为在真实的世界里,我们往往都会遇见字符长度限制。其中的部分问题,是可以通过Short Talk Of XSS中提到的方法进行解决的。但还有一部分极端的场景,是没有办法靠那些硬技术去解决的

文章中也很浅的提到了本文的技巧,只不过没有深挖下去,一看时间,居然是四年前的文章…没想到M师傅在这么久之前就已经玩这么高端的技术了,也没想到国内安全圈居然也曾有过这样一段辉煌的时间,敬乌云。

ps:除了”。”之外其实还有很多玩法,这里就留给有兴致的人自己去发掘啦~

pps:Ph神的那个真的是我见过最短的了





本文链接地址: 老歌新唱|Punycode再利用

原创文章,转载请注明: 转载自Lz1y's Blog

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.