zzzcms php 1.7.5版本代码审计初探
字数 1653 2025-08-26 22:11:57

ZZZCMS PHP 1.7.5版本代码审计教学文档

一、前言

本文档基于ZZZCMS PHP 1.7.5版本的代码审计结果编写,旨在详细分析该CMS存在的安全漏洞及其利用方法。通过本教学文档,您将学习到如何发现和利用后台访问、验证码绕过、XSS漏洞以及任意文件读取等安全问题。

二、后台发现方法

1. 后台地址特征

  • 该CMS后台地址采用admin+三位数字的命名规则
  • 示例:admin371是一个常见的后台地址

2. 爆破后台地址

  • 可以使用字典爆破工具尝试admin000admin999的所有组合
  • 推荐工具:Burp Suite的Intruder模块或自定义脚本

三、验证码安全问题

1. 管理员登录验证码绕过

漏洞位置admin371/login.php第19行

漏洞分析

if(get_cookie('adminname') != ''){
    // 直接允许登录,无需验证码
}

利用方法

  1. 通过分析代码发现,如果存在adminname的cookie就可以绕过验证码
  2. login.php第24行可以看到,成功登录后会设置adminpass的cookie
  3. 观察adminpass的格式为zzz920_adminpass,可以推断adminname的格式为zzz920_adminname
  4. 设置以下cookie即可绕过验证码:
    adminname=zzz920_adminname
    adminpass=zzz920_adminpass
    

2. 验证码不刷新不过期问题

漏洞位置

  • inc/zzz_main.php第582行
  • inc/imgcode.php

漏洞分析

  1. 验证码从SESSION中获取code
  2. imgcode.php中,只要不刷新页面就不会重新生成code
  3. 导致验证码在有效期内可以重复使用

影响

  • 攻击者可以重复使用同一个验证码进行暴力破解

四、前端XSS漏洞

漏洞位置plugins/template/login.php

漏洞描述

  • backurl参数未经过滤直接输出到页面
  • 导致反射型XSS漏洞

利用方法

http://127.0.0.1/plugins/template/login.php?backurl=1%20onmouseover%3dalert(9516)%20y%3d
  • 当用户鼠标移动到登录/注册按钮时,onmouseover事件会触发JavaScript代码

漏洞验证

  1. 构造上述URL并访问
  2. 将鼠标移动到登录/注册区域
  3. 观察是否弹出警告框

五、任意文件读取漏洞

1. 第一种任意文件读取

漏洞位置:文件读取功能

防护规则分析

  1. 不允许路径中出现./
  2. safe_path函数限制只能访问uploadtemplateruntime路径下的文件

绕过方法

  • 使用路径穿越:/runtime/..\config/zzz_config.php
  • 通过..\实现目录穿越,绕过路径限制

2. 第二种任意文件读取

漏洞位置restore函数中的数据库操作

漏洞分析

  1. path参数可控
  2. zzz_file.php中,如果路径存在则通过file_get_contents读取文件内容
  3. 读取的内容会被写入SQL日志

日志文件位置

  • zzz_file.php中,日志文件命名规则为:
    • 当天时间的时间戳
    • 数据库用户名
    • 数据库密码
  • 日志文件未授权访问

利用步骤

  1. 构造恶意请求控制path参数
  2. 触发文件读取操作
  3. 读取生成的日志文件获取敏感信息

六、防护建议

  1. 验证码安全

    • 每次请求生成新的验证码
    • 设置合理的验证码过期时间
    • 验证码应存储在服务端,不可被客户端绕过
  2. XSS防护

    • 对所有用户输入进行HTML实体编码
    • 实现严格的输入过滤和输出编码
  3. 文件读取防护

    • 限制文件读取的目录范围
    • 禁止使用路径穿越符号
    • 对用户提供的路径进行规范化处理
  4. 日志安全

    • 日志文件不应包含敏感信息
    • 日志文件应设置严格的访问权限
    • 避免使用可预测的日志文件名

七、总结

