Der ncat
Der Befehl ist Teil der nmap-Suite und wurde speziell dafür geschrieben. Es stimmt, dass ncat
hat so viele Verwendungsmöglichkeiten wie das berühmte Schweizer Taschenmesser, kann aber genauso gefährlich sein, wenn es falsch oder von böswilligen Akteuren verwendet wird. Eine seiner Stärken ist das ncat
kann sowohl Client als auch Server sein. Dieser Artikel konzentriert sich auf einen Aspekt dieser Beziehung. Ich zeige Ihnen, wie Sie mit ncat
eine lauschende Bash-Shell öffnen auf die jeder mit ncat
zugreifen kann als Kunde. In meinem Artikel Linux-Fehlerbehebung:Einrichten eines TCP-Listeners mit ncat beschreibe ich, wie Sie ncat
einrichten als Listener oder Server, der einen bestimmten Port abhört. Dieses Beispiel ist ähnlich, aber ich denke, Sie werden von der schieren Kraft von ncat
beeindruckt sein gibt Ihnen. Es sollte Sie auch erschrecken – sehr.
ncat installieren
Überprüfen Sie Ihr System unter /usr/bin
zuerst, um zu sehen, ob Sie ncat
installieren müssen . Es ist normalerweise in jeder Red Hat Enterprise Linux-basierten Distribution enthalten. Wenn Sie feststellen, dass Sie es installieren müssen, lautet der Paketname nmap-ncat
. Sie können entweder ncat
installieren selbst oder installieren Sie nmap
und das nmap-ncat
Paket wird als Abhängigkeit installiert.
Ncat verwenden
Geben Sie ncat
nicht aus Befehle als root, insbesondere für die Beispiele in diesem Artikel. Dadurch erhält jeder ohne Authentifizierung Root-Zugriff auf Ihr System. Jeder Benutzer kann ncat
ausgeben Befehle, was sowohl eine seiner Eigenschaften als auch eine seiner Gefahren ist. Ich schlage vor, dass Sie ein Dienstkonto erstellen und mit ncat
arbeiten mit diesem Konto. Vertrauen Sie mir, ich habe jedes Argument für und gegen Dienstkonten gehört, aber wenn Sie einmal ncat
sehen in Aktion, sollten Sie das Dienstkonto für Interaktionen damit verwenden.
Stellen Sie eine Bash-Shell bereit
Das ist der lustige (und gefährliche) Teil der Verwendung von ncat
. Wechseln Sie den Benutzer zu Ihrem neuen Dienstkonto. Ich habe meine schüchtern genannt .
[ken@server1 ~] $ su - bashful
Password:
[bashful@server1 ~] $
Nachdem Sie die Benutzerkonten gewechselt haben, ist es an der Zeit, diese Shell zu öffnen. Es ermöglicht einen nicht authentifizierten Zugriff auf Ihr System über eine meist interaktive Shell. Sie werden sehen, was ich mit "meistens" interaktiv meine, sobald Sie eine Verbindung hergestellt haben. Dieser nächste Befehl verwendet ncat
um eine Bash-Shell auszuführen, die auf einem TCP-Port lauscht. Für dieses Beispiel verwende ich Port 9922 auf Server1 (192.168.1.50). Das -l
Option richtet einen Listening-Port ein. Das -k
Option ist ein Keepalive-Flag, das den Socket beibehält. Wenn Sie -k
nicht ausgeben Option, dann stirbt der Socket, nachdem Sie die Sitzung getrennt haben, und es können keine anderen Verbindungen zu ihm hergestellt werden.
[bashful@server1 ~] $ ncat -e "/bin/bash" -l 9922 -k &
Das -e
Option führt den Befehl in Anführungszeichen aus, was in unserem Fall die Bash-Shell ist (/bin/bash
). Ich verwende das kaufmännische Und (&
) nach dem Befehl zum Freigeben meiner Eingabeaufforderung und setze den ncat
Zuhörer in den Hintergrundmodus. Wenn Sie &
nicht verwenden , dann "hängt" Ihr Terminal und erlaubt Ihnen nicht, damit zu interagieren. Wenn das kein Problem für Sie ist, lassen Sie es so wie es ist.
Ausgabe von netstat
Befehl zeigt, dass der Listener vorhanden ist.
[bashful@server1 ~]$ netstat -an |grep 9922
tcp 0 0 0.0.0.0:9922 0.0.0.0:* LISTEN
tcp6 0 0 :::9922 :::* LISTEN
[bashful@server1 ~]$
Um sich von einem entfernten System mit dem Listening-Port zu verbinden, müssen Sie auch eine Ausnahme in der hostbasierten Firewall für Port 9922 öffnen.
[ken@server1 ~]$ sudo firewall-cmd --add-port=9922/tcp
success
Siehst du hier die Ausfallsicherung? Es ist die Firewall-Ausnahme, die ich mit meinem Konto und sudo
erstellen musste . Wenn Sie eine hostbasierte Firewall oder IPTables laufen haben (und das sollten Sie besser), dann funktioniert dieser Dienst nicht, bis Sie diesen Port zulassen, was bedeutet, dass kein gewöhnlicher Benutzer dies ohne Administratorzugriff zum Laufen bringen kann. Andernfalls würden ncat-ausgebildete Benutzer überall Ports öffnen und Sie dabei in den Wahnsinn treiben. Ganz zu schweigen von den Sicherheitsproblemen, die Sie haben würden. Ich schweife ab.
Greifen Sie von einem entfernten System aus auf die Shell zu
Jetzt können Sie von einem entfernten System auf Port 9922 auf die Bash-Shell zugreifen.
[ken@server2 ~]$ ncat 192.168.1.50 9922
Von server2 , geben Sie ncat
aus Befehl mit der Ziel-IP-Adresse von server1 und der lauschende Port 9922. Sobald Sie verbunden sind, passiert nichts, oder so könnte man glauben, weil das Terminal irgendwie hängen zu bleiben scheint. Aber was wirklich passiert, ist, dass Sie mit dem Raw-Socket kommunizieren und daher keine Eingabeaufforderung sehen. Beweisen Sie es, indem Sie who
ausgeben Befehl.
[ken@server2 ~]$ ncat 192.168.1.50 9922
who
ken pts/0 2020-08-26 13:39 (server2)
Sie können jeden beliebigen Befehl erteilen, den Sie diesem Benutzer schüchtern wünschen Zugriff hat. Wenn Sie einen Befehl ausgeben, der Root-Zugriff erfordert, werden Sie wahrscheinlich keine Antwort sehen. Das Terminal scheint im Zustand „hängen“ zu bleiben. Ihre Antwort erscheint tatsächlich auf dem Terminal von server1 . Wenn Sie beispielsweise den folgenden Befehl eingeben:
firewall-cmd --list-all
Sie sehen nichts auf server2 Bildschirm. Auf server1 Auf dem Bildschirm von erscheint Folgendes:
[bashful@server1 ~]$ Authorization failed.
Make sure polkit agent is running or run the application as superuser.
Zum Trennen von server2 's geheime Shell, drücken Sie Strg+C Kombination und Ihre lokale Eingabeaufforderung gibt zurück.
Versuche das nicht bei der Arbeit
Nur zum Spaß, oder wenn Sie mir nicht glauben, töten Sie den aktuellen ncat
mit Ihrem Dienstkonto oder als Root verarbeiten. Geben Sie dann denselben Befehl als Root-Benutzer erneut aus, um diese Bash-Shell als Root auszuführen. Verbinden Sie sich erneut von einem Remote-System und geben Sie diesen Firewall-Befehl erneut aus. Diesmal sehen Sie die Ergebnisse. Sie können jeden Befehl als Root ausführen, weshalb Sie diese Art von Dienst niemals als Root-Benutzer einrichten sollten.
Und jetzt sehen Sie die wirkliche Gefahr bei der Verwendung von ncat
als Wurzel. Böswillige Akteure richten eine solche Shell auf einem geheimen Port ein, der von einem Port-Scan übersehen wird, und haben vollen Root-Zugriff ohne Authentifizierung.
Abschluss
Das sehr nützliche und potentiell sehr gefährliche ncat
Kommando ist dein bester Freund und dein schlimmster Feind. Wie jedes andere Werkzeug im Schuppen hat es keine andere Absicht als das, was Sie ihm geben. Sie sollten den ncat
studieren Befehl, seine Verwendung und seine Einschränkungen in Ihrer Umgebung. Denken Sie daran, jeden ncat
zu töten Prozess, den Sie nicht ständig ausführen möchten, wenn Sie damit fertig sind, und entfernen Sie die Firewall-Ausnahme, die seinen Zugriff zulässt. Denken Sie auch daran, dass mit großer Kraft die Fähigkeit einhergeht, Dinge wirklich zu vermasseln.
[ Möchten Sie Ihre Fähigkeiten als Systemadministrator testen? Machen Sie noch heute einen Kompetenztest. ]