Wargames与bash知识07

Wargames与bash知识07

Bandit Level 12

关卡提示:
密码存储在文件data.txt中,该文件是经过重复压缩的文件的十六进制文件。在本关卡,在/tmp下创建一个目录可能很有用,您可以/tmp使用mkdir创建目录(例如:mkdir/tmp/myname123),然后使用cp复制数据文件,并使用mv重命名它(阅读手册页!)
推荐命令:
grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd, mkdir, cp, mv, file
需要了解的知识:
十六进制文件

Hex文档

hex是用于文件格式是intel规定的标准,hex是文本文件,经常在微控制器的固件开发中看到hex的身影。

Xxd命令

查看、编辑、转换hex文档。
-p 使用连续的纯十六进制转储输出
-r 将十六进制逆向操作成二进制形式

下面是xxd命令使用演示:
将123文件转储为16进制hex文件

gyj@guyanjun:~$ ls
123  321  nn  tr
gyj@guyanjun:~$ file 123
123: ASCII text
gyj@guyanjun:~$ cat 123
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
gyj@guyanjun:~$ xxd -p 123 123hex
gyj@guyanjun:~$ file 123hex
123hex: ASCII text
gyj@guyanjun:~$ cat 123hex
4142434445464748494a4b4c4d4e4f505152535455565758595a0a616263
6465666768696a6b6c6d6e6f707172737475767778797a0a

将hex文件123hex转换为二进制文件123ascii

gyj@guyanjun:~$ xxd -r -p 123hex 123ascii
gyj@guyanjun:~$ file 123ascii
123ascii: ASCII text
gyj@guyanjun:~$ cat 123ascii
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Abcdefghijklmnopqrstuvwxyz

tar命令:

将文件、目录打包,常用于备份
-c 创建新的归档文件(打包)
-x 从归档文件中提取文件(解包)
-f <文件名> 指定归档文件名
-v 显示操作的详细信息
-z 通过gzip压缩归档文件
-j 通过bzip2压缩归档文件
-C <目录> 切换到指定目录

gyj@guyanjun:~$ ls
123  123abc  123ascii  123hex  321  nn  tr
gyj@guyanjun:~$ tar cvf aaa 123 321    #将文件123和321打包为aaa
123
321
gyj@guyanjun:~$ file aaa              #查看aaa 文件类型
aaa: POSIX tar archive (GNU)
gyj@guyanjun:~$ mkdir tar
gyj@guyanjun:~$ tar xvf aaa -C tar     #将aaa文件解压到tar目录下
123
321
gyj@guyanjun:~$ ls tar
123  321

gzip命令

Linux系统中常用的压缩命令之一,可以将文件压缩为.gz格式。
常用的gzip命令选项如下:
-c:将压缩结果输出到标准输出,不修改源文件;
-d:解压缩.gz格式的压缩文件;
-r:递归压缩目录及其子目录下的所有文件;
-v:显示压缩过程中的详细信息;
-1 到 -9:指定压缩级别,-1表示最快但压缩比最低,-9表示最慢但压缩比最高。

注意:gzip是文件名后缀来识别文件的,非.gz后缀的文件,gzip不能识别。

gyj@guyanjun:~$ ls
123  123abc  123ascii  123hex  321  aaa  nn  tar  tr
gyj@guyanjun:~$ mkdir gzip
gyj@guyanjun:~$ cp 321 gzip/
gyj@guyanjun:~$ cd gzip/
gyj@guyanjun:~/gzip$ ls           
321                            #以上建立一个测试目录gzip并将文件321拷贝至gzip目录
gyj@guyanjun:~/gzip$ gzip 321   #压缩
gyj@guyanjun:~/gzip$ ls -l
总用量 4
-rw-r--r-- 1 gyj gyj 78 12 11:19 321.gz  #默认不保留源文件,创建压缩文件。
gyj@guyanjun:~/gzip$ file 321.gz           #file查看压缩文件类型
321.gz: gzip compressed data, was "321", last modified: Tue Jan  2 03:19:24 2024, from Unix, original size modulo 2^32 54
gyj@guyanjun:~/gzip$ gzip -d 321.gz      #解压
gyj@guyanjun:~/gzip$ ls -l
总用量 4
-rw-r--r-- 1 gyj gyj 54 12 11:19 321
gyj@guyanjun:~/gzip$ gzip -c 321 >321gz  #保留源文件,创建压缩文件
gyj@guyanjun:~/gzip$ ls -l
总用量 8
-rw-r--r-- 1 gyj gyj 54 12 11:19 321
-rw-r--r-- 1 gyj gyj 78 12 11:26 321gz
gyj@guyanjun:~/gzip$ file 321gz         #文件名没有后缀.gz,file命令能够正确识别文件类型
321gz: gzip compressed data, was "321", last modified: Tue Jan  2 03:19:24 2024, from Unix, original size modulo 2^32 54
gyj@guyanjun:~/gzip$ gzip -d 321gz
gzip: 321gz: unknown suffix -- ignored    #未知后缀 忽略
gyj@guyanjun:~/gzip$ touch gz.gz       #创建一个后缀为.gz的文件
gyj@guyanjun:~/gzip$ gzip -d gz.gz  #看看gzip解压会报什么错误

