某开源cms 0day挖掘
用户9528 漏洞分析 651浏览 · 2025-03-31 13:15

简介 CicadasCMS是用springboot+mybatis+beetl开发的一款CMS,支持自定义内容模型、模板标签、全站静态化等功能。
Pasted image 20250331211235.png
Pasted image 20250331211156.png


**漏洞挖掘** sql注入(成功) 漏洞发生位置在com.zhiliao.module.web.cms.ContentController#save:

save方法接受了一个content对象为参数,这个content对象包含主键contentId等信息,formParam对象为一个新建的hashMap,用于保存表单数据的键值对,表示了一些扩展字段和其对应值,那么在这个逻辑中,如果contentId不为空,则调用com.zhiliao.module.web.cms.service.ContentService#update更新数据,否则调用com.zhiliao.module.web.cms.service.ContentService#save进行数据保存:
Pasted image 20250331052259.png
com.zhiliao.module.web.cms.service.impl.ContentServiceImpl#update(com.zhiliao.mybatis.model.TCmsContent, java.lang.String, java.util.List<com.zhiliao.mybatis.model.TCmsModelFiled>, java.util.Map<java.lang.String,java.lang.Object>, java.lang.String[]):

又调用了com.zhiliao.module.web.cms.service.impl.ContentServiceImpl#SaveModelFiledParam进行数据保存:
Pasted image 20250331052841.png
接着跟进com.zhiliao.module.web.cms.service.impl.ContentServiceImpl#SaveModelFiledParam方法:

那么这里执行的逻辑是:首先进行非空判断,接着遍历表单数据并且动态拼接到sql执行语句中,最后进行执行,显然这里是存在sql注入漏洞:
Pasted image 20250331053306.png
文件上传(失败): com.zhiliao.common.upload.UploadComponent#uploadFile:

这里的newName是从this.getNewFileName(fileName);得到的,fileName又是通过this.getFileName(fileType) ;获得的:
Pasted image 20250331054728.png
最开始fileType又是通过this.getFileType(attachment.getOriginalFilename());获得的:
Pasted image 20250331055057.png
那么跟进com.zhiliao.common.upload.UploadComponent#getFileType:

那么这里是使用了lastIndexof函数,这样的话看上去后文件的类型是不可控的。

总结 这套源码是很老了,整体难度不大,非常适合新手进行学习。

0 条评论
某人
表情
可输入 255

没有评论

目录