「100 个最常用密码」这种榜单,网上到处是转载,数字互相抄,谁也说不清它测的是哪一年、 哪一家的库。这页反过来做:只写我们自己蜜罐真的收到的,而且只写结构—— 长度几位、哪些字符类、出现了多少次。「口令原文」那一列,每一格都是 已脱敏 · 只给结构。
| # | 结构(长度 · 字符类别) | 口令原文 | 次数 | 占 6,931 |
|---|---|---|---|---|
| 1 | 6 位 · 纯数字 | 已脱敏 · 只给结构 | 2,260 | 32.6% |
| 2 | 3 位 · 纯数字 | 已脱敏 · 只给结构 | 次数未记录 | — |
| 3 | 6 位 · 纯数字 · 同一字符重复 | 已脱敏 · 只给结构 | 次数未记录 | — |
只有第一名有确切次数。原始记录里第 2、3 名只排了序、没记次数,这里就空着写「次数未记录」, 不给它补一个看起来很像的数字。第三名原文的记法是「6 位全 1」——那等于把口令念出来, 所以这页把它写成结构「同一字符重复」,信息量不变,字符串不给。
出处:content/posts/ssh-bruteforce-163.5.210.194.md 第 59 行(该篇同时给出 6,956 会话 / 6,931 成功 / 6 失败、0 条命令)。
| # | 结构(长度 · 字符类别) | 口令原文 | 次数 | 占 4,242 建连 |
|---|---|---|---|---|
| 1 | 6 位 · 纯数字 | 已脱敏 · 只给结构 | 471 | 11.1% |
| 2 | 3 位 · 纯数字 | 已脱敏 · 只给结构 | 184 | 4.3% |
| 3 | 1 位 · 纯数字 | 已脱敏 · 只给结构 | 99 | 2.3% |
| 4 | 6 位 · 纯数字 · 同一字符重复 | 已脱敏 · 只给结构 | 81 | 1.9% |
| 5 | 8 位 · 字母 + 数字 + 符号 | 已脱敏 · 只给结构 | 80 | 1.9% |
| 6 | 3 位 · 纯符号 | 已脱敏 · 只给结构 | 77 | 1.8% |
| 7 | 4 位 · 纯数字 | 已脱敏 · 只给结构 | 46 | 1.1% |
| 8 | 8 位 · 纯小写字母 | 已脱敏 · 只给结构 | 35 | 0.8% |
8 行就是 8 个不同的口令条目,次数逐条取自同一份分析报告,没有相加、没有重排; 「结构」是拿原文现算出来的两个属性(长度、字符类别),算完原文就不进页面。 第 5 条是键盘序那一类(原文的报告里就这么标的),这种口令长度够、也有符号, 过「复杂度口令策略」一点问题都没有 —— 它本来就该出现在「常见」名单里。
出处:docs/样本分析-20261018.md 第 69 行「口令字典(Top 8)」;同窗口 4,239 次登录成功、2 次失败、客户端 banner 固定 SSH-2.0-Go(4,241 次)。
| 维度 | 桶 | 次数 | 占比 |
|---|---|---|---|
| 长度 | ≤ 6 位 | 958 | 89.3% |
| 长度 | 7 – 9 位 | 115 | 10.7% |
| 长度 | ≥ 10 位 | 0 | 0.0% |
| 字符类 | 纯数字 | 881 | 82.1% |
| 字符类 | 纯符号 | 77 | 7.2% |
| 字符类 | 字母 + 数字 + 符号 | 80 | 7.5% |
| 字符类 | 纯小写字母 | 35 | 3.3% |
这张表是拿上面 8 行现算的,不是另一次观测:长度桶口径 ≤6 / 7–9 / ≥10 沿站内既有口径, 字符类口径同日报 §4.4(纯数字 / 纯字母 / 字母+数字 / 含符号……)。分母只有 1,073, 不要拿它去代表"攻击者的字典"整体——它只代表这 2 小时 28 分里出现过的前 8 名。
| 窗口 | 账号(用户名) | 次数 | 性质 |
|---|---|---|---|
| A | root | 963 | 占该窗口 6,931 次的 13.9% |
| B | root | 704 | 该窗口 Top 10 第 1 名 |
| B | ubuntu | 133 | 云镜像默认账号 |
| B | user | 119 | 设备默认账号 |
| B | test | 40 | 设备默认账号 |
| B | admin | 39 | 设备默认账号 |
| B | git | 37 | CI / 代码托管 |
| B | postgres | 31 | 数据库 |
| B | jenkins | 30 | CI |
| B | oracle | 30 | 数据库 |
| B | deploy | 28 | 运维 / 发布 |
| A | dell / user / admin / test / ubuntu | 次数未记录 | 笔记只列了名字,没记次数 |
账号名不是口令,照原样给 —— 它本来就是「admin / root / ubuntu」这种公开的默认假设。
两个窗口的 root 不能相加(6 个半小时 vs 一周、两个不同源)。
标题写「Top 100」,是因为这个说法本身已经是公共常识了。但我们手上没有 100 个带次数的条目: 真正逐条记了次数的,只有窗口 B 的那 8 个口令,加上窗口 A 的 1 个结构名次。 网上那些「Top 100 弱口令」表我们不是没有,是不能拿它冒充自己的捕获结果—— 一旦贴上去,这页就从「我观测到了什么」变成「我抄了一份列表」,而且读者没法分辨哪一行是真的。
所以剩下 92 个槽位就空着,明写不补数:
顺带一句:真的把这 100 个补满,也不该公开。这份榜单等于一份现成的可用字典—— 谁拿到都能直接往自己的爆破脚本里喂。公开面只解释「弱口令长什么样」,不做「字典分发」。
| 项 | 窗口 A | 窗口 B |
|---|---|---|
| 时间窗 | 2026-10-15 ~ 2026-10-18 04:28 UTC | 2026-10-15 13:42:30Z ~ 16:10:51Z(2h28m) |
| 来源 | 单源 163.5.210.194,只打 2222 | 单源 168.144.28.221,打 2222(外带 1433/3306 各 1 次) |
| 样本量 | 6,956 会话 / 6,931 成功 / 6 失败 | 4,242 建连 / 4,239 成功 / 2 失败 |
| 原始数据 | Cowrie cowrie.json*、Suricata eve.json | 同左(srv2 上的 Cowrie / Suricata / Dionaea) |
| 数据时刻 | 文章成稿 2026-10-18;处置留痕 audit.js generatedAt 2026-10-18 12:25:47(原文只给到这个字符串,未标时区) | 报告编号 SA-20261018-01,分析日期 2026-10-18(UTC),窗口结束即取数 |
| 数字来自 | 站内文章第 59 行 | 仓库内分析报告第 69 行 |
① 两列不可相加、不可比较大小。时间窗差 6 倍多,源也不同,A 的 2,260 和 B 的 471 是两回事。
② 「登录成功」≠ 口令有效。蜜罐按策略放行了绝大多数尝试,成功数只说明字典的覆盖面,
不能推出「真实主机用这个口令能登进去」。
③ 「次数未记录」就是没记。不是 0,也不是「大概几十次」。
④ 明文不在这一页,也不在任何接口里。公开端点 /api/public/honeypot 的
topCredentials[] 只给 passwordLength / passwordCharClasses /
weakPassword 三个结构字段;原始 password 只在统计进程的内存里
算一次「结构 + 是否等于用户名 + 是否命中内置弱口令小表」,写完即丢。
⑤ 这是静态页。浏览器里不发起任何请求,数字改了要重新构建;页脚给出改哪一行。
窗口 A:一条零失败率的 SSH 爆破链(2026-10-15 ~ 10-18)
—— 该篇第 59 行同时写了「6 位纯数字 2,260/6,931(32.6%)」「root 963 次(13.9%)」,
以及第二名 / 第三名只有名字没有次数这件事。
窗口 B:docs/样本分析-20261018.md §4「协议层特征」表 ——
「口令字典(Top 8)」「账号字典(Top 10)」两行,次数逐条照抄。
口径:docs/日报-20261018.md §4.4「口令结构分布(只写结构,不写明文)」,
类别定义与「明文只活在内存里」那条铁律就在那儿。
改数只改本文件(layouts/passwords/list.html)里对应的两个表格,并把上面的「数据时刻」一起改掉;
数字一旦没有出处,就从页面删掉,而不是留在那儿让它慢慢过期。
相关页面:查一个 IP 干过什么 · 这个站在干什么 ·
公开面为什么只给口令结构