DefaultCreds-cheat-sheet:从默认密码漏洞到自动化安全测试实战
1. 项目概述为什么默认密码是安全领域的“定时炸弹”干了这么多年安全测试和渗透评估我见过太多因为“默认密码”被轻松拿下的案例。从企业核心交换机到家庭智能摄像头从云服务器管理后台到工业控制设备一个没改的默认密码往往就是整个防御体系最脆弱的那个点。很多管理员总觉得“先装上能用就行密码回头再改”结果这个“回头”可能就再也没有回头直到被攻击者光顾。今天要聊的这个工具——DefaultCreds-cheat-sheet就是专门用来对付这类问题的“神器”。它不是什么复杂的漏洞利用框架而是一个庞大的、持续更新的默认凭证数据库。简单来说它帮你回答一个关键问题“这台设备/这个服务出厂时默认的用户名和密码是什么”这个项目本质上是一个社区驱动的知识库收录了成千上万种硬件设备、软件应用、操作系统和云服务的默认登录凭证。对于安全研究人员、渗透测试工程师、甚至是负责资产清查的IT管理员来说它都是一个效率倍增器。想象一下在对一个大型网络进行授权安全评估时面对上百台不同品牌、不同型号的设备手动去查每个设备的说明书找默认密码那效率太低了。有了这个清单你可以通过自动化脚本快速尝试一批最有可能的凭证从而高效地识别出那些因疏于管理而存在的“低垂果实”。最近的热搜词也很有意思“kali默认密码”、“华为交换机默认密码”、“ubuntu 默认密码”等等这恰恰说明了默认密码问题的普遍性和关注度。无论是安全爱好者使用的渗透测试系统还是企业核心的网络设备亦或是常见的服务器操作系统大家第一时间都在寻找那个“万能钥匙”。而DefaultCreds-cheat-sheet的目标就是成为最全的那本“钥匙串”。接下来我会带你彻底拆解这个项目不仅告诉你它怎么用更会分享在实际渗透测试和内部安全巡检中如何将它融入工作流以及背后那些容易踩坑的细节。2. 核心思路与方案选型从手动查看到自动化爆破2.1 为什么需要专门的默认凭证清单在深入工具之前我们先理清核心思路。发现默认密码漏洞听起来很简单不就是拿默认的用户名密码去登录试试吗但难点在于“默认凭证”的发现本身。第一是“全”全球设备厂商浩如烟海每个厂商又有无数系列和型号其默认凭证可能各不相同甚至同一型号不同固件版本都可能不一样。靠个人记忆或零散的笔记根本不可能覆盖。第二是“准”网上很多流传的默认密码列表可能过时、错误或不完整用一个错误的列表去测试纯粹是浪费时间。第三是“快”在实战中时间就是金钱尤其是在授权测试的有限窗口期内需要快速扫描大量目标。因此一个理想的解决方案需要满足集中化、社区维护、结构化数据、易于集成。DefaultCreds-cheat-sheet正是这样的方案。它不是一个软件而是一个存储在GitHub上的文本文件现在是JSON等结构化格式任何人都可以提交Pull Request来新增或修正条目。这种众包模式保证了它的覆盖范围和时效性远比任何个人或商业公司维护的列表要强大。2.2 与其他方案的横向对比在安全测试中尝试默认凭证通常只是凭证攻击的一种。我们还有其他方法比如密码喷洒、字典爆破等。这里做个简单对比自定义字典爆破使用如rockyou.txt这类通用弱口令字典或根据目标信息公司名、产品名等生成定制字典。这种方法覆盖面广但针对性弱命中率依赖于字典质量噪音大容易触发账户锁定策略。密码喷洒针对大量用户名尝试一个或几个常用密码。这适用于有用户名列表的场景比如从邮箱格式生成但对默认密码这种“用户名-密码对”的特定组合效果不佳。专门默认凭证工具如DefaultCreds-cheat-sheet或商业工具内置的列表。优势是精准打击。它的每一条记录都对应一个具体的产品型号和默认凭证对尝试次数少命中率高且不易触发常规的暴力破解防护因为尝试的是“合法”的出厂凭证。所以在实战流程中合理的做法是分层进行先使用DefaultCreds-cheat-sheet进行快速、低噪音的默认凭证扫描识别出最明显的管理疏忽然后再针对未发现的目标进行更广泛的弱口令或密码喷洒测试。这样效率最高。注意使用任何凭证测试工具必须在获得明确书面授权的前提下进行。未经授权测试他人系统是违法行为。3. 工具获取与核心数据结构解析3.1 获取与初步查看DefaultCreds-cheat-sheet项目托管在GitHub上获取方式非常简单git clone https://github.com/netbiosX/Default-Credentials.git # 或者该项目可能有其他维护者分支一个更活跃的分支可能是 # git clone https://github.com/danielmiessler/SecLists.git # 然后在 SecLists/Passwords/Default-Credentials 目录下查找实际上由于社区活跃你可能需要搜索当前最活跃的仓库。核心文件通常是一个README.md和一个结构化的数据文件如default-creds.csv或default-credentials.json。我们以常见的CSV格式为例。用文本编辑器或Excel打开后你会看到类似下面的结构productusernamepasswordnotes3Com OfficeConnect SwitchadminadminAPC Smart-UPSapcapcAruba Instant Onadminserial numberASUS Routeradminadmin............每一行代表一个产品product及其对应的默认用户名username和密码password。notes字段可能包含一些附加信息如“密码在设备标签上”、“需要大写”等。这种结构清晰、机器可读的格式正是它能被轻松集成到自动化脚本中的关键。3.2 数据质量与使用心法直接使用这份列表前有几个实操心得必须分享版本与型号的陷阱列表中的“product”字段可能不够精确。比如“Huawei Router”可能涵盖数十种型号而不同型号的默认密码可能不同。最可靠的信息往往来自设备的官方文档或设备标签本身。这份列表是一个强大的线索而非绝对真理。在实际测试中如果列表中的凭证失败你应该立即去搜索该设备型号的官方数据手册或用户论坛。上下文的重要性默认密码的使用场景。admin/admin可能用于Web管理界面而root/12345可能用于SSH或串口控制台。在测试时必须针对正确的协议和服务。例如你不能用路由器的Web管理密码去尝试它的SSH服务。社区列表的“噪音”由于是众包可能存在重复条目、错误条目或过时条目厂商在新固件中修改了默认密码。因此在编写自动化脚本时最好能加入简单的去重和验证逻辑。一个常见的做法是优先尝试列表中该品牌下最通用或最多人提交的凭证对。合法性与道德边界再次强调这份列表的价值在于防御和授权测试。作为系统管理员你可以用它来扫描自己的网络发现并修复问题。作为渗透测试员它是在授权范围内工作的利器。绝对不要用于非法入侵。4. 实战集成将清单转化为自动化攻击力拥有清单只是第一步如何高效地用它来扫描目标才是关键。下面介绍几种典型的集成方式。4.1 与Nmap结合进行快速扫描Nmap不仅是端口扫描器其NSE脚本引擎功能强大。我们可以利用http-default-accounts.nse脚本它内置了一个默认凭证数据库并且允许你加载自定义的列表。首先你需要将DefaultCreds-cheat-sheet的列表转换成NSE脚本认可的格式。该脚本通常使用http-default-accounts-fingerprints.lua文件。你可以编写一个简单的Python脚本将CSV转换为对应的Lua表结构。不过更直接的方法是使用支持自定义列表的扫描方式。一个更通用的方法是使用Nmap的brute脚本配合自定义字典。但针对Web管理界面我们可以这样做为你的目标服务如HTTP/HTTPS准备一个自定义的凭证文件例如web-default-creds.txt格式为username:password每行一条。admin:admin admin:password admin:12345 admin:[空密码] root:root user:user你可以从大列表中筛选出Web类设备的常见凭证使用Nmap执行针对HTTP表单的暴力破解nmap -p 80,443,8080,8443 --script http-form-brute --script-args http-form-brute.path/login.php,http-form-brute.passfile./web-default-creds.txt target你需要根据目标登录页面的实际路径和表单字段调整script-args。这种方式灵活性高但配置稍复杂。4.2 集成到Hydra或Medusa中Hydra是经典的网络登录破解工具支持多种协议。我们可以为不同协议准备专门的默认凭证列表。例如针对SSH服务# 首先从大列表中提取出常见于OS/设备的SSH默认凭证保存为 ssh-defaults.txt # 格式username password root admin root 123456 root password ubuntu ubuntu # 对应热搜词“ubuntu 默认密码” ... # 使用Hydra进行快速尝试 hydra -C ssh-defaults.txt ssh://target_ip-C参数告诉Hydra使用“login:pass”格式的文件每行一对凭证进行尝试。这种方式速度极快因为尝试的都是高概率组合。针对HTTP POST表单如路由器管理页面hydra -L ./common_usernames.txt -P ./router_default_passwords.txt target_ip http-post-form /login.cgi:user^USER^pwd^PASS^:Fincorrect这里需要将默认密码列表整理成-P指定的密码文件再结合常见的用户名列表-L进行组合尝试。http-post-form参数需要你抓取实际的登录请求来确定。4.3 使用专属工具默认扫描器Default Scanner社区也有一些工具专门围绕默认凭证清单构建。例如default-http-login-hunter或brutespray等。但最直接的方式是自己写一个简单的Python脚本这提供了最大的灵活性。下面是一个概念性的示例展示如何利用requests库和CSV列表对HTTP服务进行扫描import csv import requests from requests.exceptions import RequestException def try_default_web_login(target_url, login_url, username_field, password_field, success_indicator): 尝试使用默认凭证列表登录Web界面。 target_url: 基础URL如 http://192.168.1.1 login_url: 登录表单提交的路径如 /login.cgi username_field: 用户名表单字段名 password_field: 密码表单字段名 success_indicator: 登录成功后响应中会出现的唯一字符串如“Logout”或“Status” creds_file default-creds-web.csv found False with open(creds_file, r, encodingutf-8) as f: reader csv.DictReader(f) for row in reader: username row[username] password row[password] data { username_field: username, password_field: password } try: session requests.Session() # 有些设备需要先GET登录页面获取Cookie或Token # session.get(target_url) resp session.post(f{target_url}{login_url}, datadata, timeout5) if success_indicator in resp.text: print(f[SUCCESS] Target: {target_url} | Username: {username} | Password: {password}) found True break # 找到后停止或记录后继续 else: print(f[FAILURE] {username}:{password}) except RequestException as e: print(f[ERROR] Trying {username}:{password} - {e}) continue if not found: print(f[INFO] No default credentials found for {target_url}) # 示例用法 if __name__ __main__: # 这些参数需要通过手动访问或猜测获得 try_default_web_login( target_urlhttp://192.168.1.1, login_url/cgi-bin/luci, username_fieldusername, password_fieldpassword, success_indicator系统状态 # 登录后页面出现的特征文字 )这个脚本的核心是灵活性。你可以轻松修改它来适应不同的登录表单结构、不同的认证方式如Basic Auth、JSON API并集成多线程以加速扫描。关键在于如何确定success_indicator这通常需要手动分析一次成功登录后的响应内容。5. 针对热搜词场景的专项利用让我们结合最新的网络热词看看如何具体应用。5.1 场景内网华为交换机安全巡检热搜词“华为交换机默认密码”非常典型。很多企业网络中存在老旧的华为交换机密码可能从未更改。信息收集使用nmap -sV -O 192.168.1.0/24扫描网络识别开放了23(Telnet)、22(SSH)、80(HTTP)端口的华为设备通过banner或MAC地址前缀判断。清单查询在DefaultCreds-cheat-sheet中搜索“Huawei”、“H3C”华三与华为渊源深。可能会找到多条记录例如admin/Admin123(较新系列)admin/admin(老款)root/admin(某些型号CLI)huawei/huaweiadmin/[空密码]协议选择华为交换机管理通常涉及Web界面HTTP/HTTPS使用admin/xxx。CLI命令行通过Telnet或SSH用户名可能是admin或root。自动化尝试Web使用上面Python脚本或Hydra的http-form-brute模块。SSH/Telnet使用Hydrahydra -l admin -P huawei_passwords.txt telnet://ip或hydra -l root -P huawei_passwords.txt ssh://ip。其中huawei_passwords.txt是从清单中提取的密码字典。注意事项频繁的登录失败可能导致账户被临时锁定虽然很多老旧设备没这个功能。建议控制速率并在授权测试中优先尝试最有可能的1-3组凭证。5.2 场景云服务器或虚拟机默认配置检查热搜词“ubuntu 默认密码”、“kali默认密码”指向了操作系统层面。以Ubuntu为例现代Ubuntu Server安装时通常强制要求设置用户密码不存在全国统一的默认密码。但一些场景下仍存在“默认”概念云市场镜像AWS、Azure、GCP等云平台的Ubuntu镜像默认用户是ubuntu没有密码而是使用SSH密钥对登录。这是最重要的区别尝试密码爆破是无效的。但有些老旧或自定义镜像可能设定了弱密码。虚拟机模板企业内部虚拟化平台如VMware克隆的Ubuntu模板如果未做系统化Sysprep可能会保留模板中的密码。这个密码就需要从模板管理员那里获取不属于“出厂默认”。特定设备或软件在IoT设备或某些软件如Docker镜像中打包的Ubuntu系统可能会设置默认密码如ubuntu/ubuntu。实操建议对于云上Ubuntu重点检查是否错误地开启了密码登录/etc/ssh/sshd_config中PasswordAuthentication yes并使用了弱密码。对于内部虚拟机应在模板制作阶段就确保密码随机化或使用密钥。Kali Linux的情况类似默认用户是kali密码也是kali。但这仅适用于从官方ISO安装的实体机或虚拟机。在云环境或Docker中情况可能不同。使用DefaultCreds-cheat-sheet时要明确记录的应用场景。5.3 场景物联网设备与嵌入式系统DDNS-GO、各种智能家居设备、网络摄像头等是默认密码的重灾区。热搜词“ddnsgo默认用户名密码”就是一个例子。发现使用nmap或masscan扫描特定端口如80、81、443、8000等寻找Web服务。识别通过HTTP响应头、页面标题、图标、特定路径等指纹信息识别设备类型和型号。工具如whatweb、nmap http-title脚本很有用。查询与尝试用识别到的信息品牌、型号、可能的产品名去DefaultCreds-cheat-sheet中搜索。对于DDNS-GO可能直接搜索“ddns-go”就能找到。常见的组合是admin/admin。深入利用一旦通过默认密码进入管理界面评估风险就变得直观。你可以查看是否存在命令执行漏洞、配置文件是否明文存储敏感信息、能否升级固件并植入后门等。6. 防御视角如何利用清单加固自身系统作为防御方这份清单同样是无价之宝。你可以主动利用它来发现和修复自身网络中的问题。资产清点与分类首先你必须知道网络里有什么。使用网络扫描工具如nmap、nessus、rapid7建立资产清单记录每台设备的IP、开放端口、服务banner、可能的型号。创建内部检查列表从DefaultCreds-cheat-sheet中筛选出与你资产相关的所有条目形成一个内部的“高危默认密码检查表”。自动化合规扫描编写或使用脚本定期如每季度用这份检查表对你的设备管理接口SSH、Telnet、Web、API进行授权扫描。这可以集成到CI/CD管道或安全运维平台中。制定强制策略新设备上线流程强制要求任何新接入网络的设备必须在验收阶段更改所有默认凭证并登记到安全的密码管理库中。镜像与模板管理所有虚拟机模板、容器镜像、云镜像必须移除或随机化默认密码使用密钥或集中认证。供应商管理在采购合同中要求设备供应商提供已修改默认密码或首次登录强制改密的设备。监控与告警在SIEM或日志分析平台中设置规则来检测尝试使用默认凭证的登录行为。例如在防火墙或身份验证日志中出现对admin/admin的尝试登录应立即产生中高危告警。7. 常见问题、排查技巧与进阶思考7.1 实战中遇到的典型问题列表中的密码不对可能原因设备固件已升级默认密码已更改设备型号细分有误列表记录错误密码有大小写或特殊字符要求如Admin!#。排查首先核对设备确切型号和固件版本去厂商官网下载最新版用户手册查阅。检查设备物理标签有时密码印在上面如“APC Smart-UPS”的apc/apc。尝试密码的常见变体全大写、全小写、加后缀数字等。登录成功但无法进一步操作可能原因登录的可能是“只读”用户或低权限账户。有些设备有多个默认账户如admin全权和user只读。排查在清单的notes字段或厂商手册中查找是否有其他特权账户。尝试在登录后的界面寻找“升级权限”、“切换到高级模式”的入口。扫描速度太慢或被屏蔽可能原因网络延迟目标设备有登录失败延迟、账户锁定或IP封禁机制。优化使用多线程/协程并发尝试但务必控制并发数和请求间隔如每个目标每秒1-2次尝试。在授权测试中可以事先与客户确认是否有锁定策略并可能要求临时关闭或设置白名单。如何应对双因素认证现状越来越多的关键系统如服务器BMC、现代网络设备开始支持或强制使用双因素认证。单纯的默认密码攻击对此无效。思路默认密码漏洞的发现场景前移。在未启用2FA的初始配置阶段或通过其他漏洞如逻辑漏洞、会话管理缺陷绕过2FA。防御方则应尽早启用2FA。7.2 清单的维护与贡献DefaultCreds-cheat-sheet的强大源于社区。如果你在实践中发现了新的默认凭证或者纠正了现有条目的错误积极地向项目提交Pull Request。贡献时注意提供可靠来源最好附上官方文档、设备截图或用户手册的链接。格式规范严格按照项目要求的格式如CSV的列提交。描述清晰在notes栏注明适用的具体型号、固件版本范围等。7.3 法律与道德再强调我必须不厌其烦地重申所有基于默认凭证的测试必须在你有明确权限的系统上进行。这包括你个人拥有的设备。你任职公司授权你测试的内部资产。客户通过正式合同授权你进行渗透测试的外部资产。未经授权的访问是计算机犯罪后果严重。这份指南的目的是提升安全意识帮助防御者发现和修复漏洞而不是为攻击者提供便利。