0%

DVWA通关指南-Brute Force(爆破)

说明

  • 上文服务器已经搭建好了DVWA环境,本篇开始介绍对DVWA的使用

  • Bruce Force(爆破)。密码破解是从计算机系统中存储或传输的数据中还原出密码的过程,一种常见的方法是反复尝试猜测密码,直到把正确的密码试出来。用户往往会设置弱密码,不安全选择的例子包括字典中的单字、姓氏、任何太短的密码(通常被认为少于6或7个字符)或可预测的模式(例如,交替的元音和辅音,称为 leetspeak,因此 “password” 变成了 p@55w0rd”)。

    image-20220127145156521

安全等级LOW

把安全等级调整为:LOW。开发人员完全忽视了任何保护方法,允许任何人尝试多次任意访问,可以在没有任何影响的情况下对任意用户进行登录。

image-20220127145338823

源代码审计

  • 点击查看源码

image-20220127145613479

  • 分析。源码如下,代码将获取用户输入的用户名和密码并将其进行 md5 加密,然后使用 SQL SELECT 语句进行查询。由于进行了 md5 加密,因此直接阻止了 SQL 注入,因为经过 md5 这种摘要算法之后 SQL 语句就会被破坏(不过这里用 SQL 注入可以登陆成功)。注意到此时服务器只是使用了 isset() 函数验证了参数 Login 是否被设置,参数 username、password 没有做任何过滤,更重要的是没有任何的防爆破机制。

image-20220127145759588

攻击方式

工具准备

  • Burp Suite Pro 2020.4_v2.5.0.2(有需要,可以联系我)

    • 依赖java9,可以从这里下载安装,设置好环境变量
  • 设置Burp 代理

image-20220127151952103

  • chrome浏览器设置代理

image-20220127152139068

开始测试

在Brute Force中,用户名输入admin,密码输入1123(错误的密码),正确的密码是password,点击登录被Burp 拦截

image-20220127152224491

image-20220127152346413

把拦截的请求发送到测试器

image-20220127152650009

在测试器点击清楚

image-20220127153846031

选择密码,点击添加

image-20220127153928769

点击Palyloads,载入自定义的密码字典

image-20220127155906579

设置下线程数,开始攻击

image-20220127163807548

查看测试结果,有一个长度不一样的,点进去看下

image-20220127163854226

登录成功了

image-20220127163956037

安全等级Medium

此阶段在验证失败的登录屏幕上添加睡眠,这意味着当您登录不正确时,在页面可见之前将有额外的两秒钟等待。这只会减慢一分钟内可处理的请求量,使暴力攻击的时间更长。

image-20220127171112317

源码审计

源码如下,Medium 级别的代码主要增加了 mysql_real_escape_string 函数,该函数会对字符串中的特殊符号进行转义,从而对用户输入的参数进行了简单的过滤。相比 low 级别的代码,当登录验证失败时界面将冻结 2 秒,从而影响了爆破操作的效率,不过如果是一个闲来无事并且很有耐心的白帽黑客,爆破出密码仍然是时间问题。

image-20220127170706740

攻击方式

和 low 级别一样,还是用 Brup 抓包后爆破即可,只是因为每次测试都要等上 2 秒,需要等稍长的时间而已。

安全等级为High

开发者使用了 “CSRF” 的反伪造请求,有一个旧的说法表示这种保护可以阻止暴力攻击,但事实并非如此。这个级别也扩展了中等级别,在登录失败时等待,但这次是 2 到 4 秒之间的随机时间,这样做的目的是试图混淆任何时间预测。使用验证码表单可能会产生与 CSRF 令牌类似的效果。

源码审计

High 级别的代码使用了stripslashes 函数,进一步过滤输入的内容。同时使用了 Token 抵御 CSRF 攻击,在每次登录时网页会随机生成一个 user_token 参数,在用户提交用户名和密码时要对 token 进行检查再进行 sql 查询

image-20220127171703241

攻击方式

在Brute Force中,用户名输入admin,密码输入1123(错误的密码),正确的密码是password,点击登录被Burp 拦截

image-20220127152224491

被拦截的请求多个token

image-20220128114155998

把拦截的请求发送到测试器

image-20220127152650009

在测试器中,我把密码和token作为被攻击的参数,攻击类型需要改为Pitchfork

image-20220128160535877

设置密码的规则

Playloads设置

和之前一样,载入密码字典

image-20220128115211854

token的设置

Playloads设置

有效载荷类型为递归搜索

image-20220128115300062

Options的设置

线程数设置为1,这样就能每次只取一个token值

image-20220128115449383

重定向设置为总是

image-20220128115631963

Grep-Extract设置,在响应结果中提前token的值,如果响应是302就要重新获取请求或者拦截,点击token的值,分隔符自带填入进去

image-20220128154844054

  • 点击ok后,发现递归搜索文本框中自带填入了规则值

image-20220128155009012

并在playloads初始化有效负载中填入token的值

image-20220128155121049

完成这些,我们就可以开始攻击了,按start attack

image-20220128160644340

测试完成后,查看结果

image-20220128160432361

安全等级为Impossible

image-20220128161118392

暴力(和用户枚举)不应该在该级别的代码上实现,开发人员增加了一个“锁定”功能,如果在过去 15 分钟内有5次错误登录,被锁定的用户将无法登录。

源码审计

image-20220128161334594

总结与防御

  • 由于服务器没有对用户的输入次数进行限制,导致攻击者可以利用爆破的手段来进行攻击,通过穷举法将用户名、密码等信息爆出来。当攻击者结合社会工程学生成了庞大的字典时,爆破攻击的可能性将会被增大。对于爆破漏洞,开发者可以对用户的登陆次数设置阈值,当某用户名表示的用户的登录次数在一定时间内超过阈值时,就暂时锁定用户。也可以进行 IP 检测,如果某个 IP 的登录次数超过阈值也可以锁定 IP。当然还有一种我们熟悉的方式,就是设置只有人可以通过验证的验证码或者是其他的验证手法,来保证进行登录操作的是人而不是机器。
  • Burp的字典爆破可以一站式爆出结果,很方便,但是字典攻击一般很耗时,穷举的爆破一般渗透中不是上选,而且这种爆破手段对字典有要求,理论上时间充足的话足够优秀的字典无敌。但是可惜实战中不会用那么多时间,如果登录次数错误有限制以及验证码等一些列措施,并不适合此方式
  • 本文主要来自DVWA通关详解DVWA 通关指南:Brute Force (爆破)