【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,我是真的菜啊!!!,哭死,不过没关系,也算是学到了 一些新的知识点,下次再接再厉吧,路漫漫其修远兮!!!
参考连接: