【网安案例学习】凭证填充Credential Stuffing
### 凭证填充的深入讨论
凭证填充(Credential Stuffing)是一种网络攻击技术,攻击者利用从数据泄露中获取的大量用户名和密码组合,尝试在其他网站和服务上进行自动化登录。这种攻击依赖于用户在多个网站上重复使用相同密码的习惯。通常,攻击者使用自动化工具进行大规模的尝试,以寻找那些重复使用泄露凭证的账户。
### 凭证填充的黑客视角故事
#### 第一幕:初识数据宝藏
我是艾利克斯,一名技术娴熟、对网络漏洞充满好奇的黑客。我总是被那些未被探索的数字世界所吸引。某天晚上,我在黑客论坛上发现了一份新鲜的“数据包”——一份来自最近数据泄露事件的用户名和密码组合。对许多人来说,这只是无意义的数字,但对我而言,这是通往网络世界的一把钥匙。
#### 第二幕:工具的准备
凭证填充听起来简单,但要成功却需要精细的准备。我打开电脑,启动了我最喜欢的自动化工具——Sentry MBA。这是一款强大的工具,能够让我在短时间内尝试成千上万个登录请求。我将泄露的凭证导入工具中,并将目标定位在一个大型的在线零售网站。
#### 第三幕:发动攻击
在设置好参数后,我按下了“启动”按钮,工具开始以惊人的速度进行尝试。我能看到屏幕上快速闪过的请求和回应,成功与失败在不断交替。
“成功!成功!”工具不断提示着,我的心中涌起一阵小小的得意。对于那些成功的登录,我获得的不仅仅是一个账户,而是一段进入用户数字生活的通道。
#### 第四幕:意外的惊喜
就在我打算结束这次尝试时,我注意到一个账户中竟然存有大量的礼品卡余额。这个意外的发现让我意识到,凭证填充不仅仅是进入账户那么简单,它还可能带来意想不到的“收益”。
#### 第五幕:反思与收手
不过,这次尝试也让我意识到风险。我知道,随着凭证填充攻击的增多,网站的安全措施也在不断升级。多因素认证(MFA)的普及和异常检测技术的进步,让这种攻击变得越来越困难。
我关掉电脑,心中暗自决定,是时候重新思考自己的方向了。虽然技术的挑战让我着迷,但我不想永远处于法律的边缘。我开始考虑如何利用自己的技术去帮助别人,而不是伤害他们。
关于凭证填充,以下是一些关键知识点:
1. **定义**:凭证填充是一种网络攻击手段,攻击者利用从数据泄露中获取的用户名和密码组合,尝试在其他网站和服务上进行自动化登录。
2. **工作原理**:
- 攻击者获取大规模的泄露凭证列表。
- 使用自动化工具(如Sentry MBA、Snipr等)在目标网站上尝试登录。
- 由于许多用户在多个网站上使用相同的用户名和密码组合,攻击者可以成功访问一部分账户。
3. **前提条件**:
- 需要有大规模的泄露凭证。
- 用户在多个平台使用相同或相似的密码。
4. **工具和技术**:
- 自动化脚本和工具用于批量尝试登录。
- 使用代理IP隐藏攻击源,避免被封锁。
- 模拟人类行为以绕过安全检测。
5. **目标**:
- 电子邮箱、社交媒体账户、在线零售账户等。
- 任何可能存储有价值信息或资金的平台。
6. **防御措施**:
- 实施多因素认证(MFA)以增加额外的安全层。
- 监控异常登录活动,检测并阻止可疑的登录尝试。
- 使用强密码,避免在多个网站重复使用相同密码。
- 定期更改密码,并使用密码管理器来生成和存储复杂密码。
- 网站可以使用CAPTCHA或其他验证手段来防止自动化攻击。
7. **影响**:
- 可能导致财务损失、身份盗窃或敏感信息泄露。
- 对企业和用户的信任关系造成负面影响。
8. **法律和道德**:
- 凭证填充攻击是非法的,违反了计算机安全和数据保护法律。
- 用户和企业有责任保护个人信息和账户安全。
凭证填充攻击的代码实现通常涉及使用脚本或工具来自动化尝试登录。我可以解释一个基本的自动化登录尝试脚本是如何工作的,这样你可以理解其原理和如何防御。
### 自动化登录尝试的基本流程
以下是一个使用Python和`requests`库的伪代码示例,展示如何自动化登录尝试。请注意,这个例子仅用于教育目的,以帮助理解攻击机制和如何防御。
```python
import requests
# 示例用户名和密码列表
credentials = [
('user1@example.com', 'password123'),
('user2@example.com', 'password456'),
# 更多凭证...
]
# 目标网站的登录URL
login_url = 'https://example.com/login'
# 遍历凭证列表
for username, password in credentials:
# 创建登录请求的负载
payload = {
'username': username,
'password': password
}
# 发起POST请求进行登录尝试
response = requests.post(login_url, data=payload)
# 检查响应以确定登录是否成功
if 'Welcome' in response.text:
print(f'Successful login: {username}')
else:
print(f'Failed login: {username}')
```
### 代码逐行解释
1. **导入请求库**:
```python
import requests
```
- `requests`是一个用于发送HTTP请求的Python库。
2. **定义凭证列表**:
```python
credentials = [
('user1@example.com', 'password123'),
('user2@example.com', 'password456'),
# 更多凭证...
]
```
- 这是一个简单的用户名和密码组合列表,通常从数据泄露中获取。
3. **设定目标URL**:
```python
login_url = 'https://example.com/login'
```
- 这是目标网站的登录页面URL。
4. **遍历凭证列表**:
```python
for username, password in credentials:
```
- 遍历每个用户名和密码组合进行尝试。
5. **创建请求负载**:
```python
payload = {
'username': username,
'password': password
}
```
- 这是一组将被发送到服务器的登录数据,通常根据目标网站的表单字段名称构建。
6. **发送POST请求**:
```python
response = requests.post(login_url, data=payload)
```
- 使用POST请求将负载发送到目标网站,模拟用户的登录尝试。
7. **检查登录结果**:
```python
if 'Welcome' in response.text:
print(f'Successful login: {username}')
else:
print(f'Failed login: {username}')
```
- 检查服务器响应中的某些文本(如“Welcome”)以判断登录是否成功。这部分通常需要根据具体网站的响应特征进行调整。
### 防御措施
了解攻击原理后,以下是一些防御措施:
- **实施多因素认证(MFA)**:增加额外的安全层。
- **限制登录尝试**:通过锁定账户或增加延迟来防止暴力尝试。
- **使用CAPTCHA**:防止自动化脚本的执行。
- **监控和检测**:识别和响应异常的登录行为。
### 凭证填充复习题
#### 情景化选择题
1. **某在线零售网站发现大量异常登录尝试,这些尝试使用的是已知泄露的凭证组合。以下哪种措施最能有效减少凭证填充攻击的成功率?**
A) 增加网站的广告投放
B) 实施多因素认证(MFA)
C) 提供更多的支付方式
D) 增加用户界面的美观度
**解答**: B) 实施多因素认证(MFA)。多因素认证增加了额外的安全层,即使攻击者拥有正确的用户名和密码,也无法成功登录。
#### 情景化判断题
2. **某公司决定定期更改所有员工的密码,并强制使用密码管理器来生成复杂密码。此措施是否能有效防范凭证填充攻击?**
- 是
- 否
**解答**: 是。定期更改密码和使用复杂、不重复的密码可以有效减少凭证填充攻击的成功率,因为即使泄露的凭证被使用,也可能已经过期或无效。
#### 情景化分析题
3. **假设你是一个网络安全顾问,你的客户公司担心凭证填充攻击可能导致客户账户被盗用。你会建议实施哪些具体的防御措施,并解释每个措施的作用?**
**解答**:
- 实施多因素认证(MFA):增加额外的验证因素,增强账户安全。
- 限制登录尝试:通过锁定账户或增加延迟,防止攻击者进行暴力尝试。
- 使用CAPTCHA:防止自动化脚本的执行,有效识别人工登录。
- 密码强度要求:强制用户使用复杂且唯一的密码,减少凭证重复使用的风险。
- 监控和检测:部署异常检测系统,快速识别和响应异常的登录活动。
#### 代码分析题
4. **以下是一个简化的自动化登录尝试脚本。指出代码中可能存在的漏洞或不足,并提供改进建议。**
```python
import requests
credentials = [
('user@example.com', 'password123'),
('user2@example.com', 'password456'),
]
login_url = 'https://example.com/login'
for username, password in credentials:
payload = {
'username': username,
'password': password
}
response = requests.post(login_url, data=payload)
if 'Welcome' in response.text:
print(f'Successful login: {username}')
```
**解答**:
- 漏洞或不足:
- 没有处理异常(如网络错误、请求超时等)。
- 没有使用代理IP,容易被目标网站封锁。
- 缺乏对响应状态码的检查,仅依赖于响应文本。
- 改进建议:
- 添加异常处理机制以提高脚本的稳健性。
- 使用代理池来绕过IP限制。
- 检查HTTP响应状态码,确保请求成功发送。
#### 案例处理论述题
5. **某金融机构的客户账户遭遇大规模凭证填充攻击,导致多名客户资金被盗。作为该机构的安全负责人,你应如何处理这一突发事件,并在事后采取哪些措施来防止类似事件再次发生?**
**解答**:
- **处理突发事件**:
- 立即冻结受影响的账户,防止进一步的资金损失。
- 通知受影响客户,并建议他们更改密码。
- 配合执法机构进行调查,追踪攻击来源。
- **事后防范措施**:
- 实施多因素认证(MFA),提高账户的安全性。
- 增加对异常登录活动的监测和响应能力。
- 提供客户安全教育,强调使用强密码的重要性。
- 定期进行安全审计和渗透测试,识别潜在漏洞。
- 更新和加强密码策略,强制使用复杂和唯一的密码。
【注】
HTTP响应状态码是服务器在接收到请求后返回给客户端的一组数字,用于表示请求的处理结果。这些状态码帮助客户端理解请求的结果,并决定下一步的动作。状态码由三位数字组成,分为以下几类:
1. **1xx(信息性状态码)**:
- **100 Continue**:初步请求已接收,客户端可继续发送请求的剩余部分。
2. **2xx(成功状态码)**:
- **200 OK**:请求成功,服务器已返回请求的数据。
- **201 Created**:请求成功,服务器已创建新的资源。
- **204 No Content**:请求成功但无内容返回。
3. **3xx(重定向状态码)**:
- **301 Moved Permanently**:资源已永久移动到新位置。
- **302 Found**:资源临时移动到新位置。
- **304 Not Modified**:资源未修改,可使用缓存版本。
4. **4xx(客户端错误状态码)**:
- **400 Bad Request**:请求无效,服务器无法理解。
- **401 Unauthorized**:请求未授权,需进行身份验证。
- **403 Forbidden**:服务器拒绝请求,无权限访问。
- **404 Not Found**:请求的资源未找到。
5. **5xx(服务器错误状态码)**:
- **500 Internal Server Error**:服务器内部错误,无法完成请求。
- **502 Bad Gateway**:作为网关或代理的服务器接收到无效响应。
- **503 Service Unavailable**:服务器当前无法处理请求,可能是由于过载或维护。
这些状态码帮助开发人员和用户了解HTTP请求的结果,并根据需要进行调整或排错。
相关文章:
【网安案例学习】凭证填充Credential Stuffing
### 凭证填充的深入讨论 凭证填充(Credential Stuffing)是一种网络攻击技术,攻击者利用从数据泄露中获取的大量用户名和密码组合,尝试在其他网站和服务上进行自动化登录。这种攻击依赖于用户在多个网站上重复使用相同密码的习惯。…...
网站建设公司怎么选?网站制作公司怎么选才不会出错?
寻找适合靠谱的网站设计公司,不要盲目选广告推最多的几家,毕竟要实现自身品牌营销,还是需要多方面考量。以下几个方面可以作为选择的参考: 1. 专业能力如何? 一个公司的专业能力,决定了最后网站设计的成果…...
19. 架构重要需求
文章目录 第19章 架构重要需求19.1 从需求文档中收集架构重要需求(ASRs)不要抱太大希望从需求文档中找出架构重要需求 19.2 通过访谈利益相关者收集架构重要需求19.3 通过理解业务目标收集架构重要需求19.4 在效用树中捕获架构重要需求19.5 变化总会发生…...
iOS 再谈KVC、 KVO
故事背景:大厂面试,又问道了基本的kvc kvo的原理和使用,由于转了前端,除了个setter和getter,我全忘记了,其实还是没有理解记忆,下面再看一下kvc 和kvo ,总结一个让人通过理解而无法忘记的方法&a…...
java、excel表格合并、指定单元格查找、合并文件夹
#创作灵感# 公司需求 记录工作内容 后端:JAVA、Solon、easyExcel、FastJson2 前端:vue2.js、js、HTML 模式1:合并文件夹 * 现有很多文件夹 想合并全部全部的文件夹的文件到一个文件夹内 * 每个部门发布的表格 合并全部的表格为方便操作 模…...
最基础版编译运行Java(纯小白)
流程图: ⚠ 需要先安装JDK (Java Development Kit) 1. 写文件 首先写好自己的“文件”,可以用Sublime Text等文本编辑器写,还可以直接新建文本文档写一个.txt文件。 以编写一个HelloWorld程序为例: public class HelloWorld{p…...
六西格玛项目助力,手术机器人零部件国产化稳中求胜——张驰咨询
项目背景 XR-1000型腔镜手术机器人是某头部手术机器人企业推出的高端手术设备,专注于微创手术领域,具有高度的精确性和稳定性。而XR-1000型机器人使用的部分核心零部件长期依赖进口,特别是高精度电机、关节执行机构和视觉系统等,…...
Python爬虫系列(一)
目录 一、urllib 1.1 初体验 1.2 使用urllib下载网页、图片、视频等 1.3 反爬介绍 1.4 请求对象定制 1.5 get请求的quote方法 1.6 多个参数转成ascii编码 1.7 post请求 1.8 综合案例演示 一、urllib 1.1 初体验 # urllib是python默认带的,无需额外下载 i…...
# vim那些事...... vim删除文件全部内容
vim那些事… vim删除文件全部内容 1、在 Vim 中删除整个文件的内容,可以使用以下命令: 1)打开 Vim,并编辑你想要清空的文件。 2)按 Esc 确保你不在插入模式,而在命令模式。 3)输入 gg 跳转到…...
Selinux及防火墙
一,selinux简介: SELinux(Security-Enhanced Linux)是一个Linux内核安全模块,旨在提供强制访问控制(MAC)机制,以增强系统的安全性。由美国国家安全局(NSA)开…...
业绩代码查询实战——php
一、一级代码显示职员 foreach($data_职员信息 as $key > $value){//$where_查询分类$where_查询通用;//$dat分类one $业绩提成->where($where_查询分类)->order("CreateDate desc")->select();if($value[haschildname]0 && $value[key] !"…...
内网穿透技术选型PPTP(点对点隧道协议)和 FRP(Fast Reverse Proxy)
PPTP(点对点隧道协议)和 FRP(Fast Reverse Proxy)是两种实现内网穿透的技术,但它们的工作原理、使用场景和特点有很大区别。以下是它们的详细比较: PPTP(Point-to-Point Tunneling Protocol&am…...
信号与噪声分析——第三节:随机过程的统计特征
随机过程的定义: 随机过程是一种数学模型,用来描述系统或现象在时间或者空间上随之变化的不确定性。 一个随机过程的数字特征 1.数学期望(统计平均值): 表示为 数学期望是随机过程在时间 t 上的平均值,通常…...
nginx(四):如何在 Nginx 中配置以保留真实 IP 地址
如何在 Nginx 中配置以保留真实 IP 地址 1、概述2、nginx配置示例2.1、配置说明2.2、客户端获取真实IP2.2.1、代码说明 3、插曲4、总结 大家好,我是欧阳方超,可以我的公众号“欧阳方超”,后续内容将在公众号首发。 1、概述 当使用nginx作为…...
docker对nginx.conf进行修改后页面无变化或页面报错
可能是因为没有重启nginx容器 可以执行 docker restart nginx 重启nginx试试 引入了其他的配置文件 本人安装的是docker默认的nginx,自带了一个default.conf的配置文件,并且在nginx.conf中还引入了这个文件,后面我还对nginx.conf添加了一个…...
SpringCloudGateway — 网关路由
Spring Cloud Gateway 是 Spring 提供的一个高效、灵活的 API 网关解决方案,基于 Spring 5、Spring Boot 2 和 Project Reactor,具有高并发和低延迟的特点。它用于在微服务架构中对外提供统一的入口,处理请求的路由、过滤、负载均衡等功能。 …...
docker pull 拉取镜像失败,使用Docker离线包
1、登录并注册Github,然后在Github中搜索并打开“wukongdaily/DockerTarBuilder” 项目,在该项目主页点击“Fork”。 然后点 “Create Fork”,将项目创建到自己的Github主页。 2、接着在自己创建过来的这个项目中点击“Actions” 3、然后…...
轻松理解操作系统 - 轻松了解 inode 是如何管理文件的
Linux 由于其开源、比较稳定等特点统治了服务端领域。也因此,学习Linux 系统相关知识在后端开发等岗位中变得越来越重要,甚至可以说是必不可少的。 因为它的广泛应用,所以在程序员的日常工作和面试中,它都是经常出现的。它的开源特…...
go中Println和Printf的区别
Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 go中Println和Printf的区别 package mainimport ( "fmt" )//TIP To run your code, right-click the c…...
C++现代教程七之模块
优点 编译时间减少:模块消除了重复解析和编译头文件的需要,从而显著减少了编译时间。特别是在大型项目中,这一点尤为重要。更好的封装性:模块允许更严格的封装,可以明确地控制哪些符号对外可见。这有助于减少命名冲突和…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
