unzip
unzip
前置
finfo_file()
检查MIME文件类型
linux文件系统-磁盘分区
Inode区 文件的唯一标识
存储了文件(目录、档案)许多的重要参数:属主、归属的用户组、读写权限、数据所在的block号等
data block区
存储文件名等
目录文件与档案文件
目录文件:记录目录下的文件名
档案文件:记录文件数据
档案读取过程:
目录inode(权限?)→目录block→档案inode(权限?)→档案block
硬链接
增加链接到某个inode的档名,多个档名对应同一个inode(说明这多个档名是同一个文件)
可以想象多条不同的路最终通向同一个文件,因此丢失一条路并不会导致找不到这个文件
好处:防误删
不足:
- 不允许对目录建立硬链接
- 不允许跨文件系统
软链接
类似快捷方式
可以通过软链接建立的文件找到它所指向的文件,但两个文件的inode不同,说明二者是不同的文件
思路
1 | if (finfo_file($finfo, $_FILES["file"]["tmp_name"]) === 'application/zip'){ |
翻译一下就是:如果文件是zip类型,则会将它解压至/tmp
目录下
很明显是文件上传漏洞,没有任何的文件内容检查
但是这个文件上传的目录并不是/var/www/html
,此时无法利用
因此使用软链接覆盖
解题
1 | mkdir 1 |
先传入test.zip,解压到temp/test(→)
再传入test1.zip,解压,此时两文件同名,强制覆盖已存在文件(unzip -o xxx
),此时同名的目录内部文件将被放置在软链接指向的目录的内部【对于unzip -o xxx
,若解压目录名与文件中原有目录名相同,新解压目录中的文件将被直接合并到该同名目录中(目录合并)】
之后蚁剑连接/直接get传参即可
- Title: unzip
- Author: dawn_r1sing
- Created at : 2024-04-07 11:05:42
- Updated at : 2024-06-07 17:09:05
- Link: https://dawnrisingdong.github.io/2024/04/07/unzip/
- License: This work is licensed under CC BY-NC-SA 4.0.