代码审计之zzcms
字数 2071 2025-08-05 00:15:37

ZZCMS 2020 代码审计与漏洞分析教学文档

0x00 前言

本文档基于对ZZCMS 2020版本的代码审计结果编写,详细分析了该CMS中存在的多个安全漏洞,包括重装漏洞、XSS漏洞、SQL注入漏洞等。通过本教程,读者可以学习到PHP代码审计的基本方法和常见漏洞的挖掘技巧。

0x01 环境准备

  • 目标系统: ZZCMS 2020 (最后更新于2020-7-26)
  • 测试环境:
    • PHPStudy (PHP 5.6.27 + Apache + MySQL)
    • Windows 7 64位
  • 源码下载: http://www.zzcms.net/about/6.htm

0x02 目录结构分析

/install        安装程序目录
/admin          默认后台管理目录
/user           注册用户管理程序
/skin           用户网站模板
/template       系统模板
/inc            系统包含文件
/area           各地区显示文件
/zs             招商程序
/pp             品牌
/dl             代理
/zh             展会
/company        企业
/job            招聘
/zx             资讯
/special        专题
/ask            问答
/zt             注册用户展厅页程序
/one            单页面存放目录
/ajax           ajax程序处理页面
/reg            用户注册页面
/3              第三方插件存放目录
/cache          缓存文件
/uploadfiles    上传文件存放目录
/dl_excel       代理信息excel表格上传目录
/image          图片和swf文件
/js             js文件
/html           静态页存放目录

0x03 漏洞分析

1. 重装漏洞

漏洞文件: /install/index.php

漏洞分析:

  • 通过switch($step)控制安装步骤
  • step1.php检查install.lock文件是否存在
  • 直接传入step=2可跳过文件检测

利用方法:
直接访问/install/index.php?step=2可绕过安装检测,导致重装漏洞。

2. 前台反射型XSS漏洞

漏洞文件: uploadimg_form.php

漏洞参数:

  1. imgid参数
  2. noshuiyin参数

利用方法:
构造XSS闭合语句:

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

3. 后台反射型XSS漏洞

漏洞文件: /admin/ad_manage.php

漏洞分析:

  • 通过REQUEST获取keyword参数并直接输出
  • GET方式提交被stopsqlin.php拦截
  • POST方式可绕过检测

绕过方法:

  • GET方式使用大写关键词绕过
  • 直接使用POST方式提交

4. 后台SQL注入漏洞

漏洞文件: /admin/ask.php

漏洞分析:

  • $_COOKIE["askbigclassid"]未用引号包裹直接带入SQL
  • do=add时调用漏洞代码
  • 默认SQL关键词被stopsqlin.php拦截

绕过方法:
在URI中包含siteconfig.phplabeltemplate.php可绕过检测

利用方法:
构造数据包:

GET /admin/ask.php?do=add&siteconfig.php=1 HTTP/1.1
Cookie: askbigclassid=1 AND 1=1

5. 存储型XSS漏洞

后台存储XSS

漏洞文件: /admin/siteconfig.php

漏洞分析:

  • 使用stripfxg()函数处理sitecount参数
  • 处理后写入/inc/config.php
  • 在首页输出该内容

利用方法:
在后台配置中插入XSS代码,访问首页触发。

前台存储XSS

漏洞文件: /zt/show.php + /user/manage.php

漏洞分析:

  1. manage.php可修改zzcms_user表的content字段
  2. show.php读取并输出该字段
  3. 使用stripfxg()函数处理内容

利用方法:

  1. 构造POST请求修改用户信息:
POST /user/manage.php?action=modify HTTP/1.1
content=<script>alert(1)</script>
  1. 访问/zt/show.php?id=[用户ID]触发XSS

0x04 关键函数分析

1. zc_check()函数

位置: /inc/stopsqlin.php

功能:

  • 对输入参数进行安全处理
  • 使用trim()htmlspecialchars()addslashes()处理
  • 防止SQL注入和XSS攻击

2. stripfxg()函数

位置: /inc/function.php

功能:

  • 使用stripslashes()移除反斜杠
  • $htmlspecialchars_decode=true时还原HTML实体
  • zc_check()功能相反,会抵消安全处理效果

0x05 防御机制与绕过

1. stopsqlin.php防御机制

检测方式:

  • 黑名单检测SQL关键词
  • 检测URI中的危险参数

绕过方法:

  • 在URI中包含siteconfig.phplabeltemplate.php
  • 使用POST方式提交
  • 使用大写关键词

0x06 审计技巧总结

  1. 安装目录检查:优先检查/install目录是否存在重装漏洞
  2. 参数输出追踪:查找未过滤的echoprint等输出函数
  3. 数据库操作追踪:查找直接拼接SQL语句的位置
  4. 函数调用分析:特别关注stripfxg()等可能抵消安全措施的函数
  5. 防御机制分析:理解系统的防御机制及其绕过方法
  6. 全局搜索关键词:如stripslasheshtmlspecialchars_decode

