zzzphp save.php save_content方法下sql注入
字数 1074 2025-08-05 08:19:01
ZZZPHP CMS save.php save_content方法SQL注入漏洞分析
漏洞概述
ZZZPHP CMS的save.php文件中save_content方法存在SQL注入漏洞,攻击者可以通过构造特定的POST请求,在未经过滤的情况下将恶意SQL语句注入到数据库查询中,导致任意SQL命令执行。
漏洞环境搭建
- 本地搭建服务器,配置
httpd-vhosts.conf绑定域名 - 下载并安装ZZZPHP CMS
- 本地CMS后台访问地址为
admin264 - 成功登录后台获取有效cookie
漏洞复现步骤
-
使用Postman发送请求:
http://[本地绑定的域名]/[后台地址]/save.php?act=content -
在请求头中设置已登录的有效cookie
-
POST参数中关键参数:
POST /admin264/save.php?act=content HTTP/1.1 Host: [本地绑定的域名] Cookie: [有效cookie] c_content=content',1,9);create database kaixinjiuhao;// -
其他POST参数可以忽略,但必须包含
act=content参数
漏洞分析
-
请求处理流程:
save.php接收act=content参数后调用save_content()方法getform函数获取POST提交的参数$c_content参数值被转义,但存在绕过方式
-
关键注入点:
- 当不传递
$c_pagedesc参数时,系统会从$c_content获取值 - 获取的值未经过转义处理
- 同样,
$c_title2在POST请求未传值时也会从$c_title获取值,存在类似风险
- 当不传递
-
SQL执行流程:
- 第237行执行
db_insert函数 - 第243行执行
db_exec函数 - 最终通过
$d->exec($sql)执行SQL命令
- 第237行执行
-
注入验证:
- 成功创建
kaixinjiuhao数据库 - 可在数据库中查看到新创建的数据库
- 成功创建
漏洞利用
-
通过构造
c_content参数实现SQL注入:content',1,9);[任意SQL语句];// -
可执行的恶意操作包括但不限于:
- 创建/删除数据库
- 创建/删除表
- 读取/修改敏感数据
- 执行系统命令(如果数据库配置允许)
修复建议
- 对所有用户输入进行严格的过滤和转义
- 使用参数化查询或预处理语句
- 对数据库操作进行权限最小化配置
- 对关键函数添加输入验证
- 更新到最新版本的ZZZPHP CMS
补充说明
- 该漏洞需要有效的后台cookie才能利用
$c_title2参数也存在类似的注入风险- 漏洞利用成功后Postman会返回执行结果
- 该漏洞属于二次注入类型,通过参数传递绕过初始过滤
总结
ZZZPHP CMS的save_content方法由于未对用户输入进行充分过滤,导致SQL注入漏洞。攻击者可以通过构造特定的POST请求执行任意SQL命令,对系统安全构成严重威胁。建议开发者及时修复并加强输入验证机制。