Web 登录口生日定向字典暴力破解实训完整文档
一、实训概述一靶场场景背景靶场提供无防护登录页面已知固定用户名admin用户出生年份固定为 1995 年登录密码仅为6 位 / 8 位生日数字格式页面无验证码、无登录错误次数限制、无 IP 访问拦截可直接使用定向字典 Burp Suite 暴力破解获取正确密码。二核心考察知识点定向密码字典生成根据已知生日规则缩小密码范围区别于海量通用弱口令字典大幅提升爆破效率Burp Suite Intruder 爆破全套流程代理抓包、载荷标记、自定义字典导入、响应差异筛选登录接口安全缺陷原理无验证码、无错误锁定、无 IP 限流会直接导致弱格式密码被暴力破解Python 简易脚本自动化生成规则化密码字典。三实验环境靶场Web 登录页面HTTP POST 提交账号密码抓包工具Burp Suite Community/Professional脚本环境Python3内置 datetime 库无需额外安装第三方包浏览器Chrome/Firefox配置 Burp 代理二、整体解题五大阶段页面信息侦察推导密码生成规则Python 脚本批量生成 1995 年生日专属密码字典Burp 代理抓包将登录请求发送至 Intruder 爆破模块配置爆破载荷、导入自定义字典、设置结果匹配筛选规则启动爆破通过响应差异化筛选出正确密码三、分步详细实操教程阶段 1信息收集 推导密码规则访问靶场登录页页面仅存在用户名、密码输入框无验证码、滑块验证等防护组件固定已知条件用户名 admin出生年份 1995密码仅由生日数字构成锁定两类主流生日密码格式8 位标准格式YYYYMMDD完整年月日示例199508156 位简写格式YYMMDD年份后两位 月日示例950815密码范围约束仅生成 1995.01.01 ~ 1995.12.31 全部合法日期仅 730 条密码爆破量极小。阶段 2Python 脚本生成生日字典完整可运行脚本带注释python运行from datetime import date, timedelta # 定义日期区间1995全年 start_date date(1995, 1, 1) end_date date(1995, 12, 31) day_step timedelta(days1) # 创建并写入密码字典文件 with open(1995_birth_dict.txt, w, encodingutf-8) as f: current_day start_date # 循环遍历1995年每一天 while current_day end_date: # 写入8位 YYYYMMDD 格式 eight_pwd current_day.strftime(%Y%m%d) f.write(eight_pwd \n) # 写入6位 YYMMDD 格式 six_pwd current_day.strftime(%y%m%d) f.write(six_pwd \n) # 日期自增1天 current_day day_step # 统计总密码条数 total 365 * 2 print(f字典生成完成文件名称1995_birth_dict.txt) print(f总密码数量{total} 条)脚本使用说明将代码保存为create_dict.py终端执行python create_dict.py运行完成后同目录生成1995_birth_dict.txt包含全年所有 6/8 位生日密码。阶段 3Burp Suite 抓包并转发至爆破模块配置代理Burp Proxy 监听端口默认127.0.0.1:8080浏览器网络代理同步配置该地址提交登录请求浏览器登录页用户名填admin密码随意输入数字如 123456点击登录提交转发爆破请求Burp → Proxy → HTTP 历史找到本次登录 POST 请求右键选择Send to Intruder。阶段 4Intruder 爆破参数配置1. Positions载荷标记清除 Burp 自动生成的多余§标记点击Clear §在请求体中找到passwordxxxxxx选中等号后的测试密码点击Add §仅保留密码一处变量标记攻击模式保持默认Sniper狙击手模式单变量遍历字典适配本次场景。2. Payloads载荷 / 字典导入切换 Payloads 标签Payload 类型选择Simple list简单列表点击Load选中之前生成的1995_birth_dict.txt完成密码批量导入无需额外载荷处理规则保持默认即可。3. Settings结果筛选规则找到Grep - Match匹配模块用于自动区分登录成功 / 失败点击Add新增匹配规则填入登录失败固定提示词例如密码错误、登录失败作用爆破完成后所有命中该关键词的请求会被标亮快速过滤无效密码。补充区分成功密码的两种方式方式 1Grep 匹配失败关键词无标记的请求即为正确密码方式 2观察响应长度Length正确密码返回页面长度、内容与失败请求有明显差异。阶段 5启动爆破提取有效密码点击右上角Start attackBurp 自动遍历全部 730 条密码发起请求爆破结束后筛选请求列表过滤掉带有失败关键词标记的条目剩余唯一响应内容 / 长度特殊的请求其 Payload 值就是正确生日密码使用账号admin 该密码完成后台登录。四、实验原理与安全分析1. 定向字典爆破优势通用弱口令字典通常数万数十万条爆破耗时久本次基于已知出生年份限定日期范围仅 730 条密码爆破秒级完成命中率 100%是定向情报下高效爆破手段。2. 漏洞产生核心原因登录接口三层防护全部缺失无验证码无法拦截自动化批量请求无错误次数锁定连续输错密码不会封禁账号无 IP 访问限流同一 IP 可无限次发起登录请求。3. 生产环境防御优化方案增加验证机制图形验证码、短信 / 邮箱验证码、人机滑块验证错误次数限制连续 5 次密码错误锁定账号 10 分钟或封禁 IP强制密码复杂度必须包含大写字母 小写字母 数字 特殊符号禁止纯数字生日密码接口限流后端限制单 IP 每分钟最大请求次数日志审计记录异常高频登录行为后台告警。五、实操常见踩坑点代理配置错误浏览器代理端口与 Burp 监听端口不一致抓不到数据包载荷标记多余未清除用户名、其他参数的§标记导致爆破参数错乱字典编码问题脚本指定utf-8写入不要使用记事本另存为 GBK避免 Burp 读取乱码Grep 关键词不匹配页面提示文字存在空格、中英文差异会导致筛选失效建议直接对比响应长度判断年份 / 日期逻辑错误脚本起止日期写错会丢失部分密码必须严格限定 1995 全年。六、拓展思考若仅知道出生年份区间如 1990-2000如何修改 Python 脚本批量生成多年生日字典靶场增加验证码后有哪些绕过验证码实现自动化爆破的手段除生日字典外还有哪些常见定向弱口令规则手机号后 6 位、姓名拼音、身份证后 6 位等