弱口令候选验证 POC:Python + Nuclei

简介: 本工具包提供20个Python服务适配器与16个Nuclei YAML模板,专注验证468条已核实的出厂默认凭据。支持HTTP/TCP协议及SSH/MySQL等可选驱动,严格限制为授权单点测试,不枚举、不爆破、不执行命令,确保低影响合规检测。(239字)

一、POC说明

   包含 \*\*20 个 Python 服务适配器、16 个原生 Nuclei YAML 模板\*\*。清单中的账号/口令仅作为用户提供的候选值,已经核实为对应产品所有版本的出厂默认口令。

二、测试边界

    Python 通过 85 项本地模拟/单元测试;16 个 YAML 通过静态结构检查,23 条正则通过 Go regexp 编译与正向样本匹配。安装并运行 Nuclei 引擎,执行原生 \`nuclei -validate\`,可连接真实厂商设备或真实产品实例。\*\*SSH、MySQL、PostgreSQL、MongoDB 的可选驱动可做真实集成测试。请先执行下文的原生验证,再在对应版本的授权测试环境验收。

三、测试边界

仅用于自有或明确授权的单个端点。每次调用只检查一组候选口令,不包含目标发现、网段枚举、字典循环、命令执行、业务数据导出、口令修改或持久配置修改。登录本身可能创建会话、生成审计记录或影响失败计数;不是“零影响”操作,不保证不会触发账号锁定。

1. 文件

| 文件/目录 | 用途 |

|---|---|

| `weakcred_poc.py` | Python 3.10+ 命令行入口,可按 `--service` 选择 20 个适配器 |

| `nuclei/http/` | 11 个 HTTP 原生模板 |

| `nuclei/network/` | 5 个 TCP 原生模板;随包版本仅使用明文 TCP |

| `requirements.txt` | HTTP 所需 requests;其余 5 个原生协议适配器使用标准库 |

| `requirements-optional.txt` | SSH/MySQL/PostgreSQL/MongoDB 的可选依赖 |

| `requirements-dev.txt` | 本地测试及 YAML 静态验证依赖 |

| `inventory.json` | 468 条原值、来源行号、解析标记和覆盖状态;含明文候选口令 |

| `coverage.csv` | 全量覆盖表,不含口令列;UTF-8 BOM 编码 |

| `source_inventory.txt` | 附件字节级副本 |

| `template_manifest.json` | 服务名与模板路径映射 |

| `tests/test_poc.py` | 仅绑定 127.0.0.1 的本地测试服务和单元测试 |

| `tools/validate_templates.py` | 静态检查;加 `--engine` 调用已安装的 Nuclei |

| `tools/check_go_regex.go` | 可选的 Go 正则编译/样本验证工具,不等价于 Nuclei 执行 |

| `docs/TEST_REPORT.md` | 实际已执行检查和未验证范围 |

| `docs/references.json` | 接口、协议及项目原始实现参考链接 |

2. 安装与运行 Python

在解压后的 `weakcred_poc_bundle` 目录执行。以下命令为单行写法,可用于 Windows PowerShell、终端或 shell。Windows 也可以将 `python` 替换为 `py -3`。

```sh

python --version

python -m pip install -r requirements.txt

python weakcred_poc.py --list

```

例如,检查本地/授权实验环境的 RabbitMQ Management HTTP API:

```sh

python weakcred_poc.py --service rabbitmq --target http://127.0.0.1:15672 --json --output results.jsonl

```

检查 Redis ACL 候选 `admin / 123456`:

```sh

python weakcred_poc.py --service redis-acl --target 127.0.0.1:6379 --json

需要上下文路径的应用应把上下文写进基础 URL,脚本不会猜目录或自动跳转:

```sh

python weakcred_poc.py --service geoserver --target http://127.0.0.1:8080/geoserver --json

python weakcred_poc.py --service druid --target http://127.0.0.1:8080/druid --json

python weakcred_poc.py --service nacos --target http://127.0.0.1:8848/nacos --json

python weakcred_poc.py --service guacamole --target http://127.0.0.1:8080/guacamole --json

```

可选数据库及 SSH 驱动:

