拖了好久打算记录一下monitor的出题思路,题目地址在 : sctf ,仓库里面有一个最开始的demo思路和最终的版本
思路的来源是当时在打哪场国外的ctf记不太清了。然后在打那场比赛前,在某场比赛中学习到了使用原型链污染去污染fetch去更改请求方式。然后在这场比赛中我尝试使用原型链去污染http.get
,发现其是可以去更改的,且和当时文档说的http.get不会去继承原型上的属性所不同的。
所以我就去看了下http.get
的代码和可用的参数,发现了个socketPath
挺有意思的,但是最新版本的这参数并不会去继承,但是又发现在linux默认的下载的版本的node
是能够污染的,算是个供应链问题?
也即是我们可用通过原型链污染,可以向监听的socket
发送消息,本来想的是对docker deamon
的利用,比如通过访问其rest api
去重启一个容器,然后那个容器存在任意文件上传,去覆盖docker的启动脚本,但是docker in docker
需要特权,是不能保证安全性的。所以临时更改为与redis.sock通信去设置。感觉还是原版含了点算是横移好玩点哈哈哈。
后来向node
提了下这个文件,和ejs
有点像,他们认为原型链污染是用户使用的问题,所以我就是改了下文档混了下哈哈哈