某CMS注入审计
字数 1048 2025-08-18 11:35:59
某CMS注入审计分析报告
前言
本文档基于某基于ThinkPHP3.2.2框架开发的企业网站内容管理系统进行SQL注入漏洞审计分析。通过代码审计,发现该系统存在多处SQL注入漏洞,包括前台和后台多个功能点。
系统架构
- 框架:ThinkPHP3.2.2
- 重点审计目录:App文件夹
- 后台文件特点:使用Zend加密(需使用在线解密工具如http://dezend.qiling.org/free/进行解密)
前台SQL注入漏洞
漏洞位置
\App\Home\Controller\UserController.class.php文件中的多个方法:
-
do_name()方法
- 漏洞描述:直接将POST传入的id参数带入find查询,未进行有效过滤
- 利用条件:需要前台登录
- 利用方式:
http://www.a.com/index.php?s=/user/do_name.html id[where]=1%20and%20updatexml(1,concat(0x7e,user(),0x7e),1)-- - 漏洞原理:利用ThinkPHP3的SQL注入特性,通过数组参数构造恶意SQL语句
-
do_detail()方法
- 同do_name()方法类似,存在相同类型的注入漏洞
-
do_pass()方法
- 同样存在未过滤参数直接带入查询的问题
防御机制分析
- 系统大部分文件在获取参数时会进行一次正则匹配,对非整数参数直接结束程序
- 但上述方法未使用该防御机制,导致漏洞存在
后台SQL注入漏洞
漏洞位置
\App\Manage\Controller\PhotoController.class.php
- 漏洞描述:通过GET请求获取ID参数并直接带入where查询,且无引号保护
- 漏洞特点:后台多个文件存在类似问题
- 利用方式:构造恶意ID参数进行注入攻击
其他安全问题
- 后台还存在一处任意文件删除漏洞(文中提到已有分析,未详细说明)
ThinkPHP3注入原理参考
参考链接:https://xz.aliyun.com/t/2629
总结与修复建议
漏洞总结
- 前台多个用户相关功能存在SQL注入
- 后台多个控制器存在SQL注入
- 后台存在任意文件删除漏洞
修复建议
- 对所有用户输入进行严格过滤和验证
- 使用参数化查询或预处理语句
- 对整数型参数强制类型转换
- 对后台功能增加更严格的权限验证
- 升级ThinkPHP框架版本
审计经验
- 重点关注直接使用用户输入作为查询条件的方法
- 注意框架特性可能带来的安全隐患
- 加密文件需要解密后才能进行完整审计
- 参数过滤不统一是常见的安全隐患来源
通过本次审计可以看出,即使是经过一定安全设计的系统,也可能因为部分功能未遵循统一的安全规范而导致漏洞存在。全面的代码审计和安全开发规范是保障系统安全的重要手段。