Pada soal ini diberikan zip archive yang berisi direktori home linux pada umumnya.
Pada direktori tersebut, terdapat beberapa file yang bisa menuntun kita pada flag:
- .bash_history: Menyimpan command-command yang pernah di eksekusi
- flag.zip: Berisi flag.txt
- pass.txt: Berisi password untuk zip file
Hal pertama yang kami coba adalah langsung menggunakan isi file pass.txt
untuk melakukan unzip terhadap flag.zip, namun gagal.
Karena gagal, kami pun berpikir bahwa konten dari pass.txt ini sudah dirubah. Berikutnya, kami coba membuka file .bash_history
untuk mencari tahu tentang command apa saja yang pernah dieksekusi. Berikut isi dari file .bash_history
:
1 2 3 4 5 6 7 8 9 10 11 12 |
nano .bash_history cat flag.txt nano pass.txt zip --password $(cat pass.txt | tr -d '\n') flag.zip flag.txt cat pass.txt unzip flag.zip truncate -s -2 pass.txt cat pass.txt ls -alt rm flag.txt history -a |
Terlihat bahwa setelah mengisi file pass.txt
dan melakukan zip pada file flag.txt
, dilakukan command truncate
pada file pass.txt
dengan command truncate -s -2 pass.txt
Command tersebut memiliki fungsi sebagai berikut:

Jadi, command yang dijalankan pada file pass.txt
akan membuang 2 bytes paling belakang dari file. Untuk memastikan, kami pun mencoba melakukan truncate
pada file dummy:

Dari string CJ2020
, setelah di truncate hanya menjadi CJ202
bukan CJ20
. Hal ini dikarenakan byte terakhir pada file adalah newline \n
atau 0xa
. Sehingga dari string yang terlihat hanya 1 huruf saja yang terpotong.

Dari situ, kami membuat script untuk bruteforce 1 huruf yang hilang dari pass.txt
untuk unzip file flag.zip
. Berikut script yang digunakan:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import string, zipfile file_zip = zipfile.ZipFile("flag.zip") for char in string.printable: password = "c10a41a5411b992a9ef7444fd6346a4" + char try: file_zip.extractall(pwd = password) password = 'Password found: {}'.format(password) print password break except: pass |
Dan didapatkan password sebagai berikut:
Terakhir, tinggal membuka flag.txt
untuk mendapatkan flag.
Flag = CJ2020{just_to_check_if_you_are_familiar_with_linux_or_not}