某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参数

利用条件:

  1. 注册为企业用户并通过审核
  2. 能够发布招商信息
  3. 能够设置广告语

利用流程:

  • 设置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才能执行

调用链:

  1. label.phpshowlabel函数调用fix函数
  2. fix函数调用showcookiezs函数

可利用文件:

  • zs/search.php
  • zs/zs_list.php

过滤绕过:

  • 使用宽字节注入(当数据库编码为GBK时)
  • 使用字符串编码绕过(如iconv/mb_convert_encoding)
  • sprintf格式化字符串漏洞

三、XSS漏洞

漏洞文件: user/ask.php

漏洞描述:

  • action=modify且传入的id不为0时
  • 查询的编辑者不是当前用户时会触发markit函数
  • markit函数使用$_SERVER['HTTP_HOST']进行拼接

利用方法:

  1. 通过构造恶意Host头实现XSS
  2. 在请求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(需绕过过滤)

五、修复建议

  1. 输入过滤:

    • 对所有用户输入进行严格过滤
    • 使用参数化查询替代字符串拼接
  2. 权限控制:

    • 加强权限验证
    • 重要操作需二次确认
  3. 安全编码:

    • 避免直接使用$_SERVER变量
    • 对文件操作限制路径范围
  4. XSS防护:

    • 对所有输出进行HTML编码
    • 实现CSP策略
  5. 日志审计:

    • 记录所有敏感操作
    • 监控异常请求

六、审计技巧

  1. 查找未过滤的$_SERVER变量使用
  2. 追踪用户输入的数据流
  3. 分析权限验证逻辑
  4. 检查数据库查询拼接方式
  5. 寻找文件操作函数的不安全使用

通过全面审计该CMS系统,发现了多处高危漏洞,建议用户及时更新或采取防护措施。

某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.php zs/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系统,发现了多处高危漏洞,建议用户及时更新或采取防护措施。