```sh

python -m pip install -r requirements-optional.txt

python weakcred_poc.py --service mysql --target 127.0.0.1:3306 --json

python weakcred_poc.py --service postgresql --target 127.0.0.1:5432 --database postgres --json

python weakcred_poc.py --service mongodb --target 127.0.0.1:27017 --auth-source admin --json

```

SSH 默认要求核对主机公钥指纹;从可信资产记录取得指纹后传入 `--ssh-fingerprint SHA256:...`。只有隔离实验环境才使用下面的显式放宽选项。程序不会启动 shell 或运行命令。

```sh

python weakcred_poc.py --service ssh --target 127.0.0.1:22 --accept-unknown-hostkey --json

```

运行单个用户指定候选,而非清单原值:

```sh

python weakcred_poc.py --service rabbitmq --target https://127.0.0.1:15671 --username audit --ask-password --json

```

也支持 `--password-env ENV_NAME` 从指定环境变量读取口令、`--password ""` 显式空口令。优先使用交互输入,避免把真实口令放进终端历史和进程参数。覆盖账号或口令后,输出标注 `operator_override`,不再标记为附件原值。

TLS、超时与环境隔离

HTTP 使用 URL 中的 `https://\`,不要用 `--tls` 代替 HTTPS URL。其他协议可使用 `--tls`,FTP/IMAP 支持 `--starttls`。FTP 只实现显式 FTPS,不实现隐式 FTPS。

```sh

python weakcred_poc.py --service imap --target 127.0.0.1:993 --tls --ca-file lab-ca.pem --json

python weakcred_poc.py --service ftp --target 127.0.0.1:21 --starttls --ca-file lab-ca.pem --json

```

Python TLS 默认验证证书和主机名;`--insecure` 仅供隔离测试。默认单步超时 8 秒,HTTP/基线与候选检测间隔 0.3 秒。HTTP 响应体上限 1 MiB。响应过大、超时或证书失败不是弱口令结论。

HTTP 不采用环境代理及 `.netrc`,不自动跟随重定向。PostgreSQL 不读取 `.pgpass`,连接期间隔离 `PGPASSWORD`、`PGPASSFILE`、`PGSERVICE`、`PGSERVICEFILE`,避免环境凭据替代待测空口令。该适配器操作进程环境,因此作为库导入后不要并发调用;当前命令行是串行运行。

3. 覆盖及具体判据

下表的“实现”不表示真实产品联调已经通过。每个服务的候选值均严格取自来源行;完整候选值见 `inventory.json`。Nuclei 使用固定候选,不提供字典参数。

| `--service` | 来源行 | Python | Nuclei | 接口/范围与主要成功条件 |

|---|---:|---|---|---|

| rabbitmq | 3 | 实现 | HTTP | Management `/api/whoami`;基线拒绝,认证后 JSON 的 name 与候选一致并有 tags;不是 AMQP |

| grafana | 107 | 实现 | HTTP | `/api/user`;Basic Auth 必须启用;login、id、orgId;原用户名 `Admin` 保留 |

| harbor | 60 | 实现 | HTTP | Harbor 2.x 本地 Basic;`/api/v2.0/users/current`;username、user_id |

| geoserver | 28 | 实现 | HTTP | `/rest/about/version.json`;认证前拒绝,认证后 GeoServer 版本结构 |

| tomcat | 37 | 实现 | HTTP | `/manager/html`;认证前拒绝,认证后 Manager Applications 页面;要求 manager-gui 角色 |

| activemq | 91 | 实现 | HTTP | **ActiveMQ Classic** `/admin/`;认证前拒绝,认证后控制台;不适用于 Artemis |

| jboss-jmx | 58 | 实现 | HTTP | **旧 JBoss AS** `/jmx-console/`;不是 WildFly 管理接口 |

| druid | 53 | 实现 | HTTP | Alibaba Druid:`/index.html` 跳转登录页 → `/submitLogin` 返回 success → 同会话访问 Stat Index 页面 |

| nacos | 77 | 实现 | HTTP | `/index.html` 指纹 + `/v1/auth/users/login`;核对 username、accessToken、tokenTtl;只适用兼容该 v1 登录 API 的部署 |

| azkaban | 42 | 实现 | HTTP | `/` 的 action=login;status、session.id 和会话 Cookie;采用附件 azkaban/azkaban,不替换为外部清单值 |

| guacamole | 83 | 实现 | HTTP | `/api/tokens`;username、authToken 和 availableDataSources |

| redis-acl | 18 | 实现 | TCP | Redis 6+ ACL;未认证 PING 为 NOAUTH 后尝试 `AUTH admin 123456`,要求 +OK |

| ftp | 7 | 实现 | TCP | 220 欢迎,USER 返回 331,PASS 返回 230;不列目录、不读取文件 |

| imap | 9 | 实现 | TCP | LOGIN 标签响应 OK;Python 单独区分 PREAUTH;不读取邮件 |

| mqtt | 12 | 实现 | TCP | MQTT 3.1.1:无凭据 CONNECT 被拒绝后,候选 CONNECT 返回成功 CONNACK;不发布、不订阅 |

| cassandra | 4 | 实现 | TCP | Native protocol v4 + PasswordAuthenticator;AUTH_RESPONSE 后 AUTH_SUCCESS;不执行 CQL |

| ssh | 21 | 可选驱动实现 | 未提供 | 密码认证;校验主机公钥;不打开 shell |

| mysql | 13 | 可选驱动实现 | 未提供 | 建连后仅 `SELECT CURRENT_USER()` 核对实际账户 |

| postgresql | 17 | 可选驱动实现 | 未提供 | `SELECT current_user` + `used_password`;不将无需密码的连接误称为“空口令验证成功” |

| mongodb | 11 | 可选驱动实现 | 未提供 | 认证后仅 `connectionStatus` 核对 authenticatedUsers;不查询集合 |

认证成功只证明当前端点接受该候选或建立了相应身份,不能据此排除服务端特殊认证插件、代理信任或其它认证绕过机制。模板不是完整产品安全审计。

4. Nuclei 运行

这些模板使用原生 `http` / `tcp`,不调用本地 Python,不需要 `-code`。使用支持 `flow`、`internal`、`disable-cookie`、`skip-secret-file` 的 Nuclei 3.x;不同版本字段支持可能不同,必须首先做原生编译验证。模板参考了检查时的官方引擎字段,但本交付环境没有运行 Nuclei 二进制。

```sh

