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. 爆破后台地址
- 可以使用字典爆破工具尝试
admin000到admin999的所有组合 - 推荐工具:Burp Suite的Intruder模块或自定义脚本
三、验证码安全问题
1. 管理员登录验证码绕过
漏洞位置:admin371/login.php第19行
漏洞分析:
if(get_cookie('adminname') != ''){
// 直接允许登录,无需验证码
}
利用方法:
- 通过分析代码发现,如果存在
adminname的cookie就可以绕过验证码 - 在
login.php第24行可以看到,成功登录后会设置adminpass的cookie - 观察
adminpass的格式为zzz920_adminpass,可以推断adminname的格式为zzz920_adminname - 设置以下cookie即可绕过验证码:
adminname=zzz920_adminname adminpass=zzz920_adminpass
2. 验证码不刷新不过期问题
漏洞位置:
inc/zzz_main.php第582行inc/imgcode.php
漏洞分析:
- 验证码从SESSION中获取
code值 - 在
imgcode.php中,只要不刷新页面就不会重新生成code - 导致验证码在有效期内可以重复使用
影响:
- 攻击者可以重复使用同一个验证码进行暴力破解
四、前端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代码
漏洞验证:
- 构造上述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漏洞和任意文件读取等高风险问题。这些漏洞的组合利用可能导致系统完全沦陷。开发人员应重视代码安全,遵循安全编码规范,定期进行代码审计和安全测试。