对于TPCMF框架的一次代码审计
字数 1282 2025-08-18 11:38:41
TPCMF框架储存型XSS漏洞分析与复现
1. 漏洞概述
- 漏洞类型:储存型XSS(跨站脚本攻击)
- 影响框架:天睿PHP内容管理框架(TPCMF)
- 框架描述:基于PHP7技术+CodeIgniter4作为系统核心部件
- 漏洞文件:
/dayrui/Fcms/Library/Form.php - 利用条件:用户注册功能可用,管理员查看用户列表
2. 环境准备
- 源码版本:TPCMF框架-安装包-201905171230.zip
- 下载地址:http://www.tpcmf.com/down/
- 测试环境:本地搭建的TPCMF框架环境
3. 漏洞分析
3.1 漏洞位置
- 主要漏洞文件:
/dayrui/Fcms/Library/Form.php - 相关调用文件:
/dayrui/Core/Controllers/Member/Register.php
3.2 漏洞成因
-
注册流程分析:
- 注册用户时,
Register.php调用check_username()函数验证用户名 - 该函数位于
Form.php文件中
- 注册用户时,
-
安全缺陷:
check_username()函数仅检查用户名是否已注册- 未对用户名内容进行XSS过滤或转义处理
- 导致恶意XSS代码被直接存储到数据库中
-
攻击链:
- 攻击者注册包含XSS payload的用户名
- 管理员查看用户列表时触发XSS
- 可窃取管理员cookie(未开启httponly时)
4. 漏洞复现步骤
4.1 准备工作
- 搭建本地TPCMF环境
- 确保用户注册功能可用
4.2 攻击步骤
- 访问注册页面
- 填写注册信息:
- 用户名:
</tExtArEa>'"><sCRiPt>alert("xss")</sCrIpT> - 其他字段按正常注册填写
- 用户名:
- 提交注册表单
- 以管理员身份登录后台
- 访问用户列表页面
- 观察XSS弹窗触发
4.3 验证结果
- 管理员查看用户列表时,浏览器执行恶意脚本
- 弹出"xss"警告框,证明漏洞存在
5. 漏洞修复建议
-
输入过滤:
- 在
check_username()函数中添加XSS过滤 - 使用HTML实体编码或专用过滤函数
- 在
-
输出编码:
- 在显示用户名时进行HTML编码
-
安全增强:
- 启用HTTPOnly标志保护cookie
- 实施Content Security Policy (CSP)
6. 代码审计技巧
-
审计重点:
- 关注用户输入点(如注册、评论等)
- 追踪输入数据的处理流程
- 检查是否缺少过滤或编码
-
常见模式:
- 输入直接存入数据库
- 输出时未编码
- 使用不安全的函数(如innerHTML)
-
工具辅助:
- 使用代码审计工具扫描
- 手动追踪关键函数调用链
7. 总结
该漏洞展示了典型的储存型XSS案例,由于缺乏输入验证和输出编码,导致攻击者可以注入恶意脚本。通过此案例,安全研究人员可以学习到:
- 代码审计中如何追踪用户输入流程
- 识别缺少安全措施的关键点
- 理解XSS漏洞的实际危害
- 掌握基本的漏洞修复方法
对于开发者而言,此案例强调了输入验证和输出编码的重要性,以及在框架设计中内置安全机制的必要性。