手机短信验证是企业给消费者(用户)的一个凭证,通过手机短信内容的验证码来验证身份。主要用来用户注册,找回密码,用户登录等等作为强身份认证。

目前验证码的格式主要是数字,从4位到6位不等。一般来说验证码都有有效周期2~10分钟,甚至更长,超过有效周期验证码自动失效。

那么如果要想在有效的时间里爆破验证码必须多线程。假设验证码是4位,从0000~9999的10000种可能用多线程在3分钟内跑完并不是很难。

用到的工具是burpsuit。该工具属于轻量级渗透工具,在kali-linux的300多种工具中,一直top10之内。

首先找到一个验证码是4位的网站。(4位数的手机验证码在很多网站中继续被使用)

该网站有做验证,但是改验证措施只是对验证码发送量做控制作用,防止无限制触发发送验证码。对我们破解它的验证码丝毫无影响。

使用burpsuit工具对它进行抓包,结果如下:

POST /api/check_telcode.php?mobile=18XXXXXXXXX HTTP/1.1
Accept: application/json, text/javascript, */
; q=0.01
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: https://user.xxxxxxxxxx.html
Accept-Language: zh-CN
UA-CPU: AMD64
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; Trident/7.0; rv:11.0) like Gecko
Host: user.xxxx.com
Content-Length: 23
DNT: 1
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: PHPSESSID=qreb11hclishnh0i24odm7la27; _uab_collina=155081416244717379002547; nb-referrer-hostname=user.XXXXX.com; nb-start-page-url=https%3A%2F%2Fuser.XXXXX.com% .....etc.....
param=9999&name=telcode*

抓包之后,使用intruder功能对其进行暴力破解。分析完请求数据后发现,这一步的post请求只有两个参数。

param=9999&name=telcode

param=9999是我们刚才输入的错误的验证码(此时正确的验证码虽已发送,但我们并不知道),name字段就可以忽略了。
在intrude界面中Positions选项卡,设置爆破点:

根据验证码的规则,设置爆破数据。(如果是爆破登陆密码,可以从网上下载密码库文件。比如SecLists-master就收录了top100-top1000000的常用弱密码)因为是从0000~9999的纯数字。所以设置如下:

设置线程为5:

开始破解,结果如下:

所有其他验证码返回length都是477,唯独只有一个length是401。

凭直觉,这个数据应该就是验证码了。这时候再看手机上收到的验证码作为一个验证。

发现和收到的验证码完全一致。而整个破解过程其实很快还没等所有数据跑完。就基本能确定验证码是多少了。
爆破时间还不到1分钟。

到这一步就没再继续了。

总结:
1. 四位数的验证码10000位,而六位数的验证码1000000位。单从爆破时间上来看就比4位数的多100被。所以在验证码的有效期内基本很小概率能破解验证码。
2. 尽可能的缩短验证码的有效时间降低破解风险。四位数的验证码全部爆破完基本超不过5分钟。
3. 增加验证码校验的验证,上述案例中虽然有验证。但并不是针对验证码的验证。
4. 对访问请求的控制。短时间内如果出现同一Ip的大量请求,可以将其尽可能的控制。

