DVWA —— Brute Force 暴力破解

目录

漏洞原理

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 跳转漏洞绕过
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值