某cms 2019版本代码审计
字数 1638 2025-08-26 22:11:14
某CMS 2019版本代码审计报告
一、任意文件删除漏洞
漏洞文件: /admin/dl_data.php
漏洞描述:
- 该文件中的
filename参数未经过任何过滤就直接用于文件删除操作 - 攻击者可以通过构造恶意
filename参数删除服务器上的任意文件
利用条件:
- 需要管理员权限访问
/admin/dl_data.php - 能够控制
filename参数
修复建议:
- 对
filename参数进行严格过滤 - 限制可删除的文件路径范围
- 添加权限验证
二、SQL注入漏洞
1. HTTP_HOST注入
漏洞位置:
- 使用
$_SERVER['HTTP_HOST']直接拼接SQL语句 - 调用
zt/top.php的文件都可能存在此问题
利用示例:
- 通过修改Host头进行注入
- 可利用文件示例:
zt/companyshow.php
2. user/adv2.php注入
漏洞位置:
- 第67行直接使用未过滤的POST参数
id - 通过
$_REQUEST调用action参数
利用条件:
- 注册为企业用户并通过审核
- 能够发布招商信息
- 能够设置广告语
利用流程:
- 设置
action=modify - 绕过
check_user_power函数检查 - 构造恶意SQL语句
3. ajax/zs.php注入
漏洞位置:
- 第10行从cookie获取
pxzs内容 - 第45行直接拼接未过滤的cookie值到SQL语句
利用方法:
- 使用sqlmap等工具进行注入
- 通过控制cookie中的
pxzs值实现注入
4. zs/subzs.php注入
漏洞位置:
showcookiezs函数中直接拼接cookie中的zzcmscpid- 需要标签为
cookiezs才能执行
调用链:
label.php的showlabel函数调用fix函数fix函数调用showcookiezs函数
可利用文件:
zs/search.phpzs/zs_list.php
过滤绕过:
- 使用宽字节注入(当数据库编码为GBK时)
- 使用字符串编码绕过(如iconv/mb_convert_encoding)
- sprintf格式化字符串漏洞
三、XSS漏洞
漏洞文件: user/ask.php
漏洞描述:
- 当
action=modify且传入的id不为0时 - 查询的编辑者不是当前用户时会触发
markit函数 markit函数使用$_SERVER['HTTP_HOST']进行拼接
利用方法:
- 通过构造恶意Host头实现XSS
- 在请求URL中构造XSS(需绕过过滤)
过滤限制:
inc/stopsqlin.php中过滤了script、%26%2399%26%和%2F%3Cobject
四、漏洞利用总结
1. 任意文件删除
- 路径:
/admin/dl_data.php - 参数:
filename
2. SQL注入
- 四种不同场景的注入点
- 需要根据不同场景满足不同条件
- 可利用工具: sqlmap
3. XSS
- 路径:
user/ask.php - 触发条件:
action=modify+ 非本人编辑的问题 - 注入点: Host头或URL(需绕过过滤)
五、修复建议
-
输入过滤:
- 对所有用户输入进行严格过滤
- 使用参数化查询替代字符串拼接
-
权限控制:
- 加强权限验证
- 重要操作需二次确认
-
安全编码:
- 避免直接使用
$_SERVER变量 - 对文件操作限制路径范围
- 避免直接使用
-
XSS防护:
- 对所有输出进行HTML编码
- 实现CSP策略
-
日志审计:
- 记录所有敏感操作
- 监控异常请求
六、审计技巧
- 查找未过滤的
$_SERVER变量使用 - 追踪用户输入的数据流
- 分析权限验证逻辑
- 检查数据库查询拼接方式
- 寻找文件操作函数的不安全使用
通过全面审计该CMS系统,发现了多处高危漏洞,建议用户及时更新或采取防护措施。