网络安全-kkFileViews任意文件读取漏洞原理解析

这篇具有很好参考价值的文章主要介绍了网络安全-kkFileViews任意文件读取漏洞原理解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在学习的过程中,了解到kkFileView存在任意文件读取、SSRF、文件上传漏洞。

为了更深刻的理解其原理,我从git拉取了项目,由于该漏洞在最新版本已经修复,所以这只是历史版本中存在的。

写这篇文章来提醒自己代码中容易出问题的地方。

环境准备

来到kkFileView官网,发现支持Gitee,直接进去用git clone下来

kkfileview历史漏洞,elasticsearch,大数据,搜索引擎

git clone https://gitee.com/kekingcn/file-online-preview.git

闲话少叙,直接开始看源代码。

1.任意文件包含漏洞

根据其他文章介绍,版本<=3.6.0存在此漏洞。加上这个连接就可以读取服务器上的文件//getCorsFile?urlPath=file:///etc/passwd

git tag  # 查看所有标签
git checkout v3.6.0 # 切换分支

然后用idea打开这个项目,直接搜索到controller中的getCorsFile接口,源代码如下。可以看到作者本意是为了解决跨域问题,没有想到被利用读取任意文件。

在代码中也没有任何的过滤,才会导致任意文件读取漏洞。

byte[] bytes = NetUtil.downloadBytes(url.toString());罪魁祸首在于这一行代码,没有对文件路径做出任何限制。

/**
     * 根据url获取文件内容
     * 当pdfjs读取存在跨域问题的文件时将通过此接口读取
     *
     * @param urlPath  url
     * @param response response
     */
    @RequestMapping(value = "/getCorsFile", method = RequestMethod.GET)
    public void getCorsFile(String urlPath, HttpServletResponse response) {
        logger.info("下载跨域pdf文件url:{}", urlPath);
        try {
            URL url = WebUtils.normalizedURL(urlPath);
            byte[] bytes = NetUtil.downloadBytes(url.toString());
            IOUtils.write(bytes, response.getOutputStream());
        } catch (IOException | GalimatiasParseException e) {
            logger.error("下载跨域pdf文件异常,url:{}", urlPath, e);
        }
    }

本地复现一下,和预期完全一样:

kkfileview历史漏洞,elasticsearch,大数据,搜索引擎

修复方法

现在我切换到下一个版本,来看看作者是如何修复的。

 没想到下一个版本直接v4.0.0了

git checkout v4.0.0

我发现4.0.0并没有修复,4.2.0才开始修复这个漏洞。代码如下,可以看到加了非常多的过滤。

最新版本我就不贴出来了,反正有更多的过滤。

@GetMapping("/getCorsFile")
    public void getCorsFile(String urlPath, HttpServletResponse response) throws IOException {
        try {
            urlPath = WebUtils.decodeUrl(urlPath);
        } catch (Exception ex) {
            logger.error(String.format(BASE64_DECODE_ERROR_MSG, urlPath),ex);
            return;
        }
        HttpURLConnection urlcon;
        InputStream inputStream = null;
        if (urlPath.toLowerCase().startsWith("file:") || urlPath.toLowerCase().startsWith("file%3")) {
            logger.info("读取跨域文件异常,可能存在非法访问,urlPath:{}", urlPath);
            return;
        }
        logger.info("下载跨域pdf文件url:{}", urlPath);
        if (!urlPath.toLowerCase().startsWith("ftp:")){
            try {
                URL url = WebUtils.normalizedURL(urlPath);
                urlcon=(HttpURLConnection)url.openConnection();
                urlcon.setConnectTimeout(30000);
                urlcon.setReadTimeout(30000);
                urlcon.setInstanceFollowRedirects(false);
                if (urlcon.getResponseCode() == 302 || urlcon.getResponseCode() == 301) {
                    urlcon.disconnect();
                    url =new URL(urlcon.getHeaderField("Location"));
                    urlcon=(HttpURLConnection)url.openConnection();
                }
                if (urlcon.getResponseCode() == 404 || urlcon.getResponseCode() == 403 || urlcon.getResponseCode() == 500 ) {
                    logger.error("读取跨域文件异常,url:{}", urlPath);
                    return ;
                } else {
                    if(urlPath.contains( ".svg")) {
                        response.setContentType("image/svg+xml");
                    }
                    inputStream=(url).openStream();
                    IOUtils.copy(inputStream, response.getOutputStream());
                    urlcon.disconnect();
                }
            } catch (IOException | GalimatiasParseException e) {
                logger.error("读取跨域文件异常,url:{}", urlPath);
                return ;
            } finally {
                IOUtils.closeQuietly(inputStream);
            }
        } else {
            try {
                URL url = WebUtils.normalizedURL(urlPath);
                if(urlPath.contains(".svg")) {
                    response.setContentType("image/svg+xml");
                }
                inputStream = (url).openStream();
                IOUtils.copy(inputStream, response.getOutputStream());
            } catch (IOException | GalimatiasParseException e) {
                logger.error("读取跨域文件异常,url:{}", urlPath);
                return ;
            } finally {
                IOUtils.closeQuietly(inputStream);
            }
        }
    }

