当前位置: 首页 > news >正文

最新暴力破解漏洞技术详解

暴力破解漏洞简介

暴力破解漏洞的产生是由于服务器端没有做限制,导致攻击者可以通过暴力的手段破解所需信息,如用户名、密码、短信验证码等。暴力破解的关键在于字典的大小及字典是否具有针对性,如登录时,需要输入4位数字的短信验证码,那么暴力破解的范围就是0000~9999。

暴力破解漏洞攻击

暴力破解漏洞攻击的测试地址在本书第2章。

一般情况下,系统中都存在管理账号——admin。下面尝试破解admin的密码:首先,在用户名处输入账号admin,接着随便输入一个密码,使用Burp Suite抓包,在Intruder中选中密码,导入密码字典并开始爆破,如图4-1所示。

img

图4-1

可以看到,有一个数据包的Length值跟其他的都不一样,这个数据包中的Payload就是爆破成功的密码,如图4-2所示。img

图4-2

暴力破解漏洞代码分析

服务器端处理用户登录的代码如下所示。程序获取POST参数“username”和参数“password”,然后在数据库中查询输入的用户名和密码是否存在,如果存在,则登录成功。但是这里没有对登录失败的次数做限制,所以只要用户一直尝试登录,就可以进行暴力破解。

<?php$con=mysqli_connect("localhost","root","123456","test");// 检测连接if (mysqli_connect_errno()){echo "连接失败: " . mysqli_connect_error();}$username = $_POST['username'];$password = $_POST['password'];$result = mysqli_query($con,"select * from users where `username`='".addslashes($username)."' and `password`='".md5($password)."'");$row = mysqli_fetch_array($result);if ($row) {exit("login success");}else{exit("login failed");}?>

由于上述代码没对登录失败次数做限制,所以可以进行暴力破解。在现实场景中,会限制登录失败次数。例如,如果登录失败6次,账号就会被锁定,那么这时攻击者可以采用的攻击方式是使用同一个密码对多个账户进行破解,如将密码设置为123456,然后对多个账户进行破解。

验证码识别

在图像识别领域,很多厂家都提供了API接口用于批量识别(多数需要付费),常用的技术有OCR和机器学习。

1.OCR

OCR(Optical Character Recognition,光学字符识别),是指使用设备扫描图片上的字符,然后将字符转换为文本,例如识别身份证上的信息等。Python中有多个OCR识别的模块,例如pytesseract。但是OCR只能用于简单的验证码识别,对干扰多、扭曲度高的验证码识别效果不佳。

图4-3所示为使用最简单的语句识别验证码。img

图4-3

2.机器学习

使用机器学习进行图像识别是比较有效的方式,但是工作量大,需要标注大量样本进行训练,常用的深度学习工具有TensorFlow等。下面简单介绍使用TensorFlow进行验证码识别的过程。

第一步,如图4-4所示,使用Python随机生成10 000个图片训练集和1 000个图片测试集。

img

图4-4

第二步,使用TensorFlow训练数据,当准确率在90%以上时,保存训练模型。

第三步,重新生成100个图片,使用TensorFlow进行预测。如图4-5所示,可以看到有96个预测结果是正确的。img

图4-5

GitHub上有多个验证码识别的开源项目,例如ddddocr,该项目可以破解常见的验证码,读者可以自行尝试。

暴力破解漏洞修复建议

针对暴力破解漏洞的修复,笔者给出以下建议。

— 使用复杂的验证码,如滑动验证码等。

— 如果用户登录失败次数超过设置的阈值,则锁定账号。

— 如果某个IP地址登录失败次数超过设置的阈值,则锁定IP地址。这里存在的一个问题是,如果多个用户使用的是同一个IP地址,则会造成其他用户也不能登录。

— 使用多因素认证,例如“密码+短信验证码”,防止账号被暴力破解。

— 更复杂的技术是使用设备指纹:检测来自同一个设备的登录请求次数是否过多。

例如,WordPress的插件Limit Login Attempts就是通过设置允许的登录失败次数和锁定时间来防止暴力破解的,如图4-6所示。img

图4-6

相关文章:

  • 【技术分享】使用nginx完成动静分离➕集成SpringSession➕集成sentinel➕集成seata
  • STM32自学☞AD单通道
  • 基于C++的http通信记录,使用httplib,Windows环境,vscode,mingw
  • Quartz 任务调度框架源码阅读解析
  • 【K8s】初识PV和PVC
  • 【BUG 记录】MyBatis-Plus 处理枚举字段和 JSON 字段
  • 基于YOLOv8深度学习的复杂场景下船舶目标检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测
  • 云端技术驾驭DAY15——ClusterIP服务、Ingress服务、Dashboard插件、k8s角色的认证与授权
  • hive中常见参数优化总结
  • 【LeetCode-简单】27.移除元素 - 数组与双指针法
  • 五种查看Spring容器中bean的方法
  • 面向对象编程入门:掌握C++类的基础(2/3):深入理解C++中的类成员函数
  • 防御保护课程笔记
  • 【小白学机器学习5】偏差bias, 方差,var 误差error, MSE, RMSE,MAE, MAPE, WMAPE
  • 【Python笔记-设计模式】状态模式
  • [译]前端离线指南(上)
  • 2017届校招提前批面试回顾
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • golang中接口赋值与方法集
  • Javascript 原型链
  • js面向对象
  • Making An Indicator With Pure CSS
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Python - 闭包Closure
  • Redis 中的布隆过滤器
  • vue自定义指令实现v-tap插件
  • 订阅Forge Viewer所有的事件
  • 讲清楚之javascript作用域
  • 前端面试之CSS3新特性
  • 前端性能优化——回流与重绘
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 微信小程序--------语音识别(前端自己也能玩)
  • 用Visual Studio开发以太坊智能合约
  • 智能合约Solidity教程-事件和日志(一)
  • nb
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • # Apache SeaTunnel 究竟是什么?
  • #AngularJS#$sce.trustAsResourceUrl
  • #define
  • (+4)2.2UML建模图
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (二十三)Flask之高频面试点
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (三十五)大数据实战——Superset可视化平台搭建
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)程序员疫苗:代码注入
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET Core中Emit的使用