米斯特白帽培训讲义 漏洞篇 逻辑漏洞

讲师:gh0stkey

整理:飞龙

协议:CC BY-NC-SA 4.0

任意密码找回

这是补天平台上的一个案例:

http://www.118114.cn/reg.jsp

首先注册一个账号,然后找回。

漏洞篇 逻辑漏洞 - 图1

我们收到的验证码是六位数。如果网站没有设置频率限制,或者最大尝试次数限制的话,那我们自然就会想到可以爆破它。

漏洞篇 逻辑漏洞 - 图2

然后抓提交手机验证码的封包,我们可以看到没有任何图片验证码:

漏洞篇 逻辑漏洞 - 图3

发送到 Burp 的 Intruder:

漏洞篇 逻辑漏洞 - 图4

只给checkPhoneCode添加标志,然后将字典类型设置为数字,范围为000000 ~ 999999。然后爆破,结束后我们发现了一个与众不同的封包。

漏洞篇 逻辑漏洞 - 图5

将里面的验证码提交之后便可重置密码。

漏洞篇 逻辑漏洞 - 图6

任意手机号注册

这是某个网站的注册页面:

漏洞篇 逻辑漏洞 - 图7

我们模拟注册一下,发现手机验证码是四位:

漏洞篇 逻辑漏洞 - 图8

然后抓注册的封包:

漏洞篇 逻辑漏洞 - 图9

然后将字典设置为四位数字 0000 ~ 9999,进行爆破:

漏洞篇 逻辑漏洞 - 图10

Get it!

任意邮箱激活

目标是www.vobao.com

首先注册,然后直接退出找回,我们看到它是邮箱验证。

漏洞篇 逻辑漏洞 - 图11

然后查看验证邮件:

漏洞篇 逻辑漏洞 - 图12

我们发现其中有一个vstr,它跟找回密码页面中的某个 URL 是一样的,也就是一个标志。

漏洞篇 逻辑漏洞 - 图13

那么vud就应该起到类似验证码的作用。如果我们不填写vud直接访问,显示无效。那么就能确定它是验证码了。

漏洞篇 逻辑漏洞 - 图14

这个vud看起来像是个md5,但是实际上是随机码。那么我们尝试拿另一个邮箱注册找回:

漏洞篇 逻辑漏洞 - 图15

可以看到vstr是不一样的,vud当然也不一样。但是如果我们邮箱2的vud拼接到邮箱1的vstr上呢?由于邮箱1的vstr是已知的,即使我们访问不了邮箱1,也可以通过找回密码页面的 URL 来获得,那么我们就可以构造出:

漏洞篇 逻辑漏洞 - 图16

提交后就成功了。

漏洞篇 逻辑漏洞 - 图17

假设邮箱1是别人的邮箱,我们不能访问其内容,但我们能够控制邮箱2,那我们就能拿邮箱2来重置邮箱1的账户。可以看到,这个漏洞的主要成因就是未对不同用户的验证码进行区分。其中vstr起到用户标志的作用,vud起到邮箱验证码的作用。