
RevSuit ist eine flexible und leistungsstarke Reverse-Connection-Plattform, die entwickelt wurde, um Verbindungen von Zielhosts bei Penetrationstests zu empfangen.
Englisch |简体中文
RevSuit ist eine flexible und leistungsstarke Reverse-Connection-Plattform, die dafür entwickelt wurde, Verbindungen von Zielhosts bei Penetrationstests zu empfangen. Sie unterstützt derzeit die Protokolle HTTP, DNS, RMI, LDAP, MySQL und FTP.
Flexibel:
Leistungsstark:
Laden Sie die neueste Version direkt herunter oder erstellen Sie sie durch die folgenden Schritte:
git clone https://github.com/Li4n0/revsuit.git
cd revsuit/frontend && yarn install && yarn build
cd ../ && go build ./cmd/revsuit/revsuit.go
RevSuit erstellt beim ersten Start eine standardmäßige Konfigurationsdatei. Passen Sie die Konfigurationsdatei nach Ihren Bedürfnissen an und führen Sie sie erneut aus. Eine detaillierte Beschreibung der Konfigurationsdatei finden Sie unter: Konfigurationshinweise
Um den IP-Standort zu bestätigen, muss die IP-Standortdatenbank verwendet werden. Standardmäßig wird QQwry als Datenquelle verwendet. Sie können die Konfiguration auch ändern, um GeoIP zu verwenden. Wenn die ausgewählte Datenbank nicht im aktuellen Verzeichnis vorhanden ist oder die Datenbank seit mehr als einer Woche nicht aktualisiert wurde, lädt RevSuit automatisch die neueste Datenbank herunter. Wenn der Download fehlschlägt, bleibt das IpArea-Feld immer null.
$ ./revsuit
2021/05/16 22:55:10 [ INFO] Downloading qqwry.dat...
____ _____ _ __
/ __ \___ _ __/ ___/__ __(_) /_
/ /_/ / _ \ | / /\__ \/ / / / / __/
/ _, _/ __/ |/ /___/ / /_/ / / /_
/_/ |_|\___/|___//____/\__,_/_/\__/
vBeta0.1
https://revsuit.pro
2021/05/16 22:55:22 [ INFO] Starting HTTP Server at :80, token:your_token
2021/05/16 22:55:22 [ INFO] Start to listen FTP PASV port at :2020, PasvIP is 10.9.8.7
2021/05/16 22:55:22 [ INFO] Starting FTP Server at :21
2021/05/16 22:55:22 [ INFO] Starting MySQL Server at :3306
2021/05/16 22:55:22 [ INFO] Starting RMI Server at :1099
2021/05/16 22:55:22 [ INFO] Starting DNS Server at :53
Nach dem Start können Sie den Pfad /revsuit/admin/ des HTTP-Servers aufrufen und das Token eingeben, um auf das Kontrollzentrum zuzugreifen.
Als Beispiel die Erstellung von HTTP-Regeln:
Einige Hinweise:
name und flagFormat einer Regel sind eindeutig.FlagFormat verwendet reguläre Ausdrücke, und je nach Protokoll unterscheiden sich die Felder, die von flagFormat abgeglichen werden. Beim Erstellen von Regeln können Sie die entsprechenden Hinweise für Details prüfen.flagFormat festlegen, und das Ergebnis der übereinstimmenden Gruppe wird ebenfalls als Template-Variable verwendet.Wie unten gezeigt, erstellen wir eine Regel, die die eingebauten Template-Variablen und benutzerdefinierten Template-Variablen des HTTP-Protokolls verwendet, und nennen sie test_create_rule:

Dann senden Sie eine Anfrage, die der Regel entspricht, und sehen Sie die Antwort.

Die Anfrage wird gleichzeitig auf der Plattform protokolliert.

Wenn Sie über Ihre Bürosoftware über neue Verbindungen benachrichtigt werden möchten, können Sie die Webhook-Adresse der entsprechenden Software in der Konfigurationsdatei konfigurieren und den Schalter Notice für die entsprechende Regel aktivieren. Derzeit werden nur vier Softwaretypen unterstützt: DingTalk, WeChat, Lark, Slack. (Unterstützung für Discord und Telegram ist geplant.)
Wenn Sie Plattformen migrieren oder Daten bereinigen, kann das Neuerstellen von Regeln mühsam sein. Daher unterstützt die Plattform den Import und Export von Regeln.
Der Einstiegspunkt für diese Funktion befindet sich unter Settings>RULES.
Die Regeln werden im YAML-Format für Import und Export gespeichert, wie folgt:
http:
- name: test_create_rule
flag_format: (?P<what>\w+)\?
rank: 0
push_to_client: false
notice: false
response_status_code: "302"
response_headers:
Location: ${query.url}
response_body: ${header.say} ${what}
- name: other_rule
flag_format: other
rank: 1
push_to_client: false
notice: true
response_status_code: "200"
response_headers: { }
response_body: Hello Revsuit!
dns:
... ...
RevSuit wurde aus meinem Scanner-Projekt ausgegliedert, daher ist die native Unterstützung für die Arbeit mit Scannern gegeben.
Aus RevSuit-Perspektive nennen wir einen Scanner einen Client.
RevSuit verwendet HTTP Server-sent Events (SSE), um einen unidirektionalen Kommunikationskanal mit dem Client aufzubauen.
Die API für den Kanal ist: /revsuit/api/events?message. Der Client muss zunächst den Header Token: your token zum Header hinzufügen und dann auf die API zugreifen, um den Kanal einzurichten. Wenn die Plattform eine neue Verbindung empfängt, wird das von der Regel erfasste flag über diesen Kanal an den Client gesendet.

