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

点击星标,即时接收最新推文

cc2263c2621e9e8b0f7da7ea6ae955b2.png

本文选自《web安全攻防渗透测试实战指南(第2版)》

点击图片五折购书

f6bb33a7e7ae6af4d5d25c0ce0af5244.gif

暴力破解漏洞简介

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

ed6fa927a521d438dfd449ebc2c0988f.gif

 暴力破解漏洞攻击

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

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

 c9ea8e17573e0cb3289a1f2fc37952ee.png

图4-1  

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

69c32870875fe87f5a74c2a3f62d53a8.png

图4-2  

79c6c880275971dd16de43ce5ef54a89.gif

暴力破解漏洞代码分析

服务器端处理用户登录的代码如下所示。程序获取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,然后对多个账户进行破解。

a41a09920d6bafebbab7374a507bceab.gif

验证码识别

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

1.OCR

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

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

67c550f1de3b6b0e32199dafd3a89e2e.png

图4-3  

2.机器学习

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

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

b22dd441c652785f37a7e771910b0157.png

图4-4  

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

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

61c22d347624277109098135f877b289.png

图4-5  

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

0647d95eccb779691443bbefbf6bf832.gif

暴力破解漏洞修复建议

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

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

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

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

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

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

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

1d79fb686adc1964799c38d2069d713f.png

图4-6  

9d5a24f25a688ac22bfe4fe840189514.gif

MS08067安全实验室视频号已上线

欢迎各位同学关注转发~

—  实验室旗下直播培训课程  —

22f5bdd29af599f60954df2354a6d9a1.png

2a8c8adb4c23f6a5eed27ec88db95a75.jpeg

96745507172827d9c731e5de708ced36.jpegb9d732a329dc7be61c9bb18b7fbbc8da.png

9a495723171d0759ca0d5f09784c8de8.jpeg

a0486341d8ffa817e8d9fb95a738b135.jpeg

90e92a6135aa8c3b0d0e9de07d4ba386.jpeg

25a50482e7c55e64322b59de3301a9cb.jpeg

3e3eaea6476c47953d6e543b1eb76606.jpeg


和20000+位同学加入MS08067一起学习

31177ef6717a81ea49c12b5dc4d1585a.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/101853.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

日200亿次调用,喜马拉雅网关的架构设计

说在前面 在40岁老架构师 尼恩的读者社区(50)中&#xff0c;很多小伙伴拿到一线互联网企业如阿里、网易、有赞、希音、百度、滴滴的面试资格。 最近&#xff0c;尼恩指导一个小伙伴简历&#xff0c;写了一个《API网关项目》&#xff0c;此项目帮这个小伙拿到 字节/阿里/微博/…

Matlab 如何把频谱图的纵坐标设置为分贝刻度

Matlab 如何把频谱图的纵坐标设置为分贝刻度 Matlab代码如下&#xff1a; % 如何把频谱图的纵坐标设置为分贝刻度 % % pr2_2_6 clc; clear; close all;load pr2_2_6_sndata1.mat % 读入数据 X fft(y); % FFT n2 1:L/21; % 计算正频率…

【AI理论学习】语言模型:从Word Embedding到ELMo

语言模型&#xff1a;从Word Embedding到ELMo ELMo原理Bi-LM总结参考资料 本文主要介绍一种建立在LSTM基础上的ELMo预训练模型。2013年的Word2Vec及2014年的GloVe的工作中&#xff0c;每个词对应一个vector&#xff0c;对于多义词无能为力。ELMo的工作对于此&#xff0c;提出了…

Linux入门之多线程|线程的同步|生产消费模型

文章目录 一、多线程的同步 1.概念 2.条件变量 2.1条件变量概念 2.2条件变量接口 1.条件变量初始化 2.等待条件满足 3.唤醒等待 3.销毁条件变量 2.3条件变量demo 二、生产消费模型 1.生产消费模型 2.基于BlockQueue的生产者消费者模型 3.基于C用条件变量和互斥锁实…

c语言数组的用法

c语言数组的用法如下&#xff1a; 一维数组的定义方式 在C语言中使用数组必须先进行定义。一维数组的定义方式为&#xff1a; 类型说明符 数组名 [常量表达式]; 其中&#xff0c;类型说明符是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符。方括号中的常量表…

9月7日扒面经

redis缓存用在哪里&#xff0c;用本地缓存行不行? 数据库查询缓存&#xff0c;减小数据源压力&#xff0c;提高响应速度 页面缓存&#xff1a;将页面的渲染结果缓存在Redis中&#xff0c;以减少页面生成的时间和服务器负载。 频繁计算结果缓存&#xff1a;将频繁计算的结果…

stable diffusion实践操作-随机种子seed

系列文章目录 stable diffusion实践操作 文章目录 系列文章目录前言一、seed是什么&#xff1f;二、使用步骤1.多批次随机生成多张图片2.提取图片seed3. 根据seed 再次培养4 seed使用4.1 复原别人图4.1 轻微修改4.2 固定某个人物-修改背景 三、差异随机种子1. webUI位置2. 什么…

maven打包时显示无效jdk版本

1、配置当前项目所需的Jdk版本 2、与当前项目指定的jdk版本相同 3、与当前项目指定的jdk版本相同 4、与当前项目指定的jdk版本相同 5、指定主项目启动时的vm配置与当前项目所需版本相同

Linux系统离线安装RabbitMQ

安装rabbitmq 1、下载安装包 首先进入官网进行安装包的下载&#xff0c;在下载时一定要注意erlong版本和rabbitmq-server版本匹配 rabbitmq版本对应关系&#xff1a;传送门 Erlong下载地址:传送门 rabbitmq-server下载地址:传送门 socat 不同版本 centos7:传送门 cent…

nas汇编程序的调试排错方法

nas汇编程序的调试排错方法&#xff1a; 1、查找是哪一步错了 2、查看对应的*.lst文件&#xff0c;本例中是"asmhead.lst" 3、根据*.lst文件的[ERROR #002]提示查看源码&#xff0c;改错。 4、重新运行编译&#xff0c;OK 1、查找是哪一步错了&#xff1a; nask.ex…

QT之形态学操作

形态学操作包含以下操作&#xff1a; 腐蚀 (Erosion)膨胀 (Dilation)开运算 (Opening)闭运算 (Closing)形态梯度 (Morphological Gradient)顶帽 (Top Hat)黑帽(Black Hat) 其中腐蚀和膨胀操作是最基本的操作&#xff0c;其他操作由这两个操作变换而来。 腐蚀 用一个结构元素…

Spring-TX 事务

目录 一、事务的种类 二、Spring事务管理器 三、事务注解使用 四、事务注解属性 一、事务的种类 1.编程式事务 所谓编程式事务就是用代码手写事务&#xff0c;包含了事务的开始&#xff0c;具体事务&#xff0c;事务的提交和事务的回滚。在这期间就会产生一些冗余问题&am…