[CISCN2023]unzip

news/2024/11/7 8:29:16/

[CISCN2023]unzip

环境搭建

1.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><form method="post" action="1.php" enctype="multipart/form-data"><input name="file" type="file"><input name="submit" type="submit"></form>
</body>
</html>

1.php

<?php
error_reporting(0);
highlight_file(__FILE__);$finfo = finfo_open(FILEINFO_MIME_TYPE);
if (finfo_file($finfo, $_FILES["file"]["tmp_name"]) === 'application/zip'){exec('cd /tmp && unzip -o ' . $_FILES["file"]["tmp_name"]);
};

然后在命令行输入:

php -S 192.168.56.129:8000 -t /var/www/html/

/var/www/html/ 作为网站根目录启动php服务器

image-20230528212644551

搭建成功

源码分析

首先通过1.html上传文件经过1.php,然后我们分析一下1.php:

<?php
...
# 这行代码使用 PHP 内置函数 finfo_open() 创建一个文件信息对象,用于获取指定文件的 MIME 类型
$finfo = finfo_open(FILEINFO_MIME_TYPE); 
#这行代码判断上传的文件是否为zip压缩包
if (finfo_file($finfo, $_FILES["file"]["tmp_name"]) === 'application/zip'){#如果是zip,就将其解压到/tmp目录exec('cd /tmp && unzip -o ' . $_FILES["file"]["tmp_name"]);
};

看到这里没什么思路,查阅文章 一个有趣的任意文件读取 可知,需要使用linux中的软链接ln

image-20230528213908070

软连接的作用类似于win下的快捷方式

假如我们使用软链接生成web 文件让其指向 /var/html/www/ 目录的话,我们就可以通过该文件直接访问网站的目录了,然后我们将web文件打包成zip.zip,上传上去,这样就会在 /tmp目录生成一个 web文件,其指向 /var/html/www 目录

然后我们再上传一个 z.zip 文件 其目录为 : /web/shell.php

image-20230528214714531

shell.php为一句话木马

当我们上传z.zip的时候,将其解压到 /tmp 目录下的 web目录下

重点来了,由于之前我们上传了一个软链接web/tmp 目录下,此时若解压z.zip的话

正常情况下会解压到:/tmp/web/shell.php 但是由于web指向了 /var/www/html目录

所以会恰好将shell.php解压到 /var/www/html/shell.php 刚好解压到网站的访问目录,此时我们可以直接使用蚁剑连接了

实践探究

首先使用命令创建软链接:web

ln -s /var/www/html/ web

然后使用zip命令将其压缩为:zip.zip

zip -y zip.zip web

image-20230528215547491

然后我们上传zip.zip

image-20230528215907954

成功上传到/tmp目录

接着将 /web/shell.php压缩:

image-20230528220716007

上传,发现shell.php成功上传到 /var/html/www

image-20230528221100149

上传成功,然后就可以getshell了


http://www.ppmy.cn/news/100008.html

相关文章

基于vb+ACCESS的身份证管理系统的设计与实现

【摘 要】 身份证管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。 经过分析,我们使用 MICROSOFT公司的…

C++实现哈希表

文章目录 前言1.哈希表的相关介绍2.哈希表的实现1.开放定址法实现哈希表1.插入2.查找3.删除 2.链地址法(开链法)实现哈希表1.插入节点2.查找3.删除4.相关的一些补充 3.封装unordered_map与unordered_set1.封装前的改造2.迭代器的实现3.unordered_map和unordered_set复用 前言 …

傅里叶级数和傅里叶变换之间的关系推理及应用

傅里叶级数和傅立叶变换是傅里叶分析的两个主要工具&#xff0c;它们之间有密切的关系。 什么是傅里叶级数 傅里叶级数是将一个周期函数分解为一系列正弦和余弦函数的和。它适用于周期性信号&#xff0c;可以将周期函数表示为一组振幅和相位不同的谐波分量的和。傅里叶级数展…

Java 基础进阶篇(十六):多线程总结

文章目录 一、多线程概述二、多线程的创建1.1 方式一&#xff1a;继承 Thread 类1.2 方式二&#xff1a;实现 Runnable 接口匿名内部类实现方案 1.3 方式三&#xff1a;JDK 5.0新增: 实现 Callable 接口1.4 三种方式对比 二、Thread的常用方法三、线程安全与同步3.1 线程安全3.…

Redis的ZipList和QuickList和SkipList和RedisObject(未完成)

ZipList:压缩列表&#xff0c;为了节省内存而设计的一种数据结构 ZipList是一种特殊的双端链表&#xff0c;是由一系列的特殊编码的连续内存块组成&#xff0c;不需要通过指针来进行寻址来找到各个节点&#xff0c;可以在任意一端进行压入或者是弹出操作&#xff0c;并且该操作…

【华为OD机试 2023 B卷 | 100分】IPv4地址转换成整数(C++ Java JavaScript Python)

文章目录 题目描述输入描述输出描述用例CjavajavaScriptpython 题目描述 存在一种虚拟IPv4地址&#xff0c;由4小节组成&#xff0c;每节的范围为0~255&#xff0c;以#号间隔&#xff0c;虚拟IPv4地址可以转换为一个32位的整数&#xff0c;例如&#xff1a; 128#0#255#255&am…

SpringMVC框架面试专题(初级-中级)-第十节

欢迎大家一起探讨&#xff5e;如果可以帮到大家请为我点赞关注哦&#xff5e; 截止到本节关于SpringMVC的内容已经更新完毕&#xff0c;后续会更新SpringBoot框架的面试题&#xff1b;大家在背题的时候切记不要死记硬背&#xff0c;需要理解 这是什么&#xff1f;有什么操作&a…

跑通NeRF-SLAM代码记录

前言 Install 原文章github链接 下载代码 git clone https://github.com/ToniRV/NeRF-SLAM.git --recurse-submodules git submodule update --init --recursive因为有相关依赖&#xff0c;所以尽量使用命令下载代码。 2. 新建nerf-slam环境&#xff0c;github上也没提到p…