半途而废的jfinal_cms审计
redpomelo Lv2

前言

记一次失败的代码审计,还有好多洞审出来没有记录,因为审出来打开GitHub issue界面发现大家都提交过了,只是项目年久失修没有人维护没人修,遂直接放弃,展示一下前十分钟的xss成果…后面的sql注入,rce什么的不想写了

仓库链接:https://github.com/jflyfox/jfinal_cms

审计版本:5.1.0最新版,一堆洞

软件包分析

这个包结构,遵循MVC三层架构

image-20241208095932971

项目中只有使用了MySql的驱动,好像是它使用的web框架封装了jdbc操作,查看文档后验证了这是一个WEB+ORM框架

image-20241208111730420

image-20241208100405820

后台XSS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
com/jflyfox/modules/admin/person/PersonController.java
public void save() {
JSONObject json = new JSONObject();
json.put("status", 2);// 失败

SysUser user = (SysUser) getSessionUser();
int userid = user.getInt("userid");
SysUser model = getModel(SysUser.class);

if (userid != model.getInt("userid")) {
json.put("msg", "提交数据错误!");
renderJson(json.toJSONString());
return;
}

// 第三方用户不需要密码
if (user.getInt("usertype") != 4) {
String oldPassword = getPara("old_password");
String newPassword = getPara("new_password");
String newPassword2 = getPara("new_password2");
if (!user.getStr("password").equals(JFlyFoxUtils.passwordEncrypt(oldPassword))) {
json.put("msg", "密码错误!");
renderJson(json.toJSONString());
return;
}
if (StrUtils.isNotEmpty(newPassword) && !newPassword.equals(newPassword2)) {
json.put("msg", "两次新密码不一致!");
renderJson(json.toJSONString());
return;
} else if (StrUtils.isNotEmpty(newPassword)) { // 输入密码并且一直
model.set("password", JFlyFoxUtils.passwordEncrypt(newPassword));
}
}

if (StrUtils.isNotEmpty(model.getStr("email")) && model.getStr("email").indexOf("@") < 0) {
json.put("msg", "email格式错误!");
renderJson(json.toJSONString());
return;
}
// 日志添加
model.put("update_id", getSessionUser().getUserid());
model.put("update_time", getNow());

model.update();
UserCache.init(); // 设置缓存
SysUser newUser = SysUser.dao.findById(userid);
setSessionUser(newUser); // 设置session
json.put("status", 1);// 成功

renderJson(json.toJSONString());
}

可以看到没有对输入的数据做任何内容校验,仅仅做了越权校验以及对邮箱号格式校验,且仅检测内容中是否包含@,然后把所有数据写入到数据库,

验证

image-20241208104932863

保存后

image-20241208105001981

可以看到数据流侵入到了控制流,成功写入数据库,造成了XSS漏洞

image-20241208105037984

image-20241208105159685

 评论
评论插件加载失败
正在加载评论插件
由 Hexo 驱动 & 主题 Keep
本站由 提供部署服务
总字数 15.4k 访客数 访问量