JFinalcms代码审计

news2025/1/19 18:48:37

JFinalCms是开源免费的JAVA企业网站开发建设管理系统,极速开发,动态添加字段,自定义标签,动态创建数据库表并crud数据,数据库备份、还原,动态添加站点(多站点功能),一键生成模板代码。

环境布置:IDEA打开项目,等待maven加载好。

使用phpstudy集成的mysql5.7数据库即可,导入JFinalCMS.sql数据库。

修改pom文件:

使用local9.0.90TOMCAT,JDK环境1.8。

运行TOMCAT,打开后台:

http://localhost:8081/cms_war_exploded/

反射xss:

搜索/admin/login定位到代码块:

由上可见,通过getPara获取账号密码后再通过render渲染到前端页面:

再分析前端代码构造xss进行闭合:

存储xss:

前台存在留言功能,留言会被管理员审核:

登录后台,点击扩展管理,留言信息:

原理同上。

帮助网安学习,全套资料S信免费领取:
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

Sql注入漏洞(1):

该CMS存在很多处sql注入漏洞,大多数都是以+直接拼接sql注入语句造成,可以全局搜索+号寻找注入点。

找到以上代码块,可以直接看到title参数通过+直接拼接进入sql语句执行,于是我们继续找前端是调用的什么接口,并看看是否在接受参数时进行了过滤。

搜索findPage参数:

可以看到Contentcontroller层中存在title参数,点进去,定位到具体代码块:

可以看到调用了getPara方法获取传入的title参数,继续跟进getPara方法:

并未重写该方法,只是简单获取参数,未进行任何过滤,回到原来的controller层,向上翻,找到接口调用,数据包如下:

POST /cms_war/admin/content/data HTTP/1.1

Host: localhost:8081

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0)
Gecko/20100101 Firefox/130.0

Accept: text/html, \*/\*; q=0.01

Accept-Language:
zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2

Accept-Encoding: gzip, deflate, br

Content-Type: application/x-www-form-urlencoded; charset=UTF-8

X-Requested-With: XMLHttpRequest

Content-Length: 47

Origin: http://localhost:8081

Connection: keep-alive

Referer: http://localhost:8081/cms_war/admin/content

Cookie: JSESSIONID=EF8BB53892173B8A4577EFC32D0215BA;
listQuery=categoryId%3D%26title%3D%26sorts%3D%26pageNumber%3D1

Sec-Fetch-Dest: empty

Sec-Fetch-Mode: cors

Sec-Fetch-Site: same-origin

Priority: u=0

categoryId=&title=%E7%BD%91&sorts=&pageNumber=1

将localhost替换为物理机IP放入sqlmap:

证明存在sql注入漏洞,其对应前端功能如下:

Sql注入漏洞(2):

前台搜索框处也存在sql注入漏洞,只不过此处的调用过程较难找到。

如上图搜索关键字search定位到代码块:

仔细分析如上代码,我无法追踪keyword的具体调用。

以上代码是通过setAttr方法直接存储到当前请求的属性当中。我对keyword处打断点调试也未理清楚它后续是如何调用的。

于是再换一种思路,直接全局搜索keyword:

定位到具体代码,但无法确定是否是调用的此处findPage代码来构造sql。

搜索findPage也没有明确思路。

于是改变思路,由于keyword关键字最终是通过模板template渲染调用。

于是在template处挨个点进去找类似功能代码:

最终定位到代码块:

根据注释明确此处代码是根据不同关键词进行搜索,包含关键词keyword,继续查看keyword调用链:

确定是通过调用findPage,传入keyword参数来调用数据:

用sqlmap验证keyword参数:

任意文件读取:

翻找controller层代码,找到文件下载代码块:

可见未对传入的fileKey参数进行过滤,直接拼接进行文件读取。

(且我在翻找filter过滤器后,发现似乎 并未对该路径进行权限校验
,可进行未授权调用接口)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2213990.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

管家婆-本地化-重装数据库导入数据库mdf——未来之窗数据恢复专家

一、进入数据库管理软件 二、数据附加 三、选择文件mdf 四、错误处理 关闭管家婆和数据库服务重启 五、确定文件 六、确认附加 七、替换管家婆账套 八、阿雪技术观 拥抱开源与共享,见证科技进步奇迹,畅享人类幸福时光! 让我们积极投身于技术…

boost函数对象

文章目录 bindref函数FunctionLambda 本章介绍的是函数对象,可能称为’高阶函数’更为适合。 它实际上是指那些可以被传入到其它函数或是从其它函数返回的一类函数。 在C中高阶函数是被实现为函数对象的,所以这个标题还是有意义的。 bind 和C中的 std::…

使用Jenkins部署项目

部署中的痛点 为什么要用Jenkins?我说下我以前开发的痛点,在一些中小型企业,每次开发一个项目完成后,需要打包部署,可能没有专门的运维人员,只能开发人员去把项目打成一个exe包,可能这个项目已…

淘宝图片搜索商品数据api接口对接详细的描述和解释

淘宝图片搜索商品数据接口是一项高级的API服务,它允许用户通过上传图片来搜索淘宝上的商品。这一功能依托于先进的图像识别技术,通过复杂的算法对上传的图片进行分析和处理,从而找到与图片相似的商品。以下是对该接口的详细描述和解释&#x…

Java避坑案例 - 忽略线程重用导致信息错乱

