发布时间:2023-05-20 文章分类:WEB开发, 电脑百科 投稿人:李佳 字号: 默认 | | 超大 打印

暴力破解

一、什么是暴力破解?

暴力破解是一种攻击手段,使用大量的认证信息在认证接口尝试登录,直到得到正确的结果。

二、暴力破解弱口令实验

实验环境:DVWA

2.1标题基于表单的暴力破解

2.1.1 第一步:打开burpsuite拦截

随便输入用户名和密码

手把手教你暴力破解
手把手教你暴力破解

2.1.2 第二步:将拦截到的包右击发送到intruder模块

(其中简单介绍一下intruder模块)
手把手教你暴力破解

Target主要是设置暴力破解访问的host地址和对应的端口号。
手把手教你暴力破解

2.1.3 第三步:选择我们要破解的变量

这里假设用户和密码都不确定

手把手教你暴力破解

 Positions设置是选择我们要暴力破解的位置。在默认情况下,burp会自动将所有的变量都勾选上。选择clear$,此时所有默认的爆破点都已消失;选择我们需要暴破的变量。

2.1.4 第四步:暴力破解时根据具体情况进行选择attract type

上面有两个变量,选择cluster bomb 逐项的去匹配变量

2.1.5 Attack Type 攻击类型

Sniper
只需要指定一个payload set,无论position有几个变量,都是一个payload set,但会针对每个变量逐项替换。
手把手教你暴力破解

Battering ram
无论Positions中有几个变数,都是一个Payload Set。并且每个变量位置的值都会是一样的
手把手教你暴力破解
手把手教你暴力破解

Pitchfork
不能只输入一个字典,每个变量要有自己的字典文件,也就是说每个变量有一个属于自己的Payload set,但是要注意的是每个Payload set里面的payload个数要一样;采用一对一的匹配关系
多出来的那些payload不会被送出去而已
手把手教你暴力破解
手把手教你暴力破解

Cluster bomb
每个变量都要输入字典,但是不会像Pitchfork是一对一的关系,而是每个都会去尝试到,逐项地去尝试一多对的方式。
手把手教你暴力破解
手把手教你暴力破解

Payloads 用来配置一个或多个有效负荷的集合
手把手教你暴力破解

Payloads set 指定需要配置的变量
Simple list是最基本的,用法很简单,可以直接输入按Add,也可以上传文档。虽然这边我们demo都是手动输入,不过实际上要执行暴力破解等动作,通常Payload一定会是很大量的,用手输入可能会累死,所以实际上都是用选择上传文件的方式。(这里基本只用simple list,所以只介绍simple list)

2.1.6 第五步:设置两个payload

前面我们添加了两个变量,所以需要设置两个payload
手把手教你暴力破解
手把手教你暴力破解
手把手教你暴力破解

可以加载自己下载的字典,也可以手动输入;一般情况下选择load去加载字典进行暴破,这里在下方ADD处手动添加
Payload Processing
可以对发出去的Payload进行加工处理,例如可以加入前缀、后缀字符、只截取字符串的某一部分等;后缀常见的可能像是Email结尾的字符,比如@gmail.com之类的。可以利用match替换,可以反转,可以编码,很多方法可以选择。
手把手教你暴力破解

2.1.7 第六步:开始暴破

手把手教你暴力破解

options 模块选择攻击的线程等(多线程有助于加快破解速度),由于我添加的猜测数据较少,可以直接攻击,点击 start attack,得到最终的结果。我们可以根据 status 和 length 两个模块来判断是否成功。此处发现请求length与别的不同,重点关注4644的response可以看到暴破成功
手把手教你暴力破解

2.2 暴力破解之绕过 token

2.2.1 token的原理和作用

token是用于验证身份的,在web系统中验证前端是否能够访问后端系统
是服务端生成的一串字符串,以作前端进行请求的一个令牌,当第一次登录后,服务器生成一个token并返回给前端,之后前端只需带上这个token前来请求数据即可,无需再次带上用户名和密码。

2.2.2 第一步 打开burpsuite拦截

在DVWA登录页面随便输入用户名和密码

手把手教你暴力破解

2.2.3 第二步:将拦截到的包右击发送到intruder模块

手把手教你暴力破解

2.2.3 第三步 选中需要破解的变量

(这里用户名已知正确,选择密码和token)
手把手教你暴力破解

2.2.4 第四步 根据具体情况进行选择attract type

将attract type改为pitchfork,pitchfork简单理解就是你设置了几个变量,他就能用几个payload,我们设置了2个变量,就有2个payload,并且一一对应。
手把手教你暴力破解

2.2.5 第五步 设置跟随重定向

在opotion模块中redirections的follow redirections改为“always”
手把手教你暴力破解

2.2.6 第六步 在grep-extract中点击add,选择refetch response

手把手教你暴力破解

记住token的值,后面需要用。

2.2.7第七步 修改线程

payload1为单线程即可(因为 token 是一对一的关系,当第二个 token 产生,第一个 token 就会消失,所以需要将线程调整至 1。)
手把手教你暴力破解

如不修改线程,则会报错,显示多线程冲突
手把手教你暴力破解

2.2.8 第八步 加载字典

手把手教你暴力破解

payload type选择recursive grep(递归查找)
将刚才复制的token粘贴到payload
手把手教你暴力破解

2.2.9 第九步 开始爆破

根据 status 和 length 两个模块来判断是否成功。此处发现请求length与别的不同,重点关注4723的response可以看到暴破成功。
手把手教你暴力破解
手把手教你暴力破解

2.2.10 token防暴破的弊端

token值输出在前端源码中,容易被获取,因此也就失去了防暴力破解的意义。

三、如何防御暴力破解攻击?

人为层面:增强密码安全性

提升密码长度和复杂度
密码应由数字、大小写字母和特殊符号混合组成,且密码越长,破解密码的时间就会成指数增加,一旦密码超过了某个长度,基本上就不能用暴力破解了。例如,使用破解的服务器集群,每秒可以尝试3500亿次,这个速度破解6位密码只需要4.08秒,7位密码只需6.47分钟,8位密码需要10.24小时,9位密码需要40.53天,10位密码就需要10.55年了。
在不同的地方使用不同的密码
重复使用电子邮件、银行和社交媒体帐户的密码更可能导致身份被盗用。可以将网站的缩写作为密码的后缀,例如登陆QQ的密码是Hl9tysY.qq,登陆微博的密码是Hl9tysY.wb,这样每个网站都有独立的密码且不容易忘记。
避免使用字典单词、数字组合、相邻键盘组合、重复的字符串。例如 password 、12345678、asdfg 、aaaa 或 123abc。
避免使用名字或者非机密的个人信息(电话号码、出生日期等)作为密码。
定期修改密码

系统层面:做好密码防暴力破解设计

系统设计时考虑以下几个方面:
锁定策略:输错密码几次就锁定一段时间。
验证码技术:要求用户完成简单的任务才能登录到系统,用户可以轻松完成,但暴力工具无法完成。例如图形验证码、短信等。
密码复杂度限制:强制用户设置长而复杂的密码,并强制定期更改密码。
双因子认证:结合两种不同的认证因素对用户进行认证的方法。例如密码、身份证、安全令牌、指纹、面部识别、地理信息等。