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

### 使用 setup.py (可选)

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注入, 安全规则引擎, 无后门, 暴力破解, 用户名枚举, 登录绕过, 网络安全工具, 蓝队分析, 认证绕过, 逆向工具, 速率限制检测, 黑盒测试, 默认凭证