渗透测试Hacker Tecnology

记两次Instagram APP密码重置POC

2019-08-26  本文已影响0人  54a422aceb11

“要重置密码吗?要1000台电脑的那种

原作 | thezerohack.com "Laxman Muthiyah"

译者 | 公 众 号 HackerHub

这两次漏洞的作者都是Laxman Muthiyah,并依次获得Facebook 3万美元和1万美元的漏洞奖励。两个漏洞公开时间分别是2019年7月29和2019年8月26。

目前两个漏洞都已经被修复,但是其攻击方法,对其它APP的攻防提供了一个重要思路。

漏洞奖励之一

说在前  

当用户使用手机号找回Instagram密码时,手机会收到一个6位的数字验证码,用户必须输入这个验证码才能重设自己的密码,验证码10分钟内有效。6位数字,排列组合总共1百万种(000001 ~ 999999),所以,对于任意一个账号,在10分钟内最多尝试100万次就能重设他的密码了。。。

然鹅。。。

第一个,任意用户密码重置漏洞

通过测试发现,连续发送1000次请求,250次可以过,剩下的750次因为频率过高被拦截。再尝试1000次,发现大部分都被拦了。貌似,大多数风控都这种路数,看起来很有效。。。

然鹅,经过测试,发现两个套路可以绕过他们的频繁限制机制:

竞争冒险 (组合逻辑电路的概念)

IP轮换

当通过多个IP同时发送请求可以达到发送一大堆请求而不被限制的效果。因为验证码10分钟内过期,经过测算,需要1000个IP来实现这种攻击。

  POC

求重置密码的验证码:

POST /api/v1/users/lookup/ HTTP/1.1

User-Agent: Instagram 92.0.0.11.114 Android (27/8.1.0; 440dpi; 1080×2150; Xiaomi/xiaomi; Redmi Note 6 Pro; tulip; qcom; en_IN; 152830654)

Accept-Language: en-IN, en-US

Content-Type: application/x-www-form-urlencoded; charset=UTF-8

Accept-Encoding: gzip, deflate

Host: i.instagram.com

Connection: keep-alive

q=mobile_number&device_id=android-device-id-here

受害者会收到一个验证码,并在10分钟后过期

发送验证码:

POST /api/v1/accounts/account_recovery_code_verify/ HTTP/1.1

User-Agent: Instagram 92.0.0.11.114 Android (27/8.1.0; 440dpi; 1080×2150; Xiaomi/xiaomi; Redmi Note 6 Pro; tulip; qcom; en_IN; 152830654)

Accept-Language: en-IN, en-US

Content-Type: application/x-www-form-urlencoded; charset=UTF-8

Accept-Encoding: gzip, deflate

Host: i.instagram.com

Connection: keep-alive

recover_code=123456&device_id=android-device-id-here

上面是一个正常用户重置密码的过程,现在以HTTP协议的方式展现。

现在需要做的把这个http请求,利用很多个ip发送出去。

测试时,大概每个ip发送200次请求都没被拦,使用1000个机器和ip(使并发更容易),发送大约20万个请求便达到重置密码的效果。

在实质上的攻击场景,攻击者需要用5000IP才可以比较完美地攻击任意一个Instagram 账号。这个数字听起来很大很可怕。可怕那是是以前,在现在,使用云,例如亚马逊云或者Google云,大概150美元就能完成一次需要100万次验证码的攻击。

第二个,超大规模用户密码重置

跟第一个很类似,主要有问题的地方在devic_id:

recover_code=123456&device_id=device-id

当用户请求重置密码时,有一个device id 会随着请求发送过去。同一个device id会再一次被用来发送验证码。

device id是一个由Instagram app 生成的随机字符串。所以,如果同样的device id用来给多个Instagram 账号请求验证码呢?通过测试发现,同一个device id可以用来给不同的账号请求多个验证码。

  POC

6个数字的验证码有100万种可能。如果我们给很多个账号都申请重置密码,那么我们黑下账号的概率就提升了。

例如:

如果你用同样的device id给10万个账号申请重置密码,你就有了10%的成功率,因为有10万个验证码和这个device id绑定在一起了。

如果我们用同样的device id给100万个用户申请密码重置,那么这100万个用户都和这个device id绑在一起,并且都对应一个6位数的密码重置验证码。我们便可以快速地控制这100万个账号,仅仅只需要递增挨个尝试验证码便可(这个时候,其难度和操作方法就回到了第一个漏洞)。

因此,攻击者可以给100万人申请密码重置来实施100%的攻击成功率。还需要注意的是,验证码10分钟过期,所以整个攻击需要在10分钟内完成。

两个现在都已经修复。但这两种方式给APP渗透一个攻击思路,相信现行的绝大多数APP都没有充分考虑超大规模的IP攻击的安全性问题。也给蓝队一个警醒。

两个漏洞的详情:

https://thezerohack.com/hack-any-instagram

https://thezerohack.com/hack-instagram-again

上一篇下一篇

猜你喜欢

热点阅读