【全网首篇】Copyparty 路径遍历漏洞 CVE-2023-37474 漏洞分析

2024-02-20 13:44

本文主要是介绍【全网首篇】Copyparty 路径遍历漏洞 CVE-2023-37474 漏洞分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

图片


Copyparty是一个便携式文件服务器

Copyparty 路径遍历漏洞 CVE-2023-37474 漏洞分析,这个漏洞研究了一些时间,不过这个不难

漏洞复现分析环境

Copyparty测试版本:1.8.0和1.8.2

系统:Windows10 和 Linux

运行环境:Python3.11

漏洞分析

拿到程序,发现从代码的角度来看,代码量很小

图片

可以看见就300行左右

看一下文件还是挺大的

图片

估计其他的好多需要的库都存在下面的注释里面

启动程序,看见启动日志里面有一个临时文件

图片

发现确定是叫代码放到了那个注释里面,然后叫这个运行代码放到了临时文件里面

图片

看见里面有源码我们开始分析

然后搜索看到了发现一个很可能会存在的漏洞地方

图片

然后拿到路径后进入self.tx_file(static_path)

图片

传给这个变量

图片

图片

图片

open_func(*open_args) 使用了 * 操作符,它将 open_args 列表中的元素解包成单独的参数,然后传递给 open_func 函数,最终读取文件造成了这个漏洞

图片

看一下修复的代码

修复后的代码先创建了一个 path_base 变量,用来存储静态文件所在目录的绝对路径,然后使用 os.path.join() 将 path_base 和 self.vpath[5:] 进行拼接,得到静态文件的完整路径 static_path。接着,通过 absreal() 函数确保 static_path 是绝对路径,最后使用 startswith() 方法检查 static_path 是否以 path_base 开头,如果不是,说明存在路径遍历漏洞,记录日志并返回 404 错误页面。

漏洞POC

curl -i -s -k -X  GET 'http://127.0.0.1:3923/.cpr/%2Fetc%2Fpasswd'

图片

漏洞修复

  • • 将 copyparty 升级至 1.8.2 及以上版本

文末

关注公众号"知攻善防实验室",后台回复"交流群"获取技术交流群链接

这篇关于【全网首篇】Copyparty 路径遍历漏洞 CVE-2023-37474 漏洞分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/728402

相关文章

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

Linux修改pip和conda缓存路径的几种方法

《Linux修改pip和conda缓存路径的几种方法》在Python生态中,pip和conda是两种常见的软件包管理工具,它们在安装、更新和卸载软件包时都会使用缓存来提高效率,适当地修改它们的缓存路径... 目录一、pip 和 conda 的缓存机制1. pip 的缓存机制默认缓存路径2. conda 的缓

C++ 各种map特点对比分析

《C++各种map特点对比分析》文章比较了C++中不同类型的map(如std::map,std::unordered_map,std::multimap,std::unordered_multima... 目录特点比较C++ 示例代码 ​​​​​​代码解释特点比较1. std::map底层实现:基于红黑

Spring、Spring Boot、Spring Cloud 的区别与联系分析

《Spring、SpringBoot、SpringCloud的区别与联系分析》Spring、SpringBoot和SpringCloud是Java开发中常用的框架,分别针对企业级应用开发、快速开... 目录1. Spring 框架2. Spring Boot3. Spring Cloud总结1. Sprin

Spring 中 BeanFactoryPostProcessor 的作用和示例源码分析

《Spring中BeanFactoryPostProcessor的作用和示例源码分析》Spring的BeanFactoryPostProcessor是容器初始化的扩展接口,允许在Bean实例化前... 目录一、概览1. 核心定位2. 核心功能详解3. 关键特性二、Spring 内置的 BeanFactory

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析

《MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析》本文将详细讲解MyBatis-Plus中的lambdaUpdate用法,并提供丰富的案例来帮助读者更好地理解和应... 目录深入探索MyBATis-Plus中Service接口的lambdaUpdate用法及示例案例背景