【CISCN2023】unzip 详解

【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)

posted @ 2023-05-28 22:43  gxngxngxn  阅读(2359)  评论(2编辑  收藏  举报