通过对ZZZCMS PHP 1.7.5版本的代码审计,我们发现该系统存在多处安全漏洞,包括后台地址可预测、验证码可绕过、XSS漏洞和任意文件读取等高风险问题。这些漏洞的组合利用可能导致系统完全沦陷。开发人员应重视代码安全,遵循安全编码规范,定期进行代码审计和安全测试。

ZZZCMS PHP 1.7.5版本代码审计教学文档 一、前言 本文档基于ZZZCMS PHP 1.7.5版本的代码审计结果编写,旨在详细分析该CMS存在的安全漏洞及其利用方法。通过本教学文档,您将学习到如何发现和利用后台访问、验证码绕过、XSS漏洞以及任意文件读取等安全问题。 二、后台发现方法 1. 后台地址特征 该CMS后台地址采用 admin +三位数字的命名规则 示例: admin371 是一个常见的后台地址 2. 爆破后台地址 可以使用字典爆破工具尝试 admin000 到 admin999 的所有组合 推荐工具:Burp Suite的Intruder模块或自定义脚本 三、验证码安全问题 1. 管理员登录验证码绕过 漏洞位置 : admin371/login.php 第19行 漏洞分析 : 利用方法 : 通过分析代码发现,如果存在 adminname 的cookie就可以绕过验证码 在 login.php 第24行可以看到,成功登录后会设置 adminpass 的cookie 观察 adminpass 的格式为 zzz920_adminpass ,可以推断 adminname 的格式为 zzz920_adminname 设置以下cookie即可绕过验证码: 2. 验证码不刷新不过期问题 漏洞位置 : inc/zzz_main.php 第582行 inc/imgcode.php 漏洞分析 : 验证码从SESSION中获取 code 值 在 imgcode.php 中,只要不刷新页面就不会重新生成 code 导致验证码在有效期内可以重复使用 影响 : 攻击者可以重复使用同一个验证码进行暴力破解 四、前端XSS漏洞 漏洞位置 : plugins/template/login.php 漏洞描述 : backurl 参数未经过滤直接输出到页面 导致反射型XSS漏洞 利用方法 : 当用户鼠标移动到登录/注册按钮时, onmouseover 事件会触发JavaScript代码 漏洞验证 : 构造上述URL并访问 将鼠标移动到登录/注册区域 观察是否弹出警告框 五、任意文件读取漏洞 1. 第一种任意文件读取 漏洞位置 :文件读取功能 防护规则分析 : 不允许路径中出现 ./ safe_path 函数限制只能访问 upload 、 template 、 runtime 路径下的文件 绕过方法 : 使用路径穿越: /runtime/..\config/zzz_config.php 通过 ..\ 实现目录穿越,绕过路径限制 2. 第二种任意文件读取 漏洞位置 : restore 函数中的数据库操作 漏洞分析 : path 参数可控 在 zzz_file.php 中,如果路径存在则通过 file_get_contents 读取文件内容 读取的内容会被写入SQL日志 日志文件位置 : 在 zzz_file.php 中,日志文件命名规则为: 当天时间的时间戳 数据库用户名 数据库密码 日志文件未授权访问 利用步骤 : 构造恶意请求控制 path 参数 触发文件读取操作 读取生成的日志文件获取敏感信息 六、防护建议 验证码安全 : 每次请求生成新的验证码 设置合理的验证码过期时间 验证码应存储在服务端,不可被客户端绕过 XSS防护 : 对所有用户输入进行HTML实体编码 实现严格的输入过滤和输出编码 文件读取防护 : 限制文件读取的目录范围 禁止使用路径穿越符号 对用户提供的路径进行规范化处理 日志安全 : 日志文件不应包含敏感信息 日志文件应设置严格的访问权限 避免使用可预测的日志文件名 七、总结 通过对ZZZCMS PHP 1.7.5版本的代码审计,我们发现该系统存在多处安全漏洞,包括后台地址可预测、验证码可绕过、XSS漏洞和任意文件读取等高风险问题。这些漏洞的组合利用可能导致系统完全沦陷。开发人员应重视代码安全,遵循安全编码规范,定期进行代码审计和安全测试。