引用

https://www.cnblogs.com/xbbth/p/17446987.html文章来源地址https://www.toymoban.com/news/detail-847967.html

到了这里,关于网络安全-kkFileViews任意文件读取漏洞原理解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Goby漏洞更新 | Grafana 网络应用程序平台 welcome 任意文件读取漏洞(CVE-2021-43798)

    Grafana是一个跨平台、开源的数据可视化网络应用程序平台。用户配置连接的数据源之后,Grafana可以在网络浏览器里显示数据图表和警告。未授权的攻击者利用该漏洞,能够获取服务器敏感文件。 Grafana可以在网络浏览器里显示数据图表和警告。未授权的攻击者利用该漏洞,能

    2023年04月09日
    浏览(29)
  • 世邦 IP网络对讲广播系统 getjson.php接口存在任意文件读取漏洞

    产品简介 SPON世邦IP网络对讲广播系统是一种先进的通信解决方案,旨在提供高效的网络对讲和广播功能。 漏洞概述 SPON世邦IP网络对讲广播系统getjson.php接口处存在任意文件读取漏洞,未经身份验证的攻击者可利用此漏洞读取敏感文件。 指纹识别 fofa: 漏洞利用 poc: 修复建议

    2024年02月03日
    浏览(51)
  • 【网络安全】文件包含漏洞解析

    博主昵称:跳楼梯企鹅 博主主页面链接: 博主主页传送门 博主专栏页面连接: 专栏传送门--网路安全技术 创作初心:本博客的初心为与技术朋友们相互交流,每个人的技术都存在短板,博主也是一样,虚心求教,希望各位技术友给予指导。 博主座右铭:发现光,追随光,

    2024年02月01日
    浏览(34)
  • 世邦通信SPON IP网络对讲广播系统rj_get_token.php 任意文件读取漏洞

    产品介绍 世邦通信SPON IP网络对讲广播系统采用领先的IPAudio™技术,将音频信号以数据包形式在局域网和广域网上进行传送,是一套纯数字传输系统。 漏洞描述 spon IP网络对讲广播系统rj_get_token.php存在任意文件读取漏洞,攻击者可通过该漏洞在服务器端读取任意敏感文件。 资产

    2024年01月25日
    浏览(44)
  • 网络安全-pikachu之文件上传漏洞2

    进入到第二个文件上传漏洞,发现名字是MIME type,并且查看前端源代码没发现限制,所以是后段,盲猜通过抓包就可以绕过后段限制。 先知道MIME type是什么,通过查找资料发现是:Content-Type是返回消息中非常重要的内容,表示后面的文档属于什么MIME类型。Content-Type: [type]/[

    2024年02月21日
    浏览(34)
  • Web漏洞-任意文件读取漏洞

    任意文件读取漏洞 原理 任意文件读取是属于文件操作漏洞的一种,通过提交专门设计的输入,攻击者就可以在被访问的文件系统中读取或写入任意内容,往往能够使攻击者从服务器上获取敏感文件,正常读取的文件没有经过校验或者校验不严格,用户可以控制这个变量或者

    2024年02月13日
    浏览(39)
  • 网络安全进阶学习第七课——文件包含漏洞

    开发人员通常会把可重复使用的函数写到单个文件中,在 使用某些函数 时, 直接调用此文件 ,而无需再次编写,这种调用文件的过程一般被称为包含。 为了使代码更加灵活,通常会将被包含的文件设置为 变量 ,用来进行动态调用,但正是由于这种灵活性,从而导致客户端

    2024年02月15日
    浏览(45)
  • 网络安全进阶学习第五课——文件上传漏洞

    大部分的网站和应用系统都有上传功能,如用户头像上传,图片上传,文档上传等。 由于对上传文件 未作过滤 或 过滤机制不严(文件后缀或类型) ,导致恶意用户可以上传 脚本文件 ,通过上传文件可以达到控制网站权限的目的。 攻击者可获得网站控制权限; 查看、修改

    2024年02月06日
    浏览(30)
  • 网络安全-IIS短文件名枚举漏洞

    系统存在IIS短文件名枚举漏洞。该漏洞会泄露部分服务器敏感文件及目录名,如后台地址、备份文件等 IIS-ShortName-Scanner下载链接:https://pan.baidu.com/s/1yxK_goT5XJYc3yVcGUCDxw?pwd=5lcq 提取码:5lcq python版本的需要安装python27环境:https://pan.baidu.com/s/1yxK_goT5XJYc3yVcGUCDxw 提取码:h2or java版

    2024年02月11日
    浏览(30)
  • 【网络安全】文件上传漏洞及中国蚁剑安装

    文件上传漏洞是指由于程序员未对上传的文件进行严格的验证和过滤,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。如常见的头像上传,图片上传,oa 办公文件上传,媒体上传,允许用户上传文件,如果过滤不严格,恶意用户利用文件上传漏洞,

    2024年02月04日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包