nuclei -version

nuclei -validate -t nuclei/ -duc

```

只对已确认的产品端点选择对应模板,不要把整个目录对不明设备盲跑。示例地址均为回环地址,应替换为明确授权的对应服务端点。

```sh

nuclei -u http://127.0.0.1:15672 -t nuclei/http/rabbitmq.yaml -c 1 -bs 1 -rl 1 -retries 0 -timeout 8 -ni -duc

nuclei -u http://127.0.0.1:8080/druid -t nuclei/http/druid.yaml -c 1 -bs 1 -rl 1 -retries 0 -timeout 8 -ni -duc

nuclei -u 127.0.0.1:6379 -t nuclei/network/redis-acl.yaml -c 1 -bs 1 -rl 1 -retries 0 -timeout 8 -ni -duc

```

`-rl 1` 控制引擎请求调度,**不保证每条 TCP 握手命令间都间隔 1 秒**。每个模板没有字典和凭据组合,命令关闭自动重试;Nuclei 引擎的其它全局配置仍需人工核对。

Nuclei 这里只输出正向匹配,**无输出不等于安全**,也不等于 Python 的 `NOT_CONFIRMED`。无指纹、验证码、SSO、MFA、接口不兼容、网络异常、账号锁定和免认证均可能不产生匹配。

不要添加外部 Authorization/Cookie 头、共享认证会话或会改变请求的全局配置,否则“未认证基线”可能被污染。不要把真实凭据放进 `-debug`、请求/响应存档或未经脱敏的 JSON 报告;本包未启用 token 提取器,但引擎的原始响应存储仍可能包含 token。Nuclei 日志应按敏感审计资料管理。

5 个随包 TCP 模板仅使用明文连接,不能把 993/8883 等 TLS 端口直接当作明文目标。需要 TLS/STARTTLS 时使用 Python 对应选项。复杂 TCP 分片、多行握手或定制认证器可能让原生模板漏报;Python 对相关报文做了更完整的读取和分类处理。

5. Python 结果含义

| status | 退出码 | 含义 |

|---|---:|---|

| `CONFIRMED` | 0 | 当前候选被接受,且满足该适配器的身份/协议证据 |

| `NOT_CONFIRMED` | 1 | 当前候选被明确拒绝;不代表不存在其它弱口令 |

| `ERROR` | 2 | 网络、TLS、缺少依赖或协议错误,没有漏洞判定 |

| `INCONCLUSIVE` | 3 | URL、产品指纹、认证机制、响应或版本不符合预期,无法下结论 |

| `AUTH_NOT_REQUIRED` | 4 | 当前客户端/所选端点无需该口令;不等于存储口令为空,也不证明拥有所有权限 |

JSON/JSONL 包含服务、目标、用户名、结果、来源行、耗时和有限证据;不输出候选密码、Cookie、token 或完整响应。MySQL/PostgreSQL 的只读身份查询不读取业务表。数据库认证成功也不说明账号拥有管理员权限。

6. 附件范围与保留规则

468 条中,20 条对应 Python 实现,16 条对应 Nuclei 实现;**448 条两种形式均未实现,另 4 条只有 Python 驱动实现**。未实现条目保留在覆盖表,而非生成永远不匹配的占位模板。

原附件没有为全部设备给出登录请求、协议、版本、验证码/CSRF/MFA 流程和认证成功证据。相同厂商或相同 admin/admin 不能推导为相同接口。不能仅凭设备名可靠构造数百个 POC。

特别保留的原值:

- 第 8 行 GBase 密码末尾 U+200C 隐藏字符保留并标注,没有静默删除。

- 第 17 行 `PostgreSQL/空` 的用户名大小写保留,仅把明确的“空”映射为空字符串。

- 第 133 行 SPUG 多个 `/` 的分隔含义不明确,没有自动生成多密码尝试。

- 第 214 行用户名末尾空格保留;`blank`、`Any`、`n/a` 等不擅自转成空值。

例如,附件列出的 Tomcat `tomcat/tomcat` 只是候选;官方 Manager 文档说明,默认安装并不配置拥有 Manager 权限的用户。Redis 带用户名的 AUTH 是 ACL 用法,本包没有擅自退化为只尝试密码的旧模式。PostgreSQL 的无密码连接也可能来自特定认证策略,不能作为“数据库存储了空口令”的证据。

原始口令清单和模板内候选值为明文,请在内部受控位置保存。

7. 重跑本地检查

```sh