0x07 修复建议

  1. 安装完成后删除或重命名/install目录
  2. 对所有用户输入进行严格的过滤和转义
  3. 统一使用预处理语句执行SQL查询
  4. 移除或限制stripfxg()函数的使用
  5. 完善输入检测机制,不依赖URI检测
  6. 对Cookie值进行严格验证

通过本教程的学习,读者可以掌握基本的PHP代码审计方法和常见漏洞的挖掘技巧,在实际审计工作中可参考类似的思路和方法。

ZZCMS 2020 代码审计与漏洞分析教学文档 0x00 前言 本文档基于对ZZCMS 2020版本的代码审计结果编写,详细分析了该CMS中存在的多个安全漏洞,包括重装漏洞、XSS漏洞、SQL注入漏洞等。通过本教程,读者可以学习到PHP代码审计的基本方法和常见漏洞的挖掘技巧。 0x01 环境准备 目标系统 : ZZCMS 2020 (最后更新于2020-7-26) 测试环境 : PHPStudy (PHP 5.6.27 + Apache + MySQL) Windows 7 64位 源码下载 : http://www.zzcms.net/about/6.htm 0x02 目录结构分析 0x03 漏洞分析 1. 重装漏洞 漏洞文件 : /install/index.php 漏洞分析 : 通过 switch($step) 控制安装步骤 step1.php 检查 install.lock 文件是否存在 直接传入 step=2 可跳过文件检测 利用方法 : 直接访问 /install/index.php?step=2 可绕过安装检测,导致重装漏洞。 2. 前台反射型XSS漏洞 漏洞文件 : uploadimg_form.php 漏洞参数 : imgid 参数 noshuiyin 参数 利用方法 : 构造XSS闭合语句: 3. 后台反射型XSS漏洞 漏洞文件 : /admin/ad_manage.php 漏洞分析 : 通过 REQUEST 获取 keyword 参数并直接输出 GET方式提交被 stopsqlin.php 拦截 POST方式可绕过检测 绕过方法 : GET方式使用大写关键词绕过 直接使用POST方式提交 4. 后台SQL注入漏洞 漏洞文件 : /admin/ask.php 漏洞分析 : $_COOKIE["askbigclassid"] 未用引号包裹直接带入SQL 当 do=add 时调用漏洞代码 默认SQL关键词被 stopsqlin.php 拦截 绕过方法 : 在URI中包含 siteconfig.php 、 label 或 template.php 可绕过检测 利用方法 : 构造数据包: 5. 存储型XSS漏洞 后台存储XSS 漏洞文件 : /admin/siteconfig.php 漏洞分析 : 使用 stripfxg() 函数处理 sitecount 参数 处理后写入 /inc/config.php 在首页输出该内容 利用方法 : 在后台配置中插入XSS代码,访问首页触发。 前台存储XSS 漏洞文件 : /zt/show.php + /user/manage.php 漏洞分析 : manage.php 可修改 zzcms_user 表的 content 字段 show.php 读取并输出该字段 使用 stripfxg() 函数处理内容 利用方法 : 构造POST请求修改用户信息: 访问 /zt/show.php?id=[用户ID] 触发XSS 0x04 关键函数分析 1. zc_ check()函数 位置 : /inc/stopsqlin.php 功能 : 对输入参数进行安全处理 使用 trim() 、 htmlspecialchars() 和 addslashes() 处理 防止SQL注入和XSS攻击 2. stripfxg()函数 位置 : /inc/function.php 功能 : 使用 stripslashes() 移除反斜杠 当 $htmlspecialchars_decode=true 时还原HTML实体 与 zc_check() 功能相反,会抵消安全处理效果 0x05 防御机制与绕过 1. stopsqlin.php防御机制 检测方式 : 黑名单检测SQL关键词 检测URI中的危险参数 绕过方法 : 在URI中包含 siteconfig.php 、 label 或 template.php 使用POST方式提交 使用大写关键词 0x06 审计技巧总结 安装目录检查 :优先检查 /install 目录是否存在重装漏洞 参数输出追踪 :查找未过滤的 echo 、 print 等输出函数 数据库操作追踪 :查找直接拼接SQL语句的位置 函数调用分析 :特别关注 stripfxg() 等可能抵消安全措施的函数 防御机制分析 :理解系统的防御机制及其绕过方法 全局搜索关键词 :如 stripslashes 、 htmlspecialchars_decode 等 0x07 修复建议 安装完成后删除或重命名 /install 目录 对所有用户输入进行严格的过滤和转义 统一使用预处理语句执行SQL查询 移除或限制 stripfxg() 函数的使用 完善输入检测机制,不依赖URI检测 对Cookie值进行严格验证 通过本教程的学习,读者可以掌握基本的PHP代码审计方法和常见漏洞的挖掘技巧,在实际审计工作中可参考类似的思路和方法。