Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-11374-check — CVE-2026-11374 的检测脚本 | Kitploit
工具/GitHubGitHub/bishopfox/cve-2026-11374-check
防御工具漏洞扫描器漏洞利用Web安全渗透测试威胁情报
GitHubbishopfox/cve-2026-11374-check

CVE-2026-11374-check

CVE-2026-11374 的检测脚本

查看仓库
11573个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
# CVE-2026-11374 ManageEngine AD360 前置条件检测脚本

这是 CVE-2026-11374 利用前置条件的检测脚本。该漏洞是 ManageEngine AD360 套件中一个可预测的 SSO 票据缺陷,可导致未认证账户接管。四个范围内产品共享 `ManageEngineADSFramework`:

| 产品 | 受影响版本 | 修复版本 |
|---|---|---|
| ADSelfService Plus | ≤ 6528 | 6529 |
| RecoveryManager Plus | ≤ 6320 | 6321 |
| M365 Manager Plus | ≤ 4816 | 4817 |
| ADAudit Plus | ≤ 8702 | 8703 |

在受影响版本中,SSO 票据只是在受害者登录时采样的 `System.currentTimeMillis()`(一个可预测的时间戳),因此可以通过 `CUSTOM_SSO_TICKET` cookie 重放该票据以劫持该会话。修复方案用 `UUID.randomUUID()`(一个足够随机的标识符)替换了票据。仅当产品已集成 AD360 时,重放路径才可达:`ADSFilter` 通过 `isProductIntegrated()` 对其进行门控。该门控正是此工具所检查的前置条件。

> **注意:** 此检测器确认的是前置条件,而非漏洞本身。`POTENTIALLY_AFFECTED` 结果并非确认存在漏洞的判定——更多信息请参见下文。

## 是否安全?

可以。它是为生产环境和评估用途而构建的。

