Buenas a todos el día lunes mencioné que estaría compartiendo un script “wrapper” para inicializar el proceso de Pentesting sobre un Active Directory.
La primera versión era ejecución de comandos, sin ir más allá de manera secuencial uno tras otro obteniendo los datos y luego viendo manualmente el resultado, pidiendo por consola los parámetros respectivos, durante un par de pentests internos pude hacer uso de la misma, y obtener en uno de ellos información especifica que me dio la oportunidad de sacar el preciado Domain Admin de una manera rápida, después de estar analizando el resultado, ya que no generaba un reporte o algo de información en específico.
Lazy Pentesting A.D.
Como el nombre lo dice es un script para perezosos que realizan un pentesting en un Active Directory, que tiene como objetivo automatizar algunas tareas, inicialmente solo está pensado para realizar las pruebas contra el Controlador de Dominio, ya que de esa manera inicio este script.
A continuacion veremos un diagrama con la idea del script el mismo, ira siendo mejorado/modificado según se vea respectivamente.
Lleva algunas pruebas y controles iniciales que estoy seguro con el tiempo podremos ir incrementando gracias al feedback y mejoras que vayamos notando, en la gráfica se ve un poco lo que cuenta, ya que es más tener un enfoque del script.
Tengo pensado trabajar en dos ramas principales la main y dev contando con la versión estable y funcional en main que podrán utilizarlo sin ningún inconveniente todo estando en modo SAFE por decirlo de alguna manera, y en la DEV que estaré realizando los cambios, especificando que puede tener errores y la ejecución es bajo tu propia responsabilidad.
Instalación y uso de Lazy Pentest Active Directory
Para iniciar debes de clonar el repositorio de la siguiente manera.
|
|
Recuerda que debes de verificar que tengas todas las herramientas utilizadas para ello tenemos la función de -T para verificar las herramientas, por ahora no se tiene un proceso de configuración o automatización ello estaremos viendo de adicionar a futuro.
Menú de LazyPAD
Este menú por ahora es temporal y tengamos por seguro que ira incrementando, por si aún no se notó el mismo está siendo desarrollado en Bash.
|
|
Directorios creados por LazyPAD.
Se creará una carpeta con el nombre de LazyEnumAD, actualmente este está por defecto y dentro de ella se tendra dos directorios los cuales son.
- files.
- Report.
En el directorio files, estarán todos los ficheros que serán generados por el script.
El directorio Report estará con los datos utilizados para generar el reporte.
Argumentos
Los argumentos que se pide son los siguientes en su mayoria
-d: Nombre del dominio.
-i: Dirección ip del controlador de dominio.
-u: Nombre del usuario.
-p: Credenciales del usuario.
-w: Ubicacion del diccionario para el proceso de Password Cracking.
-r: Ubicacion de las reglas de Hashcat.
-h: Muestra el menu de ayuda.
Funciones
Se tiene el nombre de funciones temporalmente a los diferentes tipos de pruebas que realizara el script, entre ellos tenemos
- -T Check Tools installed in System.
- -N NULL SESSION.
- -E Enumerate Active Directory.
- -V Verify vulnerability in AD
- -C Password Cracking
- -F Full Attack Active Directory
- -A Attack Domain.
- -R Generate Report Markdown.
A continuación procederé a explicar cuál será los parámetros que utilizara cada una de las funciones.
-T Check Tools
Verificamos la instalación de los programas con base en un for iterando sobre un listado de las herramientas que utiliza el script, sobre este apartado tengo en mente adicionar un proceso de instalación y configuración de las herramientas según el sistema operativo donde se esté utilizando, aún no lo tengo en cuenta debido a que me encuentro usando Exegol y gran parte de las herramientas se encuentran listas para trabajar.
El comando a ser ejecutado es el siguiente
|
|
Vemos que nos mostrará el mensaje si esta o no instalado la herramienta, para ello se tendrá la mejora de esta función con la instalación de las herramientas.
-N Null Session
En este punto realizaremos pruebas de Null Session, es decir sin credenciales para verificar si logramos obtener información del Controlador de Dominio, interactuando con LDAP y de forma directa.
En este caso solo debemos de enviar la dirección IP del controlador de dominio -i
y la flag -N
.
|
|
Por ahora esta función obtiene a través de Crackmapexec el hostname y el nombre del dominio, considerando que el primer objetivo será identificar para posteriormente usarlo en las siguientes funciones.
Realizamos una identificación de GPP y si lo encuentra nos mostrara en el Reporte además de tener el mensaje que se obtuvo un credencial.
Adicional a ello quiero y estoy pensando adicionar:
- Consulta con ldapsearch
- –ridbrute
- Directorios compartidos con smbmap e incluso con crackmapexec y el módulo spider_plus.
-E Enumerate Active Directory
En este punto realizaremos la enumeración del directorio activo, con el fin de identificar potenciales vectores que nos permitan obtener el control del dominio los parámetros a configurar son los siguientes.
|
|
En este primer ejemplo vemos que no identifica ninguna credencial en el SYSVOL nos especifica que no encontró ningún credencial.
Por otro lado, si encuentra nos mostrara un mensaje de la siguiente manera.
Actualmente con las siguientes herramientas:
- Enumeración de usuarios con crackmapexec, para posteriormente realizar un ataque de Password Spraying por ejemplo.
- Ingestor desde Linux para Bloodhound, bloodhound-python
- Ldapdomaindump para obtener información del dominio.
- Identificamos si cuenta con credenciales en el GPP con gpp-passwords.py que forma parte de la suite de Impacket
-V Verify Vulnerability
Identificamos vulnerabilidades en el controlador de dominio esto es realizado con crackmapexec
y nmap
, verificando Zerologon, noPAC, MS17-010 y PetitPotam los parámetros a ser enviados son los siguientes.
|
|
Tengo pensado adicionar la identificación de vulnerabilidades sobre NTLM con la herramienta NTLM Scanner.
-R Generate Report Markdown
La intención con esta función es que se tenga un reporte de los datos en formato Markdown, por ahora específicamente está funcionando bajo Obsidian y su respectivo formato, tengo pensado hacerlo funcional para Joplin, pero aún no está funcionando del todo como desearía.
Para la generación del reporte necesitamos enviar dos parametros, el Usuario de neo4j -U
y el Password -P
, esto es debido a que usamos Bloodhound-QuickWin e interactuamos directamente para obtener potenciales caminos para el domain admin.
|
|
Lo que se hace en este apartado es tratar los ficheros que se obtienen proceder a tratarlos para que estén en un reporte, con los datos específicos.
- Espero esto tenerlo integrado con el TEMPLATE de reporte de Pentesting con Obsidian.
- Generar gráficos, por ejemplo de la cantidad de usuarios privilegiados en Dominio.
- Especificar la cantidad de usuarios con credenciales débiles, repetidas.
Funciones no implementadas
Como lo mencione al inicio del post este script está en una fase inicial de desarrollo y tendrá una mejora continua, por ello estos dos aun no estan definidos en su totalidad.
-C Password Cracking
En esta función tengo pensado que se realice el proceso de Password Cracking de los datos que se obtengan, como ser los tickets SPN o hashes que se vayan obteniendo.
-F Full Attack Active Directory
Esta función se tengo pensado es que realice todas las tareas del script desde el reconocimiento hasta la explotacion respectivamente.
-A Attack Domain
Aun esto estoy pensando como enfocar este punto, ya que al ser un Active Directory se debe de tomar con pinzas muchas funcionalidades o pruebas a realizar por ahora lo que anda en desarrollo.
- Kerberoasting verificar si existen Tickets SPN y extraerlos, con GetSPN.
- Password Spraying lo quiero realizar con Sprayhound.
TODO - Mejoras
Dentro de las mejoras que espero traer son las siguientes:
- Funcion de Password Cracking
- Completar el ejemplo de uso de la herramienta en el menú de ayuda.
- Adicionar Módulo para que realice pruebas en segmentos de red.
- Iniciar Neo4j y Bloodhound, para importar los .json.
- Adicionar módulo de instalación y parametrización.
- Enlace simbólico con las herramientas.
- Mejorar el módulo de detección de Vulnerabilidades.
- Mejorar el reporte de Markdown.
- Mejorar el módulo de Null Session.
- Null Session –rid-brute
- Configurar notificaciones por medio de Telegram, Slack, Discord.
Puedes ir al Github y ver en detalle las mejoras ya que estara siendo actualizado el README.
¡Ayuda a encontrar Bugs y a mejorar LazyPAD!
Me encantaría que el script no solo sea usado por mi persona también colabores con el mismo ya sea reportando errores, o bien contribuyendo con mejoras, ya sea reportando un error con alguna funcionalidad, adicionar un dato en el reporte que se genera, como también si desearías adicionar algún proceso o simplemente cambiar alguna herramienta, te pediría que lo realices por Github así de esta manera mantenemos un seguimiento, en el caso de que no puedas reportarlo, escríbeme por Twitter o Telegram incluso en el Blog.
Iré incrementando y mejorando el script al menos una vez por semana, dependiendo de que mejoras se me ocurran o reciba el feedback.
Regards,
Snifer