[CISCN2023] unzip

发布时间 2023-10-30 21:10:54作者: B0like

[CISCN2023] unzip

前言

什么是软链接

软链接是Linux里面常用的一个命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接。它类似与c语言中的指针,传递的是文件的地址。软链接类似于windows中的快捷方式。可以用这种方式来突破只能在tmp文件夹上传文件的限制。

解题

unzip是Linux里面用于解压zip压缩包的一个命令,进入容器,是一个文件上传的页面,试着上传一个php的文件,看能不能执行,然后跳转得到一段源码,逐句分析一下

<?php
error_reporting(0);
highlight_file(__FILE__);
//使用finfo_open函数打开一个文件信息资源,用于获取文件的MIME类型
$finfo = finfo_open(FILEINFO_MIME_TYPE);
//如果上传的文件的MIME类型是application/zip,即ZIP压缩文件,就执行下一步。
if (finfo_file($finfo, $_FILES["file"]["tmp_name"]) === 'application/zip'){
	//使用exec函数在服务器上执行一个命令,该命令是切换到/tmp目录并解压上传的文件。 
    exec('cd /tmp && unzip -o ' . $_FILES["file"]["tmp_name"]);
};

//only this!

分析完这个代码明显知道我们需要上传一个zip的压缩包,这个压缩包将会在/tmp目录下进行解压。可以尝试上传一个带马的文件的压缩包,解压再去访问,但是我们无法访问/tmp目录,无法访问文件,怎么绕过这个就成了需要解决的问题。

软链接可以解决这个问题,我们可以先上传一个带有软链接的压缩包,这个软链接指向网站的根目录,然后我们再上传一个带马的文件压缩包,就可以将这个带马文件压缩到网站根目录下getshell。

主要命令:
ln -s /var/html/www shell
zip --symlinks shell.zip shell

再在一个文件夹下面写入一个带马的php文件

再上传这两个zip,先上传link.zip再上传link1.zip成功getshell。

参考链接

[unzip详解]([CISCN2023]unzip 详解 - gxngxngxn - 博客园 (cnblogs.com))