一、暴力破解的概念php
顾名思义,暴力破解的原理就是使用攻击者本身的用户名和密码字典,一个一个去枚举,尝试是否可以登陆。由于理论上来讲,只要字典足够庞大,枚举老是可以成功的!浏览器
二、暴力破解的实战安全
在有了以前的环境准备后,还须要安装一个新的辅助工具 Burp Suite(这个工具很强大,慢慢讲解吧,功能不少,咱们今天用到抓包、截包、改包及暴力破解的功能)服务器
下载你们网上去下载便可,百度不少安装教程和包,这里就不说了,个人版本是1.6的。工具
在此以前,你们要明白咱们登陆的时候实际上浏览器最终是发送的数据包,而这个动做呢咱们彻底能够用Burp Suite去代替,而后帮咱们完成暴力破解性能
好了,咱们接着来作实战把,启动Studyphp后,首先咱们先登陆DVWA(admin/password),而后点击左边菜单栏的DVWA Security将安全级别调为low,而后再点击左侧的Brute Force(暴力破解)。学习
此时咱们须要开启咱们的抓包工具 Burp Suite,打开工具后,点击“Proxy->Options->设置好代理”(以下图),同时咱们须要设置浏览器代理端口也为8888,设置好代理后,点击切换到Intercept ,设置状态为【Intercept is on】。测试
点击登陆,查看Intercept,将拦截到的请求,右键【Send to Intruder】ui
而后在“Intruder->Position”中设置,点击clear,将自动设置的position【Clear】掉,而后在请求中username和password的地方点击【Add】添加position,以下图:这里有attck type(四中攻击类型,我下面介绍下四种的区别)spa
(1)Sniper(狙击手模式) 这个四种模式主要是参考这个博客进行学习:http://blog.csdn.net/huilan_same/article/details/64440284
狙击手模式使用一组payload集合,它一次只使用一个payload位置,假设你标记了两个位置“A”和“B”,payload值为“1”和“2”,那么它攻击会造成如下组合(除原始数据外):
(2)Battering ram(攻城锤模式)
攻城锤模式与狙击手模式相似的地方是,一样只使用一个payload集合,不一样的地方在于每次攻击都是替换全部payload标记位置,而狙击手模式每次只能替换一个payload标记位置。
(3)Pitchfork(草叉模式)
草叉模式容许使用多组payload组合,在每一个标记位置上遍历全部payload组合,假设有两个位置“A”和“B”,payload组合1的值为“1”和“2”,payload组合2的值为“3”和“4”,则攻击模式以下:
(4)Cluster bomb(集束炸弹模式)
集束炸弹模式跟草叉模式不一样的地方在于,集束炸弹模式会对payload组进行笛卡尔积,仍是上面的例子,若是用集束炸弹模式进行攻击,则除baseline请求外,会有四次请求:
看完上面四种不一样的介绍,我想你们应该知道用哪一种好一些了吧,咱们是帐号名和密码两个变量,咱们选择第四种Cluster bomb模式,这也是采用笛卡尔积最大程度的实现爆破。
在“Intruder->Payloads”中设置,分别选择payload set 1/2,添加username和password的变量,能够load文件将变量加进来。
在Options下咱们还能够线程数,这个根据电脑性能自行选择(性能越好能够设置多一些,这样跑的快一点)
最后点击menu中的【Intruder->Start attack】开始攻击。
在结果列表中,经过Length排序,选出长度与其余不一样的一个,查看Response,能够看到“Welcome to the password protected area admin”的字段,证实这对载荷是正确的,爆破成功。(这里当作功能够经过Length长度来判断,正确的长度为5325,错误的为5262)
还记得咱们刚开始设置了DVWA的安全级别为low,那么若是是其它级别会咋样呢?先来讲一下中等级别的等级,咱们能够发现破解时间变长了,但依旧能成功。
那么若是是high级别呢?
这里再接着来讲下怎么破解若是high级别,high级别的话每次登录就会携带多一个user_token值,这个值是服务器每次动态给的,咱们每次打开登陆页面,服务器就会返回一个token值给咱们
在Burp代理的HTTP history中找到修改密码的请求包,发送到Repeater测试,因为user_token
已失效,登陆失败,HTTP状态码为302,咱们点击Follow redirection(跟随重定向)跳转到index页面,点击response->Render发现依旧是在登陆界面。下面我来讲下怎么获取每次服务器返回的user_token,而后成功登陆。
第一步:录制宏
宏的管理界面位于Options → Sessions
,点击Add
,新建一个宏。
进入到宏的记录界面,从HTTP请求记录中选择获取user_token的请求,这里咱们知道确定是登录界面,选择后肯定。
注意:若是历史记录中没有该请求,能够点击右上角的Intercept
开关按钮,关闭代理截断,而后在浏览器中执行一次登陆操做。
以后进入宏编辑界面,输入宏的名字,名字可随便写。我这里命名为get_user_token
,填写宏名字后点击右边的Configure item
进入下一步设置。
宏设置页面,指定参数的位置。点击右下角Add
进行参数添加。
输入参数名称(这个需和密码登陆请求中的参数名一致),使用指定开始和结束位置的方式,在请求响应内容中找到token,鼠标双击选择保持高亮,点击OK。而后在Configure Macro Item
、Macro Editor
所有点击肯定,完成宏的录制。
完成后能够在宏列表框中看到刚才录制的宏。
第二步:添加会话处理规则
会话处理规则处,点击Add,添加一条新的规则。
填写规则描述(使用便于区分的文字内容),添加一个动做,在请求以前运行一个宏。
动做编辑中,选择刚才录制的宏,选择只更新指定的参数,输入Token产生名称user_token
,点击肯定。
完成动做编辑后,回到会话操做规则编辑界面,选择Scope
,设置这个宏的做用域。
完成上述操做后,会话处理规则列表中有了新增的规则。
第三步:验证规则是否生效
回到Repeater页面(确保会话登录有效,如超时,请从新登录),再次发送密码登陆的请求包,能够看到在提交请求后,user_token值自动更新,点击Follow redirection。
能够看到登陆成功,以下图:
那么问题接着来咯,若是咱们设置了DVWA的安全级别为impossible呢?咱们发现登陆错了三次后将会锁定15分钟,这个怎么解决呢?