主要进行一个工具的演示,我们在爆破或者批量注册的时候,如果对方有输入验证码进行验证的,比如字母、数字+字母这种的,我们可以使用抓包工具burpsuite的一个插件进行实现。
下载地址:https://github.com/c0ny1/captcha-killer/releases/tag/0.1.2
下载箭头所标注的地方
打开burpsuite,点击extender下面的Extensions,然后点击添加,然后添加我们下载好的captcha-killer文件,点击下一步,然后关闭,就可以了。具体演示如图所示:
接下来我们就可以看到功能后面多了一个captcha-killer,如果没有显示,看一下是否勾选。
安装成功以后,我们就要使用这个工具了。我在网上随便找了一个有这个验证的网站,声明:只做该工具的演示,不对该网站进行任何侵入违法活动。望阅读此篇的读者珍惜自己的自由之身,切不可触碰红线。
如图所示,上面是有账号、密码、验证码。假设我们在前期的信息收集中知道了这个账号,现在我们就对密码进行爆破,他这个爆破一次验证码就会刷新一次。可以使用我们的这个小插件。
由于我是找的真实案例,所以打个码。然后我们点击captcha-killer,就可以发现数据包已经发送过去了。点击获取,大家可以看到已经获取到了验证码
花钱的比免费的强很多,如果有必要可以花钱搞一下
将登陆请求的数据包抓到,action到Intruder。攻击模式选择pitchfork
然后清除,payload1正常设置(参考越权漏洞(二)),payload2选择Extension-generated - > select generator -> captcha-killer.线程要设置为1,如图
最后就可以了,一直跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑跑,最最后发现爆破失败。一般情况下爆破的可能性不大,但是存在一定几率。万一就破了呢。这只是说能提供一个思路。
在我们进行爆破的时候,会有这个验证码验证。一种情况是验证码是本地验证,这种情况的验证码形同虚设,因为只要本地通过就可以,服务端是不会验证的,所以直接抓包,进行爆破,跑就完事了。
第二种情况是验证码在服务端验证,但是可以重复使用,比如第一次登录的时候验证码是1234,那么在第二次输入的时候还是1234,就是验证码没有销毁,一直存在。当然,这种情况是在数据包中看到的。咱们主要说一下这种情况,因为这种情况是稍微比较常见的。
首先我们看到这个图片的时候,应该想到的:验证码是否可以绕过、验证码是否可以复用,如果都不能可以使用captcha-killer。因为我已经测试了,不能绕过。我们直接看是否可以复用
1>我们先抓一个正确验证码的数据包,看一下回显。(将抓到的数据包发送到repeater下
点击send
我们可以看到回显会提示密码不正确。
2>我们再抓一个验证码错误的数据包,看他的回显。
这是他的一个回显,意思是正确的验证码是。。。。你输入的验证码是。。。。。他会提示这个
3>接下来我们抓一个输入正确验证码的数据包,修改输入的密码,看他会提示什么,如果没有验证码复用,他应该会提示验证码错误,回显为步骤2,如果存在验证码复用,那么回显为步骤1
说明存在验证码复用情况,然后就可以进行爆破。
漏洞原理:服务端验证的时候没有将已经使用过的验证码销毁
防护:将使用过的验证码进行销毁,重新验证。使用滑动验证,选图验证等等
主要有调用、遍历、未授权、篡改等
调用案例:短信轰炸(前面介绍过)
遍历案例:UID等
callbake回调JSONP(用微信接口,然后又给网站进行回调,可能存在跨站漏洞)
参数篡改:墨者靶场(已演示)
Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。
Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
参考链接:https://www.jianshu.com/p/24825a2683e6
由上面的简单介绍,我们可以可出,如果有这个token,爆破难度会增加,甚至没法爆破,因为token请求一次,就会改变一次。你可以再数据包中一直变换,但是如何解决这个token问题,因为,token不变那么请求的还相当于同一个数据包。那么如何解决这个问题? 猜测(一般不可能)如果它存在这个逻辑漏洞,那么token就会在前端回显出来。具体看下面:
将抓取的数据包发送到intruder下,将密码和token值选中作为爆破,进行添加
将sniper换成pitchfork
1.第一个payload是密码,还按之前的那样导入字典、、、、第二个payload是token
2.首先点击options,将线程设置为1,这个只能一个一个的提交,因为是回显出来token,然后token才可以提交,如果多线程,提交的多了token取谁的。
3.向下滑,选择这个经常
4.然后选择这个add
5.看到数据包,选中数据包中的token值,点击ok就可以了。
6.在payload中选择recursive grep.
7.最后发送数据包就可以了