小白代码审计开山篇
字数 1403 2025-08-18 11:39:00

AppCMS后台模板Getshell及任意文件读取漏洞分析

漏洞概述

本文详细分析AppCMS 2.0.101版本中存在的两个高危漏洞:

  1. 后台模板Getshell漏洞
  2. 任意文件读取漏洞

这两个漏洞都存在于后台管理功能中,攻击者可以利用这些漏洞获取服务器控制权或读取敏感信息。

环境准备

进行代码审计和漏洞验证需要以下环境:

  1. 操作系统:Windows 10(可选)
  2. 开发环境:WAMP(Windows下的Apache+MySQL+PHP集成环境)
  3. 工具
    • Burp Suite(抓包工具)
    • Sublime Text(代码编辑器)
  4. 目标系统:AppCMS 2.0.101安装包

重要说明:安装完成后,需要将admin目录重命名(如cmdback),否则系统会报错。

后台模板Getshell漏洞分析

漏洞位置

漏洞存在于后台的模块管理功能中,具体文件路径为:
appcms/upload/admin(或重命名后的目录)/template.php

关键代码分析

  1. 目录定义(约第90行):
$dir = dirname(__FILE__) . '/../templates/' . TEMPLATE;

dirname()函数返回路径中的目录部分。

  1. 输入过滤
    代码中使用了helper::escape_stripslashes方法进行过滤,该方法定义在core/helper.class.php文件中。

  2. 关键过滤函数分析(helper.class.php 591-599行):

if (strnatcasecmp($str, $str2) == 0) {
    // 比较两个字符串是否相等
}

strnatcasecmp()函数使用"自然"算法比较两个字符串(不区分大小写):

  • 返回0表示字符串相等
  • 返回小于0表示\(str1<\)str2
  • 返回大于0表示\(str1>\)str2

其他相关函数:

  • get_magic_quotes_gpc():判断PHP是否开启了GPC(魔术引号)
  • stripslashes($str):删除字符串中的反斜杠

漏洞利用方法

  1. 在template.php文件第93行上方添加调试代码:
var_export($_POST['filename']); die;
  1. 构造恶意PHP文件内容:
<?php eval($_POST['cmdback']); ?>
  1. 通过模板修改功能上传此内容,即可获取Webshell。

任意文件读取漏洞分析

漏洞位置

同一文件(template.php)中的另一处漏洞,约第79行开始。

关键代码分析

if (is_file($dir . $_GET['filename'])) {
    $filecont = helper::get_contents($dir . $_GET['filename']);
    // 读取文件内容
}

漏洞成因:

  1. 未对用户输入进行充分过滤
  2. 未对文件目录访问权限进行限制

helper::get_contents方法定义在helper.class.php中:

$retry = 3;  // 定义重试次数
$content = '';  // 定义内容变量
while (empty($content) && $retry > 0) {
    // 循环读取文件内容
    $retry--;  // 自减
}

漏洞利用方法

攻击者可以构造特殊请求读取服务器上的任意文件,例如:

  • 读取配置文件获取数据库凭据
  • 读取系统敏感文件
  • 获取其他用户数据

示例:成功读取test.txt文件内容。

漏洞危害

  1. Getshell漏洞

    • 完全控制服务器
    • 可执行任意系统命令
    • 可进一步渗透内网
  2. 任意文件读取漏洞

    • 泄露敏感信息(数据库凭据、配置文件等)
    • 可能导致内网横向渗透
    • 结合其他漏洞可造成更大危害

防御建议

  1. 输入验证

    • 对所有用户输入进行严格过滤
    • 使用白名单机制限制可操作的文件和目录
  2. 权限控制

    • 限制后台功能的访问权限
    • 实现最小权限原则
  3. 安全函数

    • 使用安全的文件操作函数
    • 避免直接使用用户输入构造文件路径
  4. 更新升级

    • 及时更新到最新版本
    • 关注官方安全公告

总结

本文详细分析了AppCMS 2.0.101版本中的两个高危漏洞,通过代码审计的方法揭示了漏洞成因和利用方式。代码审计是发现和修复漏洞的重要手段,安全研究人员应掌握相关技能以提高系统安全性。

AppCMS后台模板Getshell及任意文件读取漏洞分析 漏洞概述 本文详细分析AppCMS 2.0.101版本中存在的两个高危漏洞: 后台模板Getshell漏洞 任意文件读取漏洞 这两个漏洞都存在于后台管理功能中,攻击者可以利用这些漏洞获取服务器控制权或读取敏感信息。 环境准备 进行代码审计和漏洞验证需要以下环境: 操作系统 :Windows 10(可选) 开发环境 :WAMP(Windows下的Apache+MySQL+PHP集成环境) 工具 : Burp Suite(抓包工具) Sublime Text(代码编辑器) 目标系统 :AppCMS 2.0.101安装包 重要说明 :安装完成后,需要将admin目录重命名(如cmdback),否则系统会报错。 后台模板Getshell漏洞分析 漏洞位置 漏洞存在于后台的模块管理功能中,具体文件路径为: appcms/upload/admin(或重命名后的目录)/template.php 关键代码分析 目录定义 (约第90行): dirname() 函数返回路径中的目录部分。 输入过滤 : 代码中使用了 helper::escape_stripslashes 方法进行过滤,该方法定义在 core/helper.class.php 文件中。 关键过滤函数分析 (helper.class.php 591-599行): strnatcasecmp() 函数使用"自然"算法比较两个字符串(不区分大小写): 返回0表示字符串相等 返回小于0表示$str1 <$str2 返回大于0表示$str1>$str2 其他相关函数: get_magic_quotes_gpc() :判断PHP是否开启了GPC(魔术引号) stripslashes($str) :删除字符串中的反斜杠 漏洞利用方法 在template.php文件第93行上方添加调试代码: 构造恶意PHP文件内容: 通过模板修改功能上传此内容,即可获取Webshell。 任意文件读取漏洞分析 漏洞位置 同一文件(template.php)中的另一处漏洞,约第79行开始。 关键代码分析 漏洞成因: 未对用户输入进行充分过滤 未对文件目录访问权限进行限制 helper::get_contents 方法定义在helper.class.php中: 漏洞利用方法 攻击者可以构造特殊请求读取服务器上的任意文件,例如: 读取配置文件获取数据库凭据 读取系统敏感文件 获取其他用户数据 示例:成功读取test.txt文件内容。 漏洞危害 Getshell漏洞 : 完全控制服务器 可执行任意系统命令 可进一步渗透内网 任意文件读取漏洞 : 泄露敏感信息(数据库凭据、配置文件等) 可能导致内网横向渗透 结合其他漏洞可造成更大危害 防御建议 输入验证 : 对所有用户输入进行严格过滤 使用白名单机制限制可操作的文件和目录 权限控制 : 限制后台功能的访问权限 实现最小权限原则 安全函数 : 使用安全的文件操作函数 避免直接使用用户输入构造文件路径 更新升级 : 及时更新到最新版本 关注官方安全公告 总结 本文详细分析了AppCMS 2.0.101版本中的两个高危漏洞,通过代码审计的方法揭示了漏洞成因和利用方式。代码审计是发现和修复漏洞的重要手段,安全研究人员应掌握相关技能以提高系统安全性。