文章目录 Pre导读问题背景问题重现存在Bug的代码BUG现象 问题分析解决方案修正后的代码修正后的现象 ThreadLocal 的正确使用小结 Pre 并发编程-11线程安全策略之线程封闭 Spring JDBC-Spring事务管理之ThreadLocal基础知识 每日一博 - ThreadLocal VS InheritableThreadLoc…

忘记7-zip文件7-zip文件,还可以解压zip文件吗?

文件压缩与解压已成为我们日常处理数据和存储信息的常规操作。7-Zip,作为一款开源且功能强大的文件压缩工具,凭借其高压缩率、支持多种格式以及免费使用的特点,赢得了广大用户的青睐。然而,出于保护文件内容安全的考虑&#xff0c…

echart 采坑记录

1、刷新数据的时候使用setOption myChart.setOption(option,true); 第二个参数为true才会刷新数据 2、react引入ehcart,

[C++] 红黑树的实现:原理与底层解析

文章目录 [toc] 红黑树的概念红黑树的规则红黑树如何确保最长路径不超过最短路径的2倍红黑树规则最短路径与最长路径的分析最短路径:全黑路径最长路径:红黑交替路径 结论:红黑树的平衡性如何保障操作效率 红黑树的实现红黑树的节点结构红黑树…

【性能测试】jmeter通过定时器来模拟接口的动态请求时机

在 Apache JMeter 中使用定时器组件来模拟真实用户行为是非常重要的,因为这有助于确保你的性能测试结果更加贴近实际情况。 1. 固定定时器(Constant Timer) 这是最基础的定时器,用于在每个样本之间增加固定的时间延迟。然而&…

OpenCV-物体跟踪

文章目录 一、物体跟踪的定义二、OpenCV中的物体跟踪算法三、OpenCV物体跟踪的实现步骤四、代码实现五、注意事项 OpenCV是一个开源的计算机视觉和机器学习软件库,它提供了丰富的功能来实现物体跟踪。以下是对OpenCV中物体跟踪的详细解释: 一、物体跟踪的…

微服务架构是如何运作的?

在当今的软件架构领域,微服务架构以其灵活性、可扩展性和高可用性等优势,受到了越来越多企业和开发者的青睐。那么,微服务架构究竟是如何运作的呢?让我们一起来深入了解。 一、微服务架构的基本概念 微服务架构是一种将单个应用…

QT开发--网络编程

第十七章 QT网络编程 Qt Network模块用于TCP/IP编程,提供HTTP请求、cookies、DNS等功能的C类。 使用需在pro文件中添加“QT network”。 tcp通信流程图 17.1 QHostInfo QHostInfo类用于查找主机名与IP地址的关联。它提供两种查找方式: 1、异步查找&…

windows10创建系统账户

方式一: .a.点击 windows 图标->设置 .b.点击账户 .c.点击其他账户->将其他人添加到这台电脑->弹出对话框 .d.选中用户->右键->新用户->输入用户名和密码->创建 如下创建完成 方式二: windows R 输入lusrmgr.msc 后续操作步骤同上。 修改用…

YOLO11改进|SPPF篇|引入FocalModulation特征金字塔

目录 一、【FocalModulation】特征金字塔1.1【FocalModulation】特征金字塔介绍1.2【FocalModulation】核心代码二、添加【FocalModulation】特征金字塔2.1STEP12.2STEP22.3STEP32.4STEP4三、yaml文件与运行3.1yaml文件3.2运行成功截图一、【FocalModulation】特征金字塔 1.1【…

Linux网络命令:用于配置防火墙规则的一个用户友好的工具ufw详解

目录 一、概述 二、安装 UFW 三、启动、重启和关闭 UFW 1、启动 2、关闭UFW 3、 重启 UFW 四、查看 UFW 状态 五、UFW 基本命令 1. 允许端口 (1)单个 TCP 端口 (2)允许单个 UDP 端口 (3&#xff0…

MySQL增删改进阶

目录 1.数据库约束 1.1约束类型 1.2 not null约束 1.3 unique:唯一约束 1.4 default:默认约束 1.5 primary key:主键约束 1.6 foreign key:外键约束 1.7 check约束(了解) 2.表的设计 3.新增(进阶&…

CUDA 运行时GPU信息查询

cuda 官网文档名&#xff1a;CUDA_Runtime_API 运行时API查询GPU信息 调用 cudaDeviceProp prop; cudaGetDeviceProperties(&prop, device_id) 定义 由此可见&#xff0c;只能在主机上调用。 #include <cuda_runtime.h>#include <iostream> #include <…

Apache Kafka消息传递策略

kafka消息传递策略 微信公众号&#xff1a;阿俊的学习记录空间小红书&#xff1a;ArnoZhangwordpress&#xff1a;arnozhang1994博客园&#xff1a;arnozhangCSDN&#xff1a;ArnoZhang1994 现在我们了解了一些关于生产者和消费者的工作原理&#xff0c;接下来讨论Kafka在生产…

Java:玩家打怪小游戏

今天&#xff0c;我们尝试用Java来做一个“打怪小游戏”&#xff0c;听名字就知道&#xff0c;我们是应该创建几个成员和怪物&#xff0c;还有知道知道成员和怪物的血量&#xff0c;一次攻击的伤害等等。。当然我们的游戏攻击模式是“回合制”&#xff08;其实是别的方法&#…

SpringCloud-OpenFeign-服务接口调用

是什么 把需要暴露的api使用接口来暴露&#xff0c;客户端需要调用的时候&#xff0c;直接查看这个接口中有没有就可以了 通用步骤 架构说明 common模块 common 引入 openfeign 新建服务接口类 FeignClient(value "cloud-payment-service") // 服务名 public i…