Low
来到登陆页面,开代理,上burp。
随便输入用户名密码拦截
右键点击送到intruder破解器模块。
清除所有position,添加刚才输入的用户名和密码的position。
下面要说一下攻击类型。
bp的intruder模块提供了四种攻击类型,分别是:
1.Sniper(狙击手):单点爆破,一个payload对一个position进行爆破,适用于字典密码较少和攻击position单一的情况。
2.Battering ram(攻城锤):多点爆破,但是每个position使用同一个payload,就是说每个攻击位用的是同一套字典,每个位按顺序依次进行。
3.Pitchfork(音叉):多点爆破,但是每个position使用单独的payload平行爆破,例如,position1使用payload1,同时position2使用payload2,这种方式适用于有专门字典的情况,比如用户名位就用用户名字典,密码位就用密码字典,这样爆破起来效率更高。
4.Cluster bomb(集束炸弹):多点爆破,这种方式最耗时间,同时也是实战当中用的最多的方式,因为效率更高。每个攻击点位用不同的字典,将每个字典作笛卡尔积,也就是用每个字典互相之间生成的有序对进行爆破。比如position1的payload1有120条,position2的payload2有300条,那么做笛卡尔积就是120*300=36000条。
我们这里选用第四种。
那么,上字典开始爆破。这里用的是github上的字典。
开始攻击。
这里有一点要注意,因为输入过滤了引号,所以无法实现注入,所以字典中带有单引号的数据的length与其他的不一样。
经过漫长的跑字典,发现有一条的length不一样。一般length与其他大多数不同就说明成功了。
试一下,成功登录。
low级别的爆破成功。
Medium
这查看源代码之后发现,登陆失败会有两秒钟的sleep时间,也就是锁定时间,无法爆破。
但与low级别唯一的区别就是花费的时间较长,按照low级别的打法照样跑出来了。问题不大。
High
high级别的难度就大大提升了。
查看源代码,这回有token令牌验证输入。关于token的知识可以自行查阅资料,这里不多阐述
上bp抓包,这里做一个简化,假设知道用户名而不知道密码的情况进行爆破,不然工作量太大。
position选择密码和token
密码部分还是上原来的字典,token部分比较复杂,下面来详细解释。
选择options部分,下拉找到grep_extract部分,选择add添加。
这一操作是为了获取网页token令牌,根据密码特征值生成token。
选中第一次的token,确定
来到payload2部分,这个点位就是token,选择递归查找(recusive grep)类型
开始攻击,出现问题了。报错提示递归查询不能在多线程的情况下进行
来到resource pool设置最大线程数为1
再进行攻击,这回没有报错。
可以看到除了第一次的token是我们抓取的之外,后面的token都是按照特征值生成的。
显然,password一行的length长度不一,那么这就是我们要的答案了。
查看response,果然,成功登陆的提示就在http报文中
那么,这个级别的brute force我们也完成了。
Impossible
查看源代码
可以看出,使用的PDO技术验证和sleep()函数设置登陆失败冷却时间。
除此之外增加账户锁定机制防止爆破。
brute force部分就到这里了,欢迎交流和反馈。