Pit - HackTheBox

Comence con un escaneo de Nmap para detectar puertos abiertos.

┌──(root💀kali)-[/home/kali/HTB/Pit/machine]
└─# nmap -sS --min-rate=5000 -vvv -n -Pn --open 10.10.10.241 -oN targeted
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.
Starting Nmap 7.91 ( https://nmap.org ) at 2021-09-26 05:01 EDT
Initiating SYN Stealth Scan at 05:01
Scanning 10.10.10.241 [1000 ports]
Discovered open port 80/tcp on 10.10.10.241
Discovered open port 22/tcp on 10.10.10.241
Discovered open port 9090/tcp on 10.10.10.241
Completed SYN Stealth Scan at 05:01, 0.73s elapsed (1000 total ports)
Nmap scan report for 10.10.10.241
Host is up, received user-set (0.071s latency).
Scanned at 2021-09-26 05:01:42 EDT for 1s
Not shown: 997 filtered ports
Reason: 991 no-responses and 6 admin-prohibiteds
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT 	STATE SERVICE	REASON
22/tcp   open  ssh    	syn-ack ttl 63
80/tcp   open  http   	syn-ack ttl 63
9090/tcp open  zeus-admin syn-ack ttl 63

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.82 seconds
       	Raw packets sent: 1991 (87.604KB) | Rcvd: 9 (564B)

Efectue otro escaneo para detectar la version de cada servicio abierto encontrado.

┌──(root💀kali)-[/home/kali/HTB/Pit/machine]
└─# nmap -sC -sV -p22,80,9090 10.10.10.241 -oN webScan              	 
Starting Nmap 7.91 ( https://nmap.org ) at 2021-09-26 05:02 EDT
Nmap scan report for 10.10.10.241
Host is up (0.053s latency).

PORT 	STATE SERVICE     	VERSION
22/tcp   open  ssh         	OpenSSH 8.0 (protocol 2.0)
| ssh-hostkey:
|   3072 6f:c3:40:8f:69:50:69:5a:57:d7:9c:4e:7b:1b:94:96 (RSA)
|   256 c2:6f:f8:ab:a1:20:83:d1:60:ab:cf:63:2d:c8:65:b7 (ECDSA)
|_  256 6b:65:6c:a6:92:e5:cc:76:17:5a:2f:9a:e7:50:c3:50 (ED25519)
80/tcp   open  http        	nginx 1.14.1
|_http-server-header: nginx/1.14.1
|_http-title: Test Page for the Nginx HTTP Server on Red Hat Enterprise Linux
9090/tcp open  ssl/zeus-admin?
| fingerprint-strings:
|   GetRequest, HTTPOptions:
| 	HTTP/1.1 400 Bad request
| 	Content-Type: text/html; charset=utf8
| 	Transfer-Encoding: chunked
| 	X-DNS-Prefetch-Control: off
| 	Referrer-Policy: no-referrer
| 	X-Content-Type-Options: nosniff
| 	Cross-Origin-Resource-Policy: same-origin
| 	<!DOCTYPE html>
| 	<html>
| 	<head>
| 	<title>
| 	request
| 	</title>
| 	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
| 	<meta name="viewport" content="width=device-width, initial-scale=1.0">
| 	<style>
| 	body {
| 	margin: 0;
| 	font-family: "RedHatDisplay", "Open Sans", Helvetica, Arial, sans-serif;
| 	font-size: 12px;
| 	line-height: 1.66666667;
| 	color: #333333;
| 	background-color: #f5f5f5;
| 	border: 0;
| 	vertical-align: middle;
| 	font-weight: 300;
|_	margin: 0 0 10p
| ssl-cert: Subject: commonName=dms-pit.htb/organizationName=4cd9329523184b0ea52ba0d20a1a6f92/countryName=US
| Subject Alternative Name: DNS:dms-pit.htb, DNS:localhost, IP Address:127.0.0.1
| Not valid before: 2020-04-16T23:29:12
|_Not valid after:  2030-06-04T16:09:12
|_ssl-date: TLS randomness does not represent time
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port9090-TCP:V=7.91%T=SSL%I=7%D=9/26%Time=61503762%P=x86_64-pc-linux-gn
SF:u%r(GetRequest,E70,"HTTP/1\.1\x20400\x20Bad\x20request\r\nContent-Type:
SF:\x20text/html;\x20charset=utf8\r\nTransfer-Encoding:\x20chunked\r\nX-DN
SF:S-Prefetch-Control:\x20off\r\nReferrer-Policy:\x20no-referrer\r\nX-Cont
SF:ent-Type-Options:\x20nosniff\r\nCross-Origin-Resource-Policy:\x20same-o
SF:rigin\r\n\r\n29\r\n<!DOCTYPE\x20html>\n<html>\n<head>\n\x20\x20\x20\x20
SF:<title>\r\nb\r\nBad\x20request\r\nd08\r\n</title>\n\x20\x20\x20\x20<met
SF:a\x20http-equiv=\"Content-Type\"\x20content=\"text/html;\x20charset=utf
SF:-8\">\n\x20\x20\x20\x20<meta\x20name=\"viewport\"\x20content=\"width=de
SF:vice-width,\x20initial-scale=1\.0\">\n\x20\x20\x20\x20<style>\n\tbody\x
SF:20{\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20margin:\x200;\n\x2
SF:0\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20font-family:\x20\"RedHatDi
SF:splay\",\x20\"Open\x20Sans\",\x20Helvetica,\x20Arial,\x20sans-serif;\n\
SF:x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20font-size:\x2012px;\n\x2
SF:0\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20line-height:\x201\.6666666
SF:7;\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20color:\x20#333333;\
SF:n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20background-color:\x20#
SF:f5f5f5;\n\x20\x20\x20\x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\x20\x20\x2
SF:0\x20img\x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20border:\
SF:x200;\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20vertical-align:\
SF:x20middle;\n\x20\x20\x20\x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\x20\x20
SF:\x20\x20h1\x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20font-w
SF:eight:\x20300;\n\x20\x20\x20\x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\x20
SF:\x20\x20\x20p\x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20mar
SF:gin:\x200\x200\x2010p")%r(HTTPOptions,E70,"HTTP/1\.1\x20400\x20Bad\x20r
SF:equest\r\nContent-Type:\x20text/html;\x20charset=utf8\r\nTransfer-Encod
SF:ing:\x20chunked\r\nX-DNS-Prefetch-Control:\x20off\r\nReferrer-Policy:\x
SF:20no-referrer\r\nX-Content-Type-Options:\x20nosniff\r\nCross-Origin-Res
SF:ource-Policy:\x20same-origin\r\n\r\n29\r\n<!DOCTYPE\x20html>\n<html>\n<
SF:head>\n\x20\x20\x20\x20<title>\r\nb\r\nBad\x20request\r\nd08\r\n</title
SF:>\n\x20\x20\x20\x20<meta\x20http-equiv=\"Content-Type\"\x20content=\"te
SF:xt/html;\x20charset=utf-8\">\n\x20\x20\x20\x20<meta\x20name=\"viewport\
SF:"\x20content=\"width=device-width,\x20initial-scale=1\.0\">\n\x20\x20\x
SF:20\x20<style>\n\tbody\x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x2
SF:0\x20margin:\x200;\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fon
SF:t-family:\x20\"RedHatDisplay\",\x20\"Open\x20Sans\",\x20Helvetica,\x20A
SF:rial,\x20sans-serif;\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20f
SF:ont-size:\x2012px;\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20lin
SF:e-height:\x201\.66666667;\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
SF:\x20color:\x20#333333;\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x2
SF:0background-color:\x20#f5f5f5;\n\x20\x20\x20\x20\x20\x20\x20\x20}\n\x20
SF:\x20\x20\x20\x20\x20\x20\x20img\x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\
SF:x20\x20\x20\x20border:\x200;\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
SF:x20\x20vertical-align:\x20middle;\n\x20\x20\x20\x20\x20\x20\x20\x20}\n\
SF:x20\x20\x20\x20\x20\x20\x20\x20h1\x20{\n\x20\x20\x20\x20\x20\x20\x20\x2
SF:0\x20\x20\x20\x20font-weight:\x20300;\n\x20\x20\x20\x20\x20\x20\x20\x20
SF:}\n\x20\x20\x20\x20\x20\x20\x20\x20p\x20{\n\x20\x20\x20\x20\x20\x20\x20
SF:\x20\x20\x20\x20\x20margin:\x200\x200\x2010p");

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 192.25 seconds

Nmap me encontro tres puertos abiertos, uno de SSH y los otros dos servidores web, empece mirando el servidor web que corre por el puerto 80.

https://imgur.com/qFYlUkX.png

Al parecer no tenia nada interesante, decidi hacer fuzzing para encontrar directorios, pero no encontré nada.

https://imgur.com/n8cA6Sk.png

Al acceder a el puerto 9090 me redirigio a un dominio distinto, vi que se estaba aplicando virtual hosting, es decir almacenar distintos dominios en un misma IP, para ello inclui los dominios dms-pit.htb y pit.htb que me reporto Nmap en el /etc/hosts.

https://imgur.com/yPgRicj.png

Volvi a acceder al puerto 9090 y encontré un 403 FORBIDDEN.

https://imgur.com/k7O1fNq.png

Viendo que no encontré nada interesante en TCP decidi probar por UDP y ver si tenia algun puerto abierto, para ello use la herramienta udp-proto-scanner.pl y encontré snmp abierto por el puerto 161.

https://imgur.com/4p4Ve4k.png

Asi que probe a enumerar snmp con onesixtyone para ver si encontraba alguna “community string” de la que me podia aprovechar para encontrar informacion, decidi clonarme un diccionario de las mismas.

https://imgur.com/HdglhGw.png

Al efectuar el reconocimiento me encontro la etiqueta public.

https://imgur.com/WO9jVR9.png

Gracias a esta “community string” podia enumerar informacion con snmpwalk, pero no encontre nada.

https://imgur.com/qjdeNBC.png

Pensando un tiempo me di cuenta que podia enumerar mas informacion con MIB's, para ello hice uso de la MIB NET-SNMP-EXTEND-MIB::nsExtendOutputFull.

https://imgur.com/QLtcEIr.png

Encontre una ruta que me llamo la atencion.

https://imgur.com/GGi4Mhi.png

Probando la ruta en los servidores web, el unico que tuvo respuesta fue el que corria por el puerto 9090.

https://imgur.com/zZbSgP7.png

Era un panel de inicio de sesion, busque si habia algun exploit disponible.

https://imgur.com/ovcmTNp.png

Encontre un exploit que te garantizaba ejecucion remota de codigo arbitrario, pero necesitaba estar autenticado en el panel, haciendo “password spraying” logre acceder con el usuario y contraseña michelle que me habia reportado en la enumeracion de snmp.

https://imgur.com/eKN8Ijz.png

https://imgur.com/SEl8Kwt.png

Dentro del panel me encontre una carpeta llamada Docs.

https://imgur.com/2gaAYqN.png

En ella encontré otra llamada Users.

https://imgur.com/FbzRLdj.png

Accediendo a ella encontre otras dos carpetas, una llamada michelle y otra Jack, accedi a la de michelle, ya que es el usuario con el que estoy autenticado valga la redundancia, en ella encontré una seccion que al parecer me permitia añadir documentos.

https://imgur.com/069DBCI.png

Este era el formulario que me presento.

https://imgur.com/nRw5TeD.png

Puse el nombre de la webshell y la seleccione.

https://imgur.com/NmNHo7T.png

Y la subi.

https://imgur.com/5Otq7el.png

Necesitaba su identificador, para ello estaba en la url.

https://imgur.com/n7lt6a8.png

Y gane ejecucion de codigo arbitrario.

https://imgur.com/1YHeAfB.png

Quise entablarme una reverse shell pero al parecer tenia algun tipo de restriccion y no me dejo, por lo que tuve que hacer uso de una herramienta, ttyoverhttp, esta herramienta de s4vitar permite tener la ejecucion de codigo arbirtrario en una shell sin necesidad de usar una “FakeShell” o entablarse un socket, esta herramienta hace uso de la utilidad mkfifo, solamente copie la ruta de la webshell y la pegue en la seccion que corresponde.

https://imgur.com/gWQhVq9.png

La ejecute con Python3 y gane RCE.

https://imgur.com/b1EjTf5.png

Enumerando un poco el sistema encontré un settings.xml en /var/www/html/seeddms51x/conf, este tenia credenciales.

https://imgur.com/DeQcKKq.png

Estas me sirvieron para autenticarme en el panel de inicio de sesion de CentOS Linux haciendo uso del usuario michelle.

https://imgur.com/ZGWRCQx.png

Este era el panel.

https://imgur.com/c8UiYHk.png

Lo que mas me llamo la atencion era la seccion de Terminal, accediendo a ella encontré una especie de Shell remota, ya pude visualizar la flag del usui y entablarme una reverse shell a mi maquina.

JNrU6Tu

Y recibi la shell.

https://imgur.com/eIclvoV.png


ESCALADA DE PRIVILEGIOS

Para la escalada de privilegios encontré este binario /usr/bin/monitor.

#!/bin/bash

for script in /usr/local/monitoring/check*sh
do 
	/bin/bash $script
done 

Viendo esto me recordo a algo de snmp, cuando ejecutaba la enumeracion con el MIB NET-SNMP-EXTEND-MIB::nsExtendOutputFull, habia un “delay” de tiempo en espera hasta que se ejecute la enumeracion, esto lo producia un binario llamado igual, /usr/bin/monitor.

https://imgur.com/kcf9jnk.png

Entonces pense que de alguna manera podia haber conexion, este script ejecutara cualquier script llamado check seguido de algo y .sh almacenado en la ruta /usr/local/monitoring, lo que hice fue crearme un par de claves con ssh-keygen y crear un script que las copie a /root/.ssh/autorized_keys, de esta manera si el usuario es privilegiado podia iniciar sesion a ssh sin proporcionar credenciales, primero me cree las claves.

https://imgur.com/qb5B8f8.png

Ahora cree el script y lo transferi a la ruta /usr/local/monitoring ejecutando otra vez la enumeracion con de snmp con el MIB NET-SNMP-EXTEND-MIB::nsExtendOutputFull me ejecuto el script y pude acceder por ssh a la maquina con la clave publica, ya pude visualizar la “flag” del usaurio root.

LUJBnaF

Leave a comment