---
title: 'OverTheWire: Bandit 解題筆記|Level 12 → Level 13'
tags:
- OverTheWire
- Bandit
- Linux
- 資訊安全
---
# OverTheWire: Bandit 解題筆記|Level 12 → Level 13
**上一關:** [OverTheWire: Bandit 解題筆記|Level 11 → Level 12](/JLYJQkWWQaiyqQ6jgaOrtg)
**連結:** https://overthewire.org/wargames/bandit/bandit13.html
## 登入
```shell
$ ssh -p 2220 bandit12@bandit.labs.overthewire.org
```
密碼:`JVNBBFSmZwKKOP0XbFXOoW8chDz5yVRv`
## 題目
**關卡目標**
下一關的密碼存儲在檔案 `data.txt` 中,該檔案是一個經過多次壓縮的檔案 `hexdump` 後的輸出結果。對於這一關,建議你在 `/tmp` 下創建一個工作目錄。可以使用 `mkdir` 命令創建一個難以猜測的目錄名,或者更好地使用命令 “`mktemp -d`”。然後使用 `cp` 命令複製數據文件,並使用 `mv` 命令重命名它(請用 `man` 指令查詢!)。
**你可能需要用到的命令**
grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd, mkdir, cp, mv, file
**有用的閱讀資料**
[Hex dump on Wikipedia](https://en.wikipedia.org/wiki/Hex_dump)
## 解題思路
題目所提示的指令只有三個是壓縮程式:`tar`、`gzip`、`bzip2`。而由於我們只拿到 `hexdump` 的結果也就是二進制檔,所以我們勢必得了解三個壓所軟體的壓縮方式。
- [Basic Tar Format](https://www.gnu.org/software/tar/manual/html_node/Standard.html)
- [corkami: tar](https://github.com/corkami/pics/blob/master/binary/TAR.png)
- [RFC1952: GZIP file format specification version 4.3](https://datatracker.ietf.org/doc/html/rfc1952#section-2.3.1)
- [corkami: gzip](https://github.com/corkami/pics/blob/master/binary/GZip.png)
- [corkami: bzip2](https://github.com/corkami/pics/blob/master/binary/BZ2.png)
## 詳解
一開始先照著題目的敘述複製到暫存的資料夾中。
```shell
bandit12@bandit:~$ cd /tmp
bandit12@bandit:/tmp$ mktemp -d
/tmp/tmp.yHSvETxRvp
bandit12@bandit:/tmp$ cd /tmp/tmp.yHSvETxRvp
bandit12@bandit:/tmp/tmp.yHSvETxRvp$
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ cp ~/data.txt .
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ ls -al
total 10396
drwx------ 2 bandit12 bandit12 4096 May 27 01:47 .
drwxrwx-wt 403 root root 10633216 May 27 01:48 ..
-rw-r----- 1 bandit12 bandit12 2582 May 27 01:47 data.txt
```
### first glance
```shell
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ cat data.txt | head
00000000: 1f8b 0808 6855 1e65 0203 6461 7461 322e ....hU.e..data2.
00000010: 6269 6e00 013d 02c2 fd42 5a68 3931 4159 bin..=...BZh91AY
00000020: 2653 5948 1b32 0200 0019 ffff faee cff7 &SYH.2..........
00000030: f6ff e4f7 bfbc ffff bff7 ffb9 39ff 7ffb ............9...
00000040: bd31 eeff b9fb fbbb b9bf f77f b001 3b2c .1............;,
00000050: d100 0d03 d200 6868 0d00 0069 a00d 0340 ......hh...i...@
00000060: 1a68 00d0 0d01 a1a0 0001 a680 0003 46d4 .h............F.
00000070: 6434 3234 611a 340d 07a4 c351 068f 5000 d424a.4....Q..P.
00000080: 069a 0680 0000 0006 8006 8da4 681a 6868 ............h.hh
00000090: 0d06 8d00 6834 3400 d07a 9a00 01a0 0341 ....h44..z.....A
```
透過 `cat` 印出 `hexdump` 的結果,可以看到檔案的最開始有 `1f`、`8b` 兩個 byte,這個是 `gzip` 的簽名,我們可以照著架構往下找會發現,原始的檔案名稱是 `data2.bin`。
### gzip
了解檔案的內容後就可以開始還原成二進制檔案了。`xxd` 指令可以生成 `hexdump` 結果的文本外,也可以將其還原。
```shell
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ xxd -r data.txt data2.bin.gz
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ la
data2.bin.gz data.txt
```
然後我們就用 `gzip` 解壓縮。
```shell
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ gzip -d data2.bin.gz
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ la
data2.bin data.txt
```
打開 `data2.bin` 時,會發現裡面全都是亂碼。
```shell
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ cat data2.bin
�h44�z��A����@=�h4hh�␦␦␦��hd�����1����������;,�
�����2�3d*58�~ �S�ZP^��luY��Br$�FP!%�s��h�?�)[=�h��O(B��2A���)�tZc��:�pã)�A�ˈ�0���΅A�yjeϢx,�(����z�E�+"�2�/�-��e"���^����t�j���$�d�@�dJơ'7\���$��m1c��#>�aԽ�EV��F��OCӐc@M�C���]��Y2^h8���D=��~ O�I��NDpF�+�|b#Jv�#�J��d�LފW$�Û�͖y�`
�\& ��[�@*w�M�0�nr��C��`e$b�
~�{���
��`�<����a��?e:T���e�T4±b����)�@ِ
```
這代表了檔案還要再繼續解壓縮。
### bzip
```shell
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ xxd data2.bin | head
00000000: 425a 6839 3141 5926 5359 481b 3202 0000 BZh91AY&SYH.2...
00000010: 19ff fffa eecf f7f6 ffe4 f7bf bcff ffbf ................
00000020: f7ff b939 ff7f fbbd 31ee ffb9 fbfb bbb9 ...9....1.......
00000030: bff7 7fb0 013b 2cd1 000d 03d2 0068 680d .....;,......hh.
00000040: 0000 69a0 0d03 401a 6800 d00d 01a1 a000 ..i...@.h.......
00000050: 01a6 8000 0346 d464 3432 3461 1a34 0d07 .....F.d424a.4..
00000060: a4c3 5106 8f50 0006 9a06 8000 0000 0680 ..Q..P..........
00000070: 068d a468 1a68 680d 068d 0068 3434 00d0 ...h.hh....h44..
00000080: 7a9a 0001 a003 41ea 1ea1 90da 403d 10ca z.....A.....@=..
00000090: 6834 6868 0000 c81a 1a1b 5006 83d4 34d0 h4hh......P...4.
```
我們可以看到,檔案的開頭有一個 `BZ`(`42`、`5a`)這個是 `bzip` 的簽名,因此我們可以用 `bzip2` 解壓縮。
```shell
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ cp data2.bin data3.bin.bz
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ bzip2 -d data3.bin.bz
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ la
data2.bin data3.bin data.txt
```
### gzip
```shell
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ xxd data3.bin | head
00000000: 1f8b 0808 6855 1e65 0203 6461 7461 342e ....hU.e..data4.
00000010: 6269 6e00 edd1 cf4b 1461 1cc7 f187 711d bin....K.a....q.
00000020: 4410 5c08 7415 65bb b8d0 41e6 1967 d6dd D.\.t.e...A..g..
00000030: dbee 8298 45b4 9009 5b22 8cec 4153 5c5a ....E...["..AS\Z
00000040: 574f 91e3 2a9a 4ab0 4607 490c a30d fc0b WO..*.J.F.I.....
00000050: 4210 b42e 2196 0759 130f a292 dd3c 8881 B...!..Y.....<..
00000060: 9897 6aca 9b81 9df2 07bc 5f97 cf97 e779 ..j......._....y
00000070: 2edf e713 b752 9659 ddda de25 fe1f cde1 .....R.Y...%....
00000080: 378c 3fe9 3891 baf1 7b96 86a9 d51a a66e 7.?.8...{......n
00000090: 9ace b994 ba51 2bbc 9a38 033d dd29 2be9 .....Q+..8.=.)+.
```
```shell
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ cp data3.bin data4.bin.gz
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ gzip -d data4.bin.gz
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ la
data2.bin data3.bin data4.bin data.txt
```
### tar
```shell
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ xxd data4.bin | head
00000000: 6461 7461 352e 6269 6e00 0000 0000 0000 data5.bin.......
00000010: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000020: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000030: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000040: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000060: 0000 0000 3030 3030 3634 3400 3030 3030 ....0000644.0000
00000070: 3030 3000 3030 3030 3030 3000 3030 3030 000.0000000.0000
00000080: 3030 3234 3030 3000 3134 3530 3734 3532 0024000.14507452
00000090: 3535 3000 3031 3132 3437 0020 3000 0000 550.011247. 0...
```
```shell
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ cp data4.bin data5.bin.tar
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ tar -xf data5.bin.tar
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ ls
data2.bin data3.bin data4.bin data5.bin data5.bin.tar data.txt
```
### tar
```shell
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ xxd data5.bin | head
00000000: 6461 7461 362e 6269 6e00 0000 0000 0000 data6.bin.......
00000010: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000020: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000030: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000040: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000060: 0000 0000 3030 3030 3634 3400 3030 3030 ....0000644.0000
00000070: 3030 3000 3030 3030 3030 3000 3030 3030 000.0000000.0000
00000080: 3030 3030 3333 3100 3134 3530 3734 3532 0000331.14507452
00000090: 3535 3000 3031 3132 3531 0020 3000 0000 550.011251. 0...
```
```shell
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ cp data5.bin data6.bin.tar
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ tar -xf data6.bin.tar
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ ls
data2.bin data4.bin data5.bin.tar data6.bin.tar
data3.bin data5.bin data6.bin data.txt
```
### bzip
```shell
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ xxd data6.bin | head
00000000: 425a 6839 3141 5926 5359 0403 8894 0000 BZh91AY&SY......
00000010: 8bff dfdc 5c80 41c0 6ff7 e000 f1a3 8076 ....\.A.o......v
00000020: 61fe 0000 0800 1002 0000 7282 0400 8442 a.........r....B
00000030: 0820 0092 0d4a 1906 21a0 3118 8191 90d3 . ...J..!.1.....
00000040: 269a 0632 6936 a0d1 49f9 501a 3206 83d4 &..2i6..I.P.2...
00000050: d340 0686 4000 3406 f8de 6bf1 0202 ca80 .@..@.4...k.....
00000060: 4082 9b19 384d 7cd4 5631 40c8 101e e350 @...8M|.V1@....P
00000070: 87cd dcd3 325b 6a19 1be4 902e a476 1127 ....2[j......v.'
00000080: 8931 8d1a 73b8 e31e 00b6 5402 5449 82f2 .1..s.....T.TI..
00000090: 9856 e089 2aa8 41d8 5e4f 0a9e 0539 f5d5 .V..*.A.^O...9..
```
```shell
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ cp data6.bin data7.bin.bz
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ bzip2 -d data7.bin.bz
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ ls
data2.bin data4.bin data5.bin.tar data6.bin.tar data.txt
data3.bin data5.bin data6.bin data7.bin
```
### tar
```shell
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ xxd data7.bin | head
00000000: 6461 7461 382e 6269 6e00 0000 0000 0000 data8.bin.......
00000010: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000020: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000030: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000040: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000060: 0000 0000 3030 3030 3634 3400 3030 3030 ....0000644.0000
00000070: 3030 3000 3030 3030 3030 3000 3030 3030 000.0000000.0000
00000080: 3030 3030 3131 3700 3134 3530 3734 3532 0000117.14507452
00000090: 3535 3000 3031 3132 3535 0020 3000 0000 550.011255. 0...
```
```shell
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ cp data7.bin data8.bin.tar
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ tar -xf data8.bin.tar
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ ls
data2.bin data4.bin data5.bin.tar data6.bin.tar data8.bin data.txt
data3.bin data5.bin data6.bin data7.bin data8.bin.tar
```
### gzip
```shell
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ xxd data8.bin | head
00000000: 1f8b 0808 6855 1e65 0203 6461 7461 392e ....hU.e..data9.
00000010: 6269 6e00 0bc9 4855 2848 2c2e 2ecf 2f4a bin...HU(H,.../J
00000020: 51c8 2c56 284f 0a4f c971 aa70 cd2c 3271 Q.,V(O.O.q.p.,2q
00000030: 4e74 b5f0 490c c848 2c2d f5cf 372b 280f Nt..I..H,-..7+(.
00000040: ca2d 7229 e702 00dc ec75 4731 0000 00 .-r).....uG1...
```
```shell
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ cp data8.bin data9.bin.gz
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ gzip -d data9.bin.gz
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ ls
data2.bin data4.bin data5.bin.tar data6.bin.tar data8.bin data9.bin
data3.bin data5.bin data6.bin data7.bin data8.bin.tar data.txt
```
### final
```shell
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ xxd data9.bin | head
00000000: 5468 6520 7061 7373 776f 7264 2069 7320 The password is
00000010: 7762 5764 6c42 7845 6972 3443 6145 384c wbWdlBxEir4CaE8L
00000020: 6150 6861 7575 4f6f 3670 7752 6d72 4477 aPhauuOo6pwRmrDw
00000030: 0a .
bandit12@bandit:/tmp/tmp.yHSvETxRvp$ cat data9.bin
The password is wbWdlBxEir4CaE8LaPhauuOo6pwRmrDw
```
[OverTheWire: Bandit 解題筆記|Level 13 → Level 14]