HITCON CTF 2024 web复现
首发于先知社区: https://xz.aliyun.com/t/15130?time__1311=GqjxuQD%3DeewxlxGg2DyDmgtQm7SbmQ2YD
Echo as a Service
这里先放出源码
|
|
这里因为题目describe说要RCE所以这里直接能定位到
|
|
这里通过bun的docs 对比一下当前版本和1.1.8版本在使用shell的区别
|
|
可以看见可以进行subshell,并且可以利用<来写入文件 所以就这样
|
|
最终脚本
|
|
可以看到读到了。
RClonE
题目描述
|
|
然后这里我们主要看一下大概的逻辑 bot.js
|
|
app.js
|
|
这里我们搭建起来环境 可以看到是一个传url的地方,这里盲猜一下是ssrf,因为一般都出现在这种请求当中,并且我们可以发现源码并没有对其做过滤。 这里我们用webhook测试一下 可以看到是做了一个请求的。 https://rclone.org/sftp/#sftp-ssh 然后通过这个rclone官网可以看见我们可以利用sftp去在ssh执行命令的。所以我们可以先创建一个远程的SFTP地址。 然后如果我们需要创建一个remote的SFTP服务,我们可以通过请求这个路由来进行创建http://xxxx:5527/config/creat
|
|
这样子我们就可以创建一个remote,然后我们写成html可以这样
|
|
然后后面的js是为了把ssh要执行的命令先写进去然后在后面访问的时候让他自动触发
|
|
这样子就会触发让他执行上面写的ssh命令然后把内容外带出来。
然后另外一个队伍的wp是这么写的,因为rclone不出网所以利用二分法进去把flag leak出来
|
|
Truth of NPM
首先我们看到query.tsx文件中有这么一个函数
|
|
这里我们可以看到
|
|
这里他会自动import一个包,这个包可以是remote的。 然后在import完之后
|
|
他就会删掉原来的你install包中的文件,但是因为这个删除用的是这个函数fs.walk
|
|
他的特性就是会保留非utf-8编码的文件即tsx文件。 然后在main函数中
|
|
你访问你包的名称就会自动import下来,就可以执行命令了,但是我们都是在Deno的沙箱中的,所以我们要执行命令的话要绕一下沙箱 这里具体还没研究透怎么绕的呜呜呜还得花点时间 exp.tsx
|
|
exp.js(绕沙箱)
|
|