DVWA —— Brute Force 暴力破解

本文详细介绍了不同安全等级的Web应用漏洞,包括弱口令爆破、SQL注入绕过、验证码机制的弱点,以及如何利用BurpSuite进行渗透测试。同时,提出了防御措施,如添加验证码、限制登录尝试次数、密码加密和防止SQL注入等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

漏洞原理

Low

渗透思路

burp 弱口令字典爆破

Medium

渗透思路

burp 弱口令字典爆破

源码对比 

Low 源码

Medium 源码

对比小结

High

渗透思路 

burp 自动获取 token 爆破弱口令

源码对比

Medium 源码

High 源码

对比小结

Impossible

源码对比

High 源码

Impossible 源码

对比小结

防御

添加验证码机制

添加 token

限制登录失败次数

密码加密传输

防止 SQL 注入

强密码

绕过

SQL 注入绕过

验证码可爆破

验证码复用

验证码绕过

token 绕过


漏洞原理

由于没有对登录页面进行相关的防暴力破解机制,如无验证码、有验证码但验证码未在服务器端校验以及无登录错误次数限制等,导致攻击者可通过暴力破解获取用户登录账户及口令,从而获取网站登录访问权限

Low

渗透思路

没有验证码,错误次数限制,而且用户名密码明文传输,所以用 burpsuit 抓包后用字典自动化爆破 

burp 弱口令字典爆破

爆破模式选择 Cluster bomb

列表1 username payload

列表2 password payload

 注:只是为了示范和熟悉常用渗透思路,并没有必要用太多 payload,比较费时间,实际测试可以用 Top500 用户名密码

option 标签页中的 Request Engine 等参数可保持默认即可,点击 payloads 标签页里的 start attack 即可开始爆破,结果如下:

Medium

渗透思路

没有验证码,错误次数限制,而且用户名密码明文传输,所以用 burpsuit 抓包后用字典自动化爆破 

burp 弱口令字典爆破

与 Low 级别一样

源码对比 

Low 源码

Medium 源码

对比小结

通过对比可知,low 和 medium 两个的等级代码区别有两点:

  1. mysqli_real_escape_string 函数对用户名和密码输入进行特殊字符转义,防止 SQL 注入
  2. 如果登陆失败会 sleep 2s

High

渗透思路 

登录请求抓包比之前多了 user_token 参数

通过登陆失败后跟随 302 来到 /vulnerabilities/brute/index.php 页面后,发现页面代码里隐藏的 user_token 参数,每次请求该页面后都会获得新的 user_token,由此可知,每次请求登录提交用户名和密码时,都要带上页面提供的 user_token,且有效性只有一次,防止重放爆破。所以我们要想爆破就必须先获得 user_token 值再提交。 

burp 自动获取 token 爆破弱口令

发现新增的隐藏参数 user_token 

 

添加 session macro 宏自动获得并替换 user_token 

我们可以借助burpsuit macro 宏功能来完成发送爆破请求之前请求 index 页面获得 user_token 值 

选择 Project options 模块下的 Sessions 标签页按照下图中的步骤提示操作即可: 

填写 Rule Decription 方便了解区分该规则用途

点击 add 按钮打开 macro editor,随后会自动弹出 macro recorder,选择需要从中获得消息的流量记录进行编辑

选择记录后点击 OK 返回 macro editor 界面,选择要编辑的记录点击 Configure item

添加响应报文里的参数获取位置

填写 Parameter name,必须与实际获取参数名称相同,然后选择参数值获取位置,起始匹配正则会在你选择后自动生成,点击 OK

界面回到 Configure Macro Item,出现刚才新增的参数获取位置,点击 OK

 点击 OK

点击下图 2 的位置,仅更新请求中的指定参数,这里我们指定仅更新user_token 参数,这里意味着当 macro 请求index.php 页面获得 user_token参数后,会把我们发送的请求中的 user_token 参数值给替换掉,防止出现  CSRFtoken is incorrect 报错。点击 OK 返回。

选择 Scope 标签限制 macro 规则起效范围

限制 macro 功能起效范围

我们只需要针对目标 host 发送请求,在 Repeater 和 Intruder 模块力起效即可

repeater 测试验证 macro 成功获得并更新 user_token 参数

这是我们在 repeater 里发送 high 的登录请求报文发现,每次发出请求后,报文里的 user_token 参数就会自动更新,而响应页面的 CSRF token is incorrect也没有了,报错信息重新变为之前的用户名或密码不正确。

 解决了 high 新出现的 CSRF Token 问题,剩下的就与之前爆破步骤差不多了

Intruder 开启跟踪重定向

 由于可能出现 302,所以为方便查看最终结果,我们跟随重定向,调整 Options 标签页中的Redirections 为 Always。