渗透测试===使用BURPSUIT暴力破解某网站的手机验证码的更多相关文章

  1. 使用visual studio测试功能进行暴力破解

    web项目上线前需要做访问压力测试,奈何对这方面不懂,所以自己网上搜索了下相关工具没有找到合适的,就自己研究了下visual studio 2013中的测试项目,发现还挺好使的,结合数据库还能用做暴力 ...

  2. burp暴力破解之md5和绕过验证码

    Burpsuite是一个功能强大的工具,也是一个比较复杂的工具 本节主要说明一下burp的intruder模块中的2个技巧 1.md5加密 我们在payload Processing中的add选项可以 ...

  3. 转载过来的参考内容---常规36个WEB渗透测试漏洞描述及修复方法----很详细

        常规WEB渗透测试漏洞描述及修复 --转自:http://www.51testing.com/html/92/n-3723692.html (1). Apache样例文件泄漏 漏洞描述 apa ...

  4. python 暴力破解密码脚本

    python 暴力破解密码脚本 以下,仅为个人测试代码,环境也是测试环境,暴力破解原理都是一样的, 假设要暴力破解登陆网站www.a.com 用户 testUser的密码, 首先,该网站登陆的验证要支 ...

  5. web渗透测试

    信息收集 网络搜索 目录遍历:site:域名 intitle:index.of 配置文件泄露:site:域名 ext:xml | ext:conf | ext:cnf | ext:reg | ext: ...

  6. 教你用免费的hihttps开源WEB应用防火墙阻止暴力破解密码

    教你用免费的hihttps开源WEB应用防火墙阻止暴力破解密码 很多企业都有自己的网站,需要用户登录后才能访问,但有大量的黑客攻击软件可以暴力破解网站密码,即使破解不了也非常恶心.有没有免费的解决办法 ...

  7. 网络安全初级实战笔记(一):owasp zap 暴力破解

    网络安全里装着好多人的侠客梦.但是不能触碰铁律,所以,只小小的自娱自乐. 自己练习,大都会用到DVWA,一个很好的安全测试平台,自己搭建(很简单,傻瓜式搭建),自己设置安全级别,自己验证各种漏洞攻击方 ...

  8. 关于暴力破解的一些学习笔记(pikachu)

    这几天的笔记都懒得发博客都写在本地了,随缘搬上来 什么是暴力破解 就是在攻击者不知道目标账号密码情况下的,对目标系统的常识性登陆 一般会采用一些工具+特定的字典 来实现高效的连续的尝试性登陆 一个有效 ...

  9. 《11招玩转网络安全》之第三招:Web暴力破解-Low级别

    Docker中启动LocalDVWA容器,准备DVWA环境.在浏览器地址栏输入http://127.0.0.1,中打开DVWA靶机.自动跳转到了http://127.0.0.1/login.php登录 ...

随机推荐

  1. QML——添加自定义模块

    一.模块的定义 在使用QML时,我们常常看到类似这样的语句: import QtQuick 2.0 import QtSensors 5.0 通过这些import语句,我们就能使用QML中的相关控件了 ...

  2. Huge Mods UVA - 10692(指数循环节)

    题意: 输入正整数a1,a2,a3..an和模m,求a1^a2^...^an mod m 解析: #include <iostream> #include <cstdio> # ...

  3. java 连接mysql增删改查

    1.创建mysql测试表 2.按下图创建3个文件夹与3个类 3.三个类的代码 PersionDao :目录(Data Access Object), 数据访问对象是第一个面向对象的数据库接口 pack ...

  4. bzoj 2428: [HAOI2006]均分数据 && bzoj 3680 : 吊打XXX 模拟退火

    每次把元素随便扔随机一个初始解,退火时每次随机拿一个元素扔到随机一个集合里,当温度高时因为状态不稳定扔到那个元素和最小的里边. 如果新解优,更新ans. 把原式拆一下,就可以用int存了. bzoj ...

  5. JavaScript演示下Singleton设计模式

    单例模式的基本结构: MyNamespace.Singleton = function() { return {}; }(); 比如: MyNamespace.Singleton = (functio ...

  6. js子节点children和childnodes的用法

    想要获取子节点的数量,有几种办法. childNodes 它会把空的文本节点当成节点, <ul> 文本节点 <li>元素节点</li> 文本节点 <li> ...

  7. c++设计模式之抽象工厂模式

    抽象工厂思想理解:可能有若干个你想生产的产品类,建立个工厂负责分别生产各类产品,由外部客户来选取想要那种产品类,此程序中没有delete,如想delete可在工厂类中的析构函数中实现(若有错请纠正)# ...

  8. pre-processing预处理

    什么是神经网络?神经网络是由很多神经元组成的,首先我们看一下,什么是神经元1.我们把输入信号看成你在matlab中需要输入的数据,输进去神经网络后2.这些数据的每一个都会被乘个数,即权值w,然后这些东 ...

  9. Python常见初级错误

    一.常见错误(编辑器:Geany) 1.错误原因:或因不兼容中文注释 2.错误原因:vehicles变量前面有多余的空格 3.错误原因:没有正确的缩进(indent)

  10. Kubernetes集群部署--kubernetes1.10.1

    参考博客:https://mritd.me/2018/04/19/set-up-kubernetes-1.10.1-cluster-by-hyperkube/ 一.环境 (1)系统环境 IP 操作系统 ...