逻辑漏洞学习-暴力破解验证码漏洞

阅读须知

本文的知识内容,仅供网络安全从业人员学习参考,用于已获得合法授权的网站测试,请勿用于其它用途。请勿使用本文中的工具、技术及资料,对任何未经授权的网站、系统进行测试,否则,所造成的直接或间接后果,均由您自行承担。

测试场景

李老板联系你,他说公司已修复验证码复用漏洞,且管理员密码未泄露。但管理员手机号(18888888888)已泄露,有人利用此信息登录并更改了管理员密码。李老板提供了管理员账号(admin)和后台登录网站(xxx.com)。

测试思路

  1. 访问后台登录网站:首先访问后台登录的网站。
  2. 发现“忘记密码”选项:登录界面提供了“忘记密码”选项,可能为修改密码的突破点。
  3. 利用“忘记密码”选项:点击“忘记密码”选项,并填入管理员的手机号,以便获取短信校验码。
  4. 抓取修改密码请求:打开抓包软件,抓取提交修改密码的请求数据包。
  5. 暴力枚举短信校验码:由于短信校验码是四位数字,尝试从0000到9999进行枚举测试。
  6. 找到符合要求的验证码:通过枚举测试,最终找到了一个符合要求的验证码。这意味着他们成功通过了短信校验这一步。
  7. 替换抓取数据包的响应数据:查看该验证码发送请求后得到的响应,发现响应状态码为200,表示请求成功,复制该响应并替换到抓取请求的数据包的响应。
  8. 进入修改管理员密码界面:通过替换响应数据,攻击者成功进入了修改管理员密码的界面。
  9. 成功修改管理员密码:最后,攻击者成功修改了管理员密码,获得了对后台的完全访问权限。
    注意:本文中漏洞出现的情况仅代表教学漏洞,实际情况请注意甄别。

测试实操

抓包数据

打开 HTTP抓包测试工具,打开内置浏览器,在浏览器中访问李老板提供的后台网站,加载是一个登录界面:


根据李老板所说,管理员账号密码并没有泄露,所以这里应该是通过忘记密码修改了管理员的密码,点击忘记密码页面:
image.png
输入手机号码后点击获取短信校验码:
image.png
回到 HTTP抓包测试工具中开启拦截拦截开启.gif拦截之后注意不要放行该数据包),在浏览器中输入任意短信校验码后,点击提交认证信息:image.png
成功抓取到数据包:
image.png
这是一个 POST 的请求包,其中最后一行phone_number=18888888888&sms_verification_code=1234中的前部分为手机号码,后部分为验证码。因为不存在越权漏洞和验证码为空等,所以尝试暴力破解验证码,把数据包发送到 HTTP模糊测试工具中:
发送到HTTP模糊测试工具.gif
等待软件自动启动并且跳转到对应的界面。

参数填写

步骤 1- 设置请求参数

设置验证码的值(1234),并给它打上标记:
image.png

步骤 2-设置变体参数

1.重放模式
因为只需要测试验证码,所以选择重放模式为“单字典逐一爆破模式”:
image.png
2.变体赋值
选择赋值方式为数字自增长模式,设置从 0 到 9999,这样就可以测试出所有的四位数验证码,但是请注意第一个验证码应该是“0000”,所以请勾选补零。
image.png
设置完成后,点击小眼睛可以预览测试数据:
image.png
image.png

开始测试

点击“测试过程”页面,点击右上角“启动测试”,可以得到许多数据。
image.png
如果有正确的验证码登录返回的长度肯定会不一致,此处选择按长度进行排序:
长度排序.gif
发现数据中有一个长度为 335 的数据包,验证码为 4880:
image.png
点击该数据包,右侧查看响应包:
响应包.gif
image.png
复制暴力破解成功的响应包,回到HTTP抓包测试工具的请求拦截模块,点击放行按钮放行请求.gif,将一直拦截着的数据包放行,等待拦截到放行该包后的响应数据包,如下图所示:
image.png
将其替换为我们刚刚复制的破解成功的响应包,如下图所示:
image.png

解释:这里普遍的做法是使用刚刚得到的验证码(4880)进行登录,但是验证码只能使用一次,再次登录还是会提示验证码错误。
不过成功登录后的状态是存在的,所以只需要拿到成功登录的响应包进行替换,就能成功进入修改密码页面。

替换内容后,关闭拦截拦截关闭.gif,回到内置浏览器中可以得到修改密码的页面:
image.png
修改密码后提示成功修改密码:
image.png
返回首页进行重新登录:
image.png
输入用户名(admin)和修改后的密码以及验证码:
image.png
登录成功后,得到对应的 flag:
image.png
至此成功找到李老板所说的问题,该漏洞为验证码暴力破解,从而导致管理员密码被修改。

测试总结

测试漏洞:
验证码暴力破解漏洞指的是攻击者利用自动化工具,不断尝试各种可能的验证码组合,以尝试绕过验证码验证机制的安全措施。通常,验证码用于验证用户是否为人类而不是自动化程序或机器人。验证码通常是一种简单的图形或数字挑战,要求用户在登录或注册过程中正确输入。然而,四位数的验证码相对较短,可能存在被猜测和暴力破解的风险。

解决方案:

  1. 增加验证码复杂度: 提高验证码的复杂度,包括增加验证码长度、使用字母、数字和特殊字符的组合、随机化验证码内容等,增加破解难度。
  2. 限制尝试次数: 在验证过程中限制用户尝试输入验证码的次数和频率,超过一定次数或频率后暂时锁定账户或增加验证步骤,以防止暴力破解攻击。
  3. 实施账户锁定机制: 当用户连续多次输入错误验证码时,暂时锁定账户一段时间,防止攻击者继续尝试暴力破解。
  4. 添加人机验证: 在验证码之外添加人机验证机制,如图像识别、滑块验证、短信验证码等,增加破解难度。
  5. 定期更新验证码: 定期更新验证码算法和生成逻辑,防止攻击者建立有效的破解模型。

流程图:
image.png

注意:工具使用内容请以最新版本为主。

posted on 2024-05-10 15:19  Y_Main  阅读(1156)  评论(1)    收藏  举报

导航