gzip: gz.gz: unexpected end of file   #未知文件结尾
gyj@guyanjun:~/gzip$ cp 321gz 321gz.gz  #使用cp给321gz创建一个321gz.gz的备份
gyj@guyanjun:~/gzip$ ls
321  321gz  321gz.gz  gz.gz
gyj@guyanjun:~/gzip$ gzip -d 321gz.gz   #解压
gzip: 321gz already exists; do you wish to overwrite (y or n)? y
gyj@guyanjun:~/gzip$ file 321gz        #file查看文件,已解压为文本文件
321gz: ASCII text

Linux bzip2命令

bzip2采用新的压缩演算法,压缩效果比传统的LZ77/LZ78压缩演算法来得好。若没有加上任何参数,bzip2压缩完文件后会产生.bz2的压缩文件,并删除原始的文件。

参数:
-c或–stdout  将压缩与解压缩的结果送到标准输出。
-d或–decompress  执行解压缩。
-f或–force  bzip2在压缩或解压缩时,若输出文件与现有文件同名,预设不会覆盖现有文件。若要覆盖,请使用此参数。
-k或–keep  bzip2在压缩或解压缩后,会删除原始的文件。若要保留原始文件,请使用此参数。
-s或–small  降低程序执行时内存的使用量。
-t或–test  测试.bz2压缩文件的完整性。
-v或–verbose  压缩或解压缩文件时,显示详细的信息。
-z或–compress  强制执行压缩。
-压缩等级  压缩时的区块大小。

gyj@guyanjun:~$ ls
123  123abc  123ascii  123hex  321  aaa  bzip2  gzip  nn  tar  tr
gyj@guyanjun:~$ cd bzip2/
gyj@guyanjun:~/bzip2$ ls       #建立实验目录bzip2,将321拷贝此目录
321
gyj@guyanjun:~/bzip2$ bzip2 321  #压缩
gyj@guyanjun:~/bzip2$ ls
321.bz2
gyj@guyanjun:~/bzip2$ cp 321.bz2  321bz   #将321.bz2 拷贝为无后缀名321bz
gyj@guyanjun:~/bzip2$ ls
321bz  321.bz2
gyj@guyanjun:~/bzip2$ file 321*            #file查看文件类型
321bz:   bzip2 compressed data, block size = 900k
321.bz2: bzip2 compressed data, block size = 900k
gyj@guyanjun:~/bzip2$ bzip2 -d 321.bz2   #解压321.bz2 
gyj@guyanjun:~/bzip2$ ls
321  321bz
gyj@guyanjun:~/bzip2$ bzip2 -d 321bz  #解压无后缀文件321bz
bzip2: Can't guess original name for 321bz -- using 321bz.out  #因无法推测原文件名,将解压后
#文件使用321bz.out输出
gyj@guyanjun:~/bzip2$ ls
321  321bz.out
gyj@guyanjun:~/bzip2$ file 321*
321:       ASCII text
321bz.out: ASCII text

由上述实验可以看出bzip2解压文件对后缀要求不是必须的,无后缀会使用“文件名.out”作为解压后文件名。

相关知识介绍完毕,现在开始解题:
由于服务器对于写权限进行了限制,关卡提示在/tmp建立目录进行相关操作。我觉得服务器有点卡顿,加上权限问题是操作不是很爽,就是使用MobaXterm 提供下载功能将data.txt下载到本地操作了。
Wargames与bash知识07_第1张图片

解题过程:

对每一步建立一个步骤的目录,将原文件及改名后文件备份到这个目录。删除处理过的文件,防止混淆。
不断使用file命令判断文件类型,使用对应的解压工具解压,直到获得文本文件。