- 不会利用任何漏洞。探测会发送一个无效的 SSO 票据(`1700000000000`,一个足够久远的毫秒值,永远不可能存在于缓存中),因此绝不会恢复任何会话。服务器只是指示我们清除所发送的 cookie。
- 不会改变目标状态。每个请求都是普通的 `GET`,受影响的唯一 cookie 是工具发送的一次性 cookie。
- 不进行暴力破解或会话解析。该工具不会尝试可证明可利用性的主动时间戳票据解析;那是利用而非检测,不在本文讨论范围内(参见[局限性](#limitations))。

## 它能做什么,不能做什么

CVE-2026-11374 的补丁仅更改了票据的生成方式(从毫秒改为 UUID);并未改变此探测所触及的 cookie 重放路径。因此,对于任何未认证请求,已修补安装与易受攻击安装的响应逐字节完全相同。

该工具在未认证且非破坏性的条件下可以做到:

- 确认可达的范围内产品已启用 CustomSSO cookie 重放路径(即已集成 AD360),这正是 CVE-2026-11374 的利用前置条件。
- 通过各产品独有的会话 cookie 识别出四个产品中的具体某一个。
- 尽力读取资产版本号作为提示。ADSelfService Plus、ADAudit Plus 和 M365 Manager Plus 可用;RecoveryManager Plus 不可用。

它无法做到:

- 区分易受攻击与已修补。对此不存在安全、被动、未认证的信号。`POTENTIALLY_AFFECTED` 结果意味着前置条件已满足,您应去核实补丁级别,而非主机已被确认存在漏洞。
- 确认可利用性。证明主机确实可利用,需要观察已签发票据的格式(13 位数字表示易受攻击,UUID 表示已修补,二者都需要经过认证或主机本地的可见性)、在本地读取 `conf/product.conf`,或主动解析实时票据(真正的利用行为,此处有意未实现)。
- 完全信任低于修复版本的 ADSelfService Plus 版本号。ADSSP 的 `?build=` 有时是真实版本,有时是一个读数低于修复版本的冻结占位符,因此低于修复版本的值含义不明确,工具会将其标记为无法确定。等于或高于修复版本的值仍然是可靠的已修补信号,因为占位符总是太低而无法达到该值。

## 环境要求

- 需要 Python 3.7+ 和 [`requests`](https://pypi.org/project/requests/) 库。使用 `pip install requests` 安装。

## 使用方法

```bash
# single host (prefer a URL or host:port; ports differ per product)
./cve_2026_11374_check.py https://adssp.example.com:8888

# multiple hosts (scheme optional: https is tried first, then http)
./cve_2026_11374_check.py host-a:8081 host-b:8365

# scan a list, one target per line ('#' comments allowed), compact output
./cve_2026_11374_check.py -f targets.txt --brief

# machine-readable output for pipelines
./cve_2026_11374_check.py -f targets.txt --json > results.json
```

各产品的默认端口不同(ADSelfService Plus 为 8888,ADAudit Plus 为 8081,M365 Manager Plus 为 8365,RecoveryManager Plus 为 8090),因此请传入 URL 或 `host:port`。裸主机默认使用 8888。

### 选项

| 选项 | 说明 |
|------|-------------|
| `targets` | 一个或多个 `host`、`host:port` 或 `https://host:port` |
| `-f, --targets-file FILE` | 从文件读取目标(每行一个;支持 `#` 注释) |
| `--brief` | 每个目标输出单行对齐结果,适合扫描大量主机 |
| `--json` | 输出结构化的 JSON 结果 |
| `--timeout SECS` | 单请求超时时间(默认:15) |
| `--no-build` | 在阳性结果时跳过额外的版本号请求 |
| `--no-color` | 禁用彩色输出(同时遵循 `NO_COLOR` 和非 TTY 环境) |

### 示例

一个已集成 AD360 的控制台(详细输出,默认模式)。第二行明确指出这是前置条件而非存在漏洞的判定;第三行是尽力而为的版本提示:

```console
$ ./cve_2026_11374_check.py https://adssp.example.com:8888
[!] https://adssp.example.com:8888: POTENTIALLY_AFFECTED
      ADSelfService Plus: AD360-integrated, CustomSSO replay path active - precondition met. Not confirmed vulnerable; verify patch level (fixed build 6529).
      build: 6519 (below fixed 6529 - inconclusive: ?build= may be a stale placeholder or a hotfix)
```

同一产品的独立安装,重放路径未激活:

```console
$ ./cve_2026_11374_check.py https://adssp.example.com:8888
[+] https://adssp.example.com:8888: UNAFFECTED
      ADSelfService Plus: standalone / not AD360-integrated (no cleanup), so the replay path isn't reachable here. Verify build >= 6529 regardless.
```

使用 `--brief` 扫描列表,每个主机输出单行对齐结果。若任一主机为 `POTENTIALLY_AFFECTED`,退出状态为 `1`,否则为 `0`,这在脚本中非常方便。行尾注记显示识别出的产品,以及在阳性结果时的版本号:

```console
$ ./cve_2026_11374_check.py -f targets.txt --brief; echo "exit: $?"
POTENTIALLY_AFFECTED  https://host-a:8888  ADSelfService Plus 6519
POTENTIALLY_AFFECTED  http://host-b:8081   ADAudit Plus 8530
UNAFFECTED            http://host-c:8365   M365 Manager Plus
UNAFFECTED            https://host-d:443
INCONCLUSIVE          http://host-e:8888   ADSelfService Plus
ERROR                 host-f:8888  timeout
exit: 1
```

机器可读输出(`--json`)。每条结果包含 `verdict`、其背后的 `state` 和 `detail`、识别出的 `product`,以及(对于阳性结果)一个 `build` 对象:`build` 是发现的版本号,`fixed_build` 是该产品的修复阈值,`patch_hint` 是方向性判断(等于或高于修复版本为 `likely_patched`,否则为 `inconclusive`),`note` 是简短说明:

```console
$ ./cve_2026_11374_check.py https://host-b:8081 --json
[
  {
    "target": "https://host-b:8081",
    "state": "potentially_affected",
    "detail": "ADAudit Plus: AD360-integrated, CustomSSO replay path active - precondition met ...",
    "product": "ADAudit Plus",
    "build": { "build": "8530", "fixed_build": "8703", "patch_hint": "inconclusive", "note": "below fixed 8703 - inconclusive: may be a hotfix" },
    "verdict": "POTENTIALLY_AFFECTED"
  }
]
```

## 判定

| 判定 | 含义 |
|---------|---------|
| `POTENTIALLY_AFFECTED` | 范围内产品且已集成 AD360;CustomSSO cookie 重放路径已激活,因此满足 CVE-2026-11374 的利用前置条件。这不是确认存在漏洞的判定;请核实补丁级别(参见后续步骤)。 |
| `UNAFFECTED` | 重放路径不可达。可能属于以下任一情况:独立安装的范围内产品(未集成 AD360——不过如果日后集成,该路径将变得可达,因此无论如何请核实版本);不属于四个范围内产品的 ManageEngine ADS 框架产品;或者响应中根本没有范围内产品(不是 CVE-2026-11374 涉及的四个产品之一,或是剥离了会话 cookie 的代理)。 |
| `INCONCLUSIVE` | 返回 `HTTP 400`——很可能是 IAM 限速锁定掩盖了信号;约 60 秒后重试。 |
| `ERROR` | 连接/超时/TLS 失败。 |

## 退出代码

| 代码 | 含义 |
|------|---------|
| `0` | 没有目标返回 `POTENTIALLY_AFFECTED` |
| `1` | 至少一个目标为 `POTENTIALLY_AFFECTED` |
| `2` | 用法错误(参数错误 / 目标文件不可读) |

## 工作原理

向任意 CustomSSO URL(`*.do`)发送一个无效票据和一个应用标记:

```text
GET /AppsHome.do
Cookie: CUSTOM_SSO_TICKET=1700000000000; CUSTOM_SSO_APP_TAG_NAME=AD360
```

在已集成 AD360 的安装上,链路 `ADSFilter → CustomSSOFilter → CookieSSOImpl` 会执行其解析分支(标记指向不同的产品,因此 `appName != prodName`),解析虚假票据失败,并发出清理 cookie 的响应头:

```text
Set-Cookie: CUSTOM_SSO_TICKET=removed; Max-Age=0; ...
Set-Cookie: CUSTOM_SSO_APP_NAME=removed; Max-Age=0; ...
Set-Cookie: CUSTOM_SSO_APP_TAG_NAME=removed; Max-Age=0; ...
```

独立安装永远不会运行该路径,也不会发出清理。产品的识别依据是其固定的、各产品独有的 Tomcat 会话 cookie(ADSelfService Plus 为 `JSESSIONIDADSSP`,以此类推),该 cookie 在每次响应中都会设置。该检查以响应头而非状态码作为判断依据,因为已集成的 ADSSP 对同一探测返回 `302`,而 ADAudit、M365 和 RMP 返回 `200`。

| 探测响应 | 判定 |
|----------------|---------|
| 清理响应头 + 已知范围内产品 cookie | `POTENTIALLY_AFFECTED` |
| 有产品 cookie、无清理,状态 ≠ 400 | `UNAFFECTED`(独立安装 / 未集成) |
| 无范围内产品 cookie,状态 ≠ 400 | `UNAFFECTED`(不是四个产品之一) |
| 有清理响应头但产品 cookie 无法识别 | `UNAFFECTED`(ManageEngine,但不在范围内) |
| `HTTP 400` | `INCONCLUSIVE`(很可能是 IAM 限速锁定;参见局限性) |

## 局限性

- `POTENTIALLY_AFFECTED` 并非“已确认存在漏洞”。它是利用前置条件。由于补丁没有触及此代码路径,已修补版本会做出完全相同的响应,因此您必须通过其他途径确认补丁级别(参见后续步骤)。这是未认证观察者所能获知的上限。
- 不进行主动确认。该工具从不尝试解析真实的、当前时间的票据。该技术可以确证主机存在漏洞,但它属于主动利用(会劫持实时会话),受限速约束且具有概率性,还需要存在活动的受害者会话,因此不在本检测器范围内。
- `HTTP 400` 可能是限速锁定而非真实答案。Zoho IAM 实施了 URL 滚动限速,将来源 IP 限制为每 60 秒约 40 个请求,随后将该路径锁定约 60 秒。锁定期间,请求返回 `HTTP 400`,集成信号被掩盖。工具将此类情况报告为 `INCONCLUSIVE`;请约一分钟后从该 IP 重试。
- 在反向代理后面,剥离或重写会话 cookie 的控制台可能被误报为 `UNAFFECTED`。如果您预期那里是 ManageEngine 产品,请直接确认。
- 版本号是提示而非判定。ADAudit(`?v=`)和 M365(`?bN=`)始终暴露真实版本;ADSSP 的 `?build=` 有时是真实的,有时是一个读数低于修复版本的冻结占位符,因此低于修复版本的 ADSSP 值含义不明确;RMP 不暴露任何版本。在所有情况下,等于或高于修复版本的版本号都强烈表明已修补,低于则无法确定。

## 给防御方的后续步骤

如果目标返回 `POTENTIALLY_AFFECTED`,请将其视为已暴露并值得确认,然后:

1. 直接确认补丁级别(工具无法做到)。在主机上读取 `conf/product.conf`(`build_number`),并与该产品的修复版本对比(ADSelfService Plus 6529、RecoveryManager Plus 6321、M365 Manager Plus 4817、ADAudit Plus 8703)。按方向性解读:等于或高于修复版本的版本号是主机已修补的有力指标,因为 UUID 修复就在该版本分支中。低于修复版本的版本号属于无法确定,而非存在漏洞的证明,因为带外热修复和后向移植可以在不提升版本号的情况下应用 UUID 修复;在这种情况下,请改用下方的票据格式检查。
2. 如果可以登录,请检查已签发票据的格式。`CUSTOM_SSO_TICKET` cookie 不是 `HttpOnly`,因此认证后您可以读取其值:13 位数字表示存在漏洞,UUID 表示已修补。这是最明确的肯定性检查。
3. 对所有存在漏洞或无法确认已修补的主机,更新到修复版本(或更高版本)。该修复用随机 UUID 替换了可预测的票据。
4. 搜寻利用尝试。在主机上,`serverOut_<date>.txt` 将限速记录为如下突发序列:

   ```text
   IAMSecurityException ErrorCode: URL_ROLLING_THROTTLES_LIMIT_EXCEEDED,
   RequestURI: "/showLogin.cc", RemoteAddr: <source IP>
   ```

   来自单个来源 IP 的 SSO/登录分发路径上出现 `URL_ROLLING_THROTTLES_LIMIT_EXCEEDED` 激增,是票据暴力破解的有力指标。同时请审查近期成功登录和会话活动,寻找被接管的迹象。
5. 同时降低暴露面。限制对 AD360 套件的网络访问(不应面向互联网),如果不需要重放路径,禁用 CustomSSO 集成即可完全消除该前置条件。

## 修复措施

将受影响产品更新到至少修复版本(ADSelfService Plus 6529、RecoveryManager Plus 6321、M365 Manager Plus 4817、ADAudit Plus 8703)或更高版本。该修复用 `UUID.randomUUID()` 替换了可预测的 `System.currentTimeMillis()` SSO 票据。

## 许可证

此代码根据 [MIT 许可证](https://github.com/bishopfox/cve-2026-11374-check/blob/main/LICENSE) 分发。

## 法律免责声明

未经事先双方同意而使用本工具攻击目标属违法行为。遵守所有适用的地方、州和联邦法律是最终用户的责任。开发人员不承担任何责任,也不对本程序造成的任何滥用或损害负责。

## 另请参阅

- [NVD:CVE-2026-11374](https://nvd.nist.gov/vuln/detail/CVE-2026-11374)
- ManageEngine 服务包:
  [ADSelfService Plus](https://www.manageengine.com/products/self-service-password/service-pack.html) ·
  [RecoveryManager Plus](https://www.manageengine.com/ad-recovery-manager/service-pack.html) ·
  [M365 Manager Plus](https://www.manageengine.com/microsoft-365-management-reporting/service-pack.html) ·
  [ADAudit Plus](https://www.manageengine.com/products/active-directory-audit/service-pack.html)
- [Bishop Fox 博客:完整技术分析](https://bishopfox.com/blog/millisecond-of-predictability-why-cve-2026-11374-hard-to-exploit)
下载工具