Writeups

Technical
Writeups

HTB

Fluffy

En la Machine Information nos dicen lo siguiente:

As is common in real life Windows pentests, you will start the Fluffy box with credentials for the following account: j.fleischman / J0elTHEM4n1990!

Por lo que tenemos credenciales validas para conectarnos a la maquina

Primero hacemos un escaneo de puertos basico para ver que puestos tiene expuestos

![[Pasted image 20261015111021.png]] ![[Pasted image 20261015111014.png]]

Por lo que se puede apreciar se trata de un DC con puertos DNS, Kerberos, LDAP. Ademas tiene puertos de SMB/NetBIOS y WinRM

Tambien podemos ver que el dominio es fluffy.htb por lo que vamos a incluirlo en nuestro /etc/hosts

![[Pasted image 20261015111553.png]]

Probamos con netexec si las credenciales son correctas usando el protocolo smb y winrm. Aqui vemos que tenemos acceso al smb pero no via winrm

![[Pasted image 20261015112022.png]]

Vamos a usar enum4linux con nuestras credenciales para sacar la mayor informacion posible del SMB

![[Pasted image 20261015112230.png]]![[Pasted image 20261015112253.png]]![[Pasted image 20261015112305.png]]

Conseguimos algo de informacion pero no podemos ver los shares. Vamos a probar con smbmap

![[Pasted image 20261015112418.png]]

Aqui vemos varios Shares default y tambien tenemos IT desde el que podemos leer y escribir. Nos conectamos a el y recuperamos todos los archivos para verlos offline

![[Pasted image 20261015112858.png]]![[Pasted image 20261015113002.png]]![[Pasted image 20261015113007.png]]![[Pasted image 20261015113059.png]]

Aqui podemos ver que han tenido algunas vulns recientemente que tienen que upgradear

Miramos los otros directorios a ver que nos encontramos

![[Pasted image 20261015113221.png]]

No encontramos nada interesante por aqui asi que nos centraremos en ese PDF. Si miramos los metadatos encontraremos lo que parece ser un usuario valido:

![[Pasted image 20261015114518.png]]

Podemos confirmarlo usando RPC sobre SMB

![[Pasted image 20261015114642.png]]

