软连接

软连接是linux中一个常用命令, 它的功能是为某一个文件在另外一个位置建立一个同步的链接。软连接类似与c语言中的指针,传递的是文件的地址。简单说,通过软连接将文件a与文件b连接在一起,那么我们对文件a的操作都会转换成对文件b的操作。

[CISCN 2023] unzip

image-20240301162525944

开题,发现文件上传。

随便上传一个文件后发现。

image-20240301163026497

分析一下这个代码

 <?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"]);
};

//only this!

首先提示我们要上传一个zip文件,然后程序会打卡tmp文件夹,然后解压这个压缩包,也就是说我们上传的内容会被解压到tmp文件夹下,但是我们无法访问tmp文件夹,及时上传一个包含木马的压缩包,也无法利用。

那么这时,我们就可以使用软连接的方法,首先建立一个tmp与根目录/var/www/html的软连接,那么我们在tmp文件下解压,就相当于在根目录下解压,这时候我们的木马可以被执行。

image-20240301163707706

这样我们就创建了一个指向\var\www\html的文件夹link

link进行压缩,压缩成link.zip

1

我们接下来要删除link文件夹(防止文件重名),因为我们下一步要在link中写入木马。

2

将新的link 文件压缩成新的压缩包

3

这时候我们先上传link.zip 创建软连接,然后上传含有木马的文件links.zip这样我们的木马文件shell.php就会被解压到根目录,我们访问这个文件就可以getshell。