Hier ist eine einfache Demo unter Verwendung der Golang-SSE-Bibliothek als Beispiel.
Wie oben gezeigt, unterstützt RevSuit mehrere Clients, und jeder Client im verbundenen Zustand empfängt einen Push des flag, sodass verteiltes Scannen unterstützt werden kann.
Wenn Sie nicht möchten, dass jeder Client alle flag-Pushes erhält, können Sie beim Erstellen einer SSE-Verbindung den Request-Header Flag-Filter verwenden, um das Format (reguläre Ausdrücke) des flag festzulegen, das dieser Client empfangen soll:

RevSuit speichert flag vorübergehend in der Warteschlange, wenn keine Client-Verbindung besteht, und sendet es, wenn der Client eine Verbindung herstellt. So müssen Sie sich keine Sorgen machen, eine Schwachstelle zu verpassen, weil der Client getrennt ist. (Dies ist besonders hilfreich für die Erkennung von verzögert ausgelösten Schwachstellen.)
In einem realen Schwachstellenscan-Szenario können Sie für einen einzelnen Schwachstellenpunkt eine große Anzahl verschiedener Payloads senden, die alle gültig sein könnten. Dies führt dazu, dass die Rückverbindungsplattform viele Anfragen erhält, obwohl sie alle durch dieselbe Schwachstelle verursacht werden. Wenn Sie nicht möchten, dass der Client so viele flags für dieselbe Schwachstelle erhält, können Sie die flagGroup-Funktion des flagFormat einer Regel nutzen.
FlagGroup ist der Inhalt, der von der anonymen Gruppe im flagFormat-Feld der Regel abgeglichen wird. Die Plattform überprüft den in der Gruppe abgeglichenen Inhalt, und das Flag wird nur dann an den Client gesendet, wenn der Inhalt (flagGroup) zum ersten Mal erfasst wird.
Zum Beispiel SSRF-Scanning.
Erstellen Sie zunächst eine Regel wie folgt:
http:
- name: ssrf
flag_format: (ssrf[a-z0-9]{6})[0-9]{1,3}
rank: 0
push_to_client: false
notice: false
response_status_code: "200"
response_headers: { }
response_body: "Here is a SSRF!"
Angenommen, unser Ziel ist https://www.testvuln.com?url=api.com&p=useless, und wir haben 5 Payloads für SSRF. Die endgültige vom Scanner gesendete Anfrage könnte sein: ['https://www.testvuln.com?url=http://revsuit.com/ssrfa98oni1&p=useless','https://www.testvuln.com?url=http://revsuit.com/ssrfa98oni2&p=useless', ... ,'https://www.testvuln.com?url=//revsuit.com/ssrfa98oni5&p=useless']. Sie könnten alle erfolgreich angreifen.
Da jedoch eine anonyme Gruppierung im flagFormat der Regel verwendet wird, fragt die Plattform die verbundenen flagGroup ab, in diesem Fall ssrfa98oni, und sendet flag nur beim ersten Auftreten an den Client. Der Client empfängt daher nur ein Flag: ssrfa98oni1. Es ist bereits bewiesen, dass der url-Parameter des Ziels angreifbar ist.
In realen Penetrationstest-Szenarien können bestimmte Aufgaben einfach und schnell durch die Kombination und Abstimmung verschiedener Module von RevSuit erledigt werden. Das folgende Beispiel einer blinden XXE in Java Web zeigt, wie die HTTP- und FTP-Module von RevSuit in Verbindung mit Template-Variablen verwendet werden können, um schnell einen Portscan durchzuführen.
Erstellen Sie zunächst eine HTTP-Regel, um evil.dtd zurückzugeben, passen Sie die Antwort an den Inhalt der dtd an, sodass sie eine Verbindung zum FTP-Dienst von RevSuit herstellt, und verwenden Sie Template-Variablen, um den zu scannenden Host und Port über FTP-Benutzer und -Passwort zu übergeben.

Erstellen Sie dann eine FTP-Regel, die den zu scannenden Host und Port aus den Template-Variablen für Benutzer und Passwort empfängt, und setzen Sie die Pasv Address.

Verwenden Sie dann BurpSuit, um den Scan zu starten, indem Sie die Host- und Port-Parameter in der evil.dtd-URL festlegen, um das Ziel des Portscans zu setzen.

Die Ausführung sieht wie folgt aus:

Da die FTP-Verbindung abbricht, wenn die Passive Address nicht erreichbar ist, können wir anhand dessen, ob die Verbindung normal beendet wird, feststellen, ob der Port geöffnet ist. In diesem Beispiel haben wir erfolgreich erkannt, dass die Ports 8005 und 8080 geöffnet sind.
Ein detaillierteres Wiki wird vorbereitet. Sie können es in der Zwischenzeit selbst erkunden.
Reichen Sie ein Issue ein oder kontaktieren Sie mich über Weixin: TGk0bjA2Cg==
Dieses Projekt greift auf den Code der folgenden herausragenden Projekte zurück:
Danke an meinen Freund @E99p1ant für all die Hilfe und Ratschläge, die ich während der Entwicklung dieses Projekts erhalten habe.
@Apache License 2.0