CTFSHOW国赛复现-----Unzip(软连接利用)

分析代码得: 


1. `error_reporting(0);`:关闭错误报告。这意味着在运行过程中,任何错误或警告都不会显示。

2. `highlight_file(__FILE__);`:使用 PHP 内置的 `highlight_file` 函数,对当前文件(`__FILE__` 是一个魔术常量,表示当前文件的完整路径和文件名)进行语法高亮显示。这通常用于调试或演示代码。

3. `$finfo = finfo_open(FILEINFO_MIME_TYPE);`:使用 `finfo_open` 函数创建一个新的文件信息资源,用于检查文件的 MIME 类型。`FILEINFO_MIME_TYPE` 是一个预定义常量,表示我们只关心文件的 MIME 类型。

4. `if (finfo_file($finfo, $_FILES["file"]["tmp_name"]) === 'application/zip'){`:使用 `finfo_file` 函数检查上传文件的 MIME 类型。`$_FILES["file"]["tmp_name"]` 是上传文件在服务器上的临时路径。如果文件的 MIME 类型是 'application/zip'(即 ZIP 文件),则执行括号内的代码。

5. `exec('cd /tmp && unzip -o ' . $_FILES["file"]["tmp_name"]);`:使用 `exec` 函数执行一个外部命令。这里,我们先切换到服务器上的 `/tmp` 目录,然后使用 `unzip` 命令解压上传的 ZIP 文件。`-o` 选项表示覆盖已存在的同名文件。

大概意思就是题目将我们上传的zip文件放在tmp这个目录下进行解压,因为不在var/www/html目录下解压所以不会产生解压执行文件的安全隐患,但是并没有对上传的压缩文件进行严格的检查这会导致漏洞产生

 因为解压的目录更改了,所以要把解压文件所在目录放在var/www/html(因为html目录下是web环境)这样才能在解压shell文件时实现getshell

这里利用linux构造软连接使得上传文件指向到var/www/html目录下

关于软连接的了解:

linux硬链接与软链接 - crazyYong - 博客园 (cnblogs.com)

 构造软连接

ln -s var/www/html test

压缩文件

zip --symlinks test1.zip test

--symlinks表示压缩软连接 

CTFSHOW国赛复现-----Unzip(软连接利用)_第1张图片

 上传压缩文件

这时解压文件后是软连接就会实现从tmp指向var/www/html

接下来就是在var/www/html目录下上传一个shell文件就可以了

在test的目录下创建一句话php文件

shell文件内容: 

 

然后再对test进行压缩

zip -r test1.zip test

CTFSHOW国赛复现-----Unzip(软连接利用)_第2张图片  

 再上传该压缩包,因为解压后的目录同名所以会覆盖原指定目录

所以此时目录是var/www/html/cmd.php

 上传后访问cmd.php就可以getshell了

CTFSHOW国赛复现-----Unzip(软连接利用)_第3张图片

参考:

2021深育杯线上初赛官方WriteUp - 先知社区 (aliyun.com)

你可能感兴趣的:(web,ctf,web)