首页 > 其他分享 >【CISCN2023】unzip 详解

【CISCN2023】unzip 详解

时间:2023-05-28 22:57:00浏览次数:82  
标签:文件 unzip 详解 link CISCN2023 上传 连接 压缩包

【CISCN2023】unzip 详解

考察点:软连接+getshell

首先分析一下题目,unzip,百度一下,发现这是一个linux命令,用于解压缩zip压缩包,这里放出一个详细解释,就不赘述了。

https://www.cnblogs.com/cxhfuujust/p/8193310.html

进入容器,可以得到一个文件上传的页面:

于是,按照惯性,我们可以先尝试一下能不能传个带马的文件上去getshell,于是找一个写有一句话木马的文件,上传:

跳转得到以下页面:

这里算是显示出了上传文件逻辑的源码,我们不妨来分析一下:

 <?php 
  error_reporting(0); 

highlight_file(__FILE__); 

$finfo = finfo_open(FILEINFO_MIME_TYPE); 

if (finfo_file($finfo, $_FILES["file"]["tmp_name"]) === 'application/zip'){  
    //这里是验证MIME值,确定上传的文件类型为zip,同时也为我们指明了方向,要上传一个zip压缩包。
    
    exec('cd /tmp && unzip -o ' . $_FILES["file"]["tmp_name"]); 
  //这里的意思是进入/tmp目录下,然后调用unzip命令对压缩包进行解压,也就是把压缩包解压到/tmp目录下。  
};

//only this! 

简单的分析完上述的代码,很明显我们需要上传一个压缩包,然后这个压缩包是在/tmp目录下进行解压,那么我们可以想到需要上传一个带马的文件的压缩包,然后解压出来,我们再去访问,就可以getshell了。那么问题来了,这里的文件是被解压到/tmp目录下的,而我们却访问不了/tmp目录,也就不能访问文件,那么我们改怎么绕过呢?

这里一开始我也很懵,我也是第一次接触到这类的题目,通过查询unzip相关的资料,发现了这个命令可以与软连接挂钩,那么什么是软连接呢,就是可以将某个目录连接到另一个目录或者文件下,那么我们以后对这个目录的任何操作,都会作用到另一个目录或者文件下。

那么方向就很明显了,我们可以先上传一个带有软连接的压缩包,这个软连接指向网站的根目录,即/var/www/html,然后我们再上传一个带有马的文件的压缩包,就可以将这个带马文件压缩到网站的根目录下,我们也可以直接访问这个带马文件了,思路瞬间清晰捏,那么直接开始实践:

首先单独创造一个文件夹,然后利用下述命令创建软连接的压缩包:

关键命令:

ln -s /var/www/html link

zip --symlinks link.zip link

然后删除link(防止与文件夹重名)这个文件,创建一个名为link的文件夹,然后在这个文件夹下写入带马的Php文件(因为之前我们软连接的文件叫做link,所以我们要让这个压缩在这个文件夹下面):

然后先返回上一级目录,将这个带马的文件进行压缩:

那么现在完事具备了,只欠上传捏~

先上传link.zip,然后再上传link1.zip~~~

全部上传完以后,我们就可以访问shell.php,进行命令执行了~~:

至此,这道题算是解决了,好捏~

总结:

这次国赛做了两天大牢,只做出来了一道web,我是真的菜啊!!!,哭死,不过没关系,也算是学到了 一些新的知识点,下次再接再厉吧,路漫漫其修远兮!!!

参考连接:

一个有趣的任意文件读取 - 先知社区 (aliyun.com)

标签:文件,unzip,详解,link,CISCN2023,上传,连接,压缩包
From: https://www.cnblogs.com/gxngxngxn/p/17439035.html

相关文章

  • 【LeetCode双向链表】LRU详解,双向链表实战
    LRU缓存请你设计并实现一个满足LRU(最近最少使用)缓存约束的数据结构。实现LRUCache类:LRUCache(intcapacity)以正整数作为容量capacity初始化LRU缓存intget(intkey)如果关键字key存在于缓存中,则返回关键字的值,否则返回-1。voidput(intkey,intvalu......
  • Kubernetes 证书详解(鉴权)
    Kubernetes证书详解(鉴权)简介上一篇系统分析了Kubernetes集群中每个证书的作用和证书认证的原理。对于Kube-apiserver,Kubelet来说,它们都能提供HTTPS服务,Kube-apiserver、Kubelet对于一个请求,既要认证也要鉴权。在Kube-apiserver中,鉴权也有多种方式:NodeABACRBAC......
  • Unity的Undo:详解解析与实用案例
    UnityUndo详解在Unity中,Undo是一个非常重要的功能,它可以让开发者在编辑器中进行操作时,随时撤销之前的操作,从而避免不必要的错误。本文将详细介绍UnityUndo实现原理和使用方法,并提供多个使用例子,帮助开发者更好地理解和应用该功能。实现原理UnityUndo的实现原理是通过记录每个......
  • Unity的Undo:详解解析与实用案例
    UnityUndo详解在Unity中,Undo是一个非常重要的功能,它可以让开发者在编辑器中进行操作时,随时撤销之前的操作,从而避免不必要的错误。本文将详细介绍UnityUndo实现原理和使用方法,并提供多个使用例子,帮助开发者更好地理解和应用该功能。实现原理UnityUndo的实现原理是通过记录每个......
  • 虚函数、纯虚函数、多态与虚表机制详解
    虚函数在类的定义中,前面有virtual关键字的成员函数就是虚函数注:派生类中的成员函数与基类中虚函数同名且参数相同的函数,不加virtual也会自动变成虚函数纯虚函数与抽象类没有函数体的虚函数叫做纯虚函数,包含纯虚函数的类叫抽象类。 例如上面Base中的Examp就是一个纯虚函......
  • Unity的UnityStats: 属性详解与实用案例
    UnityStats属性详解UnityStats是Unity引擎提供的一个用于监测游戏性能的工具,它提供了一系列的属性值,可以帮助开发者解游戏的运行情况,从而进行优化。本文将详细介绍UnityStats的每个属性值,并提供多个使用例子帮助开发者更好地使用UnityStats。帧率相关属性UnityStats.fps......
  • kubernetes yaml文件详解
    pod.yaml配置#yaml格式的pod定义文件完整内容:apiVersion:v1#必选,版本号,例如v1kind:Pod#必选,指定创建资源的角色/类型metadata:#必选,资源的元数据/属性name:string#必选,资源的名字,在同一个namespace中必须唯一namespace:string......
  • 优先级队列的实现详解( Java 实现)
    前言优先级队列是在队列的基础上,每个元素都带有一个优先级,可以实现按照优先级高低进行存储和访问。Java提供了许多实现优先级队列的方法,例如使用堆来实现。在本篇博客中,我将介绍Java实现优先级队列实现的具体方法,以及如何使用它来解决实际问题。一、优先级队列的概念优先级队列......
  • Android 服务Service详解
    Android服务(Service)是一种在后台运行的组件,它可以在不与用户交互的情况下执行长时间运行的操作。服务通常用于在后台播放音乐、下载数据、执行网络操作等。服务的特点如下:1.服务是一种后台运行的组件,可以在不与用户交互的情况下执行长时间运行的操作。2.服务可以在应用程序的......
  • Kubernetes Service详解
    KubernetesService详解一、Service介绍kubernetes提供了Service资源,Service会对提供同一个服务的多个pod进行聚合,并且提供一个统一的入口地址。通过访问Service的入口地址就能访问到后面的pod服务。Service在很多情况下只是一个概念,真正起作用的其实是kube-proxy服务进程,每个Node......