CISCN2023 unzip软链接getshell

这篇具有很好参考价值的文章主要介绍了CISCN2023 unzip软链接getshell。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文件上传之软链接getshell

前言

在CTF与渗透实战中总是会出现文件上传的问题,而文件上传有两大决定性的因素

  1. 能上传
  2. 能解析、执行

文件上传不一定是为了getshell,而上传的文件种类也是千奇百怪,目前来说,文件上传比较多的是pdf、压缩包。

题目举例

这个示例题目是2023年的CISCN的web题里的一道,原理就是服务器错误的解析了压缩包导致的
题目地址
https://github.com/NUDTTAN91/ciscn_2023_unzip

题目代码为

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

可以看到上传文件的判断非常的奇怪,接下来我会对每一句代码进行解析(我打算写一个代码审计的系列,从现在开始)

  1. <?php:这是PHP脚本的开始标签,表示接下来的内容是PHP代码。
  2. error_reporting(0);:这行代码关闭了所有错误报告。这可能是为了让代码在出现问题时不向用户显示错误信息。
  3. highlight_file(FILE);:这行代码使用highlight_file函数显示当前文件的源代码,并对其进行语法高亮。__FILE__是一个魔术常量,表示当前脚本的完整路径和文件名。
  4. $finfo = finfo_open(FILEINFO_MIME_TYPE);:这行代码使用finfo_open函数创建一个新的文件信息资源,用于检查文件的MIME类型。FILEINFO_MIME_TYPE是一个常量,表示我们希望获取文件的MIME类型。
  5. if (finfo_file($finfo, $_FILES[“file”][“tmp_name”]) === ‘application/zip’){:这行代码使用finfo_file函数检查上传文件的MIME类型。如果文件的MIME类型是’application/zip’,则进入if语句块。
  6. exec('cd /tmp && unzip -o ’ . F I L E S [ " f i l e " ] [ " t m p n a m e " ] ) ; :这行代码使用 e x e c 函数执行一个系统命令。命令首先切换到 / t m p 目录,然后使用 u n z i p 命令解压缩上传的 Z I P 文件。 − o 选项表示覆盖已存在的文件。 _FILES["file"]["tmp_name"]);:这行代码使用exec函数执行一个系统命令。命令首先切换到/tmp目录,然后使用unzip命令解压缩上传的ZIP文件。-o选项表示覆盖已存在的文件。 FILES["file"]["tmpname"]);:这行代码使用exec函数执行一个系统命令。命令首先切换到/tmp目录,然后使用unzip命令解压缩上传的ZIP文件。o选项表示覆盖已存在的文件。_FILES[“file”][“tmp_name”]是上传文件在服务器临时目录中的路径。

总体分析:这个PHP脚本允许用户上传一个ZIP文件,并在验证其MIME类型为’application/zip’后将其解压缩到服务器的/tmp目录。同时,脚本还会显示其自身的源代码。

进行实战

题目初始界面
CISCN2023 unzip软链接getshell

制作压缩包

当解压操作可以覆盖上一次解压文件就可以造成任意文件上传漏洞。此题上传的文件被保存到了/tmp目录下,而且没有require和include这种文件包含的点,因此无法直接执行上传文件里面的代码,因此这里考虑利用软连接,进行目录穿越,将文件上传到任意目录

软链接介绍

软连接是linux中一个常用命令, 它的功能是为某一个
文件在另外一个位置建立一个同步的链接。软连接类似
与c语言中的指针,传递的是文件的地址; 更形象一
些,软连接类似于WINDOWS系统中的快捷方式。 例
如,在a文件夹下存在一个文件hello,如果在b文件夹
下也需要访问hello文件,那么一个做法就是把hello复
制到b文件夹下,另一个做法就是在b文件夹下建立
hello的软连接。通过软连接,就不需要复制文件了,相
当于文件只有一份,但在两个文件夹下都可以访问。

软链接文件上传的适用范围

有文件上传接口,但是上传文件的目录不能确定
可以上传zip文件并且会将文件解压到上传目录下
可以getshell的文件可以绕过waf成功上传

制作压缩包

1、创建软链接文件夹

创建一个指向/var/www/html目录的软链接,因为html目录下是web环境(大部分情况是),为了后续可以getshell

CISCN2023 unzip软链接getshell
使用ll查看文件夹的真实指向
CISCN2023 unzip软链接getshell
可以看到这是一个链接文件,并且指向/var/www/html

2、对软链接文件夹进行打包

知识补充

zip --symlinks,是在zip压缩文件中,包含符号链接
本身,而不是它们指向的实际文件或目录,也就是说当
解压缩这个zip文件,将得到符号链接,而不是它们指向
的实际文件

打包到到1.zip,对link文件进行压缩

CISCN2023 unzip软链接getshell
使用ll查看文件详情
CISCN2023 unzip软链接getshell

创建木马文件夹

注意点

接下来创建的这个目录要上面创建的文件夹名字相同,所以我们这里先将之前创建的文件夹删除再创建

CISCN2023 unzip软链接getshell

写入木马并打包

这里写入phpinfo()进行测试
CISCN2023 unzip软链接getshell

打包成2.zip
CISCN2023 unzip软链接getshell
现在我们将1.zip 和2.zip 依次 上传,压缩包会被解压,当我们上传第二个压缩包时会覆盖上一个link目录,但是
link目录软链接指向/var/www/html解压的时候会把shell.php放在/var/www/html下,此时我们就达到了getsehll的目的。

上传木马

CISCN2023 unzip软链接getshell
会出现源码页面,不用管,接着传2.zip进行getshell
CISCN2023 unzip软链接getshell

上传2.zip进行getshell
CISCN2023 unzip软链接getshell

访问shell.php进行测试

CISCN2023 unzip软链接getshell
可以看到成功访问到了,此时getshell成功

修复建议

在现实中或awd、dawd中大家都需要进行patch(修复)操作,所以面试基本上都会把重点放在应急响应这里,这里我们也尝试修复这个文件上传漏洞

  1. 限制允许上传的文件类型,例如只允许特定的ZIP文件。
  2. 对上传的ZIP文件进行内容扫描,以防止恶意文件上传。
  3. 使用更安全的方法执行系统命令,例如使用PHP的ZipArchive类来解压缩文件。
  4. 限制解压缩的目录,避免覆盖重要文件。
  5. 为解压缩的文件添加随机前缀或使用随机文件夹,以减少文件名冲突和潜在的安全风险
修复代码

仅允许上传ZIP文件,使用ZipArchive类解压缩文件,为解压缩的文件添加随机前缀,并限制解压缩的目录文章来源地址https://www.toymoban.com/news/detail-491596.html

<?php
error_reporting(0);

// 限制允许上传的文件类型
$allowed_extensions = array('zip');

// 获取上传文件的扩展名
$uploaded_file_extension = pathinfo($_FILES["file"]["name"], PATHINFO_EXTENSION);

// 检查文件扩展名是否在允许的列表中
if (in_array(strtolower($uploaded_file_extension), $allowed_extensions)) {
    $finfo = finfo_open(FILEINFO_MIME_TYPE);
    if (finfo_file($finfo, $_FILES["file"]["tmp_name"]) === 'application/zip') {
        // 使用PHP的ZipArchive类来解压缩文件
        $zip = new ZipArchive;
        if ($zip->open($_FILES["file"]["tmp_name"]) === TRUE) {
            // 为解压缩的文件添加随机前缀
            $random_prefix = uniqid();
            $extract_to_directory = "/tmp/" . $random_prefix;
            // 创建解压缩目录
            if (!is_dir($extract_to_directory)) {
                mkdir($extract_to_directory, 0755, true);
            }
            // 解压缩文件到指定目录
            $zip->extractTo($extract_to_directory);
            $zip->close();
            echo "Unzip successful!";
        } else {
            echo "Failed to open the zip file.";
        }
    } else {
        echo "Invalid file type. Please upload a zip file.";
    }
} else {
    echo "File extension not allowed. Please upload a zip file.";
}
?>

到了这里,关于CISCN2023 unzip软链接getshell的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MacOS VSCode 配置远程服务器ssh remote链接,并上传文件文件服务器

    环境: MacOS VSCode ssh remote 1. VSCode安装插件 2. 配置ssh remote链接 配置完保存; 3. 在ssh remote可以查看到配置好的远程连接 右侧两个一个是在当前窗口打开远程链接,一个是在新窗口打开远程连接,选择一个即可,我倾向于选择一个新窗口。 此时,如果远程文件夹是新创建的话

    2024年02月03日
    浏览(62)
  • zip压缩包上传到了服务器怎么解压——提示unzip:command not found

    xshell进入压缩包所在的文件夹 如果你已经将zip压缩包上传到了服务器,可以使用以下命令解压缩: 其中,file.zip为你上传的zip压缩包的文件名。执行该命令后,zip压缩包中的所有文件将被解压到当前目录中。 如果你希望将解压后的文件解压到指定目录中,可以使用以下命令

    2023年04月09日
    浏览(46)
  • [LitCTF 2023]作业管理系统 - 文件上传+弱口令

    1、F12看到页面源代码有注释:默认账户admin admin 使用:admin-admin 可直接登录 2、上传一句话木马 3、蚁剑连接找flag=NSSCTF{d969ad7a-9cb5-4564-a662-191a00e007a5}

    2024年02月07日
    浏览(42)
  • 大华智慧园区综合管理平台文件上传漏洞(CVE-2023-3836)

    仅用于技术交流,目的是向相关安全人员展示漏洞利用方式,以便更好地提高网络安全意识和技术水平。 任何人不得利用该文章进行非法攻击和侵犯他人的隐私和财产权利。一旦发生任何违法行为,责任自负。 该文章仅用于授权测试,任何未经授权的测试均属于非法行为。请在法

    2024年02月06日
    浏览(35)
  • 泛微 E-Office文件上传漏洞复现(CVE-2023-2523、CVE-2023-2648)

          泛微E-Office是一款标准化的协同 OA 办公软件,泛微协同办公产品系列成员之一,实行通用化产品设计,充分贴合企业管理需求,本着简洁易用、高效智能的原则,为企业快速打造移动化、无纸化、数字化的办公平台。 cve-2023-2523     泛微e-office 9.5版本,源文件 App/Ajax/a

    2024年02月06日
    浏览(76)
  • CVE-2023-3836:大华智慧园区综合管理平台任意文件上传漏洞复现

    免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用!!! 大华智慧园区

    2024年02月09日
    浏览(45)
  • PHP LFI 利用临时文件Getshell

    PHP LFI 利用临时文件 Getshell 姿势-安全客 - 安全资讯平台 LFI 绕过 Session 包含限制 Getshell-安全客 - 安全资讯平台 目录  PHP LFI 利用临时文件Getshell 临时文件 linux 和 windows的 临时文件存储规则 linux和windows对临时文件的命名规则 PHPINFO()特性 原理 条件竞争 PHP7 Segment Fault 利用条件

    2024年02月07日
    浏览(46)
  • 2023年4月21日-关于远程feign调用实现文件上传下载

    一、客户需求:做一个查询程序,客户提供一个excel模板,将查询结果保存到excel模板中,上传到文件服务,供客户下载使用。 二、代码实现

    2023年04月21日
    浏览(43)
  • 亿赛通电子文档安全管理系统任意文件上传漏洞(2023-HW)

    免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 ​ 亿赛通电子文档安全管理系统(简称:

    2024年02月12日
    浏览(50)
  • PHPCMS v9本地文件包含漏洞Getshell

    漏洞原理 文件包含函数加载的参数没有经过过滤或者严格定义,可以被用户控制,包含了其他恶意文件,导致执行了非预期的代码。 漏洞危害 文件包含是指程序代码在处理包含文件的时候没有严格控制。导致用户可以构造参数包含远程代码在服务器上执行,并得到网站配置

    2024年02月11日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包