新手入门代码审计(1)--xdcms-3.0.1
字数 1470 2025-08-06 08:35:25

XDCMS 3.0.1 代码审计入门教学文档

一、系统架构分析

XDCMS 3.0.1 是一个非 MVC 架构的 CMS 系统,适合新手进行代码审计学习。其特点包括:

  • 结构简单,没有复杂框架
  • 采用公共函数文件进行统一过滤
  • 安装完成后会删除 install 目录
  • 生成文件锁防止重复安装

二、核心过滤函数分析

1. safe_replace() 函数

function safe_replace($string) {
    $string = str_replace('%20','',$string);
    $string = str_replace('%27','',$string);
    $string = str_replace('%2527','',$string);
    // 其他过滤项...
    return $string;
}

功能:过滤危险字符,如空格(%20)、单引号(%27)等编码形式

2. safe_html() 函数

function safe_html($str){
    if(empty($str)){return;}
    $str=preg_replace('/select|insert | update | and | in | on | left | joins | delete union | from | where | group | into |load_file|outfile/','',$str);
    return htmlspecialchars($str);
}

功能:

  • 过滤常见 SQL 注入关键词
  • 使用 htmlspecialchars 进行 HTML 转义
  • 可通过大小写绕过过滤(如 SELECT 替换为 SeLeCt)

三、漏洞分析

1. SQL 注入漏洞

漏洞位置:会员登录功能 /system/module/member/index

漏洞代码

public function login_save(){
    $username = safe_html($_POST['username']);
    $password = safe_html($_POST['password']);
    // ...
    $sql="select * from ".DB_PRE."member where `username`='$username'";
    // ...
}

漏洞原因

  • 仅使用 safe_html 过滤,未使用 safe_replace
  • safe_html 可通过大小写绕过
  • 系统开启了报错提示

利用方法

  • 构造特殊用户名进行报错注入
  • 示例:username=admin' AND (SELECT 1 FROM (SELECT COUNT(*),CONCAT((SELECT username FROM admin LIMIT 0,1),FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a)--

影响范围

  • 所有仅使用 safe_html 过滤的数据库查询操作

2. 任意文件删除漏洞

漏洞位置index.php?m=xdcms&c=data&f=delete&file=../../test

漏洞代码

public function delete(){
    $file=trim($_GET["file"]);
    $dir=DATA_PATH.'backup/'.$file;
    if(is_dir($dir)){
        // 删除文件夹中的文件
        if (false != ($handle = opendir ( $dir ))) {
            while ( false !== ($file = readdir ( $handle )) ) {
                if ($file != '.' && $file != '..'){
                    unlink($dir."/".$file);
                }
            }
            closedir ( $handle );
        }
        @rmdir($dir);//删除目录
    }
    showmsg(C('success'),'-1');
}

漏洞原因

  • 未对 file 参数进行过滤
  • 未设置白名单限制
  • 允许目录遍历(../)

利用方法

  • 通过构造 file 参数删除任意文件
  • 示例:file=../../config.php

3. 文件上传漏洞

漏洞位置:后台文件上传功能

漏洞原因

  • 后台可修改允许上传的文件类型
  • 上传后可通过修改后缀名执行恶意代码

利用方法

  1. 通过管理员权限修改允许上传的文件类型
  2. 上传恶意文件
  3. 修改文件后缀为可执行类型(如 .php)

四、审计方法论

1. 代码审计方法

  1. 入口分析:从入口文件(index.php)开始,跟踪程序执行流程
  2. 函数追踪:重点分析公共过滤函数(如 safe_replace、safe_html)
  3. 敏感函数搜索:全局搜索关键函数(如 unlink、file_get_contents、eval 等)
  4. 参数追踪:跟踪用户输入参数的传递和处理过程

2. 重点关注点

  • 用户输入过滤不完整的地方
  • 数据库查询拼接处
  • 文件操作函数
  • 权限验证逻辑
  • 安装和升级流程

