Categorías
Explotación de Software Hacking MetaSploit Networking Programacion

Enumeración en Windows para Post-Explotación – Parte 4.

Algunas de las técnicas vistas en las partes 1, 2 y 3 de esta serie sobre post-explotación en sistemas Windows se pueden automatizar de una forma bastante eficiente con herramientas que están disponibles para ello. En este post se hablará precisamente de algunas ellas y sus ventajas. Aunque normalmente es una buena idea automatizar, en ocasiones estas herramientas se pueden dejar detalles importantes y por ese motivo es importante seguir la metodología y no quedarse solo con lo que reportan estas herramientas, aunque sin duda son un buen apoyo.

JAWS: Just Another Windows (Enum)  Script

Se trata de uno de los más conocidos y utilizados para llevar a cabo labores de enumeración. Es un script desarrollado en PowerShell que permite identificar rápidamente vectores potenciales para elevación de privilegios sobre un sistema Windows. Tal como se indica en el repositorio oficial de Github (https://github.com/411Hall/JAWS) se encuentra escrito usando Powershell 2.0 por lo tanto debería funcionar sobre cualquier sistema Windows desde la versión 7.
Algunas de las características que implementa se listan a continuación.

  • Identificación de ficheros con permisos débiles (Control total o modificación).
  • Unidades de red disponibles y directorios compartidos.
  • Ficheros con información potencialmente sensible.
  • Vulnerabilidades del tipo Unquoted Service Paths.
  • Listado de tareas programas.
  • Servicios que son potencialmente vulnerables.
  • Documentos que se han utilizado recientemente.
  • Información general del entorno de red.

El procedimiento habitual consiste en transferir el fichero PS correspondiente a la máquina comprometida y ejecutarlo, suele funcionar bastante bien.

Windows Privesc Check (windows-privesc-check)

Es otra de las herramientas clásicas que se encargan de realizar una enumeración básica de un sistema Windows. Ha sido creada hace varios años por PentesterMonkey y se encuentra desarrollada en Python, aunque se distribuye un EXE que se ha generado utilizando PyInstaller y que permite utilizar la herramienta fácilmente en cualquier sistema Windows sin Python instalado. El repositorio oficial se encuentra ubicado en https://github.com/pentestmonkey/windows-privesc-check
A diferencia de otras herramientas, dependiendo de los privilegios con los que se cuente a la hora de ejecutarla se realizaran más o menos pruebas. Por ejemplo, si se ejecuta con privilegios de administrador intentará realizar actividades que en algunos casos pueden desestabilizar el sistema tales como la configuración de servicios sensibles, manipulación del registro de Windows, Sustitución de binarios utilizados para servicios del sistema operativo, etc. Cuando se ejecuta con privilegios bajos o con una cuenta de usuario regular evidentemente las pruebas serán más simples y enfocadas a la recolección de información. Hay que tener en cuenta que es una herramienta que no se actualiza desde hace varios años aunque la mayor parte sigue funcionando sobre sistemas recientes y actualizados.

Windows Enum

Es un proyecto que ya lleva algunos años publicado y al igual que JAWS, es un script en Powershell. Su ejecución es simple ya que solamente admite un parámetro (extended) y no es obligatorio. Las pruebas que realiza también son básicas e incluyen los siguientes puntos.

  • Detalles sobre el sistema operativo y nivel de parche.
  • Usuarios en el sistema y sus correspondientes privilegios.
  • Información sobre programas instalados, procesos actualmente en ejecución y servicios del sistema.
  • Información general de la red, incluyen tabla de rutas, segmentos de red, conexiones, tablas ARP, etc.
  • Ficheros con información potencialmente sensible.

El script se encuentra disponible en el siguiente repositorio de GitHub https://github.com/absolomb/WindowsEnum/

 

WinPEAS (Windows Privilege Escalation Awesome Scripts)

Se trata de un programa que es, probablemente, el más completo para enumeración de sistemas WIndows (también está para sistemas Linux pero de esto se hablará en otra serie). Se encuentra disponible en formato BAT y EXE, con lo cual no hace falta compilar nada o depender de un interprete como Python o similares. Sin embargo, la salida se enseña en «crudo», sin colores ni marcas identificativas relevantes sobre las pruebas que se han llevado a cabo, por ese motivo una vez se ejecuta el programa hay que leer la salida cuidadosamente para ver cualquier detalle que pueda ser útil.

El proyecto se encuentra ubicado en el siguiente repositorio de GitHub: https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS Tal como se ha comentado anteriormente, cuenta con dos versiones (BAT y EXE), ambas funcionan bastante bien.

Windows Exploit Suggester – Next Generation (WES-NG)

Se trata de una herramienta que utiliza la información devuelta por el comando systeminfo para comprobar el nivel de parche del sistema y listar las posibles vulnerabilidades que le podrían afectar. Funciona desde Windows XP hasta Windows 10 incluyendo las versiones «server». A diferencia de otras herramientas, no es necesario instalar WES-NG en el sistema comprometido, se puede ejecutar en el ordenador del atacante y solamente hace falta pasarle un fichero con toda la información que vuelca el comando «systeminfo» en sistemas Windows.

El proyecto se encuentra ubicado en el siguiente repositorio de GitHub https://github.com/bitsadmin/wesng y como se puede comprobar en la documentación su uso resulta muy simple.

 

Otras alternativas.

Para este tipo de procedimientos existen muchas más alternativas a las que se han listado en esta sección, como por ejemplo el uso de Frameworks como Empire, Metasploit o Pupy. Además de las herramientas descritas en este post existen otras más que el lector puede consultar entre las que se incluyen:

 

En este post se han visto algunas utilidades que pueden venir bien en un proceso de post-explotación sobre sistemas Windows, sin embargo extraen básicamente la misma información que otros comandos y utilidades  que se encuentran disponibles en el sistema operativo por lo tanto es importante seguir la metodología correctamente e identificar qué elementos pueden ser útiles para la elevación y cuales no.

Un saludo y Happy Hack!

Adastra.

 

Categorías
Cracking Hacking Hacking Python Networking Services - Software

Generación de diccionarios para fuerza bruta con PyDictor

En ocasiones viene bien contar con diccionarios robustos para lanzar herramientas como THC Hydra o similares, no obstante últimamente muchas personas tienden a utilizar contraseñas un poco más seguras que como mínimo, ya no siguen los patrones más habituales o que no se encuentran en el listado de las contraseñas más usadas (aunque de todo se puede llegar a ver). Es posible que las herramientas de fuerza bruta den mejores resultados si se utiliza un diccionario enfocado al objetivo y para ello es necesario recolectar información sobre el  «target» utilizando técnicas OSINT, por ejemplo. Esta información recolectada puede ser útil en herramientas como PyDictor a la hora de generar diccionarios con posibles contraseñas utilizando como entrada esta información.
PyDictor es un script desarrollado en Python que cuenta con abundantes opciones para personalizar la generación de diccionarios, entre las que se incluyen la aplicación de expresiones regulares, uso de complementos, codificar cada palabra del diccionario con un algoritmo como SHA, MD5, DES, entre otras cosas.

La instalación no es para nada compleja, de hecho, es probable que ya se cuente con todas las librerías y no sea obligatorio instalar nada, solamente clonar/descargar el repositorio de GitHub y ejecutar el script «pydictor.py».
A continuación se enseñan algunos comandos sobre el uso básico de la herramienta para entender cómo funciona y lo fácil que resulta usarla.

python3 pydictor.py -base d -o /tmp/test1.txt -> Genera un fichero en donde cada línea contendrá una palabra del diccionario en base numérica, con exactamente una longitud de 4 (valor por defecto si no se especifica la opción –len). 0000, 0001, …., 9999

python3 pydictor.py –len 6 6 -base d -o /tmp/test2.txt -> Genera un fichero en donde cada línea contendrá una palabra del diccionario en base numérica, con exactamente una longitud de 6. 000000, 000001, …., 999999

python3 pydictor.py –len 5 5 -base L -o /tmp/test3.txt -> Genera un fichero en donde cada línea contendrá una palabra del diccionario utilizando los caracteres del alfabeto en minúsculas, con exactamente una longitud de 5. aaaaa, aaaab, aaaac, …., zzzzz

python3 pydictor.py –len 5 5 -base dc -o /tmp/test4.txt -> Genera un fichero en donde cada línea contendrá una palabra del diccionario utilizando los caracteres del alfabeto en mayúsculas y los dígitos del 0 al 9, con exactamente una longitud de 5. 00000, 00001, …, 0000A, …., ZZZZZ

De momento, estas pruebas iniciales demuestran que la herramienta puede hacer combinaciones y permutaciones. Nada que no hagan ya otras herramientas o incluso un script con pocas líneas de código, sin embargo esto para empezar y hacerse una idea de su uso está bien.

python3 pydictor.py –len 5 5 -base d –head adas –tail tra -o /tmp/test5.txt -> Genera un fichero en donde cada línea contendrá una palabra del diccionario en base numérica y empezará con «adas» y terminará con «tra». Cada palabra tendrá exactamente una longitud de 5. adas00000tra, adas00001tra, …., adas99999tra

python3 pydictor.py –len 5 5 -base d –head adas –tail tra –encode sha256 -o /tmp/test6.txt -> Exactamente igual que el comando anterior, pero cada palabra del diccionario será codificada con SHA256

python3 pydictor.py –len 5 5 -char adastra -o /tmp/test7.txt -> Se genera un fichero en donde cada línea tendrá una de las posibles combinaciones de los caracteres indicados en «chars». Cada palabra tendrá exactamente una longitud de 5.

Con estos ejemplos queda claro que el script es capaz de realizar permutaciones de una forma bastante flexible y aunque no aparece en la imagen anterior, existe otro tipo de permutación que también hace PyDictor y es basada en grupos de caracteres. Es decir, con «-chars» se indican los caracteres que se utilizarán para la permutación, mientras que con «-chunk» se especifican grupos de caracteres separados por un espacio y la herramienta permuta dichos grupos, sin modificar el contenido de cada grupo.

Ahora es el momento de utilizar una de las características más interesantes de la herramienta y es precisamente, la posibilidad de crear diccionarios personalizados utilizando la información que se tiene de un objetivo. Para ello, se debe cargar el módulo de ingeniería social disponible. Se debe ejecutar el script de la siguiente manera: «python3 pydictor –sedb» y a continuación aparecerá el siguiente asistente.

En este asistente lo que primero que hay que ver y establecer son las opciones, las cuales se pueden ver en el menú principal o con el comando «show options». A partir de este punto hay que introducir los datos del objetivo en cuestión, teniendo en cuenta que cuanta más información se tenga, más combinaciones generará la herramienta y por supuesto, el tamaño del diccionario también será mayor.

Por otro lado, existen opciones muy interesantes que permiten que el diccionario sea más potente y robusto. Algunas de estas opciones se enseñan a continuación.

 

python pydictor.py -plug birthday 01011970 01012021 –dmy –len 8 8 -o /tmp/plugbir.txt -> Simplemente genera un fichero en el que cada palabra será una fecha entre el 01/01/1970 y 01/01/2021. Se puede combinar con otras opciones como «-chunk» para realizar permutaciones interesantes.

python pydictor.py -plug scratch http://thehackerway.com -o /tmp/scratch.txt -> Realiza un proceso de crawling básico contra el sitio indicado, extrayendo cada una de las palabras encontradas en el sitio web. El complemento scratch se puede combinar con otras opciones de la herramienta y también se puede hacer sobre múltiples sitios web, basta con dirigirse al fichero <PYDICTOR_DIR>/funcfg/scratch.sites y añadir cada sitio web manualmente (uno por línea). Funciona de un modo muy similar a CeWL.

python3 pydictor.py -extend adastra thehackerway.es –more –leet 0 1 2 11 21 –level 4 –len 1 12 –occur «<=10» «>0» «<=2» -o /tmp/wordlist.lst -> Genera un diccionario para ingeniería social utilizando los datos «adastra» y «thehackerway.es». Con –more se le indica a la herramienta que genere un diccionario extendido utilizando algunos patrones de contraseñas comunes. Con –leet se realiza la sustitución de caracteres en función a las reglas definidas en el fichero <PYDICTOR_DIR>/funcfg/leet_mode.conf. Los números que acompañan a esta opción en este caso son «0, 1, 2, 11 y 21», los cuales son códigos internos que indican cómo debe hacerse la sustitución y se encuentran debidamente explicados en la documentación oficial: https://github.com/LandGrey/pydictor#code. Con –level se intenta filtrar los resultados que serán incluidos en el diccionario. Con –occur suele venir acompañado de –leet como filtro para el número de  apariciones de letras, dígitos y caracteres especiales. Es decir, en este caso concreto se empezarán a sustituir letras por dígitos cuando la letra definida en las reglas «leet» aparezca 10 veces o más. Se sustituirán los dígitos cuando alguno de ellos aparezca 1 vez o más y finalmente, cualquier carácter especial se sustituirá cuando aparezca 2 veces o más.

Como se puede ver es una herramienta bastante completa y al mismo tiempo puede resultar compleja, no obstante la calidad de diccionarios que puede generar hace que merezca la pena su estudio. Por último, se aconseja ver los valores admitidos en la opción «-tool» ya que pueden ser útiles para la gestión de los diccionarios generados. Espero que te haya resultado interesante y si ese es el caso, puedes dejar un comentario en este post o simplemente compartirlo.

Un saludo y Happy Hack!
Adastra.

Categorías
Explotación de Software Hacking MetaSploit Networking Programacion Services - Software

Post-explotación con Koadic: COM Command and Control basado en Windows Script Host.

Koadic no es una herramienta reciente, de hecho ya lleva cerca de 5 años en continuo desarrollo y aunque no alcanza el reconocimiento y aceptación de otras similares como Metasploit Framework, sin duda merece la pena conocerla en detalle y tenerla en cuenta para operaciones de post-explotación sobre sistemas Windows. Se trata de una herramienta similar a Empire o el payload de Meterpreter, pero tal como se describe en el sitio web oficial de Gitub (https://github.com/zerosum0x0/koadic) su enfoque es distinto ya que utiliza JScript/VBScript para las operaciones que se llevan a cabo entre atacante y víctima. Otra característica que llama la atención es que todo se ejecuta en memoria y funciona en versiones tan antiguas como Windows 2000 hasta versiones modernas de Windows 10. Como muchas otras herramientas de este tipo, su uso resulta común y familiar, solamente es necesario entender los términos y qué hace cada componente:

  1. Zombies. Representa cada uno de los objetivos comprometidos (víctimas). Similar a lo que viene a ser una sesión en Metasploit Framework, un zombie en Pupy/BeEF o un agente en Empire.
  2. Stagers. Representa los módulos que se ejecutarán en la herramienta para la distribución de payloads y el establecimiento de conexiones con los zombies. Todos los stagers disponibles a la fecha de redactar esta entrada se encargan de levantar un servidor en la máquina comprometida y esperan a que la víctima se conecte, descargue y ejecute el payload correspondiente.
  3. Implants. Se trata de aquellas instrucciones que se ejecutan en los zombies y las que realmente permiten la ejecución de un proceso de post-explotación en condiciones sobre el objetivo. Nuevamente, esto es equivalente a lo que se encuentra en Metasploit Framework con los módulos de «post» o los meterpreter scripts (ya deprecados), así como en Empire con los stages.

La instalación de la herramienta tampoco supone ninguna dificultad, se encuentra escrita para Python3 y tiene el fichero «requirements.txt» debidamente configurado para poder ejecutar «PIP3» e instalar todas las dependencias necesarias. Una vez instalado, se pueden ver los comandos disponibles.

El primer paso consiste en iniciar un listener por medio de alguno de los stagers disponibles en la herramienta.

Como se puede apreciar, cuando la víctima intenta acceder al sitio web generado por Koadic se obtiene un nuevo zombie en la terminal de Koadic, sin embargo hay que tener en cuenta que esto dependerá en gran medida del stager utilizado y si la víctima accede al enlace con un cliente compatible a dicho stager. Por otro lado, con una versión actualizada de Windows 10 el AMSI funciona correctamente y detecta el payload como una amenaza lo que impide su correcta ejecución, no obstante las pruebas realizadas indican que funciona correctamente en Windows 8.1 y anteriores incluyendo Windows Server.
Una vez conseguido un zombie, se puede interactuar con él utilizando el comando «zombies» o alguno de los implantes disponibles. El comando «zombies <ID>» permite ver información básica del zombie con el que se ha establecido una conexión.

Por otro lado, si lo que se busca es ejecutar comandos contra el objetivo utilizando una shell, la instrucción «cmdshell <ID>» permite hacerlo.

El uso de los «implantes» es una característica interesante en la herramienta, ya que facilitan el proceso de post-explotación sobre el sistema comprometido. Como se ha mencionado anteriormente en este texto, es muy similar a lo que puede verse en los módulos «post» disponibles en Metasploit Framework, aunque evidentemente MSF es bastante más completo y robusto, pero aún así es interesante ver cómo funcionan los implantes de Koadic.

Como se puede ver en la imagen anterior, todos los implantes siguen una estructura de directorios fácil de entender y se pueden apreciar que cada implante listado es «auto-explicativo» con simplemente leer el nombre. El uso de cualquier implante es muy similar a como se hace en otras herramientas similares como Pupy o Metasploit Framework, basta simplemente con ejecutar el comando «use» e indicar el implante, establecer las opciones que requiere para ejecutarse y posteriormente lanzarlo con un comando como «execute» o «run».

Es una herramienta sencilla y que se puede explorar fácilmente en poco tiempo ya que como se ha dicho antes, es muy similar a otras herramientas del mismo corte. Como siempre, es importante que el «arsenal» de herramientas que se utilizan para pentesting o hacking sea lo más amplio posible y no quedarse con una única solución o alternativa. La variedad y conocer otras opciones en ocasiones puede ser decisivo en una auditoría. Dicho esto, espero que os animéis a probar Koadic si no lo habéis hecho ya.

Un saludo y Happy Hack!

Adastra.

Categorías
Hacking Networking Services - Software

Enumeración en Windows para Post-Explotación – Parte 3.

Continuando con los detalles básicos de enumeración que se han visto en las partes 1 y 2, se listan a continuación más elementos del «checklist» para enumerar sistemas Windows.

Usuarios y grupos.

Posiblemente es una de las primeras cosas que se intenta enumerar en cualquier sistema durante la post-explotación. Consiste en encontrar detalles básicos sobre las cuentas de usuario que se encuentran registradas en el sistema. En el caso de Windows esto se puede conseguir de una forma muy simple utilizando el comando «net users» o instrucciones en Powershell.

El comando «whoami /all» también es muy útil para enumerar información relevante sobre el usuario que se encuentra autenticado actualmente.
En este punto es especialmente interesante verificar el token de acceso que tiene el usuario que se está utilizando para enumerar el sistema, el cual se encarga de definir los grupos y privilegios del usuario, así como su identificación. Resulta conveniente ver el listado de privilegios que enseña el comando whoami y ver cuáles de ellos se pueden utilizar para post-explotación, especialmente si es posible la impersonalización de los mismos. Una guía concreta e interesante sobre el significado de los privilegios se encuentra en https://github.com/gtworek/Priv2Admin
Por otro lado, también es importante detectar los usuarios que son administradores locales en el sistema, ya que cuando se autentican, normalmente se crean dos tokens, uno de ellos con privilegios regulares y el otro con permisos de administrador. El que se utiliza por defecto para la ejecución de programas es el primero, pero cuando se intenta ejecutar alguna operación que requiere permisos de administrador se ejecuta el segundo y en este caso entra el juego el nivel de integridad y el UAC para «pedir confirmación» sobre la acción que se va a ejecutar.

 

Aplicaciones instaladas

En las aplicaciones instaladas en el sistema se puede encontrar una forma de elevar privilegios, especialmente en aquellos programas que se utilizan localmente por parte de los usuarios de forma regular y que incluyen vulnerabilidades conocidas o cuentan con configuraciones inseguras. Listar los directorios C:\\Program Files y C:\\Program Files (x86)  es una buena forma de hacerse una idea de lo que se encuentra instalado en el sistema, también resulta conveniente consultar la clave del registro HKLM\SOFTWARE por si acaso hay algún otro programa instalado en un directorio distinto a los anteriores. Además de esto, resulta conveniente utilizar una herramienta como AccessChk de Sysinternals para comprobar permisos débiles en esos directorios. Por supuesto, Powershell también puede utilizarse para obtener esta información

Contraseñas e información sensible.

Dependiendo del mecanismo de autenticación empleado y de la versión de Windows, es posible que las credenciales utilizadas por los usuarios se puedan recuperar directamente de la memoria de procesos como el LSASS o en otras ubicaciones. De hecho, los ataques clásicos de pass the hash se basan en obtener los hashes de las contraseñas utilizadas para iniciar sesión en el sistema local y en el caso de que la autenticación se lleve a cabo contra un AD, dichos hashes estarán guardados en los controladores de dominio. Los ataques de pass the hash continúan siendo una amenaza real y representan una técnica perfectamente valida para intentar elevar privilegios o realizar movimientos laterales. Aunque cuando se habla de PtH comúnmente se refiere a hashes NT, la misma dinámica aplica a Kerberos solo que en este caso se puede intentar obtener el TGT (Ticket-Granted Ticket).
Por otro lado, algunas ubicaciones que son de «obligada» verificación en un proceso de pentesting o incluso de Hardening en un sistema Windows se listan a continuación:

Security Accounts Manager (SAM):

Aquí se almacenan las credenciales hasheadas de los usuarios locales (NTLM). Dependiendo de la versión del sistema operativo se puede obtener de múltiples formas, entre las que se incluyen:

  • Extracción desde el registro del sistema operativo:
    En algunas versiones de Windows se puede obtener los hashes NTLM locales desde el registro y almacenarlos en un fichero, por ejemplo.
    reg save HKLM\sam C:\sam
    reg save HKLM\system C:\system
    Posteriormente se puede utilizar una herramienta como JTR (John The Ripper) o samdump2 para volcar dichos hashes.
  • Herramientas especificas:
    Es común utilizar herramientas como Mimikatz o el comando hashdump de meterpreter que se encuentra ubicado en la extensión priv pero además de esto, también se puede utilizar el script secretsdump.py de Impacket, el proyecto Lazagne o FGDump
  • Copia de la SAM :
    Las versiones más recientes de Windows conservan un bloqueo exclusivo del fichero SAM utilizado actualmente. Una alternativa valida podría ser obtener el backup de dicho fichero que el propio sistema operativo almacena. Las ubicaciones típicas suelen ser C:\Windows\Repair\ y C:\Windows\System32\config\RegBack. Nuevamente dependerá de la versión de Windows.
  • Volume Shadow Copy:
    Como se ha mencionado anteriormente, las versiones recientes de Windows no permiten el acceso directo al fichero SAM para lectura o escritura, pero en versiones recientes de dicho sistema operativo también se ha implementado una característica llamada VSC (Volume Shadow Copy) la cual se encarga de la creación de snapshots del volumen completo con el objetivo de realizar labores de recuperación del sistema y backup. Por lo tanto, es posible crear un snapshot del volumen principal (C: por ejemplo), montarlo y a partir de este punto copiar los ficheros SAM y SYSTEM para poder utilizar las herramientas que se han explicado previamente. Para ello se puede utilizar una herramienta como vssadmin o diskshadow, nuevamente dependiendo de la versión de Windows las herramientas disponibles son distintas.

LSA Secrets:

Ya se ha mencionado anteriormente que el proceso LSASS almacena en memoria información sensible como las credenciales de los usuarios, sin embargo existen otros elementos que también son interesantes y relevantes para un proceso de post-explotación, por ejemplo:

  • Contraseñas almacenadas en el ordenador localmente.
  • Contraseñas de cuentas destinadas a servicios que se ejecutan en el sistema.
  • Contraseñas de aplicaciones especificas, como por ejemplo aplicaciones web desplegadas en un IIS.
  • Contraseñas utilizadas en las tareas programadas creadas en el sistema operativo.

Gestores de contraseñas:

Los navegadores web que utilizan los usuarios de un sistema son una valiosa fuente de información y no solamente por el contenido correspondiente al historial de navegación o cookies, sino también las credenciales que se almacenan en los gestores de contraseñas. Además de esto, también es una práctica muy extendida utilizar programas de gestión de contraseñas en la nube o localmente, como es el caso de programas como LastPass, Bitwarden, PasswordSafe, KeePass2, KeePassX, etc. que también merece la pena investigar en el caso de el sistema comprometido tenga alguno de estos programas instalado.

 

Crear Named Pipes para saltar de «High Integrity» a «System».

Es una técnica muy extendida y de hecho, es una de las que se implementa en el comando «getsystem» de meterpreter. En primer lugar es necesario comprender que las pipes son un elemento habitual en sistemas operativos para ejecutar operaciones IPC (Inter Process Communication) y se trata simplemente de bloques de memoria cuyo único próposito es el de almacenar información que será compartida entre múltiples procesos. Las Named Pipes son un concepto introducido en sistemas Windows y que tienen una arquitectura cliente/servidor, en donde un servidor crear la Named Pipe y un cliente se puede conectar para leer/escribir datos en ella. En IPC evidentemente tanto cliente como servidor se encuentran ejecutandose en la máquina local, pero las Named Pipes pueden compartir recursos en máquinas remotas y en todo caso, se utiliza el protocolo SMB para la conexión e intercambio de información. El procedimiento para llevar a cabo esta técnica es simple y se resume en los siguientes pasos:

  1. Crea servicio el cual creará y se conectará a una Named Pipe.
  2. Desde el servicio, escribir cualquier cosa en la pipe. Es importante que la cuenta de usuario con la que se ha creado dicho servicio tenga el privilegio SeImpersonate.
  3. A continuación, un proceso cliente se debe conectar a la Named Pipe y leer el contenido que se ha puesto en dicho buffer
  4. En este punto el servicio puede invocar la función ImpersonateNamedPipeClient disponible en la API. Esta función, como su nombre indica, permite impersonalizar el contexto de seguridad del cliente y «establecerlo» en el hilo de ejecución principal del servidor, lo que se traducirá en una elevación de privilegios si el cliente que se conecta a la Named Pipe cuenta con privilegios de System.
  5. Finalmente, con el token del cliente impersonalizado se puede ejecutar las instrucciones que se quiera, como por ejemplo una shell.

Un buen recurso al que merece la pena dedicar unos minutos de lectura sobre este tópico, es el siguiente artículo: https://www.ired.team/offensive-security/privilege-escalation/windows-namedpipes-privilege-escalation

 

Se trata de un listado corto de algunas técnicas que se utilizan en elevación de privilegios en sistemas Windows, poco a poco se profundizará más y se emplearán otras herramientas y técnicas interesantes.

Un saludo y Happy Hack!
Adastra.

Categorías
Explotación de Software Hacking Services - Software

10 Subclaves interesantes en el registro de Windows para Hacking

Uno de los elementos más importantes en un sistema Windows es el registro, de hecho, es probablemente el más importante. En él se almacena información que utiliza el sistema operativo para garantizar su correcto funcionamiento, además suele ser empleado también por parte de aplicaciones que necesitan acceder a información de todo tipo durante su ejecución. Desde el punto de vista del pentesting/hacking hay algunas subclaves que son importantes y que merece la pena conocer ya que pueden ser vitales en un proceso de post-explotación. En este post se listarán solamente algunas dichas claves y su utilidad.

  1. HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON
    Se trata de una conocida subclave que almacena información sobre el proceso de login para cada usuario en el sistema. Es especialmente útil a la hora de establecer mecanismos de persistencia pero también es posible consultar  las credenciales que se encuentran cacheadas (en el caso de que haya alguna, obviamente).
  2. HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\POLICIES\SYSTEM\
    En esta subclave se almacenan valores relacionados con las configuraciones y políticas definidas en el sistema. Puede resultar especialmente interesante saber si el mecanismo UAC se encuentra habilitado en el sistema o no. Para ello se consulta el valor de EnableLUA y en el caso de que sea 0x1 indica que se encuentra activo y se solicita usuario y contraseña para ejecutar el binario con privilegios altos y si es 0x0 significa que no lo está. No obstante, también puede ser 0x2 (Always notify me), 0x3 (igual que 0x1 pero no necesita Secure Desktop), 0x4 (igual que 0x2 pero no necesita Secure Desktop), 0x05 (pide confirmación al administrador para ejecutar). Otros valores que resultan interesantes con el objetivo de entender la política de seguridad definida en el sistema son EnableInstallerDetection, ValidateAdminCodeSignatures y PromptOnSecureDesktop. Como siempre, la documentación de Microsoft ayuda a entender el funcionamiento de estas y otras claves del registro: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-gpsb/958053ae-5397-4f96-977f-b7700ee461ec
  3. HKLM\SYSTEM\CURRENTCONTROLSET\SERVICES
    En esta subclave se almacena información sobre servicios que se encuentran registrados en el sistema. La lista de subclaves y valores que cuelgan de esta puede es bastante extensa, por ese motivo conviene filtrar por aquellos elementos sensibles, como por ejemplo los servicios cuyas subclaves pueden ser manipuladas directamente, lo que permitiría hacer cosas como modificar el binario que ejecutan (ImagePath). Por ejemplo, el siguiente comando intenta guardar cada subclave en un fichero y a continuación intenta restaurar dicho fichero. Si la operación se lleva a cabo sin errores de permisos en alguna de dichas subclaves, indica que para esas subclaves concretamente se podrá manipular su configuración.
    for /f %a in (‘reg query hklm\system\currentcontrolset\services’) do del %temp%\reg.hiv 2>nul & reg save %a %temp%\reg.hiv 2>nul && reg restore %a %temp%\reg.hiv 2>nul && echo La subclave %a se puede manipular
  4. HKEY_LOCAL_MACHINE\SOFTWARE
    En esta subclave queda registro de los programas instalados en el sistema y una de las actividades típicas en post-explotación es la de verificar los permisos sobre los directorios en donde se encuentran los binarios o librerías DLL con el objetivo de o bien, sustituir un binario legitimo por otro malicioso o sustituir alguna DLL, lo que también se conoce como «DLL Hijaking».  Una forma rápida y cómoda de hacer esta consulta se encuentra en el comando icacls

  5. HKCU\SOFTWARE\MICROSOFT\TERMINAL SERVER CLIENT\SERVERS
    Se trata de una clave en la que se pueden consultar las conexiones RDP que se han guardado previamente. Esta información también puede quedar almacenada en HKEY_USERS\<SID>\Software\Microsoft\Terminal Server Client\Servers\  evidentemente es algo que se debe consultar en post-explotación ya que puede ser interesante de cara a comprometer otros sistemas en el entorno de red u obtener información sensible.
  6. HKCU\SOFTWARE\SIMONTATHAM\PUTTY
    Si en el sistema comprometido se encuentra instalado PuTTY es una buena idea explorar algunas de las subclaves que este software suele instalar en el registro. Concretamente es conveniente ver HKCU\Software\SimonTatham\PuTTY\Sessions y HKCU\Software\SimonTatham\PuTTY\SshHostKeys para verificar las conexiones que se han establecido anteriormente y a lo mejor, usuarios y contraseñas/claves que se han utilizado para el proceso de autenticación.
  7. HKCU\Software\OpenSSH\Agent
    En Windows 10 ya es posible tener un servidor OpenSSH que se encontrará integrado en el sistema operativo como cualquier otro servicio y que será útil para acceder de forma remota via SSH, esto es posible gracias a las «Windows Capabilities» de «OpenSSH Server» y «OpenSSH Client». Del mismo modo que ocurre en sistemas Linux, en sistemas Windows se almacena información sobre dicho servicio y las conexiones que se han establecido anteriormente y que puede ser sensible, solamente que en el caso de Linux dicha información queda guardada en <USER>/.ssh y en el caso de Windows queda en esta subclave del registro. Si se cuenta con privilegios sobre el sistema se puede acceder a «HKLM» en lugar de «HKCU» en donde posiblemente se podrá acceder a más información almacenada.
  8. HKEY_LOCAL_MACHINE\SYSTEM\CURRENTCONTROLSET\CONTROL\LSA
    Desde la versión 8.1 de Windows se han implementado algunas mejoras que impiden que un atacante pueda leer información sensible del LSASS o incluso inyectar código. En esta subclave se encuentran algunos valores interesantes de cara a proteger el LSASS principalmente diseñados para evitar que cualquier proceso malicioso o no confiable pueda leer valores sensibles que se encuentran almacenados en dicho proceso, como pueden ser credenciales cacheadas. En este sentido hay dos que resultan especialmente interesantes: RunAsPPL y LsaCfgFlags. La primera habilita la protección LSA como proceso protegido en un único equipo, si se desea hacerlo a nivel de directiva de grupo se debe abrir la consola GPMC. La segunda es una característica introducida en Windows 10 que se encarga de proteger las credenciales en la máquina local e imposibilitar la aplicación de técnicas PTH (Pass The Hash).

  9. HKLM\SYSTEM\CURRENTCONTROLSET\CONTROL\SECURITYPROVIDERS\WDIGEST
    WDigest es un protocolo que ha estado presente en Windows desde hace más de una década y ha sido utilizado para realizar el proceso de autenticación de usuarios vía HTTP, almacenando en texto plano las credenciales de los usuarios en el LSASS (Local Security Authority Subsystem Service). Esta «característica» ha sido explotada durante años con herramientas como Mimikatz o Lazagne aunque en versiones recientes de Windows (a partir de Windows 8.1) se trata de un comportamiento que viene desactivado por defecto, es decir, que las credenciales ya no se guardan en texto plano en en el LSASS. No obstante, la subclave indicada en este punto tiene un par de valores que permiten activar o desactivar esta característica. Si tienen el valor 0x0 indicará que no se almacenará dicha información sensible en el LSASS, por lo tanto en post-explotación se puede editar estas claves (con los privilegios adecuados) y después de reiniciar el sistema se activará nuevamente esta característica.
  10. HKCU\SOFTWARE\POLICIES\MICROSOFT\WINDOWS\INSTALLER
    En esta clave se encuentra un valor llamado AlwaysInstallElevated que resulta interesante para la elevación de privilegios, ya que cuando se encuentra activado (valor 0x01) indica que cualquier usuario sin importar sus privilegios en el sistema, puede ejecutar binarios msi como NT AUTHORITY\SYSTEM. Por lo tanto, si al consultar este valor resulta que se encuentra activo, sería posible crear un binario msi malicioso y a continuación, ejecutarlo en dicho sistema sabiendo que las instrucciones de ese binario se lanzarán con privilegios de administrador.

Como se puede ver en este corto listado de subclaves, la importancia que tiene el registro de Windows es evidente y no solamente para llevar a cabo procesos de post-explotación del sistema sino también para gestionar algunas de sus características vitales. No obstante, hay que saber qué tocar ya que editar algunos valores del registro pueden hacer que el sistema deje de funcionar correctamente. Aquí se han listado solamente 10 subclaves que son importantes o relevantes para post-explotación, pero hay muchas más, así que si conoces alguna otra que merezca la pena incluir, comparte y deja un comentario en este post. 🙂

Un saludo y Happy Hack.

Adastra.

Categorías
FileSystem Hacking Hacking Python MetaSploit Networking Programacion Services - Software Web Applications

Próximas entradas.

Para que podáis seguir el blog de una forma más cómoda, he decidido crear este post que marcaré como fijo y en el que podréis ver qué se irá publicando próximamente.  Se actualizará con frecuencia en la medida en la que vaya escribiendo más artículos así que lo puedes usar como bitácora o referencia de futuras publicaciones. También puedes postear un comentario sobre ideas para mejorar, posts sobre algún tema que te gustaría ver publicado aquí o si estás interesado en escribir algún artículo en este espacio. Como siempre, las aportaciones son bien recibidas. Si quieres contactar conmigo para otro asunto, lo puedes hacer escribiendo a mi correo adastra@thehackerway.com

 

Aquí puedes ver la lista de los posts del 2021.


 

Fecha Post Descripción
03/05/2022 Seguridad en APIs Rest: Asignación masiva En este post se explica en qué consisten las vulnerabilidades de asignación masiva (Mass Assignment) en APIs Rest y se enseña un ejemplo.
05/05/2022 DevSecOps y detección de vulnerabilidades con Trivy. Uso de la herramienta Trivy para la detección de vulnerabilidades en la etapa de deploy y release en el proceso de DevSecOps.
10/05/2022 Vulnerabilidad critica RCE en Spring Framework. Explicación y pruebas sobre la última vulnerabilidad que se ha producido en Spring Framework y el motivo por el que las aplicaciones basadas en Java con este framework deben actualizar cuanto antes.
12/05/2022 PyScript: Ejecuta scripts en Python en tu navegador web – Parte 1 de 2 Primera parte en la que se explica el proyecto pyscript, el cual permite la ejecución de scripts en Python directamente en páginas HTML.
17/05/2022 PyScript: Ejecuta scripts en Python en tu navegador web – Parte 2 de 2 Segunda parte en la que se explora el proyecto y se descubren sus limitaciones, especialmente desde la perspectiva de un pentester o atacante.

 

Un saludo y Happy Hack!
Adastra.