某DCS zip Slip任意写文件漏洞
前言
hw的时候遇到的,结束后复现找了一下漏洞代码
正文
漏洞url:
/dcs.web/upload?convertType=19&isSourceDir=0
文档说明
upload处理点
config.inputDir.getPath()获取config.properties里的dir.input,然后设置了三个属性值:
* fname - 文件名
* finput - 文件上传后的路径
* sourceRelativepath - 生成的UUID
文件写入到input目录后,返回json请求/convert进行处理
首先调用buildParam函数进行处理
获取convertType参数,然后转换成int类型。传入EnumConvertType.getEnum判断值是否存在hash表里
经过获取一些请求参数后,然后来到 String lowrealInput = realInput.toLowerCase()
往上跟踪发现取finput属性,获取inputDir,outputDir,zipFileName,zipOutput请求参数。然后进行判断,由于请求都没有带到这些参数所以去到finput
然后进入大判断,判断lowrealInput尾部是否存在对应的后缀,并将EnumConvertType设置为对应的hash表key
然后去到284行,获取fname,fileName属性的值。判断fileName不为空调用setFIleName函数。设置this.fileName,然后获取compressedSuffix请求参数,最后判断enumType不为空调用updateFilePath函数
updateFilePath函数
后面就是对一些请求参数转int进行设置
回到ConvertParamBuilder.class,经过checkParam函数判断是不是pdf,然后单独开个线程处理然后生成json调用getJsonResult函数
getJsonResult函数
getResultDate函数生成返回的url
ZipService.zipfile函数,先获取tmpDir目录然后调用copyDirectiory函数将input目录下上传的文件copy到out目录。最后调用zip函数
zip函数如下
zip函数
引用一张图
参考链接:https://saucer-man.com/information_security/364.html
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。
文章标题:某DCS zip Slip任意写文件漏洞
本文作者:九世
发布时间:2021-12-05, 08:53:20
最后更新:2021-12-05, 09:17:37
原始链接:http://jiushill.github.io/posts/d1787975.html版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。