开始攻击,一切顺利,结果如下:

源码对比

Medium 源码

High 源码

对比小结

通过对比可知,medium 和 high 两个的等级代码区别有四点:

  1. 开始处会校验 user_token 是否与 session_token 一致,防止重放爆破攻击
  2. 在限制用户输入的步骤中新增 stripslashes 函数删除用户名和密码里的反斜杠
  3. 如果登陆失败会 sleep 0-3s
  4. 结尾重新生成 session_token 作为下一次校验 user_token 的依据

Impossible

5次登录密码错误失败后页面出现以下提示

源码对比

High 源码

Impossible 源码

 

对比小结

通过之前的流量对比和代码分析,我们大致可以将 Impossible 源码对比结果总结如下:

  1. 先获得 POST 参数
  2. 通过预编译方式执行 SQL 语句,有效防止 SQL 注入
  3. 登陆失败次数过多锁定账户有效防止爆破
  4. 有限锁定时间避免影响合法用户的长期有效登录
  5. 锁定账户再次正常登陆会收到锁定提示,有效提醒用户及时修改密码,如下图所示

防御

添加验证码机制

加入图片(验证码动态生成且满足随机性)或者短信验证码(验证码具备超时时限一般为1分钟,且在该时限内错误次数超过3次则进行锁定1分钟后方能重新获取验证码,超时后验证码自动失效)!验证码必须在服务器端进行校验,客户端的一切校验都是不安全的!

添加 token

登录请求参数添加 token 字段

限制登录失败次数

密码错误限制在 3 次内

密码加密传输

对密码进行加密传输,为攻击者爆破制造难度

防止 SQL 注入

对用户输入进行特殊字符转义,关键词删改替换,预编译,防止 SQL 注入

强密码

设置强密码

绕过

SQL 注入绕过

实现万能密码效果

验证码可爆破

验证码可爆破,即验证码过于简单,例如验证码中字符数量过少,比如只有四位组成,且只包含 0-9 的数字还没有干扰点

验证码复用

验证码复用,即登录失败后验证码不刷新,仍然可以使用上一次登录时的验证码且有效,存在爆破风险漏洞

验证码绕过

  1. 删除验证码字段
  2. 修改验证码验证返回状态值
  3. 万能测试验证码
  4. 前端 js 验证代码删除
  5. 响应返回验证码

token 绕过

  1. token 为空绕过
  2. token 删除绕过
  3. token 重放绕过
  4. xss 表单劫持 token 绕过
  5. xss url 参数劫持 token 绕过
  6.  url 跳转漏洞绕过
### DVWA Brute Force 暴力破解 实验教程 #### Low 和 Medium 级别暴力破解 对于低级别和中级别的暴力破解,由于这些级别的防护措施较为简单,可以利用工具如Burp Suite来进行自动化攻击。具体来说: - **Low Level**: 这一等级几乎没有任何安全机制来阻止暴力破解尝试。用户名和密码通过HTTP GET请求发送,并且没有验证码或登录失败后的延迟处理。因此,使用Burp Intruder模块并加载常用弱口令列表可以直接发起大量猜测尝试[^4]。 ```bash # 使用 Burp Suite 的步骤如下: 1. 启动浏览器代理设置指向本地监听端口8080; 2. 访问DVWA网站并通过拦截功能捕获登录表单提交的数据包; 3. 将数据包转发至Intruder面板配置参数位置(通常为username和password字段); 4. 加载预定义的字典文件作为payload选项; 5. 开始攻击过程观察返回结果寻找有效凭证组合。 ``` - **Medium Level**: 中级增加了简单的防御手段——每当验证不成功时会触发`sleep(2)`函数使响应时间延长两秒钟。尽管如此,这并不会显著影响实际操作中的成功率;只需耐心等待每次迭代完成即可继续测试其他候选值[^2]。 #### High 和 Impossible 级别暴力破解 随着保护强度增加到了高级阶段,则引入了更复杂的逻辑用于检测异常行为模式以及采取相应对策加以遏制潜在威胁活动的发生频率及其效率表现形式上有所区别于之前所描述过的简易型方案设计思路框架结构特点方面存在差异之处在于: - **High Level**: 此处不仅限定了最大重试次数还加入了基于IP地址白名单管理策略从而进一步提升了整体安全性水平线以上述两点为核心要素构建而成的一套综合性的访问控制体系架构模型实例化应用案例研究对象之一即为此版本下的用户认证流程环节部分实现细节说明文档记录内容摘要概述。 - **Impossible Level**: 几乎无法被传统意义上的穷举法攻破。该层面上除了继承自高阶版的安全特性外更是额外集成了诸如图形验证码之类的交互式组件用来增强人工干预成分比例进而达到更好的防伪效果目的所在[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值