首发先知社区
链接:https://xz.aliyun.com/t/14315
漏洞介绍
kkFileView是使用spring boot搭建的文件文档在线预览解决方案,支持主流办公文档的在线预览。
kkFileView 4.2.0 到4.4.0-beta版本中文件上传功能存在zip路径穿越问题,导致攻击者可以通过上传恶意构造的zip包,覆盖任意文件。
环境搭建
https://github.com/kekingcn/kkFileView/releases/tag/v4.3.0
问题:
aspose依赖加载不了
解决:
把配置的其它仓库注释掉,使用这个
1 | <mirror> |
添加jar包
漏洞复现
制作恶意hack.zip
,注意里面必须有一个正常文件,例如test
,便于创建hack.zip_
缓存文件
1 | import zipfile |
第一步上传恶意压缩包
第二步点击预览
可以看到任意写入文件,利用思路:
- 在linux下且高权限的情况下,可以通过写入计划任务反弹shell。
- 在windows下高权下可以通过写自启动 的方式getshell。
漏洞分析
通过url我们定位到漏洞的入口点:cn.keking.web.controller.OnlinePreviewController#onlinePreview
会根据文件的 URL 来获取文件的属性信息,并根据文件属性信息选择合适的文件预览处理器来进行文件预览处理。
在此处打个断点跟进
走到cn.keking.service.impl.CompressFilePreviewImpl#filePreviewHandle
在其中使用了CompressFileReader#unRar
方法来处理压缩文件
跟进cn.keking.service.CompressFileReader#unRar
大概做了一下几件事:
- 使用 SevenZip 库中的
openInArchive
方法打开了一个 SevenZip 压缩文件,并将其内容读取到inArchive
对象中 - 通过调用
getSimpleInterface()
方法,获取到该压缩文件的简单接口。 - 调用
getArchiveItems()
方法会返回一个包含了压缩文件中所有项的列表。
之后就是遍历处理的过程,漏洞点也就在这块,没有对文件路径做处理,就直接进行拼接创建
参考
https://www.oscs1024.com/hd/MPS-wzyc-o678
https://github.com/luelueking/kkFileView-v4.3.0-RCE-POC?tab=readme-ov-file