ljcms的一次审计
字数 1001 2025-08-05 08:17:46
LJCMS安全审计与漏洞分析报告
1. 系统概述
LJCMS是一个内容管理系统,本次审计发现了多个安全漏洞,包括文件上传漏洞、SQL注入漏洞和模板注入漏洞。
2. 已知漏洞分析
2.1 文件上传漏洞
漏洞位置
oa.php中的Popup控制器的upload方法
漏洞详情
- 使用
move_uploaded_file函数处理上传文件 - 未对文件后缀名进行严格限制
- 攻击者可上传恶意PHP文件
漏洞利用PoC
POST /oa.php?c=Popup&a=upload HTTP/1.1
Host: 192.168.57.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryWlmrYmiGkZv4kYqt
------WebKitFormBoundaryWlmrYmiGkZv4kYqt
Content-Disposition: form-data; name="file"; filename="f.php"
Content-Type: image/gif
<?php phpinfo();?>
------WebKitFormBoundaryWlmrYmiGkZv4kYqt--
修复建议
- 严格限制上传文件类型
- 使用白名单机制验证文件扩展名
- 对上传文件内容进行检查
2.2 SQL注入漏洞
漏洞位置
- 普通用户权限即可利用
- 多个位置存在SQL注入风险
漏洞详情
- 未对用户输入进行充分过滤
- 直接拼接SQL语句
- 参数可控导致注入
修复建议
- 使用预处理语句
- 实施严格的输入验证
- 应用最小权限原则
2.3 模板注入漏洞
漏洞位置
- 管理员控制的方法
- 模板编辑功能
漏洞详情
- 使用旧版Smarty模板引擎
- 禁用了PHP标签但仍存在风险
- 攻击者可注入恶意模板代码
利用条件
- 需要管理员权限
- 通过模板编辑功能注入
修复建议
- 升级到最新版Smarty
- 加强模板编辑权限控制
- 对模板内容进行安全过滤
3. 其他潜在漏洞
3.1 反序列化漏洞
action_ajax_dao_article方法可控参数- 可利用
file_get_contents和参数可控 - 可尝试PHAR反序列化攻击
- 目前发现可导致任意文件删除
3.2 内网服务探测
- 通过可控参数可探测内网服务
4. 审计方法论
- 已知漏洞验证:首先检查已公开漏洞是否存在
- 代码关键词搜索:如
move_uploaded_file、SQL查询拼接等 - 权限边界测试:验证不同权限用户能执行的操作
- 第三方组件检查:如Smarty模板引擎版本
- 危险函数追踪:如
file_get_contents、反序列化操作等
5. 防御建议
- 输入验证:对所有用户输入进行严格验证
- 权限控制:实施最小权限原则
- 组件更新:保持所有第三方组件为最新版本
- 安全编码:避免直接拼接SQL,使用预处理语句
- 文件上传:实施严格的文件类型检查和内容验证
- 日志监控:记录所有敏感操作
6. 参考链接
- 之前的安全分析文章
- CNVD漏洞公告
本报告详细记录了LJCMS系统的安全审计过程和发现的主要漏洞,安全团队可根据此报告进行漏洞修复和系统加固。