gyj@guyanjun:~/12$ ls
data.txt
gyj@guyanjun:~/12$ mkdir 0
gyj@guyanjun:~/12$ xxd -r data.txt data
gyj@guyanjun:~/12$ ls
0  data  data.txt
gyj@guyanjun:~/12$ ls -l
总用量 12
drwxr-xr-x 2 gyj gyj 4096 12 14:28 0
-rw-r--r-- 1 gyj gyj  606 12 14:28 data
-rwxr-xr-x 1 gyj gyj 2582 12 14:27 data.txt
gyj@guyanjun:~/12$ mv data.txt 0/
gyj@guyanjun:~/12$ ls
0  data
gyj@guyanjun:~/12$ file data
data: gzip compressed data, was "data2.bin", last modified: Thu Oct  5 06:19:20 2023, max compression, from Unix, original size modulo 2^32 573
gyj@guyanjun:~/12$ mkdir 1
gyj@guyanjun:~/12$ cp data 1/
gyj@guyanjun:~/12$ mv data data2.bin.gz
gyj@guyanjun:~/12$ cp data2.bin.gz 1/
gyj@guyanjun:~/12$ ls
0  1  data2.bin.gz
gyj@guyanjun:~/12$ gzip -d data2.bin.gz
gyj@guyanjun:~/12$ ls
0  1  data2.bin
gyj@guyanjun:~/12$ file data2.bin
data2.bin: bzip2 compressed data, block size = 900k
gyj@guyanjun:~/12$ mkdir 2
gyj@guyanjun:~/12$ cp data2.bin 2/
gyj@guyanjun:~/12$ mv data2.bin data2.bin.bz2
gyj@guyanjun:~/12$ cp data2.bin.bz2 2/
gyj@guyanjun:~/12$ bzip2 -d data2.bin.bz2
gyj@guyanjun:~/12$ ls
0  1  2  data2.bin
gyj@guyanjun:~/12$ file data2.bin
data2.bin: gzip compressed data, was "data4.bin", last modified: Thu Oct  5 06:19:20 2023, max compression, from Unix, original size modulo 2^32 20480
gyj@guyanjun:~/12$ mkdir 3
gyj@guyanjun:~/12$ cp data2.bin 3/
gyj@guyanjun:~/12$ mv data2.bin data4.bin.gz
gyj@guyanjun:~/12$ cp data4.bin.gz 3/
gyj@guyanjun:~/12$ gzip -d data4.bin.gz
gyj@guyanjun:~/12$ ls
0  1  2  3  data4.bin
gyj@guyanjun:~/12$ file data4.bin
data4.bin: POSIX tar archive (GNU)
gyj@guyanjun:~/12$ mkdir 4
gyj@guyanjun:~/12$ cp data4.bin 4/
gyj@guyanjun:~/12$ tar xvf data4.bin
data5.bin
gyj@guyanjun:~/12$ file data5.bin
data5.bin: POSIX tar archive (GNU)
gyj@guyanjun:~/12$ mkdir 5
gyj@guyanjun:~/12$ cp data5.bin 5/
gyj@guyanjun:~/12$ tar xfv data5.bin
data6.bin
gyj@guyanjun:~/12$ file data6.bin
data6.bin: bzip2 compressed data, block size = 900k
gyj@guyanjun:~/12$ mkdir 6
gyj@guyanjun:~/12$ cp data6.bin 6/
gyj@guyanjun:~/12$ mv data6.bin data6.bin.bz2
gyj@guyanjun:~/12$ cp data6.bin.bz2 6/
gyj@guyanjun:~/12$ bzip2 -d data6.bin.bz2
gyj@guyanjun:~/12$ ls
0  1  2  3  4  5  6  data4.bin  data5.bin  data6.bin
gyj@guyanjun:~/12$ file data6.bin
data6.bin: POSIX tar archive (GNU)
gyj@guyanjun:~/12$ mkdir 7
gyj@guyanjun:~/12$ cp data6.bin 7/
gyj@guyanjun:~/12$ ls
0  1  2  3  4  5  6  7  data4.bin  data5.bin  data6.bin
gyj@guyanjun:~/12$ rm data4* data5*
gyj@guyanjun:~/12$ ls
0  1  2  3  4  5  6  7  data6.bin
gyj@guyanjun:~/12$ tar xfv data6.bin
data8.bin
gyj@guyanjun:~/12$ file data8.bin
data8.bin: gzip compressed data, was "data9.bin", last modified: Thu Oct  5 06:19:20 2023, max compression, from Unix, original size modulo 2^32 49
gyj@guyanjun:~/12$ mkdir 8
gyj@guyanjun:~/12$ cp data8.bin 8/
gyj@guyanjun:~/12$ ls
0  1  2  3  4  5  6  7  8  data6.bin  data8.bin
gyj@guyanjun:~/12$ rm data6*
gyj@guyanjun:~/12$ mv data8.bin data8.bin.gz
gyj@guyanjun:~/12$ cp data8.bin.gz 9/
cp: 无法创建普通文件'9/': 不是目录
gyj@guyanjun:~/12$ cp data8.bin.gz 9/
cp: 无法创建普通文件'9/': 不是目录
gyj@guyanjun:~/12$ cp data8.bin.gz 8/
gyj@guyanjun:~/12$ gzip -d data8.bin.gz
gyj@guyanjun:~/12$ ls
0  1  2  3  4  5  6  7  8  data8.bin
gyj@guyanjun:~/12$ file data8.bin
data8.bin: ASCII text
gyj@guyanjun:~/12$ cat data8.bin
The password is wbWdlBxEir4CaE8LaPhauuOo6pwRmrDw

你可能感兴趣的:(bash,安全,linux)