序言:
暴力破解能否成功的关键就在于是否存在弱口令,靶场当中的一般会比较简单,而真正的实际网站中,要爆破的难度是比较大的,因为什么都不知道。我们需要对目标进行大量的信息收集,从而写出一份好的字典,进行爆破,成功的概率才会增加
实验环境:pikachu靶场,bp
1.基于表单的暴力破解
补充:表单是一种常见的html标签,用来向服务器提交数据。
爆破流程:
1.尝试登录,分析回显
使用admin,11111进行登录,登录失败。
得到回显信息中包含username or passerword is not exists,表示登录失败
2.使用bp抓包进行分析,
这是客户端发送的请求包,被bp拦截,接下来我去用repeater(重发)模块,去分析它的响应包
在响应包里发现了登录失败的信息
render查看请求的页面结果,但并不是所有网页的结果都能通过render看到
3.把抓到的包使用intruder模块进行暴力破解(跑字典)
因为此时账号密码 我都不知道,所以选择bomb模式进行交叉验证,设置账号和密码为payload,注意这里是具体的值,而不是username和password,因为我们要爆破的是具体的数值。
之后为他们配置字典,用户名我就随便添加了几个,然后密码的字典是从别处下载的top1000,进行爆破尝试。
4.结果验证
得到了所有的验证结果,正所谓错误的原因有很多,但正确的只有一个,所以我们要找到那些特殊的。按照内容的length进行排序,找到了一个比较特殊的。
那就可以尝试登录看看
发现登录成功 也可以在bp中分析,在相应包的靠后的行里发现了登录成功的代码
至此破解已完成,得到了用户名和密码为admin,123456.
2.验证阿绕过(在服务器生成的)
注意这里的 验证码是在服务器生成的,提交的验证码包含在请求体当中,只有验证码正确,才会去进行账号和密码的正确性验证,在服务器端进行验证。
爆破流程和暴力破解的大致流程都一样,但是这里涉及到验证码, 要保证第一次的验证码正确,因为只有验证码正确,才会进行账号和密码的验证,而我们在第一次验证码正确时,进行抓包拦截,只要不放包,那么之前的验证码就是一直有效的,放包的话验证码就会刷新。
1.尝试登录,观察回显
验证码错误时不会验证账号密码
2.抓包分析
验证码正确时,但密码不正确
3.基于第一次验证码正确,进行暴力破解和表单的破解就一样了
得到了两个账户,然后登录验证了一下,也证明了是正确的。
3.验证码绕过(前端验证码)
这里的验证码是由前端进行生成和验证的,你会发现当验证码错误的时候压根抓不到包,这是就是由于它是在前端生成和验证的原因,只有验证码正确的时候,这个请求包才会发出去,否则压根不会发出去。
当验证码正确时,可以抓到包,之后正常进行跑字典就行
4.token绕过
token:是服务端验证用户的一种方式,就是用来验证用户身份的,和cookie不太一样,cookie是用来保持用户身份和状态的;token是服务器在这一次访问时给到你,你下一次要带过来进行身份验证,如果token不正确,服务器就会认为这是一次非法的请求,不会作出响应。
这里就不能采用简单的跑字典了,因为token的值一直在变化,我们又不能对token进行跑字典,bp在访问的时候也会给bp不同的token,所以这里我们对token进行recusive grep(递归匹配),就是从上一次访问的数据包当中拿到token,作为这一次的token。
注意:这里的攻击模式,要选择为草叉模式,草叉的特点是:从上到下一一对应,而且一个token只能使用一次
也就是说此时除了账号密码这两个payload,还需要添加一个payload为token值,但是token采取recusive grep;
这里注意:草叉模式是一一对应的,所以如果用户名和密码都不知道,那么尽量字典要大一点,好一点才行,不然的话一一匹配成功的概率会比较小,这里我假设用户名为admin进行尝试。
密码跑字典,token设置为递归匹配,只能设置为单线程,因为这里只能一一匹配,然后还需要设置gep extract(递归提取)响应包里的token,作为下一次响应的token,并且设置重定向为always。
只有按这样设置才可以,之后可以得到结果