上一篇文章我们提到了利用Unicode规范化来挖洞的思路以及方法,大家反响很热烈
一直在后台给我留言,苦苦哀求
让我憋tm写了,一直写烦不烦呀
现在的读者都已经这么体贴了吗?都已经开始关心我辛苦码字烦躁不烦躁了吗?
别担心,好歹我也是曾被称为阳光幼儿园四班劳动积极分子的男人,这点苦,不算啥!
于是我打开电脑,给你们写了这篇。
国际化域名(IDN)简介
上文已经提到过这个东西了,其实很简单,咱们通常使用的域名都是英文(ascii)字符的,而IDN则允许我们注册ascii字符以外的字符为域名,比如我可以注册一个域名为“阿信.com”,是不是挺拉风的?
虽然我们是注册了这么一个域名奥,但是可能是为了方便存储?(我也不知道方便啥 ?),国际化域名中提供了一种其他字符的域名到ascii字符域名的一个映射,这个映射就是Punnycode,你可以到如下地址体验一下中文域名转换为Punnycode是啥样的:
https://www.punycoder.com/
漏洞场景
有了以上基础,我们来看一下大佬挖到的一个价值$600的任意用户密码重置漏洞。
我们假设目标网站地址为https://axin.com
本次存在漏洞的接口为https://axin.com/forget-password?email=
,可以看到,这是一个再普通不过的通过邮箱重置密码的功能点
但是这个接口没能正确的处理Unicode字符,也就是说,当我输入邮箱victim@gmáil.com
会被规范化为victim@gmail.com
然后目标站点axin.com
就会把victim@gmail.com
用户的重置密码链接发送到邮箱victim@xn--gmil-6na.com
中,其中xn--gmil-6na.com
是gmáil.com
的punnycode
所以,只要我去注册gmáil.com
域名,并搭建一个邮件服务器就能够完成攻击
那有人又要说了,“这个漏洞的挖掘成本也太高了,还要去注册域名,太麻烦!”
其实,duck不必自己去注册域名,我们只要确定这个点是存在Unicode规范化就行,借助burp插件collabrator client就可以实现
我们都知道burp为了方便我们测试一些没有回显的漏洞,提供了一个在公网能够访问到的域名burpcollaborator.net
,并且在使用collabrator的时候会随机生成一个二级域名供我们使用,比如3bfqygorkwzimx55ppnmvkandej47t.burpcollaborator.net
那我们怎么利用这个域名来挖掘这种漏洞呢?其实很简单,流程如下:
- 到目标站点用邮箱
victim@gmail.com.3bfqygorkwzimx55ppnmvkandej47t.burpcollaborator.net
注册一个测试账号 - 然后在重置密码的接口处输入含有Unicode字符的邮箱地址:
victim@gmáil.com.3bfqygorkwzimx55ppnmvkandej47t.burpcollaborator.net
,发送 - 如果目标存在漏洞,我们就可以在collobrator client上看到目标站点发送给我们的
victim@gmail.com
用户的重置密码链接了