Si buscamos el CVE (CVE-2025-24071 exploit) en internet encontraremos el siguiente repo (https://github.com/FOLKS-iwd/CVE-2025-24071-msfvenom) que parece indicar que tiene un modulo en MSF asi que vamos a verlo

![[Pasted image 20261015114830.png]]

Por lo que se puede ver, mediante una libreria maliciosa en un ZIP que deberia estar en los recursos SMB. Si un usuario extrae este ZIP con la libreria SMB inicia una peticion de autenticacion leakando el hash NTLM sin interaccion

Cargamos el modulo en msf:

![[Pasted image 20261015115430.png]]

Me daba una incompatibilidad con mi version ruby y he tenido que cambiarel siguiente bloque:

![[Pasted image 20261015120241.png]]

![[Pasted image 20261015120846.png]]

Ahora nos creamos un listener en msfconsole en el puerto 445

![[Pasted image 20261015121113.png]]

Subimos el archivo

![[Pasted image 20261015121343.png]]

A los segundos obtenemos algunos hashes NTLM todos de p.agila

![[Pasted image 20261015121645.png]]

Lo crackeamos offline con hashcat y obtenemos sus credenciales

![[Pasted image 20261015121832.png]]

p.agila:prometheusx-303

Volvemos a probar a ver si tenemos acceso al winrm pero tampoco, ademas tenemos los mismos privs sobre el SMB

![[Pasted image 20261015122054.png]]

Ahora vamos a tratar de enumerar el dominio mediante bloodhound.py a ver si encontramos alguna otra ruta

Antes metemos a dc01 en el /etc/hosts

![[Pasted image 20261015123150.png]] ![[Pasted image 20261015123137.png]]

Al buscar a p.agila vemos que tenemos transitive object control al pertenecer a Service Account Managers

![[Pasted image 20261015123555.png]]

Primer paso, nos añadimos al grupo de SERVICE ACCOUNTS ya que tenemos Generic All

![[Pasted image 20261015124249.png]]

Confirmamos que se ha realizado correctamente con ldapsearch

![[Pasted image 20261015124513.png]]

Las 3 cuentas que tenemos como Generic Write son:

![[Pasted image 20261015124602.png]]![[Pasted image 20261015124608.png]]![[Pasted image 20261015124615.png]]

Vamos a investigar en bloodhount cual es mas interesante

Tras revisar un poco, la que mas me interas es WINRM_SVC porque seguramente nos deje conectarnos al servidor DC01, la siguiente con mas interes seria CA_SVC por si tiene control sobre alguna autoridad certificadora

Vamos a realizar un Kerberoasting aprovechando los privs GenericWrite

![[Pasted image 20261015130722.png]]

Me da un error en Kerberos por no tener sincronizada la hora con el DC

![[Pasted image 20261015130819.png]] ![[Pasted image 20261015130754.png]]

Volvemos a la hora normal y crackeamos offline

![[Pasted image 20261015131023.png]]

No hemos sido capaces de crackearlo

Ahora podemos intentar un ataque de Shadow Credentials contra WINRM_SVC para intentar autenticarnos como este usuario sin conocer su pass

Como funciona: en AD hay un atributo msDS-eyCredentialLink que puede almacenar informacion de claves publicas asociadas a una cuenta (se usan para algunas formas de autenticacion mediante certificados). Si consiguiesemos modificarlo podriamos registrar una clave publcia registrada por nosotros y despues autenticarnos usando nuestra clave privada (se puede realizar gracias al GeneralWrite pero tiene que ser bajo algunas condiciones mas)

![[Pasted image 20261015140952.png]]

Voy a realizar el Shadow Creds con las otras cuentas tambien

![[Pasted image 20261015141413.png]]![[Pasted image 20261015141448.png]]

Obtenido el hash de winrm_svc, ahora podemos intentar autenticarnos con evilwin-rm en el host usando el usuario y el hash obtenido

![[Pasted image 20261015141125.png]]

Hemos conseguido la primera flag y ahora nos tocaria elevar privs hacia Administrator para conseguir la segunda. Miramos nuestros privs a ver si tenemos acceso rapido por aqui o miramos otras rutas

![[Pasted image 20261015143132.png]] ![[Pasted image 20261015143142.png]]

Nada interesante.

Como vimos que CA_SVC era miembro de CERT PLUBLISHERS en Bloodhound podemos ver informacion sobre la autoridad certificadora a ver si encontramos alguna vulnerabilidad usando certipy enumerando el AD CS ya que no la hemos enumerado al ver que teniamos GenericWrite directamente y era una ruta facil de obtener hashes

![[Pasted image 20261015143601.png]]

No encontramos ninguna vuln con CVE asociado directamente pero si encotnramos en una de las plantillas el siguiente identificador 1.3.6.1.4.1.311.25.2 y vemos que esta deshabilitado

Buscando que significaba, esta es una extension de seguridad que permite vincular de forma segura el certificado solicitado al CA con la cuenta que la solicita incorporando informacion del SID. Como esta deshabilitado podemos conseguir un certificado de otra cuenta (priv) sin que contenga informacion del SID que lo vincule estrechamente a la cuenta que suplantamos

![[Pasted image 20261015143806.png]]

Para realizar este ataque primero nos tenemos que cambiar el UPN (User Principal Name) al de la cuenta que queramos suplantar, en nuestro caso Administrator aprovechando el GenericWrite

![[Pasted image 20261015145141.png]]

Tras esto solicitamos un certificado usando el hash NT conseguido en el Shadow Credentials para autenticarnos en la CA y la plantilla User. La CA mirara nuestro UPN y nos dara el certificado de ese UPN sin extension de seguridad SID

![[Pasted image 20261015145246.png]]

Restauramos nuestro UPN de CA_SVC para deshacer los cambios

![[Pasted image 20261015145329.png]]

Nos autenticamos como Administrator via winrm usando el certificado emitido en .pfx mediante Kerberos PKINIT (no necesitamos conecer la pass de administrator)

![[Pasted image 20261015142932.png]]![[Pasted image 20261015142941.png]]

HTB

Postman

Realizamos un escaneo de puertos

![[Pasted image 20261016191049.png]]

Nos da:

  • HTTP Apache 2.4.29
  • Redis 4.0.9 (una BBDD NoSQL de codigo abierto)
  • MiniServ 1.910 (servidor web ligero en Perl y usa por defecto en el panel de control Webmin). Este no depende de Apache o Nginx para funcionar como vemos, levante su propio puerto

El 80 parece estar en construccion

![[Pasted image 20261016191521.png]]

Y el 10000 tiene un login

![[Pasted image 20261016191542.png]]

Si miramos su codigo fuente parece tratarse de un cgi

![[Pasted image 20261016191655.png]]![[Pasted image 20261016191706.png]]

Vamos a atrapar la solicitud del login con burp para intentar fuerza bruta

Por lo que veo usa las credenciales del sistema no tiene unas hardcodeadas:

![[Pasted image 20261016191902.png]]

![[Pasted image 20261016191937.png]]

La fuerza bruta nos esta dando FPs

![[Pasted image 20261016193229.png]]

Mirando mientras exploits para la version de Redis encontramos que si este se encuentra sin pass y expuesto puede que consigamos RCE

![[Pasted image 20261016193309.png]]

Si intentamos conectarnos sin aportar pass conseguiremos entrar

![[Pasted image 20261016193444.png]]

Ademas vemos que el protected mode esta deshabilitado

![[Pasted image 20261016202423.png]]

He visto en google una cadena para conseguir RCE que voy a probar:

  1. Generamos un par de llaves SSH de forma local:

![[Pasted image 20261016201309.png]]

Realizamos saltos de linea adicionales porque el formato binario de Redis es RDB para guardar en la BBDD y los saltos de linea permiten separar la clave publica del contenido binario para que OpenSSH pueda reconocerla

2. Limpiamos la base de datos de Redis para eliminar claves existentes e insertamos nuestra clave publica en la memoria. Ademas cargamos el contenido del payload

![[Pasted image 20261016193708.png]]

El parámetro `-x` hace que `redis-cli` lea el contenido de la entrada estándar y lo utilice como último argumento del comando

3. Verificamos que se ha subido el contenido de la clave y el lugar default

![[Pasted image 20261016203217.png]]

  1. Intentamos cambiar el directorio de persistencia a /root/.ssh pero no teniamos acceso

![[Pasted image 20261016193904.png]]

Pero vimos que Redis usaba /var/lib/redis

![[Pasted image 20261016203209.png]]

  1. Probamos a poner el directorio de persistencia ahi, cambiamos tambiel el nombre del archivo y forzamos su guardado –> /var/lib/redis/.ssh/authorized_keys

![[Pasted image 20261016202056.png]]

  1. Probamos y accedemos al host

![[Pasted image 20261016202103.png]]

![[Pasted image 20261016203530.png]]![[Pasted image 20261016203820.png]]![[Pasted image 20261016203826.png]]![[Pasted image 20261016205956.png]]

Al usarla contra Matt nos pide el passphrase:

![[Pasted image 20261016210015.png]]

Podemos convertirla en en hash compatible con john y tratar de hacer fuerza bruta

![[Pasted image 20261016210116.png]]

Obtuvimos la pass, ahora probemosla contra Matt:

![[Pasted image 20261016210730.png]]

Vemos que se nos cierra la sesion, si miramos por palabras clave, vemos que Matt tiene denegado el inicio de sesion por SSH

![[Pasted image 20261016210713.png]]

Podemos probar esa clave que hemos encontrado como contraseña normal de Matt por si hay reutilizacion de pass y efectivamente la hay

![[Pasted image 20261016210833.png]]

Viendo lo que era webmin antes, vimos que es una aplicacion que no usa creds hardcodeadas sino que usa la del sistema (es decir usuarios existentes en el sistema). Por eso si usamos las creds de Matt nos podremos loguear

![[Pasted image 20261016214940.png]]![[Pasted image 20261016215046.png]]

![[Pasted image 20261016215207.png]] ![[Pasted image 20261016215219.png]]

Necesitaremos poner las siguientes opciones:

![[Pasted image 20261016215219.png]]

Ademas si miramos quien esta ejecutando Webmin veremos que es root por lo que si obtenemos RCE via Webmin obtendremos acceso root

![[Pasted image 20261016215325.png]]

Lo metemos en MSF y configuramos para ejecutarlo y obtener una shell root

![[Pasted image 20261016215549.png]]

![[Pasted image 20261016215714.png]]![[Pasted image 20261016215722.png]] ![[Pasted image 20261016215804.png]]![[Pasted image 20261016215947.png]]

HTB

Trick

Realizamos un primer escaneo de puertos sobre el objetivo

![[Pasted image 20261016082638.png]]

Vemos algunos puertos pero el que mas me llama la atencion es el 80 con un nginx 1.14.2

![[Pasted image 20261016082837.png]]

Vemos una opcion de enviar un email y veiamos un smtp tambien pero no es la ruta que mas me llama la atencion por ahora. Igualmente voy a hacer un test y usando burp y viendo la peticion que enviamos de prueba

![[Pasted image 20261016083047.png]]

Nada nos saca del alcance hacia una pagina externa. Vamos a hacer un fuzzing de directorios inicial

![[Pasted image 20261016083224.png]]

No encontramos nada, he mirado mientras exploits de la version del nginx y parece haber varios y el que mas me llama la atencion es este cve “https://github.com/moften/CVE-2019-20372”

![[Pasted image 20261016085641.png]]![[Pasted image 20261016085650.png]]

No funciona. Vamos ahora a tocar el DNS a ver si encontramos cositas. Primero quiero ver el dominio

![[Pasted image 20261016090932.png]]

Lo meto en /etc/hosts

![[Pasted image 20261016091018.png]]

Vamos a probar con un vhosts pero sobre todo, ya que tenemos el dns a hacer una transferencia de zona a ver si encontramos mas subdominios

![[Pasted image 20261016091445.png]]

Por aqui parece que no encontramos nada, pero al hacer una transferencia de zona si encontramos un nuevo subdominio

![[Pasted image 20261016091524.png]]

Si lo visitamos vemos un panel de login

![[Pasted image 20261016091538.png]]

Vamos a capturar una request de testeo para ver que parametros y como se pasa el POST

![[Pasted image 20261016091734.png]] ![[Pasted image 20261016092656.png]]

![[Pasted image 20261016091747.png]]

Vemos campos username y password y una respuesta fallida sobre /ajax.php?action=login. La respuesta no se incorrecta no se da en la respuesta del ajax.php, hay que tener cuidado, ajax nos devuelve un 200 OK. Podemos probar fuerza bruta a ver poniendo como F=3 que es lo que sale al tener un login fallido en ajax

![[Pasted image 20261016092309.png]]

Encontramos unas creds, pero son falsos positivos. Vamos a buscar mas directorios o archivos

![[Pasted image 20261016094041.png]]

Las mas interasantes:

![[Pasted image 20261016094406.png]]![[Pasted image 20261016094415.png]]![[Pasted image 20261016094423.png]]

Si miramos el codigo de la pagina users.php vemos lo siguiente:

![[Pasted image 20261016095142.png]]

Un script que si damos click a new-user nos enviaria a manage_user.php, el caso es que no funciona pero si podemos visitar este archivo

Como se ve el archivo no tiene un boton de sumbit

![[Pasted image 20261016094804.png]]

Si miramos el codigo fuente otra vez vemos un script y vemos que se envia como peticion ajax por lo que podemos enviar una con un usuario inventado

Le ponemos type 1 para que sea administrador

![[Pasted image 20261016095518.png]]

![[Pasted image 20261016095545.png]]

Otra cosa que me ocurre al ver este contenido de users.php:

![[Pasted image 20261016100031.png]]

Vemos ahi el id de administrator que es data-id=1 podemos probar a hacer un GET a ?id=1 sobre manage_users para ver si podemos editarlo

![[Pasted image 20261016100226.png]]

Nos salen los campos rellenados con ese usuario pero no lo puedo ver directamente. Si miramos el codigo fuente esta en texto claro

![[Pasted image 20261016100309.png]]

Enemigosss:SuperGucciRainbowCake

Estamos dentro ![[Pasted image 20261016100626.png]]![[Pasted image 20261016100406.png]]

No encontramos informacion expuesta ni subida de archivos pero si el parametro GET ?page=archivo. Tras probar LFI de muchas maneras no encontramos nada

Mucha busqueda en este subdominio y no encontramos nada, parece un rabbit hole. Sabiendo que existe el subdominio preprod-payroll.trick.htb podemos intentar identificar otros con el patron preprod-FUZZ.trick.htb

![[Pasted image 20261016110409.png]]

Hemos encontrado ahora preprod-marketing vamos a meterlo en /etc/hosts y seguir mirando

![[Pasted image 20261016110448.png]]![[Pasted image 20261016110529.png]]

Tras navegar un poco, no encontramos nada que nos pueda dar RCE pero si encontramos otra vez el parametro ?page= que ahora parece mas susceptible a LFI porque esta cogiendo .htmls

![[Pasted image 20261016110632.png]]

Vamos a capturar una peticion con Burp para pasarlo al repeater y hacer algunas pruebas desde ahi

Tras hacer un poco de LFI simplemente con la evasion de ….// conseguimos LFI

![[Pasted image 20261016110930.png]]

Ademas ya vemos un usuario que tiene sesion interactiva en el sistema

![[Pasted image 20261016110957.png]]

Conseguimos su id_rsa

![[Pasted image 20261016111129.png]]

Nos conectamos y conseguimos la primera flag

![[Pasted image 20261016111313.png]] ![[Pasted image 20261016112329.png]]

Somos del grupo security

Vemos nuestros privs sudo

![[Pasted image 20261016111506.png]]

Una busqueda rapida de escalada de privs con este comando nos indica que si hay rutas de escalada

  1. Miramos dentro del directorio del ejecutable, buscamos directorios o archivos que podamos escribir y miramos los permisos completos de los archivos donde configuracion

![[Pasted image 20261016112153.png]]

Como se ve en action.d tenemos permisos w

2. Tambien miramos los privs del script que podemos ejecutar como sudo y lo estudiamos para ver que hace

![[Pasted image 20261016112530.png]]

Vemos que no tenemos permisos de escritura. Vemos en la descripcion que dice que es un demonio que escanea los archivos de logs para banear posibles ataques

Otra cosa que vemos es que el script usa fail-client como root de forma predeterminada, asi que ya hemos confirmado que se ejecuta como root

Miramos la configuracion de fail2ban-client donde podemos ver que se protege al sshd con umbral de 5 fallos en una ventana de 10s y con una duracion de bloqueo de 10s. Para gestionar los bloqueos usa iptables-multiport

![[Pasted image 20261016115405.png]] ![[Pasted image 20261016115414.png]]

Como hemos visto que ejecuta iptables-multiport para gestionar los bloqueos, miramos y editamos su configuracion. Para poder modificarla, primero tenemos que conseguir que sea de nuestra propiedad. Como tenemos permisos de escritura en action.d podemos crear una copia y luego copiar esta para que el usuario sea michael y no root. Le ponemos ahora los permisos de escritura y lectura

![[Pasted image 20261016114643.png]]

Al entrar vemos que el actionban usa iptables (firewall) asociado al jail de fail2ban (seria el sshd segun hemos visto en la configuracion de fail2ban) indicando que los paquetes de la IP origen (-s IP) seran bloqueados (-j blocktype)

![[Pasted image 20261016114709.png]]

Cambiamos esto por una reverse shell basica que cuando nos banee nos la envie a nuestro listener

![[Pasted image 20261016114807.png]]

Comprobamos otra vez la configuracion de fail2ban y vemos que ahora en actionban realiza en comando de nc hacia nuestra ip

![[Pasted image 20261016121516.png]]

Realizamos fallos en la autenticacion ssh hasta que salte el ban y obtenemos la shell root

![[Pasted image 20261016122011.png]]

![[Pasted image 20261016122038.png]]

HTB

Craft

Hacemos un escaneo de puertos inicial

![[Pasted image 20261027103312.png]]![[Pasted image 20261027103323.png]]![[Pasted image 20261027103330.png]]

Vemos multiples puertos y cosas a tener en cuenta:

  • FTP con anonymous login donde vemos un kdbx
  • DNS
  • HTTP con IIS
  • Kerberos
  • LDAP
  • SMB
  • MSSQL Server 2018
  • Dominio: redelegate.vl y DC: dc.redelegate.vl
  • RPC
  • RDP y WinRM

Lo primero, vamos a poner el dominio y DC en /etc/hosts

![[Pasted image 20261027103653.png]]

Vamos a conectarnos al FTP via anonimo y nos descargamos todo

![[Pasted image 20261027110203.png]] ![[Pasted image 20261027110225.png]]

Miramos primeros los txt. Aqui vemos que se usan pass debiles, privilegios excesivos, objetos que no se usan de AD y ACLs peligrosas

Ademas vemos lo que puede ser una pass: SeasonYear!

![[Pasted image 20261027103920.png]]

Ahora vamos a abrir el kdbx y si probamos la pass encontrada vemos que no funciona

![[Pasted image 20261027104415.png]]

Vamos a hacer fuerza bruta:

  • Extraemos el hash

![[Pasted image 20261027104602.png]]

  • Lo crackeamos primero con rockyou

No lo conseguimos. Con las pistas que tenemos solo podemos pensar que la pass encontrada es simplemente una plantilla de pass SeasonYear!:

Summer2026!
Summer2025!
Summer2024!
Summer2023!
Summer2022!
Winter2026!
Winter2025!
Winter2024!
Winter2023!
Winter2022!
Fall2026!
Fall2025!
Fall2024!
Fall2023!
Fall2022!
Spring2026!
Spring2025!
Spring2024!
Spring2023!
Spring2022!

Probamos con esto:

![[Pasted image 20261027110259.png]]

Entramos:

![[Pasted image 20261027110422.png]]

![[Pasted image 20261027110455.png]]

Vemos varios usuarios. El que mas llama la atencion son FS01 Administrator y SQL Guest podemos usar el de SQL para ver si tenemos primero acceso al MSSQL

![[Pasted image 20261027110831.png]]

Funciona. Nos conectamos y vamos a ver las bases de datos:

![[Pasted image 20261027111001.png]]![[Pasted image 20261027111250.png]]

No vemos nada importante por aqui. Otra cosa que podemos intentar es enumerar usurios de dominio se puede hacer manual pero msf tenia un modulo que lo hace mas sencillo:

![[Pasted image 20261027111901.png]]

![[Pasted image 20261027111912.png]]

Me da un error por el metodo emty? en el modulo ubicado en /usr/share/metasploit-framework/modules/auxiliary/admin/mssql/mssql_enum_domain_accounts.rb

Tengo que modificarlo:

  • Esto

![[Pasted image 20261027112333.png]]

  • Lo sustituimos por:

![[Pasted image 20261027112417.png]]

Actualizamos y lanzamos

![[Pasted image 20261027112444.png]]

Los usuarios encontrados fueron:

REDELEGATE\Ryan.Cooper
REDELEGATE\sql_svc
REDELEGATE\Christine.Flanders
REDELEGATE\Marie.Curie
REDELEGATE\Helen.Frost
REDELEGATE\Michael.Pontiac
REDELEGATE\Mallory.Roberts
REDELEGATE\James.Dinkleberg

Vamos a volver a usar las pass de antes contra estos usuarios nuevos:

![[Pasted image 20261027113215.png]]

![[Pasted image 20261027113328.png]]![[Pasted image 20261027113334.png]]

Encontramos Marie.Curie:Fall2024!

Vamos a usar esto para ejecutar bloodhound:

![[Pasted image 20261027113606.png]]

Miramos marie curie y sus transitive object control:

![[Pasted image 20261027113746.png]]

![[Pasted image 20261027113815.png]]

Vale ahora mismo vemos una ruta clara de movimiento lateral usando a marie.curie para cambiar la pass de helen y tener acceso remoto a DC y generic all sobre FS01. Vamos a seguir mirando si hay escalada por aqui o tendremos que hacer otra cosa

No vemos nada mas hasta llegar a helen que tiene generic all sobre FS

Vamos con ello hasta ahi y veremos los privs que tiene:

  • Cambiamos la pass de Helen.frost

![[Pasted image 20261027114613.png]]

  • Nos conectamos via winrm

![[Pasted image 20261027114721.png]]

Si miramos sus privs, podemos ver SeEnableDelegationPrivilege

![[Pasted image 20261027114742.png]]![[Pasted image 20261027115003.png]]

Con esto en mano vamos a hacer un Kerberos Constrained Delegation:

  • Habilitamos TRUSTED_TO_AUTH_FOR_DELEGATION en FS01 pueda solicitar tickets Kerberos en nombre de un usuario aunque ese usuario no se haya autenticado mediante kerberos

![[Pasted image 20261027122209.png]]

  • Permitimos delegar la identidad de DC hacia el servicio de SMB (cifs) del propio DC usando la cuenta FS01 haciendo que FS01 pueda actuar en nombre de otro usuario

![[Pasted image 20261027122217.png]]

  • Obtenemos el ticket ccache solicitando el ticket de dc usando el servicio SMB (cifs) del controlador de dominio desde FS01

![[Pasted image 20261027122234.png]]

  • Exportamos el ccache para usarlo

![[Pasted image 20261027122241.png]]

  • Obtenemos le hash de Administrator via secretsdump y obtenemos la flag

![[Pasted image 20261027122253.png]]

HTB

Administrator

Aquí empieza el writeup…

Tenemos credenciales de inicio–> Olivia:ichliebedich

Realizamos un escaneo de puertos inicial

![[Pasted image 20261022193035.png]]

Vemos puertos tipicos de AD y de un DC como Kerberos, LDAP, SMB, RPC, WinRm, FTP o SMB directamente. Tambien podemos usar bloodhound en el dominio y ver rutas desde ahi

Lo primero va a ser meter el dominio administrator.htb en /etc/hosts

![[Pasted image 20261022193258.png]]

Vamos a probar nuestras creds con netexec a ver si podemos autenticarnos al SMB con creds de dominio y vemos que si

![[Pasted image 20261022193426.png]]

Si probamos al ftp vemos que no

![[Pasted image 20261022193512.png]]

Vamos a enumerar los shares

![[Pasted image 20261022193548.png]]

A priori no vemos nada interesante, si vemos que no conseguimos nada por otro lado podriamos mirar el NETLOGON y SYSVOL

Por ahora vamos a usar bloodhound a ver si encontramos rutas de acceso por ahi

Primero necesitamos el nombre del DC, vamos a verlo en los registros DNS

![[Pasted image 20261022194104.png]] ![[Pasted image 20261022194920.png]]

Ahora usaremos bloodhound.py

![[Pasted image 20261022194130.png]]

![[Pasted image 20261022194322.png]]![[Pasted image 20261022194427.png]]

Al ver esto la ruta que se me pasa por la cabeza sabiendo que no hemos sido capaces de acceder al FTP y viendo el nombre del grupo “SHARE MODERATORS” supongo que al llegar a obtener control sobre benjamin tendremos acceso a ese FTP y desde ahi podremos seguir movimiendonos

Cambiamos la pass de los dos usuarios usando nuestros privs de GenericAll y luego de ForceChangePassword

![[Pasted image 20261022195208.png]]

Probamos con netexec y benjamin si ahora tenemos acceso ftp

![[Pasted image 20261022195315.png]]

Tenemos acceso:

![[Pasted image 20261022195430.png]]

Tras recuperar el .psafe3 primero lo vamos a convertir en formato que john lo entienda e intentamos crackearlo

![[Pasted image 20261022195618.png]]

Lo abrimos con la pass que hemos recuperado (tekieromucho):

![[Pasted image 20261022195824.png]]![[Pasted image 20261022195903.png]]

Vamos a mirar en bloodhound a ver con cual tenemos una ruta clara para seguir

![[Pasted image 20261022200041.png]]

Emily es la unica que nos permite movernos lateralmente

Si miramos a ethan vemos que podemos usarlo para hacer un DCSync del dominio

![[Pasted image 20261022200158.png]]

Vamos hacer Keberoast contra Ethan, primero podemos mirar si tiene SPN pero tiene pinta de que no. Si no tiene le modificamos sus atributos para ponerle uno y despues pedir un ticket TGS a su nombre

![[Pasted image 20261022200711.png]]

No tiene, le creamos uno gracias a GenericWrites

![[Pasted image 20261022201237.png]]

Ahora lo pedimos (tenemos que sincronizarnos con DC para que no falle Kerberos):

![[Pasted image 20261022201305.png]]

Crackeamos offline:

![[Pasted image 20261022201400.png]]![[Pasted image 20261022201406.png]]

ethan:limpbizkit

Vamos con el DCSync para obtener creds mediante secretsdump

![[Pasted image 20261022201548.png]]

Nos conectamos via PtH y obtenemos las dos flags

![[Pasted image 20261022201721.png]]![[Pasted image 20261022201727.png]]

HTB

Authority

Hacemos un escaneo de puertos inicial

![[Pasted image 20261026110440.png]]![[Pasted image 20261026110449.png]]

Vemos varias cositas, vemos un AD con nombre de dominio htb.corp aunque nmap lo detecta como authority.htb, deberemos probar ambos, con DNS, Kerberos, LDAP, RPC, WinRM

Tambien vemos SMB, Microsoft IIS en el 80 y Apache Tomcat 8443

Vamos a poner el dominio en /etc/hosts

![[Pasted image 20261026111114.png]]

Revisamos los HTTP

  • En el 80 vemos un default

![[Pasted image 20261026111131.png]]

  • En el 443 vemos que nos redirige a /pwm/private/login

![[Pasted image 20261026111249.png]]

Lo primero es que vamos a ir intentando una fuerza bruta en segundo plano

![[Pasted image 20261026111405.png]]![[Pasted image 20261026111418.png]] ![[Pasted image 20261026111719.png]]

Vale, antes de hacer la fuerza bruta vemos que es una autenticacion PWM que envia las credenciales en JSON, vemos en la peticion un pwmFormID que puede ser dinamico

Ademas, el error es de LDAP no de PWM, no vemos errores de contraseña. No es por aqui

Entonces en segundo plano lanzaremos un fuzzing de directorios

![[Pasted image 20261026112025.png]]

Mientras si vemos la pagina web vemos que dice que la configuracion de PWM esta abierta y no es segura

Si entramos vemos que igualmente tenemos que loguearnos pero vemos algunas cosas interesantes:

![[Pasted image 20261026112116.png]]

Autenticaciones previas de svc_pwm y acceso a la red interna 172.16.1.144

Mientras vamos a hacer otras cosas en otros puertos, vamos con el SMB. Intentamos entrar como anonimos:

![[Pasted image 20261026112354.png]]

Podemos listar al menos. Me llaman la atencion Department Shares y Development

![[Pasted image 20261026112633.png]]

Podemos entrar en Development:

![[Pasted image 20261026112711.png]]

![[Pasted image 20261026112907.png]] ![[Pasted image 20261026112918.png]]

Vemos muchisimas cosas intersantes. Ahora sabemos que hay seguramente un ADCS (luego nos aseguraremos con certipy), veo un tomcat-users y un ldap_sudo_users con .j2, junto a estos otros archivos interesantes son los de main.yml en concreto el de PWM

![[Pasted image 20261026113407.png]]

![[Pasted image 20261026113459.png]]

Cositas. Vemos 3 usuarios con lo que parecen sus contraseñas codificadas con ansible vault. Podemos usar ansible2john

Creamos un archivo solo con los hashes:

![[Pasted image 20261026113715.png]]

Tenemos que quitarles esos espacios:

![[Pasted image 20261026113926.png]]

Ahora los separamos para hacer uno a uno

![[Pasted image 20261026114141.png]]

Los volvemos a poner todos en un archivo para ahora usarlos contrar hascat

![[Pasted image 20261026114540.png]]

![[Pasted image 20261026114650.png]]

Las crackeamos con exito, las 3 son las mismas, vamos a usar esta pass para desencriptar finalmente los vaults que conseguimos del main.yml

![[Pasted image 20261026120546.png]] ![[Pasted image 20261026120525.png]]

Creds conseguidas:

  • svc_pwm
  • pWm_@dm!N_!23
  • DevT3st@123

Si las probamos en la configuracion de la web PWM vemos que pWm_@dm!N_!23 nos deja entrar:

![[Pasted image 20261026121452.png]]

Si nos ponemos a mirar vemos un LDAP Test de Conexion, esto tiene buena pinta encima podemos añadir valores o editarlos

![[Pasted image 20261026122207.png]]

Ponemos nuestra IP, nuestro puerto y ponemos solo ldap quitando el SSL

![[Pasted image 20261026122401.png]] ![[Pasted image 20261026122416.png]]

Hemos obtenido las claves de svc_ldap. Vamos a ver si tenemos conexion via WinRM

![[Pasted image 20261026122720.png]] ![[Pasted image 20261026123522.png]]

Para la escalada de privilegios tenemos varias opciones:

  • Escalada interna mirando Winpeas
  • Escalada por AD
  • Escalada por ADCS que todavia no hemos mirado y podemos ver si alguna plantilla tiene alguna vuln ESC

Vamos a ir con la de AD CS porque en el SMB vimos que seguramente hubiese AD CS y es rapido de verificar:

![[Pasted image 20261026123028.png]]![[Pasted image 20261026123048.png]]

Efectivamente tenemos una vuln ESC1en la plantilla CorpVPN. Este ESC no permite a un usuario o equipo del dominio obtener un certificado para autenticarse como otra entidad. Podriamos usarla para conseguir el certificado de un Domain Admin

En la plantilla pone que es para Computers accounts, Domain Admins o Enterprise Admins:

![[Pasted image 20261026123432.png]]

svc_ldap vimos que no pertenecia a ninguno de estos grupos pero si vimos que tiene el priv: SeMachineAccountPrivilege

Vamos a crear una cuenta maquina gracias a ese priv para luego usarala y pedir el certificado de una cuenta de administrador de dominio

![[Pasted image 20261026124212.png]]

HTB$:Password1!

Pedimos el certificado y con exito conseguimos el .pfx de administrator

![[Pasted image 20261026124521.png]]

Lo siguiente es pedir un TGT de administrator usando el pfx

![[Pasted image 20261026124750.png]]

Me da error Kerberos diciendo que el KDC no soporta el padata type, es decir no se puede usar PKINIT

Otra opcion es loguearnos con un ldap-shell

![[Pasted image 20261026125309.png]]

Desde aqui podemos hacer muchas cosas. Vamos a cambiar la pass de nuestra cuenta administrator y nos conectamos via Winrm

![[Pasted image 20261026125415.png]]![[Pasted image 20261026125528.png]]

HTB

Craft

Hacemos un escaneo de puertos inicial

![[Pasted image 20261026144608.png]]

Vemos varias cosas. Vemos un SSH por el 22 y otro puerto SSH de Golang y un 443 donde vemos que el certificado nos dice que el commonName es craft.htb

Vamos a añadirlo a /etc/hosts

![[Pasted image 20261026144749.png]]

Si entramos al 443 vemos una pagina web

![[Pasted image 20261026144846.png]]

Dice que craft tiene como objetivo ser uno de los repositorios mas grandes accesibles via REST. En el futuro haran una app con interface para movil usando una REST API pero por ahora checkea su API

![[Pasted image 20261026145025.png]]

Estos dos botones nos redirigen hacia 2 subdominios que no somos capaces de resolver, por lo que los vamos a meter en el /etc/hosts

![[Pasted image 20261026145059.png]]![[Pasted image 20261026145107.png]]![[Pasted image 20261026145144.png]]

  • api.craft.htb: vemos que nos dice algunos endpoints donde se realizan acciones de la api. Como validar el token de autorizaciones, crear el token de autenticacion entre otros

![[Pasted image 20261026145208.png]]

  • gogs.craft.htb: aqui vemos una plataforma de selfthosted git service

![[Pasted image 20261026145349.png]]

Si vamos al explore vemos un repositorio donde se encuentra la api parece ser ademas de contener una notificacion en issues:

![[Pasted image 20261026145413.png]]![[Pasted image 20261026145425.png]]

Vamos a clonar esto en local para verlo mejor:

![[Pasted image 20261026145620.png]]

Miramos algunos endpoints para entender el funcionamiento del auth y brew

  • auth:
    • Para la autorizacion necesitaremos un token en forma de apikey que viene en el header en el campo X-Craft-Api-Token
    • Verifica que el user introducido sea el mismo que en la base de datos y lo mismo la pass
    • Si es correcto crea el token usando el user, el datetime y un secret
    • Si el tiken no es correcto o no esta nos devuelve un 403

![[Pasted image 20261026145834.png]] ![[Pasted image 20261026145853.png]]

  • brew:
    • Busca que el api sea el esperado
    • Devuelve una lista de brews cogiendola de la base de datos
    • Para hacer un post mira si el abv es mayor que uno y mira que el abv sea decimal, si es asi, crea un brew
      • No hay sanetizacion por lo que podriamos usar eval para que mediante python ejecutar codigo

![[Pasted image 20261026145931.png]]![[Pasted image 20261026145947.png]]

Si miramos el issue vemos lo que parece ser un token valido y una conversacion para sanetizar la entrada antes de llegar al DB

![[Pasted image 20261026151235.png]]

Por ultimo miramos test.py

![[Pasted image 20261026151731.png]]

Podemos modificar este de la siguiente forma:

  • En auth tendremos que poner un username y token validos
  • En abv el cual no esta sanetizado podremos meter un codigo reverse shell por ejemplo

Si miramos commits anteriores y vemos uno con un auth valido encontramos uno para dinesh:

![[Pasted image 20261026152633.png]] ![[Pasted image 20261026152622.png]]

Modificamos test.py para que contenga lo que queremos:

![[Pasted image 20261026153241.png]]

Ejecutamos test.py mientras tenemos un listener

![[Pasted image 20261026153318.png]] ![[Pasted image 20261026153257.png]]

No encontramos nada. SI miramos en / vemos .dockerenv por lo que podremos suponer que estamos en un contenedor:

![[Pasted image 20261026153538.png]]

Encontramos el script dbtest.py:

![[Pasted image 20261026153706.png]] ![[Pasted image 20261026153723.png]]

Como vemos los settings se cargan desde craft_api

![[Pasted image 20261026153847.png]]

Encontramos aqui las creds que usa el scritp para conectarse a la BBDD

Con esto podremos crear un nuevo script con la base de dbtest.py para ir consultando la base de datos

![[Pasted image 20261026154956.png]]

Cambiamos la consulta SQL y cambiamos el fetchone a fetchall para que nos muestre todo

![[Pasted image 20261026154609.png]]![[Pasted image 20261026154647.png]] ![[Pasted image 20261026155056.png]]

Vamos ver todo de user cambiando el script de nuevo:

![[Pasted image 20261026155148.png]]

![[Pasted image 20261026155644.png]]

Solo me muestra una linea por lo que modificamos el script de nuevo

![[Pasted image 20261026155626.png]]![[Pasted image 20261026155732.png]]

Probamos a usarlas para ssh:

![[Pasted image 20261026160043.png]]

Con todos nos da denegado necesitamos publickey. Probamos a loguearnos entonces dentro de gogs y si tenemos exitos con gilfoyle

![[Pasted image 20261026160151.png]]

![[Pasted image 20261026160201.png]]

Entramos en el repositorio y donde vemos el directorio .ssh:

![[Pasted image 20261026160343.png]]![[Pasted image 20261026160427.png]]

Me copio todo el repositorio y usamos el id_rsa para autenticarnos como gilfoyle

![[Pasted image 20261026160635.png]]

![[Pasted image 20261026161210.png]]

Nos ha pedido una passphrase y usamos la pass del usuario que encontramos en la base de datos

![[Pasted image 20261026161403.png]]

SI miramos archivos ocultos vemos un vault-token

![[Pasted image 20261026161424.png]]

En el repositorio de este usuario teniamos un directorio llamado vault:

![[Pasted image 20261026161458.png]]![[Pasted image 20261026161510.png]]

Aqui podemos ver que secrets.sh:

  • Activa el motor de secretos SSH de Vault
  • Crea una configuracion llamada ssh/roles/root_otp
  • key_type=otp: significa que genera una contraseña de un solo cada vez que intentemos conectarnos via vault
  • El usuario defecto es root
  • Permite solicitar OTP para cualquier dirección IPv4, según esta restricción de rol

Comprobamos que este vault funciona

![[Pasted image 20261026162246.png]]

Existe y lo usamos. Genera el otp que tendremos que copiar y pegar en el apartado password:

![[Pasted image 20261026162304.png]] ![[Pasted image 20261026162330.png]]

HTB

Jeeves

![[Pasted image 20261015164916.png]]

Si entramos a la pagina principal del puerto 80 y buscamos algo como test vemos el error en la pagina web encontramos fallos de Microsoft SQL Server 2005 y su version que podria indicar vuln en sqli

![[Pasted image 20261015165341.png]]![[Pasted image 20261015165348.png]]

Si tratamos de capturar con burp la peticion al darle a search veremos que no se captura nada y es debido a que en realidad error.html esta devolviendo un PNG no es un mensaje real

![[Pasted image 20261015170532.png]]

Si hacemos fuzzing de directorios al 80 no encontramos nada

![[Pasted image 20261015170657.png]]

Vamos ahora a centrarnos en el 50000, si entramos a la raiz nos da un 404

![[Pasted image 20261015171243.png]]

Hacemos un fuzzing a ver si encontramos directorios ![[Pasted image 20261015171028.png]]

![[Pasted image 20261015171327.png]]![[Pasted image 20261015171336.png]]

Esta version es antigua y tiene muchas vulns. Una via potencial es encontrar el directorio script con una consola que permita escribir codigo en groovy y con un boton run

![[Pasted image 20261015171947.png]]![[Pasted image 20261015171954.png]]![[Pasted image 20261015172137.png]]

Ponemos un reverse shell en groovy teniendo un listener encendido:

![[Pasted image 20261015172351.png]]![[Pasted image 20261015173700.png]]

El payload es de Payload all the things

![[Pasted image 20261015173747.png]] ![[Pasted image 20261015173815.png]]

Investigamos un poco en lo que tenemos acceso

![[Pasted image 20261015173955.png]]![[Pasted image 20261015174001.png]]

Intentamos crackearla offline

![[Pasted image 20261015174552.png]]

Mirando nuestros privs vemos SeImpersonatePrivilege

![[Pasted image 20261015174342.png]]

Antes conseguimos la flag user en C:\User\kohsuke\Desktop (al directorio Administrator no tenemos acceso aun)

![[Pasted image 20261015174506.png]]

Ahora queremos pasar PrinteSpoofer y nc pero no tenemos ni curl ni wget pero si tenemos SMB por lo que vamos a intentar pasarlos por ahi

![[Pasted image 20261015175030.png]] ![[Pasted image 20261015175021.png]]

![[Pasted image 20261015175209.png]]![[Pasted image 20261015175301.png]]

PrintSpoofer no me estaba dejando por temas de dependencias de librerias, asi que cargamos JuicyPotato

![[Pasted image 20261015181047.png]]

![[Pasted image 20261015182116.png]]

![[Pasted image 20261015182129.png]]

Vemos que la flag no esta donde normalmente deberia estar. Por la pista puede que este en un Alternate Data Stream que es una caracteristica de los archivos NTFS de Windows que permite almacenar informacion adicional dentro de un archivo pero sin que se vea al abrirlo de forma habitual

![[Pasted image 20261015183054.png]]

Indicadores de que pudiese ser esto: las flags suelen estar en este directorio con el nombre root.txt, no existian archivos root.txt en el sistema, ya conocia estos archivos del EJPTv2

![[Pasted image 20261015183445.png]]

![[Pasted image 20261015182816.png]]![[Pasted image 20261015182821.png]]

HTB

Media

Realizamos un escaneo de puertos inicial

![[Pasted image 20261018134646.png]]

Vemos puertos SSH, HTTP con Apache 2.4.56 y PHP 8.1.17 y un RDP. Se trata de una maquina Windows

Visitamos la pagina web:

![[Pasted image 20261018134804.png]]

Abajo vemos un upload file sobre un video que tiene que ser compatible con Windows Media player:

![[Pasted image 20261018134829.png]]

Antes de seguir por aqui, voy a realizar una enumeracion de directorios:

![[Pasted image 20261018135830.png]]

Los mas interesantes estan forbidden

Vamos a subir un archivo de prueba, dandole a all files voy a intentar subir un archio que no sea de video:

![[Pasted image 20261018140220.png]]

Vemos una peticion post con los datos en diferentes datas del cuerpo. Si lo intentamos subir:

![[Pasted image 20261018140306.png]] ![[Pasted image 20261018140312.png]]

Veremos un 200OK y que HR revisara nuestro video pero no sabemos donde se sube realmente

Si subimos un .mp4 vamos a ver si tenemos otra respuesta:

![[Pasted image 20261018141123.png]]![[Pasted image 20261018141200.png]]

Mismo mensaje. Vamos a modificar en la peticion que hicimos de users.txt a users.php a ver:

![[Pasted image 20261018141655.png]]

Pero tenemos la misma respuesta. Vamos a hacer algunas comprobaciones:

  • Parte de fileupload vacia = no nos devuelve el succesfully ![[Pasted image 20261018142404.png]]

  • Ponemos content type de formatos binarios sin especificar el tipo = something went wrong

![[Pasted image 20261018142350.png]]

  • Vamos a probar esto mismo pero ahora poniendo un nombre de archivo como test.php = successfully

![[Pasted image 20261018142459.png]]

Tras hacer una investigacion mas profunda de directorios y codigo fuente no sabemos donde se sube aunque tenga el listado de directorios activado:

![[Pasted image 20261018151503.png]]

Vamos a probar una tecnica que consiste en subir un archivo compatible con Windows Media Player que contenga un payload que tiene referencias a recursos SMB remotos y cuando la aplicacion procesa estas referencias, puede desencadenar en un intento de autenticacion NTLM

![[Pasted image 20261018151906.png]]

Creamos un archivo asx

![[Pasted image 20261018152242.png]]

Abrimos responder por la interfaz de la vpn

![[Pasted image 20261018152255.png]]

Subimos el archivo

![[Pasted image 20261018152359.png]]

Obtenemos el hash NTLM del usuario enox

![[Pasted image 20261018152423.png]]

Lo crackeamos:

![[Pasted image 20261018152558.png]]

Tenemos las creds –> enox:1234virus@

Nos conectamos via SSH

![[Pasted image 20261018152831.png]]

Dentro de documents vemos un archivo .ps1

![[Pasted image 20261018152921.png]]

Si lo miramos vemos que es el script de como se procesan los archivos subidos

  • Mira todo.txt donde se encuentran los archivos para revision
  • Con Get-Values extrae el nombre del archivo y una variable random
  • Abre el archivo con Windows Media Player
  • Finaliza el reproductor y actualiza la cola
  • Podemos ver que la ubicacion de los archivos en cola es: $todofile="C:\\Windows\\Tasks\\Uploads\\todo.txt"
  • La ubicacion de los archivos subidos es: C:\Windows\Tasks\Uploads\<RandomVariable>\<FileName>

Si miramos las acls que tenemos para cada ruta veremos que son muy permisivas:

![[Pasted image 20261018154450.png]]

Si miramos en C:\ veremos un directorio para xampp

![[Pasted image 20261018160358.png]]

![[Pasted image 20261018160443.png]]

Aqui podemos ver que el folderName es el MD5 de unir el nombre, el lastname y el email. Ademas vemso que sanetiza la el nombre del archivo y por eso no nos funciono el ../

Aqui vemos todos los archivos de prueba que hemos subido:

![[Pasted image 20261018160655.png]]

Una vez visto esto y sabiendo que tenemos permisos en la carpeta donde se suben los archivos C:\Windows\Tasks\Uploads vamos crear una Junction para redirigir la subida de archivos a esta ruta hacia el directorio web de Apache

Vamos a crear la junction y para eso primero tiene que estar la carpeta vacia:

![[Pasted image 20261018162227.png]]

Creamos el archivo y lo subimos:

![[Pasted image 20261018161714.png]]![[Pasted image 20261018161759.png]]

Ahora con la junction deberia haberse subido a la raiz del apache:

![[Pasted image 20261018162329.png]]

Podemos acceder al cmd.php desde la raiz:

![[Pasted image 20261018162446.png]]

Vamos a mandarnos una reverse shell

![[Pasted image 20261018162653.png]]

Si miramos whoami /all y vemo SeTcbPrivilege Disable

![[Pasted image 20261018162742.png]]![[Pasted image 20261018162748.png]]

Nos pasamos el PoC para explotar este priv:

![[Pasted image 20261018163202.png]]

Lo ejecutamos para meter a enox como administrator:

![[Pasted image 20261018164416.png]] ![[Pasted image 20261018164425.png]]

Volvemos a entrar en ssh como enox y recuperamos la ultima flag

![[Pasted image 20261018164603.png]]

HTB

Pov

Realizamos un escaneo de puertos

![[Pasted image 20261017104653.png]]

Solo vemos un puerto HTTP abierto con un IIS 10.0

![[Pasted image 20261017104737.png]]

Vamos primero a lanzar un fuzzing de directorios. No encontramos nada

![[Pasted image 20261017105021.png]]

Si miramos el codigo de la aplicacion nos encontramos con lo siguuiente:

![[Pasted image 20261017105013.png]]

Vamos a meterlo en /etc/hosts y miramos a ver que contiene

![[Pasted image 20261017105222.png]]

![[Pasted image 20261017105257.png]]

![[Pasted image 20261017105550.png]]

Es probable que la pagina tenga alguna de estas tecnologias

Si buscamos subdominios desde aqui no encontramos nada nuevo

![[Pasted image 20261017110905.png]]![[Pasted image 20261017110945.png]]

Tampoco encontramos directorios nuevos. Vamos a pasar a buscar recursos aspx (ya que es un IIS), txt, bak etc a ver si encontramos algo nuevo

![[Pasted image 20261017112439.png]]

Si nos metemos en contact no me llama mucho la atencion para un RCE pero mirando el codigo fuente de nuevo encontramos otro dominio

![[Pasted image 20261017112530.png]]![[Pasted image 20261017112544.png]]

![[Pasted image 20261017112558.png]]

Es igual que el de pov.htb asi que no nos entretenemos mucho por aqui. Realizamos otro fuzzing de directorios ahora a http://dev.pov.htb/portfolio/assets/

Tras muchos intentos de fuzzing de directorios no encontramos nada

![[Pasted image 20261017130608.png]]![[Pasted image 20261017130615.png]]![[Pasted image 20261017130626.png]]

Volvemos hacia dev.pov.htb/portolio/contact.aspx donde encontramos un form

![[Pasted image 20261017131402.png]]

Lo mandamos al repeater y lo enviamos. Si nos fijamos en la respuesta test sigue apareciendo, por lo que el servidor lo esta incorporando al html tras el post

![[Pasted image 20261017131752.png]]

Si mandamos otro contenido en formato url encode con intentando hacer un XSS (<b>test<b>) vemos que el objeto se ha movido a /default.aspx?aspxerrorpath=/portfolio/contact.aspx

El parametro aspxerrorpath se suele usar en asp.net para indicar que esa ruta devolvio un error

Otra cosa que merecia la pena mirar era la descarga del CV:

![[Pasted image 20261017132755.png]]

![[Pasted image 20261017133444.png]]

Parece que funciona

![[Pasted image 20261017133639.png]]

Lo mismo, es muy probable que nos este eliminando los ../ vamos a probar tecnicas de evasion para intentar leer el web.config. Empezamos con un solo ….// encodeado con URL

![[Pasted image 20261017134101.png]]

Conseguido. Vemos algunas claves de validationKey y decryptionKey. Podemos ver si podemos modificar con esto el __VIEWSTATE y llegar a RCE mediante deserializacion ASP

ysoserial.net tiene un repo que permite generar payloads de deserializacion incluso los relacionados con ASP.NET Viewstate

Ejecutamos desde una mv Windows el siguiente comando

  • Primero creamos un reverse shell Base64

![[Pasted image 20261017223222.png]]

  • Despues desde Windows ejecutamos el ejecutable de ysoserial con los parametros bien puestos

![[Pasted image 20261017223313.png]]

  • Abrimos un listener

![[Pasted image 20261017223326.png]]

  • El churro que sale se lo pondremos como valor a ViewState y le damos a sent

![[Pasted image 20261017223351.png]]

![[Pasted image 20261017223411.png]] ![[Pasted image 20261017223423.png]]

Para la escalada no vemos nada en whoami /all. Vamos a conseguir la flag

![[Pasted image 20261017223605.png]]

No encontramos la flag pero si un archivo xml

![[Pasted image 20261017223626.png]] Aqui vemos un archivo con credenciales para conexion de alaading con la pass cifrada mediante Secure String. Vamos a desencriptarla

![[Pasted image 20261017223924.png]]

Nos pasamos Runas al Windows

![[Pasted image 20261017224401.png]]![[Pasted image 20261017224410.png]]

Lo ejecutamos para obtener una shell en contexto de alaading

![[Pasted image 20261017224649.png]]![[Pasted image 20261017224655.png]]

![[Pasted image 20261017224724.png]]

Obtenemos la flag

![[Pasted image 20261017224822.png]]

He visto que desde CMD teniamos SeDebugPrivilege pero disable, probamos a ver en powershell

![[Pasted image 20261017224902.png]]

Habilitado. Nos pasamos psgetsys.ps1:

![[Pasted image 20261017225100.png]]![[Pasted image 20261017225130.png]]

Ejecutamos tasklist y buscamos un proceso que sepamos que se ejecute como SYSTEM, como winlogon.exe con PID 544

![[Pasted image 20261017225243.png]]

No se que pasa pero me esta dando errores y puede que sea por la compilacion

![[Pasted image 20261017230334.png]]

Otra opcion es migrar una shell meterpreter desde msf

![[Pasted image 20261017230450.png]]![[Pasted image 20261017230523.png]]

Nos abrimos el listener multi/handler en msf

![[Pasted image 20261017230644.png]]![[Pasted image 20261017230649.png]]

Una vez obtenida buscamos el PID de winlogon y migramos a este

![[Pasted image 20261017230832.png]]

Obtenemos la flag

![[Pasted image 20261017230931.png]]

HTB

Streamio

Hacemos un escaneo de puertos inicial

![[Pasted image 20261019193536.png]]

Vemos varios puertos como DNS, HTTP, Kerberos, RPC, LDAP, HTTPS, SMB y Winrm

Ademas vemos que el dominio es streamIO.htb y watch.streamIO.htb

Los metemos en el /etc/hosts

![[Pasted image 20261019193808.png]]

![[Pasted image 20261019193830.png]]![[Pasted image 20261019193845.png]]

Los 80 son default pero el 443 vemos algo:

![[Pasted image 20261019193923.png]]![[Pasted image 20261019194014.png]]

Vamos a empezar por watch.htb

![[Pasted image 20261019194157.png]]

Y en streamio.htb vemos lo siguiente:

![[Pasted image 20261019194258.png]]![[Pasted image 20261019194321.png]]

Tambien vemos esto:

![[Pasted image 20261019194858.png]]

Vamos a realizar un fuzzing de directorios y vhosts adicional

Y mientras vamos a ver registros dns donde podemos encontrar dc.streamio.htb

![[Pasted image 20261019194643.png]]

Vamos a hacer una fuerza bruta de usuarios del dominio a ver si encontramos algo:

![[Pasted image 20261019195916.png]]

Hacemos un ataque de fuerza bruta contra SMB usando a martin:

![[Pasted image 20261019195906.png]]

Mientras he estado mirando un poco el codigo fuente de las maquinas y veo esto:

![[Pasted image 20261019201144.png]]

Encontramos los siguientes directorios:

![[Pasted image 20261019201617.png]]

![[Pasted image 20261019201626.png]]

Vamos a ir mirando a ver si encontramos algo:

En watch:

![[Pasted image 20261019201813.png]]

En streamio

![[Pasted image 20261019201947.png]]

![[Pasted image 20261019202011.png]]

Tenemos el nombre de martin que no se nos olvide por si usa usuarios de AD

![[Pasted image 20261019202117.png]]![[Pasted image 20261019202128.png]]![[Pasted image 20261019202158.png]]

Realmente no se esta creando. Vamos hacer fuerza bruta con hydra con el usuario martin:

Nada por aqui tampoco.

![[Pasted image 20261019205549.png]]

Vamos probar a realizar ataques SQL sobre el search.php de watch.streamio.htb ahora. Al ser solo un parametro le pongo el risk y level altos para que pruebe muchas combinaciones

![[Pasted image 20261019211057.png]]

Nos esta redirigiendo a blocked asi que nos toca hacerlo manual. Tras varios intentos vemos lo siguiente:

![[Pasted image 20261019211857.png]]

Hemos encontrado el numero de columnas que tiene y vemos que podemos mostrar el las columnas en los numeros 2 y 3

Vamos a ver de que base de datos se trata pero debe ser una MSSQL

![[Pasted image 20261019212005.png]]

Recuperamos el nombre de la BBDD

![[Pasted image 20261019212037.png]]

Miramos el nombre de las tablas

20' union select 1,(SELECT STRING_AGG(name, ',') name FROM STREAMIO..sysobjects WHERE xtype= 'U'),3,4,5,6 -- -

![[Pasted image 20261019212143.png]]

Miramos el nombre de las columnas

20' union select 1,name,3,4,5,6 FROM syscolumns WHERE id =(SELECT id FROM sysobjects WHERE name = 'users')-- -

![[Pasted image 20261019212244.png]]

Miramos user y pass y vemos varios hashes que parecen ser MD5 pero vamos a comprobarlo mejor

![[Pasted image 20261019212357.png]]

https://hashes.com/es/tools/hash_identifier

![[Pasted image 20261019212452.png]]

Vamos a pasarle todos a ver cuales son crackeables

![[Pasted image 20261019212645.png]]

Los metemos en unos archivos users.txt y passwords.txt y lo usamos con hydra en el login.php de streamio.htb

![[Pasted image 20261019213157.png]]![[Pasted image 20261019213238.png]]

Una vez dentro intentamos ir a /admin a ver si podemos

![[Pasted image 20261019213320.png]]

Ahora podemos como vimos que master solo se podia mediante include podemos buscar parametros haciendo fuzzing pero tendremos que especificar la cookie actual para poder realizar fuzzing dentro del directorio admin

![[Pasted image 20261019213514.png]] ![[Pasted image 20261019213739.png]]

Podemos ahora probamos a incluirla en uno de los parametros pero como se trata de un archivo .php habra que hacer mediante php filters para poder ver el contenido y luego decodificarlo

![[Pasted image 20261019214025.png]]

Aqui lo tenemos, ahora vamos a decoficarlo

![[Pasted image 20261019214152.png]]

Tambien podemos hacer lo mismo con index.php

![[Pasted image 20261019214602.png]]

Dos cosas muy interesantes

  • En index conseguimos las creds para la base de datos como db_admin:B1@hx31234567890 para una conexion local
  • En master se pueden ver vulns de ejecucion de codigo mediante eval() y file_get_contents() por lo que tenemos un RFI a traves de parametros include

Con esto podriamos subir una reverse shell hacia en php con codifo cmd hacia nuestro host:

  • Creamos un archivo para que descargue nc para que luego lo ejecutemos contra nuestro listener

![[Pasted image 20261019215159.png]] ![[Pasted image 20261019215127.png]]

  • Capturamos una peticion con ?debug=master.php y la cambiamos a POST para poder ejecutar el RCI con un parametro include en el data

![[Pasted image 20261019215501.png]]

  • Ahora cambiamos el nc.php a lo siguiente y abrimos un listener para que nos lance una reverse shell

![[Pasted image 20261019215543.png]]![[Pasted image 20261019215627.png]]![[Pasted image 20261019215638.png]]

Abremos obtenido la shell

![[Pasted image 20261019215651.png]]

Ahora podemos intentar autenticarnos en la base de datos local con las credenciales que hemos encontrado del index.php

![[Pasted image 20261019215757.png]]

Obtenemos los hashes de usuarios donde nikk37 es el unico nuevo:

![[Pasted image 20261019221025.png]]

Lo crackeamos en crackstation

![[Pasted image 20261019221128.png]]

nik37:[email protected]

Comprobamos que nos podamos conectar via winrm

![[Pasted image 20261019222052.png]]

![[Pasted image 20261019222134.png]]

Nos descargamos winpeas para escalar privs

![[Pasted image 20261019222426.png]]![[Pasted image 20261019222448.png]]

Lo mas interesante es que hay un archivo .db de firefox

![[Pasted image 20261019222806.png]]

![[Pasted image 20261019222831.png]]

Ejecutamos firepwd para leer la base de datos y obtenemos varias credenciales. Las metemos en un users.txt y pass.txt las probamos

![[Pasted image 20261019223217.png]]

Encontramos nuevas credenciales validas:

![[Pasted image 20261019223414.png]]

Podemos usar bloodhound para seguir enumerando el dominio

![[Pasted image 20261019223745.png]]

![[Pasted image 20261019230650.png]]

Descargamos PowerView aunque se puede hacer con bloodyAD

  • Nos unimos al grupo de Owner Stuff

![[Pasted image 20261019231113.png]] ![[Pasted image 20261019231334.png]]![[Pasted image 20261019231437.png]]

  • Ahora usamos ldapsearch para extraer la pass de LAPS gracias a los privs que tiene el grupo sobre DC

![[Pasted image 20261019231618.png]]

Nos conectamos como administrator

![[Pasted image 20261019231725.png]]

No encontramos la flag en el desktop de administrator por lo que estara en el de otro usuario administrador

![[Pasted image 20261019231808.png]]

![[Pasted image 20261019231901.png]]

HTB

Tombwatcher

Empezamos con credenciales para poder iniciar sesion en el sistema

![[Pasted image 20261017231648.png]]![[Pasted image 20261017231655.png]]

Vemos bastantes puertos y que es el DC y el dominio es tombwatcher.htb asi que vamos a meterlo en /etc/hosts

![[Pasted image 20261017232114.png]]

La primera cosa que me llama la atencion directamente es que en los puertos LDAP podemos ver el indicardor 1.3.6.1.4.1.311.25.2 como unsupported. Puede que este deshabilitado pero no lo sabemos

Esta es una extension de seguridad que permite vincular de forma segura el certificado solicitado al CA con la cuenta que la solicita incorporando informacion del SID. Como esta deshabilitado podriamos conseguir un certificado de otra cuenta (priv) sin que contenga informacion del SID que lo vincule estrechamente a la cuenta que suplantamos. Pero para ello necesitamos unas credenciales de dominio validas

Vemos un 445, 80, 5985, 53 ademas de varios puertos RPC y ADWS junto con Kerberos, Ldap y demas

Vamos a mirar el SMB de primeras de forma anonima pero nada

Vamos ahora a mirar el 80

![[Pasted image 20261017232824.png]]

Nada interesante por aqui. Vamos primero a intentar una transferencia de zona

![[Pasted image 20261017233037.png]]

Nada. Vamos a mirar tambien los registros generales

![[Pasted image 20261017233207.png]]

Encontramos aqui solamente que el contacto administratovo de la zona DNS es [email protected]

Sobre RPC anonimo no tenemos acceso

![[Pasted image 20261017233916.png]]

Nada por fuzzing de directorios ni subdominios

![[Pasted image 20261017235104.png]]![[Pasted image 20261017235114.png]]

Vamos con ldap anonimo a ver. Intentamos enumerar usuarios, pero no podemos

![[Pasted image 20261017235600.png]]

Y tambien vamos a probar ASREP Roasting sobre Kerberos a ver si encontramos alguna cuenta que tenga dehabilitada la preautenticacion Kerberos

![[Pasted image 20261017235905.png]]

Hemos encontrado un usuario existente, john pero no podemos obtener su ASREP sin preautenticacion por aqui

![[Pasted image 20261018000037.png]] ![[Pasted image 20261018000101.png]] ![[Pasted image 20261018000120.png]] ![[Pasted image 20261018000150.png]]

lo mismo con henry, sam, alfred, administrator… Mejor que esto, vamos a hacer una enumeracion de usuario por kerbrute

![[Pasted image 20261018000339.png]]

A partir de la salida creo una lista de usuarios

![[Pasted image 20261018000555.png]]

Mientras lanzamos un ataque de fuerza bruta usando estos usuarios voy mirando los servicios RPC disponibles

![[Pasted image 20261018001456.png]]

Aqui confirmamos que existe AD CS, para un posterior ataque es posible que podamos tirar como he dicho antes por el OID encontrado en el escaneo, pero seguimos necesitando primero unas credenciales de dominio

Tambien podemos ver que la autoridad certificadora se identifica como tombwatcher-CA-1

Tras un buen tiempo esperando encontramos unas credenciales:

alfred:basketball

![[Pasted image 20261018003605.png]] ![[Pasted image 20261018003538.png]]

No vemos ningun share que nos llame la atencion por ahora

![[Pasted image 20261018003914.png]]

Vamos a ver ejecutar bloodhound sobre el dominio y asi tenemos una vision mas general

![[Pasted image 20261018004545.png]]

Si empezamos desde alfred podemos ver una ruta de escalada siguiendo la relacion entre los nodos

  • Empezando desde alfred vemos que tiene privs de AddSelf hacia el grupo INFRAESTRUCTURE

![[Pasted image 20261018004753.png]]

  • Este grupo leer la pass administrada de la gMSA de la maquina ANSIBLE_DEV

![[Pasted image 20261018004828.png]]

  • Esta tiene ForceChangePassword sobre el usuario SAM

![[Pasted image 20261018004922.png]]

  • SAM tiene privs WriteOwner sobre John

![[Pasted image 20261018004958.png]]

  • John pertenece a REMOTE MANAGER USERS y ADCS, por lo que seguramente poodriamos acceder a la maquina DC01 de forma remota e intentar el ataque hacia ADCS que vimos anteriormente

![[Pasted image 20261018005007.png]]![[Pasted image 20261018005017.png]]

  1. Empezamos añadiendonos al INFRAESTRUCTURE

![[Pasted image 20261018110237.png]]

  1. Vamos a recuperar la pass administrada de gMSA y comprobamos que podemos hacer pth para el siguiente paso

![[Pasted image 20261018110947.png]]

8d5363f881f1bb3bff9b0d64b8b76d7a

  1. Forzamos el cambio de pass de sam usando pth y comprobamos que se haya completado correctamente

![[Pasted image 20261018111155.png]]

  1. Ahora aprovechando el WriteOwner de Sam vamos a cambiar la propiedad de john a sam. Una vez que somos propietarios de john nos damos GenericAll sobre John y despues le cambiamos la pass

![[Pasted image 20261018111751.png]]

Ahora podemos intentar conectarnos via winrm al host ya que el puerto 5985 estaba abierto. Obtenemos la primera flag

![[Pasted image 20261018111856.png]] ![[Pasted image 20261018111926.png]]

Si nos fijamos, ADCS esta vacia

![[Pasted image 20261018121530.png]]

Si lo hacemos desde terminal lo veremos, solo esta la maquina ADCS-LAB$ que cree yo en pruebas anteriores:

![[Pasted image 20261018121638.png]]

Si enumeramos el ADCS de nuevo y nos fijamos en sus plantillas, en una vemos permisos Enroll sobre WebServer desde un SID que no se resuelve:

![[Pasted image 20261018121746.png]] ![[Pasted image 20261018121845.png]]

Intentamos localizarlo y resolverlo pero no lo encontramos y nos da un error de IdentityNotMappedException:

![[Pasted image 20261018122011.png]]

Si ampliamos la busqueda a objetos eliminados lo encontraremos. Esto pasa porque AD guarda durante cierto tiempo informacion de objetos eliminados:

![[Pasted image 20261018122108.png]]

Ahora consultaremos los atributos del usuario y vemos que esta efectivamente eliminado y su SID se conseerva

![[Pasted image 20261018122154.png]]

Ahora podemos mirar si los privs GenericAll de John son heredables a objetos descendientes de la OU y si lo son:

![[Pasted image 20261018122255.png]]

Lo mismo con los privs del dominio, donde vemos el object 45ec5156-db7e-47bb-b53f-dbeb2d03c40f que corresponde con Reanimate Tombstones:

![[Pasted image 20261018122427.png]]

Ahora podemos intentar restaurar a este usuario cert_admin:

![[Pasted image 20261018122514.png]]

Y verificamos los permisos heredados, donde vemos que john tiene genericall sobre cert_admin:

![[Pasted image 20261018122537.png]]

Le cambiamos la password:

![[Pasted image 20261018122643.png]]

Ahora que teneos cert_admin podemos enumerar las plantillas de AC de nuevo para ver permisos administrativos desde esta cuenta:

![[Pasted image 20261018132210.png]]

Destacan dos ESC: ESC15 y ESC17:

![[Pasted image 20261018132312.png]]

Vamos a hacer que CA emita un certificado cert_admin y plantilla WebServer pero añadiendole ‘Certificate Request Agent’ que nos permitira solicitar certificados en nombre de otras personas

![[Pasted image 20261018132906.png]]

Ahora realizaremos una solicitud suplantando a administrator:

![[Pasted image 20261018133457.png]]

Intentamos conseguir su TGT pero nos da error kerberos por no estar sincronizados con el KDC

![[Pasted image 20261018133632.png]]

Ahora podemos conectarnos al DC01 con pth

![[Pasted image 20261018133741.png]]

HTB

Voleur

Empezamos con credenciales validas –> ryan.naylor / HollowOct31Nyt

Realizamos un escaneo inicial:

![[Pasted image 20261020184202.png]] ![[Pasted image 20261020184154.png]]

Vemos puertos SMB, DNS, WinRM RPC, SSH, LDAP y Kerberos. Ademas vemos el nombre del dominio “voleur.htb” que meteremos en el /etc/hosts

![[Pasted image 20261020173953.png]]

Vamos a autenticarnos via ssh

![[Pasted image 20261020173842.png]]

Vemos que no podemos porque necesitamos el id_rsa. Vamos a ver si podemos enumerar el dominio con Bloodhound. Para ello, primero necesitamos el nombre de DC

![[Pasted image 20261020174534.png]]

![[Pasted image 20261020174617.png]]

Ahora podemos lanzar bloodhound contrar el DC:

![[Pasted image 20261020175041.png]]

Vemos que nos da error y puede ser porque este deshabilitado la autenticaicon mediante NTLM. Vamos a probar mediante kerberos. Primero nos tendremos que acoplar a la hora del KDC y luego pedir un ticket TGT que exportaremos en la variable KRB5CCNAME:

![[Pasted image 20261020175149.png]]![[Pasted image 20261020175158.png]]

Ahora usamos la autenticacion Kerberos para la ejecucion Bloodhound

![[Pasted image 20261020175253.png]]

Si buscamos a nuestro usuario veremos que a parte de Domain Users somo First-Line Technicians

![[Pasted image 20261020175542.png]]

De este grupo solo podemos ver que hay otro usuario que se llama MARIE.BRYANT pero no tenemos privs sobre el. Podemos hacer una fuerza bruta mirano los usuarios del dominio:

Vemos un total de 10 usuarios:

  • SVC_WINRM
  • JEREMY.COMBS
  • SVC_IIS
  • SVC_BACKUP
  • SVC_LDAP
  • LACEY.MILLER
  • MARIE.BRYANT
  • KRBTGT
  • Administrator

Vemos muchas cuentas de servicios, por lo que mientras que hacemos la fuerza bruta podemos probar Kerberoasting y ASREP Roasting

![[Pasted image 20261020180149.png]]

Nada en el Kerberoasting ni ASREP

![[Pasted image 20261020181250.png]]

Vamos a ver los shares de SMB (recuerda usar el login con kerberos):

![[Pasted image 20261021160135.png]]

Para los siguientes pasos configuraremos krb5.conf, yo lo hare en un archivo temporal para no modificar el original:

![[Pasted image 20261021160555.png]] ![[Pasted image 20261021160546.png]]![[Pasted image 20261021160606.png]]

Nos conectamos al recurso compartido de IT y obtenemos el xlsx:

![[Pasted image 20261021160913.png]]

Abrimos el archivo y vemos que necesita una password:

![[Pasted image 20261021161044.png]]![[Pasted image 20261021161049.png]]

Podemos usar john para esto. Primero tenemos que pasarlo a un formato que pueda leer john:

![[Pasted image 20261021161212.png]]

Volvemos a abrirlo y ponemos la pass:

![[Pasted image 20261021161259.png]] ![[Pasted image 20261021161357.png]]

Aqui dentor vemos varios usuarios que hemos visto ya en blodhound pero con sus respectivos permisos y grupos. Ademas se ven unas notas y ahi podemos ver las credenciales:

Todd.Wolfe:NightT1meP1dg3on14 M1XyC9pW7qT5Vn N5pXyW1VqM7CZ8

Si intentamos conseguir un ticket kerberos de este usuario vemos que no existe:

![[Pasted image 20261021161709.png]]

Podemos intentar hacer un password spraying a ver si hay reutilizacion de credenciales. Como son varios usuarios y varias contraseñas las encontradas vamos a usar continue on sucess para encontrar todas las posibles:

![[Pasted image 20261021162223.png]]

Encontramos las siguientes:

svc_iis:N5pXyW1VqM7CZ8

svc_ldap:M1XyC9pW7qT5Vn

Vamos a volver a bloodhound a ver cual nos interesa mas:

  • LDAP: tiene 3 cosas muy interesantes. Pertenece a RESTORE_USERS (nos puede estar dando una pista de un usuario eliminado), tiene WriteSPN sobre SVC_WINRM que pertenece a su vez a REMOTE MANAGEMENT lo que nos podria dar acceso remoto al host y pertenece al grupo y pertenece a RESTORE_USERS que tiene GenericWrite sobre el grupo SECOND-LINE SUPPORT TECHNICIANS y sobre el usuario LACEY.MILLER que pertenece a SECOND-LINE SUPPORT TECHNICIANS

![[Pasted image 20261021162418.png]]

![[Pasted image 20261021162543.png]]

![[Pasted image 20261021162529.png]]

A partir de SECOND-LINE SUPPORT TECHNICIANS no veo escalada via AD clara

  • IIS: no tiene nada interesante

La mejor opcion es llegar a tener primero acceso remoto al host y tras esto mi apuesta por el nombre del grupo y porque no veo mayor acceso con la cuenta de LACEY es que hay un usuario eliminado. Igualmente vamos a conseguir los tickets TGS tanto de WINRM como de LACEY y crackeralos offline si se puede (esto lo hago por el GenericWrite y WriteSPN priv)

  1. Conseguimos el ticket Keberos de ldap:

![[Pasted image 20261021164106.png]]

  1. Añadimos SPNs a las dos cuentas gracias a nuestros permisos

![[Pasted image 20261021165323.png]] ![[Pasted image 20261021165312.png]] ![[Pasted image 20261021165623.png]]

![[Pasted image 20261021165508.png]] ![[Pasted image 20261021165754.png]] ![[Pasted image 20261021165810.png]]

  1. Obtenemos sus tickets TGS

![[Pasted image 20261021165922.png]]

![[Pasted image 20261021170128.png]]

Ahora los crackemaos. El de lacey no tiene exito pero el de winrm si:

![[Pasted image 20261021170335.png]] ![[Pasted image 20261021170328.png]]

Ya nos podemos conectar como svc_winrm. Primero conseguimos el ticket y luego nos conectamos con kerberos:

![[Pasted image 20261021171131.png]]

Vale como hemos dicho antes por el nombre del grupo es posible que haya algun usuario que se haya eliminado y que ahora podamos restaurar pero tenemos que hacer que la terminal tenga contexto de svc_ldap. Lo hacemos con runas.exe

![[Pasted image 20261021171559.png]]

![[Pasted image 20261021171641.png]] (uso siempre wget porque downloda de evil-winrm me suele dar fallos con algunas herramientas)

Ahora miramos los usuarios borrados:

![[Pasted image 20261021172117.png]]

Vemos a Tood Wolfe, lo restauramos y volvemos a mirar los deleted users:

![[Pasted image 20261021172353.png]]

Ya esta restaurado, en el excel ya vimos su pass:

Asi que ahora mirar privs:

![[Pasted image 20261021172821.png]] ![[Pasted image 20261021172831.png]]

No vemos mucho por aqui pero podemos probar en smb tambien a ver si tenemos privs de sobre algun recurso mas:

Ahi que tener cuidado porque se vuelve a eliminar el usuario y hay que volver a sacarlo de eliminados

![[Pasted image 20261021173752.png]]

Vemos que tenemos acceso a SECOND-LINE SUPPORT TECHNICIANS ahora si. Vamos a conectarnos, llegamos hasta su directorio personal:

![[Pasted image 20261021174216.png]]

Miramos a ver si tiene credenciales almacenadas para dpapi. Las tiene:

![[Pasted image 20261021174330.png]] ![[Pasted image 20261021174616.png]]

![[Pasted image 20261021174510.png]] ![[Pasted image 20261021174526.png]]

Crackeamos la masterkey y el archivo:

![[Pasted image 20261021174750.png]]

Si miramos en bloodhound jeremy es miembro de THIRD-LINE TECHNICIANS y REMOTE MANAGEMENT USERS

Obtenemos su ticket kerberos:

![[Pasted image 20261021175519.png]]

Nos conectamos via winrm:

![[Pasted image 20261021175605.png]]![[Pasted image 20261021175650.png]]

Nos metemos en third

![[Pasted image 20261021175705.png]]

Sabemos que hay un svc_backup de los usuarios que hemos visto en bloodhound anteriormente y tenemos un puerto 2222 abierto via ssh:

![[Pasted image 20261021175918.png]]

Buscamos entre los archivos

![[Pasted image 20261021180142.png]]

Encontramos acceso a backups

![[Pasted image 20261021180216.png]]

Tenemos SECURITY y SYSTEM para hacer secretsdump

![[Pasted image 20261021180744.png]]![[Pasted image 20261021180803.png]]

Nos conectamos como administrator. Primero conseguimos su ticket kerberos:

![[Pasted image 20261021180951.png]]![[Pasted image 20261021181158.png]]

HTB

Vulncicada

Lanzamos un escaneo inicial y nos encontramos con varios puertos:

![[Pasted image 20261019154355.png]]![[Pasted image 20261019154404.png]]

Vemos DNS, HTTP, Kerberos, RPC, SMB, LDAP, RDP (donde vemos que exite NFS que podremos intentar montar) y algunos desconocidos que son RPCs dinamicos. Tambien podemos ver el nombre de dominio y el del DC

![[Pasted image 20261019154626.png]]

Vamos a meterlo en el /etc/hosts

![[Pasted image 20261019154721.png]]

Lo primero va a ser mirar la pagina web, pero vemos que s la default de IIS

![[Pasted image 20261019154805.png]]

Vamos con los fuzzings de directorios

![[Pasted image 20261019155054.png]]

No encontramos nada, asi que vamos a por subdominios. Primero hacemos consulta de transferencia de zona al DNS y buscamos cualquier registro a ver si encontramos algo

![[Pasted image 20261019155037.png]]

Nada nuevo por lo que vamos a hacer fuerza bruta a ver si encontramos vhosts:

![[Pasted image 20261019155826.png]]

No encontramos nada, por lo que vamos a intentar montar el NFS a ver si encontramos algo:

![[Pasted image 20261019155515.png]]

Aqui parece que tenemos algunos usuarios

Podemos ir lanzando un ataque de fuerza bruta contra ellos usando netexec

Primero probamos si los usuarios existen:

![[Pasted image 20261019160845.png]]

Despues lanzamos el ataque de fuerza bruta

![[Pasted image 20261019160213.png]]

Mientras se ejecuta tratamos de conectarnos a los servicios de forma anonima a ver si tenemos suerte en alguno

![[Pasted image 20261019160335.png]]

![[Pasted image 20261019160702.png]]

![[Pasted image 20261019161033.png]]

Probamos tambien un ASREP Roasting pero todos los usuarios requieren preautenticacion

![[Pasted image 20261019160952.png]]

Por ultimo mientras termina la fuerza bruta hare un dump de RPC a ver que vemos:

![[Pasted image 20261019162455.png]]

Se pueden ver varias cosas como que hay un AD CS (podremos mirar a ver si hay plantillas vulnerables de ESC), servicio de impresora activo y otras funciones del controlador del dominio

Tambien podemos mirar todos los archivos a ver si hay algo que nos hayamos saltado

![[Pasted image 20261019163415.png]]

Vemos la imagen de administrator y otra en Rosie.Powell

![[Pasted image 20261019163415.png]]

Vemos otra imagen

![[Pasted image 20261019163710.png]]

Nos sincronizamos en hora con el KDC y prbamos la contraseña usando Kerberos

![[Pasted image 20261019164046.png]]![[Pasted image 20261019164053.png]]

Tenemos credenciales ahora. Podemos ejecutar ahora bloodhound para tener una idea del dominio de forma mas visual:

![[Pasted image 20261019164613.png]]

Si miramos a rosie solo vemos que somos miembros de cicada y domain users asi que vamos a intentar obtener otras creds

Si enumeramos los shares vemos dos interesantes que no son tan habituales como CertEnroll y profiles$

![[Pasted image 20261019165053.png]]

Como no me esta dejando autenticarme de forma normal porque solo sirve por Kerberos, voy a pedir un ticket TGT

![[Pasted image 20261019165619.png]]![[Pasted image 20261019170007.png]]

Ahora si nos podemos conectar:

![[Pasted image 20261019170054.png]]

Parece ser el nfs de antes

![[Pasted image 20261019170140.png]]

Vamos a por el otro

![[Pasted image 20261019170350.png]]

Aqui vemos certificados publicos, listas de renovacion del AD CS. Vamos a enumerar el AD CS con los permisos que tenemos ahora

Me esta dando problemas de autenticacion y es que esta solicitando a cicada.vl en vez de al KDC por lo que tengo que invertir el orden del /etc/hosts

![[Pasted image 20261019171546.png]]

Ya podemos enuemrar las plantillas habilitadas y vulnerables de ACDS

![[Pasted image 20261019172023.png]]![[Pasted image 20261019172035.png]]

Aqui podemos ver una posible vuln ESC8 en ADCS ya que la autoridad certificadora tiene habilitada la inscripcion web mediante HTTP sin HTTPS. Tenemos que conseguir engañar al DC para que se autentique contra nosotros y conseguir una autenticacion y conseguir un certificado de la maquina

El problema esta como hemos visto que el NTLM relay esta bloqueado y la autenticacion NTLM deshabilitada por lo que vamos a hacer un Kerberos Relay

Primero añadimos una entrada DNS que devuelva nuestra IP

![[Pasted image 20261019174156.png]]

Despues creamos el relay via SMB donde obtendremos el certificado cuando se conecte el DC

![[Pasted image 20261019174233.png]]

Por ultimo forzamos a la maquina a autenticarse contra nosotros

![[Pasted image 20261019182110.png]]

Tras esto obtenemos el pdx

![[Pasted image 20261019182058.png]]

Obtenemos el hash de la maquina

![[Pasted image 20261019182141.png]]

Como el NTLM esta desactivado podemos usar .ccache para autenticarnos y obtener con secretsdump el hash de Administrator

![[Pasted image 20261019183238.png]]

Obtenemos el ticket kerberos

![[Pasted image 20261019184232.png]]

Nos conectamos via smb

![[Pasted image 20261019185130.png]]![[Pasted image 20261019185138.png]]

Logo 1Logo 2Logo 3Logo 4Logo 5Logo 6Logo 7Logo 8Logo 9Logo 10Logo 11Logo 12Logo 13Logo 14Logo 15Logo 16Logo 17Logo 18Logo 19Logo 20Logo 21Logo 22Logo 23Logo 24Logo 25Logo 26Logo 27Logo 28Logo 29Logo 30Logo 31Logo 32