五、防御建议

  1. SQL 注入防御

    • 同时使用 safe_replace 和 safe_html 过滤
    • 使用预处理语句
    • 关闭错误回显
  2. 文件删除防御

    • 限制 file 参数为白名单
    • 禁止目录遍历
    • 添加权限验证
  3. 文件上传防御

    • 固定允许上传的文件类型
    • 检查文件内容而不仅是扩展名
    • 设置上传目录不可执行

六、总结

XDCMS 3.0.1 作为入门级代码审计目标,展示了常见漏洞类型:

  1. 过滤不严导致的 SQL 注入
  2. 未验证参数导致的任意文件删除
  3. 配置不当导致的文件上传漏洞

通过分析这些漏洞,可以掌握基本的代码审计思路和方法,为分析更复杂的系统打下基础。

XDCMS 3.0.1 代码审计入门教学文档 一、系统架构分析 XDCMS 3.0.1 是一个非 MVC 架构的 CMS 系统,适合新手进行代码审计学习。其特点包括: 结构简单,没有复杂框架 采用公共函数文件进行统一过滤 安装完成后会删除 install 目录 生成文件锁防止重复安装 二、核心过滤函数分析 1. safe_ replace() 函数 功能:过滤危险字符,如空格(%20)、单引号(%27)等编码形式 2. safe_ html() 函数 功能: 过滤常见 SQL 注入关键词 使用 htmlspecialchars 进行 HTML 转义 可通过大小写绕过过滤(如 SELECT 替换为 SeLeCt) 三、漏洞分析 1. SQL 注入漏洞 漏洞位置 :会员登录功能 /system/module/member/index 漏洞代码 : 漏洞原因 : 仅使用 safe_ html 过滤,未使用 safe_ replace safe_ html 可通过大小写绕过 系统开启了报错提示 利用方法 : 构造特殊用户名进行报错注入 示例: username=admin' AND (SELECT 1 FROM (SELECT COUNT(*),CONCAT((SELECT username FROM admin LIMIT 0,1),FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a)-- 影响范围 : 所有仅使用 safe_ html 过滤的数据库查询操作 2. 任意文件删除漏洞 漏洞位置 : index.php?m=xdcms&c=data&f=delete&file=../../test 漏洞代码 : 漏洞原因 : 未对 file 参数进行过滤 未设置白名单限制 允许目录遍历(../) 利用方法 : 通过构造 file 参数删除任意文件 示例: file=../../config.php 3. 文件上传漏洞 漏洞位置 :后台文件上传功能 漏洞原因 : 后台可修改允许上传的文件类型 上传后可通过修改后缀名执行恶意代码 利用方法 : 通过管理员权限修改允许上传的文件类型 上传恶意文件 修改文件后缀为可执行类型(如 .php) 四、审计方法论 1. 代码审计方法 入口分析 :从入口文件(index.php)开始,跟踪程序执行流程 函数追踪 :重点分析公共过滤函数(如 safe_ replace、safe_ html) 敏感函数搜索 :全局搜索关键函数(如 unlink、file_ get_ contents、eval 等) 参数追踪 :跟踪用户输入参数的传递和处理过程 2. 重点关注点 用户输入过滤不完整的地方 数据库查询拼接处 文件操作函数 权限验证逻辑 安装和升级流程 五、防御建议 SQL 注入防御 : 同时使用 safe_ replace 和 safe_ html 过滤 使用预处理语句 关闭错误回显 文件删除防御 : 限制 file 参数为白名单 禁止目录遍历 添加权限验证 文件上传防御 : 固定允许上传的文件类型 检查文件内容而不仅是扩展名 设置上传目录不可执行 六、总结 XDCMS 3.0.1 作为入门级代码审计目标,展示了常见漏洞类型: 过滤不严导致的 SQL 注入 未验证参数导致的任意文件删除 配置不当导致的文件上传漏洞 通过分析这些漏洞,可以掌握基本的代码审计思路和方法,为分析更复杂的系统打下基础。