0x00 前言
在内网中,有时偶尔会因为种种限制,导致无法上传大文件,以至于只能上传小文件。
在前段时间就碰到了这个问题,当时在拿下目标 shell 后发现只能上传几百 K 的小文件,文件稍微大些比如几 M 的文件就会提示上传失败,在此简单记录下当时解决的办法。
针对这种情况,就需要将大文件变成小文件后再进行上传,个人觉着可以简单的分为两种方式,一种是常规的压缩文件一种是分割文件,先来看看第一种方法。
0x01 压缩文件
这里以 7-Zip 为代表,其他的压缩软件还有 WinRAR 等,7-Zip 文件下载地址:https://www.7-zip.org/
如果目标主机没有安装 7-Zip,可以现在自己的主机上安装 7-Zip,然后把安装目录下的 7z.exe 拷贝到目标主机上,默认路径为「C:\Program Files\7-Zip\7z.exe」。
7z.exe 只有 400 多 K 的大小,可以说很是小巧了,以下为 7z.exe 的常用命令。
a 添加压缩文件
x 解压压缩文件
-p 指定密码
-v 分卷压缩
-r 递归压缩
-o 指定输出目录
普通的压缩/解压文件
把 fscan.exe 压缩成 fscan.7z,压缩密码为『teamssix.com』
7z.exe a -pteamssix.com fscan.7z fscan.exe
C:\7-Zip>7z.exe a -pteamssix.com fscan.7z fscan.exe
7-Zip 21.02 alpha (x64) : Copyright (c) 1999-2021 Igor Pavlov : 2021-05-06
Scanning the drive:
1 file, 2911744 bytes (2844 KiB)
Creating archive: fscan.7z
Add new data to archive: 1 file, 2911744 bytes (2844 KiB)
Files read from disk: 1
Archive size: 2794266 bytes (2729 KiB)
Everything is Ok
把 fscan.7z 解压成 fscan.exe
7z.exe x -pteamssix.com fscan.7z
C:\7-Zip>7z.exe x -pteamssix.com fscan.7z
7-Zip 21.02 alpha (x64) : Copyright (c) 1999-2021 Igor Pavlov : 2021-05-06
Scanning the drive for archives:
1 file, 2794266 bytes (2729 KiB)
Extracting archive: fscan.7z
--
Path = fscan.7z
Type = 7z
Physical Size = 2794266
Headers Size = 170
Method = LZMA2:3m BCJ 7zAES
Solid = -
Blocks = 1
Everything is Ok
Size: 2911744
Compressed: 2794266
fscan.7z 的大小是 2729 KB,fscan.exe 的大小是 2844 KB,可以看到其实大小差别也不大,没能达到我们将大文件变成小文件的目的,这种大小上传可能还是会失败,那再来试试分卷上传。
分卷压缩/解压文件
分卷压缩其实和下面介绍的分割文件有点类似,区别还是在于一个对文件进行了压缩,一个没有进行压缩。
把 fscan.exe 以 500 K 大小进行分卷压缩。
7z.exe a -pteamssix.com -v500k fscan.7z fscan.exe
C:\7-Zip>7z.exe a -pteamssix.com -v500k fscan.7z fscan.exe
7-Zip 21.02 alpha (x64) : Copyright (c) 1999-2021 Igor Pavlov : 2021-05-06
Scanning the drive:
1 file, 2911744 bytes (2844 KiB)
Creating archive: fscan.7z
Add new data to archive: 1 file, 2911744 bytes (2844 KiB)
Files read from disk: 1
Archive size: 2794266 bytes (2729 KiB)
Everything is Ok
C:\7-Zip>dir
驱动器 C 中的卷没有标签。
卷的序列号是 2C2C-615D
C:\7-Zip 的目录
2021/06/29 21:42 <DIR> .
2021/06/29 21:42 <DIR> ..
2021/05/06 15:00 489,472 7z.exe
2021/06/29 21:40 512,000 fscan.7z.001
2021/06/29 21:40 512,000 fscan.7z.002
2021/06/29 21:40 512,000 fscan.7z.003
2021/06/29 21:40 512,000 fscan.7z.004
2021/06/29 21:40 512,000 fscan.7z.005
2021/06/29 21:40 234,266 fscan.7z.006
2021/06/18 14:58 2,911,744 fscan.exe
8 个文件 6,195,482 字节
把 fscan.7z 解压成 fscan.exe
7z.exe x -pteamssix.com fscan.7z.001
C:\7-Zip>7z.exe x -pteamssix.com fscan.7z.001
7-Zip 21.02 alpha (x64) : Copyright (c) 1999-2021 Igor Pavlov : 2021-05-06
Scanning the drive for archives:
1 file, 512000 bytes (500 KiB)
Extracting archive: fscan.7z.001
--
Path = fscan.7z.001
Type = SplitPhysical
Size = 512000
Volumes = 6Total
Physical Size = 2794266
----
Path = fscan.7z
Size = 2794266
--
Path = fscan.7z
Type = 7z
Physical Size = 2794266
Headers Size = 170
Method = LZMA2:3m BCJ 7zAES
Solid = -
Blocks = 1
Everything is Ok
Size: 2911744
Compressed: 2794266
可以看到,使用分卷压缩可以把一个大文件分成多个小文件,然后将小文件上传上去后,再进行解压就可以了。
但这样做感觉还是有些麻烦,直接使用下文的 split 进行文件分割个人觉着是更为方便的方法,使用 split 进行分割也是我个人解决前段时间碰到不能上传大文件问题时的方法。
0x02 分割文件
使用 split 以 500 K 大小分割 fscan.exe 文件,split 命令在 Linux 和 MAC 下都是自带的,因此在自己的电脑上分割好后,直接上传即可。
split -b 500k fscan.exe teamssix
合并分割文件为 fscan.exe
cat teamssix* > fscan # 适用于 Linux、Mac
copy /b teamssix* fscan.exe # 适用于 Windows
个人觉着直接用 split 分割文件是较为方便的做法,无需第三方软件,且不论目标是 Linux 还是 Windows 都能支持。
更多信息欢迎关注我的微信公众号:TeamsSix