l4rm4nd/Authentik-Enum
GitHub: l4rm4nd/Authentik-Enum
该工具通过未授权探测静态资源文件的方式,识别目标 Authentik 实例的具体运行版本。
Stars: 1 | Forks: 0
## 描述
Authentik-Enum 是一个 Python3 脚本,旨在尝试识别可公开访问的 Authentik 实例的具体版本。
## 工作原理
Authentik 在其管理界面模板中使用了带有版本号的脚本引入。
相关上游实现的一个示例可以在 [Authentik 代码库](https://github.com/goauthentik/authentik/blob/bc24815ae6c8181216b88daeb0e8825aa7b17f7b/authentik/core/templates/if/admin.html#L6)中找到。
```
```
Authentik-Enum 从 GitHub 获取发布版本,并检查目标上是否存在相应的带版本号的文件。
具体流程如下:
1. 从 GitHub 获取可用的 Authentik 发布版本
2. 为每个发布版本构造预期的 `AdminInterface-{version}.js` URL
3. 为每个带版本号的 JavaScript 文件发送 HTTP 请求
4. 在支持的情况下使用 byte-range 请求,以避免下载完整的资源
5. 打印匹配响应的 HTTP 状态码和 MD5 哈希值
6. 除非指定了 `--all`,否则在发现第一个版本时即停止
成功的响应表明所测试的资源存在:
| HTTP 状态码 | 含义 |
| --------------------- | ---------------------------------------------------------------------------- |
| `200 OK` | 带版本号的 JavaScript 文件存在并已被返回 |
| `206 Partial Content` | 文件存在且服务器已处理 byte-range 请求 |
| `404 Not Found` | 所测试的带版本号的 JavaScript 文件不存在 |
| 其他状态码 | 该请求可能已被重定向、阻止或由中间件处理 |
## 要求
* Python 3
* 具有对目标 Authentik 实例的网络访问权限
* 具有对 GitHub API 的网络访问权限,以获取 Authentik 发布版本
## 用法
### 克隆代码库
```
git clone https://github.com/l4rm4nd/Authentik-Enum
cd Authentik-Enum
python3 authentik-enum.py --base-url https://sso.example.com
```
## 限制
* **自定义前端构建:** 修改过或自定义的 Authentik 前端 bundle 可能会使用不同的文件名或路径。
* **反向代理:** 代理、CDN、Web 应用防火墙或身份验证网关可能会更改状态码或阻止请求。
* **过期资源:** 旧的 JavaScript 文件在 Authentik 升级后可能仍可访问,从而导致出现多个匹配项。
* **更改的资源结构:** 未来的 Authentik 版本可能会更改文件名或静态资源路径。
* **GitHub API 访问:** 如果 GitHub 不可用、受到速率限制或从测试系统中被阻止访问,则版本发现可能会失败。
* **假阳性响应:** 某些服务器对于不存在的文件会返回带有 `200` 状态码的自定义页面。在验证意外结果时,请比对响应哈希值、内容类型和响应大小。
标签:Python, 实时处理, 无后门, 版本探测, 身份认证系统
