1.暴力破解

1.Burte Force(暴力破解)概述

Burte Force(暴力破解)概述

“暴力破解”是一攻击具手段,在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录,直到得到正确的结果。 为了提高效率,暴力破解一般会使用带有字典的工具来进行自动化操作。

理论上来说,大多数系统都是可以被暴力破解的,只要攻击者有足够强大的计算能力和时间,所以断定一个系统是否存在暴力破解漏洞,其条件也不是绝对的。 我们说一个web应用系统存在暴力破解漏洞,一般是指该web应用系统没有采用或者采用了比较弱的认证安全策略,导致其被暴力破解的“可能性”变的比较高。 这里的认证安全策略, 包括:

1.是否要求用户设置复杂的密码;

2.是否每次认证都使用安全的验证码(想想你买火车票时输的验证码~)或者手机otp;

3.是否对尝试登录的行为进行判断和限制(如:连续5次错误登录,进行账号锁定或IP地址锁定等);

4.是否采用了双因素认证;

...等等。

千万不要小看暴力破解漏洞,往往这种简单粗暴的攻击方式带来的效果是超出预期的!

2.基于表单的暴力破解

1.进入靶场

2.账号密码随便输入,登录抓包,右键发送到intruder模块

3.把密码字段设置为变量

4.导入密码文件

5.设置线程

6.进行爆破

7.爆破完毕之后,对结果进行排序,点击数字不同的返回包,看是否登陆成功,如图所示,登陆成功

3.验证码绕过(on server)

1.进入靶场,可以看到本靶场需要输入验证码

2.账号密码随便输入,登录抓包,右键发送到intruder模块,先发到repeater重发器重放

3.再次发送发现验证码可重复使用,可以直接爆破

4.这一关的验证码是在后台服务端生成后放到前端客户端,如果后台服务端验证码刷新了,则上一次的验证码失效。

抓包后,发现验证码参数,经测试直接放入Intruder模块爆破即可,不要在Proxy->Intercept模块放包后刷新页面,因为刷新页面后后台服务端的验证码也会随之刷新,从而使上一次验证码失效,导致爆破不了。

5.接下来的步骤同上一题

6.请求包密码为123456,带着验证码参数请求

7.返回包中,返回了login success字样,成功爆破到密码

4.验证码绕过(on client)

1.进入靶场,可以看到本靶场需要输入验证码

2.客户端自己验证自己,就是一切都用户说了算。f12开发者模式查看网页源码发现验证码的生成和验证码的校验都是通过前段实现的

弹框,也可以说明是前端javascript验证验证码

3.账号密码随便输入,登录抓包

4.过关方法

(1)这一关的验证码是在前端客户端生成的,所以将验证码参数删除,右键发送到intruder模块

(2)禁用浏览器js脚本,验证码就不会显示了

首先网站是有验证码的

谷歌浏览器禁用js

刷新页面,验证码就消失了,就可以继续爆破了

(3)只要正确填写过一次验证码(注意它这里的验证码是区分大小写),让burp抓到包就可以爆破了

5.接下来的步骤同上一题

6.可以看到请求包中并没有验证码参数

7.返回包中,返回了login success字样,成功爆破到密码

5.token防爆破

token防爆破?

查看源码我们会就会发现,每次请求里面都会加上token的值,所以如果我们爆破的话,每次爆破,都要有三个参数,分别是username,password,token,比较麻烦,这里提供两种方法,第一种使用burpsuite进行暴力破解,第二种方法是使用python脚本。

第一种方法,使用burpsuite神器进行暴力破解

1.进入靶场

2.抓取数据包可以看到请求头中有token参数,重放两次数据报后会提示token错误

3.通过测试发现每个数据包的token在变化,尝试使用pitchfork进行爆破

具体设置如下:

选择pitchfork进行爆破,添加密码和token变量

4.因为token值是单次传递的,所以线程数改为1

5.在GREP-Extract中获取响应包,从中提取参数。选中token值,这个时候工具会自动编辑规则,复制token值备用。点击ok。

6.在页面最底部找到always选项

7.回到payloads模块,正常添加第一个变量密码的字典

8.第二个变量选择递归搜索(Recursive grep)

9.返回包中,返回了login success字样,成功爆破到密码

第二种方法,通过burpsuite截断信息,我们可以获取cookie及post提交的字段信息;

根据获取到的信息编写Python脚本,python脚本如下:

import requests
from bs4 import BeautifulSoup
s = requests.session()
password = ['123', '456', '123456', '67899']
# 设置http请求头部信息
header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
                  ' (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36',
    'Cookie': 'PHPSESSID=of5tkhcr385na1oij0h90vr1r0'
}
req = s.get('http://x.x.x.x/vul/burteforce/bf_token.php#')
# token验证
token= BeautifulSoup(req.text,'lxml').find('input',{'name':'token'}).get('value')
for pa in password:
    # 基于表单的暴力破解
    # req=s.post(url='http://x.x.x.x/vul/burteforce/bf_form.php',data={'username':'admin','password':pa,'submit':'Login'})
    # 验证码绕过(on server)未失效,可重复使用
    # data = {'username': 'admin', 'password': pa, 'vcode': '14xkgk', 'submit': 'Login'}
    # req = requests.post(url='http://x.x.x.x/vul/burteforce/bf_server.php',
    #                     data=data, headers=header)
    # 基于client端验证码,后台无校验
    # req=s.post(url='http://x.x.x.x/vul/burteforce/bf_token.php',data={'username':'admin','password':pa,'submit':'Login'})
    # 基于token验证
    req=s.post(url='http://x.x.x.x/vul/burteforce/bf_token.php#',data={'username':'admin','password':pa,'token':token,'submit':'Login'})

    if 'success' in req.text:
        print("爆破成功,用户名:admin,密码为:%s" % pa)
        break
    else:
        req = s.get('http://x.x.x.x/vul/burteforce/bf_token.php#')
        token = BeautifulSoup(req.text, 'lxml').find('input', {'name': 'token'}).get('value')

此脚本来源于https://blog.csdn.net/Nicky_Zheng/article/details/109170903

脚本成功运行后,爆破到密码,如下图

免责声明:由于传播或利用此文所提供的信息、技术或方法而造成的任何直接或间接的后果及损失,均由使用者本人负责, 文章作者不为此承担任何责任。

转载声明:儒道易行 拥有对此文章的修改和解释权,如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经作者允许,不得任意修改或者增减此文章的内容,不得以任何方式将其用于商业目的。

点击收藏 | 1 关注 | 1
  • 动动手指,沙发就是你的了!
登录 后跟帖