linWinPwn 是一个 bash 脚本,封装了多个 Active Directory 工具,用于枚举(LDAP、RPC、ADCS、MSSQL、Kerberos、SCCM)、漏洞检查(noPac、ZeroLogon、MS17-010、MS14-068)、对象修改(密码更改、将用户添加到组、RBCD、Shadow Credentials)以及密码转储(secretsdump、lsassy、nanodump、DonPAPI)。该脚本简化了大量工具的使用:impacket、bloodhound、netexec、enum4linux-ng、ldapdomaindump、lsassy、smbmap、kerbrute、certipy、silenthound、bloodyAD、DonPAPI 以及许多其他工具。
Git 克隆仓库并使用 install.sh 脚本安装依赖
git clone https://github.com/lefayjey/linWinPwn
cd linWinPwn
chmod +x install.sh
./install.sh
或者,使用 Docker Hub 上预构建的 Docker 镜像
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
或者从源码构建
docker build -t linwinpwn .
docker run --rm --init -it --net=host -v $(pwd):/opt/lwp-output linwinpwn -t <DC_IP>
linWinPwn 脚本可以在交互模式(默认)或自动化模式(仅枚举)下执行。
1. 交互模式(默认) - 打开交互式菜单以分别运行检查
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. 自动化模式 - 使用 --auto 参数,运行枚举工具(无利用、修改或密码转储)
使用自动化模式时,根据身份验证方法执行不同的检查。
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
自动配置 - 在运行模块之前,与目标 DC 进行 NTP 同步并向 /etc/hosts 添加条目
linWinPwn -t <Domain_Controller_IP> --auto-config
LDAPS - 使用 LDAPS 而不是 LDAP(端口 636)
linWinPwn -t <Domain_Controller_IP> --ldaps
强制 Kerberos 认证 - 强制使用 Kerberos 身份验证而不是 NTLM(在可能的情况下)
linWinPwn -t <Domain_Controller_IP> --force-kerb
详细输出 - 启用所有详细和调试输出
linWinPwn -t <Domain_Controller_IP> --verbose
接口 - 选择攻击者的网络接口
linWinPwn -t <Domain_Controller_IP> -I tun0
linWinPwn -t <Domain_Controller_IP> --interface eth0
目标 - 选择要扫描的目标(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
自定义字典 - 选择自定义用户和密码字典
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
当您只能在有限时间内访问 Active Directory 环境,并希望在枚举过程和证据收集过程中更加高效时,linWinPwn 特别有用。 此外,linWinPwn 可以替代在 Windows 上使用枚举工具,以减少创建的痕迹数量(例如 PowerShell 命令、Windows 事件、磁盘上创建的文件),并绕过某些防病毒或 EDR。这可以通过从 Windows 主机(例如 VDI 机器或工作站或笔记本电脑)到远程 Linux 机器(例如渗透测试笔记本电脑或 VPS)创建 SSH 隧道来执行远程动态端口转发,并使用 proxychains 运行 linWinPwn 来实现。
在 Windows 主机上,使用 PowerShell 运行:
ssh.exe kali@<linux_machine> -R 1080 -NCqf
在 Linux 机器上,首先更新 /etc/proxychains4.conf 以包含 socks5 127.0.0.1 1080,然后运行:
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]