python -m pip install -r requirements-dev.txt

python -m unittest discover -s tests -v

python tools/validate_templates.py

python tools/validate_templates.py --engine

```

最后一条要求本机已安装 `nuclei`;缺失时返回错误而不是假装通过。

Go 正则校验是可选的、不参与正常 POC 使用:

```sh

go run tools/check_go_regex.go < docs/regex_checks.json

```

上述重定向示例用于 bash/cmd;PowerShell 可用:

```powershell

Get-Content docs/regex_checks.json -Raw | go run tools/check_go_regex.go

```

详细验证边界见 `docs/TEST_REPORT.md`。来源行指原始附件行号;产品/协议的外部参考与附件原值分开记录在 `docs/references.json`。

三、测试边界

1、部分POC

2、全部POC(获取kscan)

相关文章
|
4月前
|
API
阿里云微服务引擎 MSE 及 API 网关 2026 年 5 月产品动态
阿里云微服务引擎 MSE 及 API 网关 2026 年 5 月产品动态。
295 39
|
4月前
|
人工智能 缓存 运维
CC Switch路由代理技术解析:Codex CLI无缝对接DeepSeek模型实操指南
在现代AI开发与命令行智能编程场景中,Codex CLI是开发者常用的命令行智能辅助工具,能够实现代码生成、问题排查、脚本编写、项目调试等自动化能力。但原生Codex CLI存在明显的适配局限,其底层仅兼容OpenAI Responses API协议,无法直接对接DeepSeek等主流第三方大模型。市面上绝大多数第三方开源、商用大模型均采用Chat Completions API协议,两种协议在请求结构、参数格式、流式返回规则、响应字段定义上完全不互通,直接填写第三方模型接口地址会出现接口404报错、参数解析失败、流式内容中断、模型列表加载异常等各类问题,极大限制了Codex CLI的模型拓展
1021 1
|
4月前
|
人工智能 缓存 弹性计算
阿里云服务器2核4G5M199元解析:独享型u1实例,性能、适用场景、购买和续费规则介绍
阿里云通用算力型u1实例(ecs.u1-c1m2.large)2核4G、5M带宽、80G ESSD Entry云盘,活动特惠价仅199元/年(官网价3498.36元),企业新老用户同享,续费同价至2027年3月31日,每人限购1台。该实例采用独享型架构,搭载Intel至强可扩展处理器,内网带宽1Gbit/s、收发包30万PPS、云盘IOPS 1万,性能稳定,适合企业官网、中小Web应用、轻量数据库及开发测试等场景。
|
4月前
|
机器学习/深度学习 编解码 算法
PyTorch深度学习实战 |手算​​U-net
本文详细解析了U-Net网络架构及其在医学图像分割中的应用。重点对比了U-Net与FCN的核心区别:U-Net采用特征拼接(Concat)保留所有层级信息,而FCN使用特征相加(Add)进行融合。文章深入剖析了U-Net的编码器-瓶颈-解码器结构,解释了其独特的裁剪拼接机制和Overlap-tile策略,并提供了完整的PyTorch实现代码。现代U-Net通过SamePadding实现了输入输出尺寸一致,显著提升了分割精度。文章还探讨了弹性形变数据增强和带空间权重的损失函数设计,为医学图像分析提供了实用解决
380 2
|
3月前
|
人工智能
Qwen3.8抢先体验!正式版即将发布并开源!
千问Qwen3.8即将开源,参数达2.4T,进化速度以“天”计,实力媲美Fable 5。预览版Qwen3.8-Max已上线阿里Token Plan等平台,限时优惠:日间Credits低至1折,夜间更优,个人/团队版月付仅35元起!
5500 163
|
23天前
|
人工智能 自然语言处理 小程序
阿里云万小智3.0版本AI建站产品详细介绍:产品能力提升、适用场景、价格与最新活动参考
万小智3.0是阿里云推出的AI建站升级产品,支持通过自然语言生成包含前端、后端、数据库的完整网站与微信小程序,提供一键部署能力,覆盖企业官网、内容站点、轻量业务应用等场景。产品按体验版、轻量版、标准版、高级版分档订阅,以灵感值计量AI功能调用,新用户可享限时赠2000灵感值、组合套餐低至15元/月等优惠。
|
1月前
|
监控 安全 测试技术
企业官网备份别只靠主机商:数据库、文件与配置的三级方案
企业官网最常见的备份误区:以为主机商的快照就是备份、只备份数据库不备份文件、备份存在同一台机器上。本文给出「数据库+文件+配置」三级备份方案,讲解备份策略表、异地存储与恢复演练,附备份脚本思路与检查清单。适用于官网、企业站等中小站点的数据安全加固。
|
1月前
|
SQL 缓存 监控
缓存击穿、穿透、雪崩到底差在哪:一张表分清,再给组合解法
缓存击穿、穿透、雪崩名字相近却成因不同。本文用一张表彻底区分:击穿是单个热点key过期瞬间、穿透是查询根本不存在的数据、雪崩是大批key同时失效或缓存宕机,并分别给出互斥重建与逻辑不过期、空值缓存与布隆过滤器、TTL随机抖动与多级缓存熔断降级的组合解法,最后给出三者协同布防的工程建议和上线自检清单。
|
7月前
|
运维 监控 Java
Javaer 线上救命手册:高频 Linux 命令全场景实战,从排查问题到服务运维一通到底
本文针对Java开发者总结了Linux命令在生产环境中的关键应用,涵盖服务部署、日志排查、性能监控等核心场景。主要内容包括: 基础运维命令:目录导航、文件操作、权限管理,解决Java服务部署中的权限不足等问题 日志排查命令: tail实时查看日志 grep过滤异常信息 awk统计分析接口性能 进程管理命令: ps/jps查询Java进程 kill优雅停机 ss/netstat排查网络问题 性能监控命令: top/htop定位高CPU线程 free监控内存使用 vmstat/iostat分析IO瓶颈 ...
675 5