我不是二蛋
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
一、cms简介:
JFinalCms是开源免费的JAVA企业网站开发建设管理系统,极速开发,动态添加字段,自定义标签,动态创建数据库表并crud数据,数据库备份、还原,动态添加站点(多站点功能),一键生成模板代码。
本文是关于JFinal CMS漏洞分析学习,将围绕存任意文件读取漏洞进行分析学习,大纲:
1、环境搭建
2、文件读取漏洞分析
二、环境搭建
下载源码,使用idea导入
创建相应的数据库,更改配置信息
然后启动环境,登录到后台
三、文件读取漏洞分析
这里我们使用的方法是全局搜索关键字配合网页功能点灰盒审计
我们依次进入这些功能点,看看有什么发现
在系统管理里面的模板管理编辑这个模块中我们发现url存在文件名跟路径极有可能可能会存在文件读取漏洞
我们根据这个关键字去源码中找一下这个代码
跟踪带路由的这个Controller层代码
再找edit关键字
我们分析一下主要edit中的主要代码
if (StringUtils.isBlank(fileName)) {
render(CommonAttribute.ADMIN_ERROR_VIEW);
return;
}
这三行代码检查fileName是否为空或仅包含空白字符。如果是这样,它会渲染(显示)一个错误视图,
并提前退出方法。CommonAttribute.ADMIN_ERROR_VIEW应该是定义了管理员错误页面路径的一个常量。
String filePath = "";
if(StringUtils.isNotBlank(directory)){
filePath = "/"+directory.replaceAll(",", "/")+"/"+fileName;
}else{
filePath = "/"+fileName;
}
这几行代码构建了文件路径。如果directory不为空,则用逗号分隔的目录字符串替换为斜杠,并将其
与fileName拼接起来形成完整路径。如果directory为空,则只使用fileName创建路径。replaceAll
方法用于将所有出现的逗号替换为斜杠,以适应文件路径格式。
setAttr("content", StringEscapeUtils.escapeHtml(TemplateUtils.read(filePath)));
这一行读取由filePath指定的文件内容,通过TemplateUtils.read方法读取文件内容,并使用
StringEscapeUtils.escapeHtml转义HTML特殊字符,防止XSS攻击等安全问题,然后将结果设置为
content属性,以便在视图中显示。
通过directory判断这段代码,我们可以确定当directory为空时,可以根据fileName来创建路径读取文件。因此此处存在文件读取漏洞
我们验证一下,因为是在windows系统下,文件的根路径不会像Linux系统一样是统一的根路径,而是自己的底盘。
我们这里在G盘根目录下创建了一个1.txt
我们抓包进行测试一下
成功读取到文件,确定存在文件读取漏洞
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
