Canvas
We want to update our website but we are unable to because the developer who coded this left today. Can you take a look?
Po ściągnięciu aplikacji internetowej przeglądamy pliki w poszukiwaniu czegoś ciekawego. Po przenalizowaniu ich natrafiamy na plik o nazwie login.js
. Szczególnie interesujące wydają się ostatnie linijki pliku. Cały plik wykorzystuje format heksadecymalny.
var res=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](0x48,0x54,0x42,0x7b,0x57,0x33,0x4c,0x63,0x30,0x6d,0x33,0x5f,0x37,0x30,0x5f,0x4a,0x34,0x56,0x34,0x35,0x43,0x52,0x31,0x70,0x37,0x5f,0x64,0x33,0x30,0x62,0x46,0x75,0x35,0x43,0x34,0x37,0x31,0x30,0x4e,0x7d,0xa);
Po wrzuceniu ich do konwertera z wybranym kodowaniem UTF-16 big endian, dostaniemy flagę.
The secret of a Queen
Decrypt the code and find the Queen’s secret!
Zadanie z serii „najciemniej jest pod latarnią”. Jako plik zadania dostajemy poniższe zdjęcie.

Po wpisaniu w internecie „The secret of a Queen alphabet”, znajdziemy stronę z Mary Stuart Code. Po użyciu dekodera dostajemy flagę. Trzeba ją uzupełnić o dodatkowe klamry, aby całość pasowała do konwencji flag.
Eternal Loop
Can you find a way out of this loop?
Po ściągnięciu i rozpakowaniu archiwum hasłem z Hack The Box, dostajemy kolejny plik o rozszerzeniu zip. Do odpakowania go potrzebujemy jednak kolejne hasło, którego nie znamy. Po zabawach bruteforce okazuje się, że hasłem jest nazwa zagnieżdżonego w nim pliku zip. Po odpakowywaniu kilku archiwów jeden po drugim, dochodzimy do wniosku, że łatwiej będzie napisać prosty skrypt, który odpakowuje wskazane archiwum bazując na nazwie pliku, który w nim jest, a następnie wywołuje tą samą akcję na nowo wypakowanym archiwum. Bierzemy więc nazwę ostatniego odpakowanego pliku o rozszerzeniu zip i używamy go jako parametru w prostym skrypcie, który prezentuje się następująco:
import zipfile
def unzip_files(file_name):
with zipfile.ZipFile(file_name) as file:
list_of_file_names = file.namelist()
next_zip_file_name = list_of_file_names[0]
next_zip_file_name_size = len(next_zip_file_name)
password = next_zip_file_name[:next_zip_file_name_size - 4]
file.extractall(pwd = bytes(password, 'utf-8'))
print("Extracting a file named {}. Its password is {}".format(file_name, next_zip_file_name))
unzip_files(next_zip_file_name)
unzip_files("49805.zip")
Efekt skryptu:
┌──(bugspace㉿kali)-[~/Downloads]
└─$ python3 unzipFiles.py
Extracting a file named 49805.zip. Its password is 13811.zip
Extracting a file named 13811.zip. Its password is 45133.zip
Extracting a file named 45133.zip. Its password is 4030.zip
Extracting a file named 4030.zip. Its password is 12132.zip
Extracting a file named 12132.zip. Its password is 33130.zip
Extracting a file named 33130.zip. Its password is 8789.zip
(...)
Po kilkuset plikach dostajemy oczekiwany błąd w konsoli.
Extracting a file named 27833.zip. Its password is 6969.zip
(...)
File "/usr/lib/python3.9/zipfile.py", line 835, in __init__
raise RuntimeError("Bad password for file %r" % zipinfo.orig_filename)
RuntimeError: Bad password for file 'DoNotTouch'
Oznacza to, że pozostaje nam do rozpakowania archiwum 6969.zip
. Sposób na odczytanie poprzednich archiwów się nie sprawdził. Spróbujmy zatem użyć wrócić do ataków bruteforce. Użyjemy do tego narzędzia John The Ripper. Najpierw jednak trzeba zapisać w osobnym pliku hashe haseł, które będą crackowane.
┌──(bugspace㉿kali)-[~/Downloads]
└─$ zip2john 6969.zip > 6969.hashes
ver 2.0 efh 5455 efh 7875 6969.zip/DoNotTouch PKZIP Encr: 2b chk, TS_chk, cmplen=335181, decmplen=884736, crc=E8183254
Następnie możemy użyć narzędzia JTR aby je złamać. Ponadto, użyjemy słownika rockyou.txt.gz.
┌──(bugspace㉿kali)-[~/Downloads]
└─$ john 6969.hashes --wordlist=/usr/share/wordlists/rockyou.txt
Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
Will run 16 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
letmeinplease (6969.zip/DoNotTouch)
1g 0:00:00:00 DONE (2021-08-12 23:51) 33.33g/s 5461Kp/s 5461Kc/s 5461KC/s korn13..24782478
Use the "--show" option to display all of the cracked passwords reliably
Session completed
Teraz pozostało użyć poniższego polecenia aby sprawdzić zawartość pliku (notabene jest to baza danych) w poszukiwaniu słowa kluczowego 'HTB’.
grep -Pa 'HTB' DoNotTouch
W taki sposób dostajemy finalną flagę.
Źródła
https://dfir.science/2014/07/how-to-cracking-zip-and-rar-protected.html
https://github.com/openwall/john