UTCTF2024 Schrödinger + Easy Mergers

Easy Mergers v0.1

服务器会在userCompanies中为每一个session创建一个数组
image.png

/api/makeCompany可以为当前的userCompanies[req.session.uid]根据传入dataattributesvalues创建一个对象插入到数组中
image.png

随便创建一个,在/api/getAll中查看
image.png

/api/absorbCompany/:cid可以传入的data修改userCompanies[req.session.uid][cid],具体做法在merger.js
image.png

修改的部分存在原型链污染,使用下面的data污染secret执行命令

{"attributes": ["__proto__"], "values":[{"cmd":"ls"}]}

getflag
image.png

Schrödinger

尝试使用压缩软链接文件上传

ln -s /etc/passwd s

成功读取
image.png

/proc/self/environ查看进程环境变量,找到工作目录HOME=/home/copenhagen。根据题目描述,推测flag是用户目录下的flag.txt文件。

He'll likely be in the user's home directory.
You'll know he's fine if you find a "flag.txt" file.

生成一个/home/copenhagen/flag.txt的软链接上传,getflag
image.png