Portscan mit Nmap: Hosts/Rechner und offene Ports im Netzwerk finden

Aus DebianforumWiki
Wechseln zu: Navigation, Suche
WikiNetzwerk ‹ Portscan mit Nmap: Hosts/Rechner und offene Ports im Netzwerk finden


Um sich einen Überblick über das Netzwerk zu verschaffen, zu dem man verbunden ist, kann ein Portscan auf das Netzwerk durchführt werden, um verbundene Hosts und angebotene Services/Dienste bzw. offene Ports zu finden.

Unter Linux/GNOME kann der NetworkManager bzw. nmcli(1) verwenden werden, um sich die Netze anzuzeigen, zu denen man verbunden ist.

export LC_ALL=C # Damit der reguläre Ausdruck unten korrekt ist
lsip () {
>	nmcli -f uuid,device connection show --active \
>	| awk 'NR>1 && $2!="lo" {print $1}' \
>	| xargs nmcli -t connection show \
>	| sed -n -E "/^IP4.ADDRESS\[[0-9]+\]:/{s///;p}"
> }

Und dann mit z.B. nmap(1) einen Standard Nmap scan ausführen, um sich alle Hosts anzuzeigen, die erreichbar sind (Ping), sowie deren offene Ports.

lsip | xargs nmap

Vor einem Ping scan (oder auch Ping sweep) verstecken

Nmap sendet vor dem Portscan einen Ping, um die Erreichbarkeit einer IP-Adresse festzustellen und überspringt Adressen, die darauf keine Antwort senden (Pong). Damit keine Antwort gesendet wird, müssen folgende Kernel-Parameter gesetzt werden.

cat <<! >>/etc/sysctl.d/00-local.conf
> net.ipv4.icmp_echo_ignore_all=1
> net.ipv4.icmp_echo_ignore_broadcasts=1
> !
sysctl -p # Die sysctl-Einstellungen neuladen

Im Localnet können Geräte dennoch via arp-scan(1) gefunden werden.

Alles scannen

Um den Ping scan zu deaktivieren und alle IP-Adressen zu scannen (-PN) und so auch verstecke Ports zu finden (-p), sowie die Betriebssystemerkennung (-O), die Versionserkennung (-sV), das Scannen mit Scripts (-sC) und traceroute (--traceroute) zu aktivieren und so mehr Details angezeigt zu bekommen, nutzt man folgende Parameter. (Viele der genannten Parameter sind unter dem Parameter -A zusammengefasst. Dieser soll einen umfassenden Satz von Scan-Optionen aktivieren, ohne dass man sich viele Parameter merken muss).

lsip | xargs nmap -A -PN --script=vuln -sS -sU -p "T:0-65535,U:0-65535"

Ein solcher Scan benötigt allerdings auch entsprechend mehr Zeit und wird als aufdringlich betrachtet. Sie sollten dies nicht ohne Genehmigung anwenden. Außerdem benötigt dieser Scan erweiterte Rechte, haben Sie diese nicht, lassen Sie -sS und -sU weg, bzw. ersetzen Sie es durch -sT.

Alternativen für die Funktion lsip

In Leserbriefen wurden noch Alternativen für die Funktion lsip aufgezeigt.

Hier ein für das Wiki adaptiertes Kommando, für Leute die NetworkManager nicht einsetzen.

ip -f inet -br a | awk '$1!="lo" && $2!="DOWN" {print $NF}'

Beide obigen Methoden haben Nachteile: Das ip(8) z.B. bei Point-to-Point-Verbindungen und dem Filtern des Output mit awk/sed/usw. und das nmcli(1) bei nicht mit dem NetworkManager verwalteten Interfaces. Wer das als Gefrickel ansieht, kann sich auch ein Perl-Skript schreiben, das sauber alle Netzwerke auflistet. Die dafür nötigen Module sind über CPAN oder die Paketverwaltung in den Paketen libio-interface-perl und libnet-netmask-perl vorhanden.

#!/usr/bin/env perl
use IO::Interface::Simple;
use Net::Netmask;
for ( IO::Interface::Simple->interfaces ) {
   next if ( !$_->is_running );
   next if ( $_->is_loopback );
   $block = Net::Netmask->new( $_->address, $_->netmask );
   print "$block\n";
}

Um die IP-Adresse statt des Netzes auszugeben, schreibt man folgendes Kommando.

printf "%s/%s", $_->address, $block->bits;

Zenmap

Zuletzt noch ein Beispiel für den Aufruf von zenmap(1), das grafische Nmap frontend.

zenmap --nmap nmap -A `lsip | sort -u`

Siehe auch