akinerkisa/HTLogin
GitHub: akinerkisa/HTLogin
一款针对 Web 登录页面的安全测试工具,用于自动化检测认证绕过漏洞、默认凭据和速率限制缺陷。
Stars: 20 | Forks: 2
# HowToLogin (HTLogin) v1.0.1
HowToLogin 是一款用于测试 Web 应用程序登录页面是否存在登录绕过漏洞的工具。HTLogin 会对给定的 URL 测试各种登录绕过 payload、常见的默认凭据以及登录表单的速率限制,并将结果展示给用户。
## 快速开始与使用
**安装:**
```
git clone https://github.com/akinerkisa/HTLogin
cd HTLogin
pip install -r requirements.txt
```
**基本用法:**
```
# 测试单个 URL
python main.py -u https://example.com/login
# 从文件测试多个 URL
python main.py -l urls.txt
# 将结果保存为 JSON
python main.py -u https://example.com/login -o results.json -of json
# 使用自定义凭据
python main.py -u https://example.com/login -cl credentials.txt
# 使用代理 (Burp Suite 等)
python main.py -u https://example.com/login -p http://127.0.0.1:8080
# 针对 SPA 应用使用 Selenium (JavaScript 渲染表单)
python main.py -u https://example.com/login --use-selenium
# 使用自定义 User-Agent
python main.py -u https://example.com/login --user-agent "HTLogin/1.0.1"
```
**测试内容:**
- SQL/NoSQL/XPath/LDAP 注入绕过
- 默认凭据 (admin:admin 等)
- 用户名枚举
- CAPTCHA 检测
- 速率限制 (检测缺失或微弱的速率限制)
- API 端点 (JSON/GraphQL) - 当未找到表单时
**配置文件 (可选):**
```
{
"test_account_username": "test@example.com",
"test_account_password": "testpass123",
"timeout": 15,
"verbose": true
}
```
使用方式:`python main.py -u https://example.com/login --config config.json`
## 安装说明
### 从源码安装
git clone https://github.com/akinerkisa/HTLogin
cd HTLogin
pip install -r requirements.txt
pip install .
安装完成后,可以使用:htlogin -u https://example.com/login
python3 main.py -u https://www.example.com/login
标志 | 简写 | 描述 | 示例 | 默认值 | 是否必需
--- | --- | --- | --- | --- | --- |
--url | -u | 指定 URL | python3 main.py -u https://www.example.com/login | N/A | 是(-u 或 -l 其中之一) |
--list | -l | 指定 URL 列表 | python3 main.py -l list.txt | N/A | 是(-u 或 -l 其中之一) |
--credential-list | -cl | 指定用于测试的默认凭据路径 | python3 main.py -cl credentials.txt | 程序内置 | 否 |
--rate-limit | -r | 速率限制测试的请求数量 | python3 main.py -r 20 | 10 | 否 |
--verbose | -v | 切换显示所有有效/无效结果 | python3 main.py -v on/off | off | 否 |
--language | -lang | 用于关键词检测的语言代码 | python3 main.py -lang tr | en | 否 |
--output | -o | 指定输出文件 | python3 main.py -o output.txt | output.txt | 否 |
--output-format | -of | 输出格式 (text, json, html) | python3 main.py -of json | text | 否 |
--proxy | -p | 请求使用的代理 | python3 main.py -p http://127.0.0.1:8080 | N/A | 否 |
--timeout | -t | 请求超时时间 (秒) | python3 main.py -t 15 | 10 | 否 |
--http-method | -hm | 测试使用的 HTTP 方法 | python3 main.py -hm GET | POST | 否 |
--log | | 日志文件路径 (可选,若未指定则按域名自动整理) | python3 main.py --log custom.log | 自动: scans/domain/log_timestamp.txt | 否 |
--no-progress | | 禁用进度条 | python3 main.py --no-progress | false | 否 |
--config | | 配置文件路径 (JSON) | python3 main.py --config config.json | N/A | 否 |
--use-selenium | | 使用 Selenium 渲染 JavaScript (用于 SPA 应用) | python3 main.py --use-selenium | false | 否 |
--selenium-wait-time | | Selenium 页面加载等待时间 (秒) | python3 main.py --selenium-wait-time 10 | 5 | 否 |
--user-agent | | HTTP 请求的自定义 User-Agent 字符串 | python3 main.py --user-agent "HTLogin/1.0.0" | 默认浏览器 UA | 否 |
## 列表文件示例格式
```
http://127.0.0.1:5000/lp/insecure-login
http://127.0.0.1:5000/lp/secure-login
http://127.0.0.1:5000/lp/default-login
http://127.0.0.1:5000/lp/rate-limit-login
```
## 功能特性
- SQL 注入登录绕过测试
- NoSQL 注入登录绕过测试 (包含渐进式测试模式)
- XPath 注入登录绕过测试
- LDAP 注入登录绕过测试
- 默认凭据测试
- CAPTCHA 检测 - 自动检测 CAPTCHA 防护
- 用户名枚举测试** - 检测系统是否泄露有效用户名
- 测试账号支持 - 使用已知凭据进行基线分析
- 自动 API 检测 - 当未找到表单时,自动检测并测试 JSON API 和 GraphQL 端点
- 关键词检查的多语言支持
- URL 列表支持
- 请求代理支持
- HTTP 方法选择 (GET 或 POST)
- 多种输出格式 (Text, JSON, HTML)
- 按域名整理的日志文件
- 自动登录页面发现
- 基于置信度的成功检测系统
- 可配置的置信度阈值
- 带有指数退避的重试机制
- CSRF token 检测与处理
## HTLogin 如何提取成功的登录尝试
HTLogin 使用 **基于置信度的评分系统** 来检测成功的登录尝试。该系统从 HTTP 响应中收集多个信号并计算置信度分数。
### 信号收集
HTLogin 分析以下信号:
**正向信号 (增加置信度):**
- **302 重定向到非登录页面** (+40):重定向到不同页面表明认证成功
- **会话 Cookie** (+35):存在 session/auth/token cookies
- **简短的成功消息** (+30):简短响应 (<200 字节) 中包含成功关键词
- **成功关键词** (+20):如 'welcome', 'dashboard', 'profile', 'logged in', 'successful' 等关键词
- **内容显著变短** (+25):响应比原始响应短得多 (可能是成功消息,而非错误)
- **响应格式改变** (+15):HTML 转换为纯文本 (当不是错误消息时)
- **内容长度改变** (+10):显著的内容长度差异 (当不是错误消息时)
- **高响应时间** (+5):响应时间 > 1s (可能正在处理)
- **检测到多个用户** (+20):无特定用户的通用成功消息 (NoSQL 注入)
**负向信号 (降低置信度):**
- **失败关键词** (-30):如 'invalid', 'incorrect', 'failed', 'error' 等关键词
- **错误消息** (-20):错误模式、异常、堆栈跟踪
- **仍处于登录页面** (-15 到 -25):登录指示符仍然存在且内容长度相似 (当内容长度非常相似,在 50 字节以内时,置信度惩罚更高)
- **内容显著变短 (错误)** (-15):由于错误消息导致响应短得多
- **内容长度改变 (错误)** (-10):由于错误消息导致内容长度变化
- **响应格式改变 (错误)** (-5):由于错误消息导致格式变化
### 置信度分数计算
```
Confidence Score = Sum of Positive Signals - Sum of Negative Signals
```
最终分数限制在 0 到 100 之间。
### 置信度级别
- **高** (≥50):非常强烈的成功登录指标
- **中** (≥30):强烈的指标,登录可能成功
- **低** (≥20):存在部分指标,建议人工验证
- **极低** (<20):指标微弱或无指标
### 成功检测
如果满足以下条件,则认为登录尝试成功:
- `confidence_score >= threshold_high` (默认: 50)
这种更严格的阈值通过要求更强的认证成功证据来帮助减少误报。
系统在以下情况下也会建议人工验证:
- 置信度介于中高阈值之间
- 同时存在正向和负向信号
- 置信度低但存在正向信号
## NoSQL 注入渐进式测试模式
HTLogin 包含一种高级的 NoSQL 注入渐进式测试模式,分多个阶段进行测试:
1. **基础绕过阶段**:测试基本的 NoSQL 注入 payload
2. **多用户阶段**:尝试检测是否返回了多个用户
3. **管理员发现阶段**:使用正则表达式模式发现管理员用户
可以通过配置文件配置渐进模式:
- `nosql_progressive_mode`:启用/禁用渐进式测试 (默认: true)
- `nosql_admin_patterns`:用于管理员发现的自定义正则表达式模式 (默认: ["admin.*", "administrator.*", "root.*", ".*admin.*", "adm.*"])
如果基础绕过失败,系统会自动停止以避免误报。
## 页面内容检查中的多语言支持
检查页面内容时,默认使用英语。但是,您可以通过参数修改此项。您还可以通过编辑 `languages.json` 文件来添加不同的语言和关键词。目前定义了英语和土耳其语。
Languages.json 格式:
```
{
"en": {
"success": ["welcome", "dashboard", "profile", "logged in", "successful"],
"failure": ["invalid", "incorrect", "failed", "error", "try again"],
"login_keywords": ["login", "sign in", "signin", "sign-in", "authenticate", "auth", "administrator", "admin", "access", "account"],
"error_indicators": ["missing parameter", "error", "invalid", "bad request", "unauthorized", "forbidden"],
"login_indicators": ["login", "sign in", "authenticate"],
"generic_indicators": ["welcome", "success", "logged in", "authenticated"],
"specific_indicators": ["admin", "administrator", "user:", "username:", "account:"]
}
}
```
**字段描述:**
- `success`:表示登录成功的关键词
- `failure`:表示登录失败的关键词
- `login_keywords`:用于在发现过程中识别登录页面的关键词
- `error_indicators`:表示错误响应的关键词
- `login_indicators`:表示登录相关内容的关键词
- `generic_indicators`:通用的成功指示符
- `specific_indicators`:特定的用户/管理员指示符
- `username_not_found`:表示用户名不存在的关键词 (用于枚举测试) - 可选
- `password_invalid`:表示密码错误的关键词 (用于枚举测试) - 可选
## 配置文件
您可以使用 JSON 配置文件来设置所有选项的默认值。使用 `--config` 参数指定配置文件路径。
您可以将 `config.example.json` 复制为 `config.json` 并根据需要进行修改。
示例配置 (`config.example.json`):
```
{
"timeout": 10,
"max_retries": 2,
"rate_limit_requests": 10,
"rate_limit_threads": 10,
"rate_limit_adaptive_delay": 1.0,
"confidence_threshold_low": 20,
"confidence_threshold_medium": 30,
"confidence_threshold_high": 50,
"show_progress": true,
"verbose": false,
"http_method": "POST",
"language": "en",
"output_format": "text",
"output_file": null,
"log_file": null,
"proxy": null,
"credential_list_file": null,
"discovery_enabled": true,
"discovery_verify_pages": true,
"nosql_progressive_mode": true,
"nosql_admin_patterns": ["admin.*", "administrator.*", "root.*", ".*admin.*", "adm.*"],
"test_account_username": null,
"test_account_password": null,
"use_selenium": false,
"selenium_headless": true,
"selenium_wait_time": 5,
"user_agent": null
}
```
**配置选项:**
- `timeout`:请求超时时间 (秒) (默认: 10)
- `max_retries`:失败请求的最大重试次数 (默认: 2)
- `rate_limit_requests`:速率限制测试的请求数量 (默认: 10)
- `rate_limit_threads`:速率限制测试的线程数 (默认: 10)
- `rate_limit_adaptive_delay`:请求之间的自适应延迟 (秒) (默认: 1.0)
- `confidence_threshold_low`:低置信度阈值 (默认: 20)
- `confidence_threshold_medium`:中置信度阈值 (默认: 30)
- `confidence_threshold_high`:高置信度阈值 (默认: 50)
- `show_progress`:显示进度条 (默认: true)
- `verbose`:启用详细日志记录 (默认: false)
- `http_method`:测试使用的 HTTP 方法 (默认: "POST")
- `language`:用于关键词检测的语言代码 (默认: "en")
- `output_format`:输出格式 - "text", "json", 或 "html" (默认: "text")
- `discovery_enabled`:启用自动登录页面发现 (默认: true)
- `discovery_verify_pages`:验证发现的页面是否包含登录表单 (默认: true)
- `nosql_progressive_mode`:启用渐进式 NoSQL 注入测试 (默认: true)
- `nosql_admin_patterns`:用于 NoSQL 注入中发现管理员的正则表达式模式 (默认: ["admin.*", "administrator.*", "root.*", ".*admin.*", "adm.*"])
- `test_account_username`:用于基线登录分析的测试账号用户名 (默认: null)
- `test_account_password`:用于基线登录分析的测试账号密码 (默认: null)
- `use_selenium`:使用 Selenium 为 SPA 应用渲染 JavaScript (默认: false)
- `selenium_headless`:以无头模式运行 Selenium (默认: true)
- `selenium_wait_time`:Selenium 页面加载等待时间 (秒) (默认: 5)
- `user_agent`:HTTP 请求的自定义 User-Agent 字符串 (默认: null,使用默认浏览器 UA)
## CAPTCHA 检测
HTLogin 会自动检测登录表单上的 CAPTCHA 防护。当检测到 CAPTCHA 时:
- 控制台会显示警告
- 用户名枚举测试会自动跳过 (因为会失败)
- 检测结果会包含在扫描结果中
CAPTCHA 检测通过以下方式工作:
- 检查 CAPTCHA 输入字段 (name/id/class 模式)
- 检测 CAPTCHA 小部件 (reCAPTCHA, hCaptcha 等)
- 在页面内容中搜索与 CAPTCHA 相关的关键词
## 用户名枚举测试
HTLogin 通过分析错误消息来测试用户名枚举漏洞。该工具:
- 使用不存在的用户名进行测试
- 比较“无效用户名”与“无效密码”的错误消息
- 检测系统是否泄露了用户名是否存在的信息
**工作原理:**
1. 使用已知无效的用户名发送登录尝试
2. 分析响应消息中特定于用户名的错误
3. 如果系统区分“用户名未找到”和“密码不正确”,则检测到漏洞
**注意:** 如果检测到 CAPTCHA,将自动跳过用户名枚举测试。
## 测试账号支持
您可以在配置文件中提供一个测试账号以提高准确性:
```
{
"test_account_username": "test@example.com",
"test_account_password": "testpass123"
}
```
**优势:**
- **基线分析**:工具首先执行一次成功的登录以建立基线- **提高置信度**:根据实际的成功登录响应校准置信度分数
- **更好的检测**:通过与已知成功登录模式进行比较来减少误报
当提供测试账号时:
1. 工具首先尝试使用测试凭据登录
2. 分析成功的登录响应 (重定向、cookies、内容)
3. 使用此基线改进其他测试的置信度评分
4. 如果基线登录失败,则继续进行正常测试
**安全提示:** 仅使用您拥有或明确获得测试许可的测试账号。
## 针对SPA 应用的 Selenium 支持
HTLogin 支持 Selenium 用于测试单页应用 (SPA),此类应用的登录表单是通过 JavaScript 动态加载的。启用后,HTLogin 使用 Chrome 无头浏览器渲染页面并提取表单字段。
**要求:**
- 已安装 Chrome/Chromium 浏览器
- 已安装 ChromeDriver 并配置在 PATH 中
- Selenium 包:`pip install selenium`
**用法:**
```
# 通过 CLI 启用 Selenium (SPA / JavaScript 渲染登录表单)
python main.py -u https://example.com/login --use-selenium
# 配置等待时间 (默认: 5 秒)
python main.py -u https://example.com/login --use-selenium --selenium-wait-time 10
# 示例: 位于 Cloudflare + SPA 之后
python main.py -u https://play.picoctf.org/login --use-selenium -p http://127.0.0.1:8080
```
**配置文件:**
```
{
"use_selenium": true,
"selenium_headless": true,
"selenium_wait_time": 5
}
```
**何时使用:**
- 表单通过 JavaScript 动态加载
- 静态 HTML 解析无法找到表单字段
- SPA 应用 (React, Vue, Angular 等)
**注意:** Selenium 比静态解析慢,但对于 JavaScript 渲染的表单是必需的。如果未安装 Selenium,HTLogin 将回退到静态解析和 API 发现。
## 自动 API 检测
当未找到 HTML 表单时,HTLogin 会自动检测并测试 API 端点。这使得测试现代单页应用 (SPA) 和基于 API 的认证成为可能。
典型的高级流程:
- 尝试静态 HTML 表单解析
- 尝试 Selenium (如果已启用/自动触发) 用于 SPA 页面
- 如果仍未找到表单:尝试 API/JSON/GraphQL 端点发现
**工作原理:**
1. 工具首先尝试查找 HTML 登录表单
2. 如果未找到表单,它会搜索常见的 API 端点:
- JSON API 端点:`/api/login`, `/api/auth`, `/api/v1/login` 等
- GraphQL 端点:`/graphql`, `/api/graphql` 等
3. 使用默认凭据测试发现的端点
4. 自动检测字段名称 (username, password 等)
**支持的 API 格式:**
- **JSON API**:带有 JSON payload 的标准 REST API 端点
- **GraphQL**:用于认证的 GraphQL mutations
**示例流程:**
```
1. Try HTML form parsing → Not found
2. Try HTML page discovery → Not found
3. Discover API endpoints → Found /api/login
4. Test JSON API login → Success!
```
**注意:** API 测试仅在无法检测到 HTML 表单时执行,确保了与传统基于表单的应用程序的向后兼容性。
## 速率限制测试
HTLogin 主动测试登录端点是否存在缺失或微弱的速率限制机制。这有助于识别可能成功实施暴力破解攻击的漏洞。
**工作原理:**
1. 向登录端点发送并发请求 (默认: 10 个请求)
2. 监控速率限制指标:
- HTTP 状态码 (429 Too Many Requests, 403 Forbidden)
- 速率限制头 (`X-RateLimit-Remaining`, `Retry-After` 等)
- 响应文本指标 ("too many requests", "rate limit", "slow down" 等)
3. 报告是否存在速率限制以及在哪个请求触发了限制
**配置:**
- `rate_limit_requests`:发送的请求数量 (默认: 10)
- `rate_limit_threads`:并发线程数 (默认: 10)
- `rate_limit_adaptive_delay`:请求之间的延迟 (秒) (默认: 1.0)
**检测内容:**
- **无速率限制**:系统接受所有请求且未阻止
- **存在速率限制**:系统在达到一定阈值后阻止请求
- **速率限制阈值**:识别在哪个请求编号触发了限制
**示例输出:**
```
✗ Rate Limit Test: No rate limit after 10 requests
✓ Rate Limit Test: Rate limited at request #5
```
**安全提示:** 速率限制测试会向目标发送多个请求。请仅对您拥有或明确获得测试许可的系统使用。
## 日志组织
HTLogin 自动按域名整理日志文件,格式为 `scans/domain_name/log_timestamp.txt`。如果您指定 `--log custom.log`,日志文件将保存在指定路径。
## 输出格式
HTLogin 支持多种输出格式:
- **Text** (默认):人类可读的纯文本格式
- **JSON**:用于程序化处理的结构化 JSON 格式
- **HTML**:带有样式的精美 HTML 报告
示例:
```
python3 main.py -u https://example.com/login -o report.json -of json
python3 main.py -u https://example.com/login -o report.html -of html
```
## 测试
HTLogin 包含一套全面的测试套件。要运行测试:
```
# 安装测试依赖项
pip install -r requirements.txt
# 运行所有测试
pytest
# 运行测试并生成覆盖率报告
pytest --cov=. --cov-report=html
```
有关测试套件的更多信息,请参阅 [tests/README.md](tests/README.md)。
## 已知局限性
- **注册页面**:
- 注册/注册页面会被自动检测并跳过,以避免误报。这些页面使用不同于登录页面的认证流程(账户创建与认证),应单独测试。
- **Cloudflare / WAF**:
- HTLogin 使用真实的头部和可选的 `cloudscraper` 支持来提高兼容性,但一些高级 JavaScript 挑战或自定义 WAF 规则可能仍会阻止自动化扫描器。
- 在这种情况下,Selenium 可能有助于渲染页面,但不能保证完全绕过。
- **MFA / 2FA**:
- 多因素认证流程(邮件/SMS/OTP/验证器应用)不会自动解决;HTLogin 仅报告登录行为和基本信号。
- **非常自定义的登录流程**:
- 高度定制或多步骤的登录流程(SAML/OIDC 重定向、外部 IdP、弹窗)可能需要人工分析;HTLogin 专注于经典的基于表单和 API 的登录。
## 免责声明
HTLogin 仅供教育目的和授权安全测试使用。
请勿在未经明确许可的情况下对系统使用此工具。
作者不对因使用此工具而导致的误用或损害负责。标签:CISA项目, DNS枚举, GraphQL安全, HTLogin, LDAP注入, NoSQL注入, PE 加载器, PoC, Python, Selenium, Web安全, XPath注入, 安全规则引擎, 无后门, 暴力破解, 用户名枚举, 登录绕过, 网络安全工具, 蓝队分析, 认证绕过, 逆向工具, 速率限制检测, 黑盒测试, 默认凭证