解题过程

当解压操作可以覆盖上一次解压文件就可以造成任意文件上传漏洞。
查看upload.php源码:
image.png
zip.php
image.png
构造payload:
先构造一个指向 /var/www/html的软连接(因为html目录下是web环境,为了后续可以getshell)。
image.png
利用命令(zip —symlinks test.zip ./*)对test文件进行压缩。
image.png
此时上传该test.zip解压出里边的文件也是软连接 /var/www/html目录下接下来的思路就是想办法构造一个gethsell文件让gethsell文件正好解压在/var/www/html 此时就可以getshell。
构造第二个压缩包,我们先创建一个test目录(因为上一个压缩包里边目录就是test),在test目录下写一个shell文件,在压缩创建的test目录 此时压缩包目录架构是:test/cmd.php。
当我们上传这个压缩包时会覆盖上一个test目录,但是test目录软链接指向/var/www/html 解压的时候会把cmd.php放在/var/www/html,此时我们达到了getsehll的目的。
image.png
上传第一个压缩包:
image.png
在上传第二个压缩包文件,此时cmd.php已经在/var/ww/html 目录下访问。
image.png
访问cmd.php执行命令成功读取到flag。
image.png