XK-LAB // 高频弱口令 · 只给结构 WEAK-PASSWORDS ● 纯静态页 · 不取数 · 数字全部写死且可指回出处

「100 个最常用密码」这种榜单,网上到处是转载,数字互相抄,谁也说不清它测的是哪一年、 哪一家的库。这页反过来做:只写我们自己蜜罐真的收到的,而且只写结构—— 长度几位、哪些字符类、出现了多少次。「口令原文」那一列,每一格都是 已脱敏 · 只给结构。

窗口 A · 最大单一结构 2,260 次 6 位纯数字,占该源 6,931 次成功登录的 32.6%
窗口 A · 最常撞的账号 root 963 次 占 6,931 次的 13.9%,其余是设备默认账号
窗口 B · 前 8 个口令合计 1,073 次 占同期 4,242 次建连的 25.3%
本页能落数的行 20 行 其中「口令条目」只有 8 个 → 100 个槽位填不满,见下
结构榜 · 窗口 A(单源 163.5.210.194,一周)口径:成功登录 6,931 次
#结构(长度 · 字符类别)口令原文次数占 6,931
16 位 · 纯数字已脱敏 · 只给结构2,26032.6%
23 位 · 纯数字已脱敏 · 只给结构次数未记录—
36 位 · 纯数字 · 同一字符重复已脱敏 · 只给结构次数未记录—

只有第一名有确切次数。原始记录里第 2、3 名只排了序、没记次数,这里就空着写「次数未记录」, 不给它补一个看起来很像的数字。第三名原文的记法是「6 位全 1」——那等于把口令念出来, 所以这页把它写成结构「同一字符重复」,信息量不变,字符串不给。

出处:content/posts/ssh-bruteforce-163.5.210.194.md 第 59 行(该篇同时给出 6,956 会话 / 6,931 成功 / 6 失败、0 条命令)。

口令条目 · 窗口 B(单源 168.144.28.221,2 小时 28 分)这才是「Top 8」
#结构(长度 · 字符类别)口令原文次数占 4,242 建连
16 位 · 纯数字已脱敏 · 只给结构47111.1%
23 位 · 纯数字已脱敏 · 只给结构1844.3%
31 位 · 纯数字已脱敏 · 只给结构992.3%
46 位 · 纯数字 · 同一字符重复已脱敏 · 只给结构811.9%
58 位 · 字母 + 数字 + 符号已脱敏 · 只给结构801.9%
63 位 · 纯符号已脱敏 · 只给结构771.8%
74 位 · 纯数字已脱敏 · 只给结构461.1%
88 位 · 纯小写字母已脱敏 · 只给结构350.8%

8 行就是 8 个不同的口令条目,次数逐条取自同一份分析报告,没有相加、没有重排; 「结构」是拿原文现算出来的两个属性(长度、字符类别),算完原文就不进页面。 第 5 条是键盘序那一类(原文的报告里就这么标的),这种口令长度够、也有符号, 过「复杂度口令策略」一点问题都没有 —— 它本来就该出现在「常见」名单里。

出处:docs/样本分析-20261018.md 第 69 行「口令字典(Top 8)」;同窗口 4,239 次登录成功、2 次失败、客户端 banner 固定 SSH-2.0-Go(4,241 次)。

把上面 8 行折成桶 · 现算分母 = 1,073
维度桶次数占比
长度≤ 6 位95889.3%
长度7 – 9 位11510.7%
长度≥ 10 位00.0%
字符类纯数字88182.1%
字符类纯符号777.2%
字符类字母 + 数字 + 符号807.5%
字符类纯小写字母353.3%

这张表是拿上面 8 行现算的,不是另一次观测:长度桶口径 ≤6 / 7–9 / ≥10 沿站内既有口径, 字符类口径同日报 §4.4(纯数字 / 纯字母 / 字母+数字 / 含符号……)。分母只有 1,073, 不要拿它去代表"攻击者的字典"整体——它只代表这 2 小时 28 分里出现过的前 8 名。

账号维度 · 两个窗口撞的是账号,不是人
窗口账号(用户名)次数性质
Aroot963占该窗口 6,931 次的 13.9%
Broot704该窗口 Top 10 第 1 名
Bubuntu133云镜像默认账号
Buser119设备默认账号
Btest40设备默认账号
Badmin39设备默认账号
Bgit37CI / 代码托管
Bpostgres31数据库
Bjenkins30CI
Boracle30数据库
Bdeploy28运维 / 发布
Adell / user / admin / test / ubuntu次数未记录笔记只列了名字,没记次数

账号名不是口令,照原样给 —— 它本来就是「admin / root / ubuntu」这种公开的默认假设。 两个窗口的 root 不能相加(6 个半小时 vs 一周、两个不同源)。

为什么这页只有 8 个条目,不是 100 个不补数

标题写「Top 100」,是因为这个说法本身已经是公共常识了。但我们手上没有 100 个带次数的条目: 真正逐条记了次数的,只有窗口 B 的那 8 个口令,加上窗口 A 的 1 个结构名次。 网上那些「Top 100 弱口令」表我们不是没有,是不能拿它冒充自己的捕获结果—— 一旦贴上去,这页就从「我观测到了什么」变成「我抄了一份列表」,而且读者没法分辨哪一行是真的。

所以剩下 92 个槽位就空着,明写不补数:

#9 不补数 #10 不补数 #11 不补数 #12 不补数 #13 不补数 #14 不补数 #15 不补数 … #100 不补数

顺带一句:真的把这 100 个补满,也不该公开。这份榜单等于一份现成的可用字典—— 谁拿到都能直接往自己的爆破脚本里喂。公开面只解释「弱口令长什么样」,不做「字典分发」。

口径边界(读数字之前先读这块)两个窗口,不能相加
项窗口 A窗口 B
时间窗2026-10-15 ~ 2026-10-18 04:28 UTC2026-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 干过什么 · 这个站在干什么 · 公开面为什么只给口令结构