换一种姿势挖掘任意用户密码重置漏洞
上一篇文章我们提到了利用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
用户的重置密码链接了
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- SAP Spartacus只执行指定单元测试的小技巧
- SAP CDS view里将Date和time连接成timestamp的函数
- SAP CDS view里计算两个date & time字段间包含的seconds秒数
- SAP CDS view里的日期操作函数(往后推算X天得到新日期)
- SAP CDS view的日期格式转换,比如从YYYYMMDD转到DD/MM/YYYY
- SAP CDS view如何取得当前系统日期和系统时间戳
- Vue 父组件如何监听子组件的生命周期
- Django3+websocket+paramiko实现web页面实时输出
- 【5分钟玩转Lighthouse】开车也能跑程序
- LeetCode74|有序矩阵中第K小的元素
- LeetCode73|根据字符出现频率排序
- LeetCode72|前K个高频元素
- LeetCode71|数组中第K个最大元素
- LeetCode70|最小K个数
- LeetCode69|消失的数字