3260 - Pentesting ISCSI

Support HackTricks

Grundinformationen

Von Wikipedia:

In der Informatik ist iSCSI ein Akronym für Internet Small Computer Systems Interface, einen auf dem Internetprotokoll (IP) basierenden Speicher-Netzwerkstandard zur Verbindung von Datenspeichereinrichtungen. Es bietet blockbasierten Zugriff auf Speichergeräte, indem SCSI-Befehle über ein TCP/IP-Netzwerk übertragen werden. iSCSI wird verwendet, um Datentransfers über Intranets zu erleichtern und um Speicher über große Entfernungen zu verwalten. Es kann verwendet werden, um Daten über lokale Netzwerke (LANs), Weitverkehrsnetze (WANs) oder das Internet zu übertragen und kann standortunabhängigen Datenspeicher und -abruf ermöglichen.

Das Protokoll ermöglicht es Clients (genannt Initiatoren), SCSI-Befehle (CDBs) an Speichergeräte (Ziele) auf entfernten Servern zu senden. Es ist ein Protokoll für Speicherbereichsnetzwerke (SAN), das es Organisationen ermöglicht, Speicher in Speicher-Arrays zu konsolidieren, während es Clients (wie Datenbank- und Webserver) die Illusion von lokal angeschlossenen SCSI-Disketten bietet. Es konkurriert hauptsächlich mit Fibre Channel, aber im Gegensatz zu traditionellem Fibre Channel, das normalerweise dedizierte Verkabelung erfordert, kann iSCSI über große Entfernungen unter Verwendung bestehender Netzwerk-Infrastruktur betrieben werden.

Standardport: 3260

PORT     STATE SERVICE VERSION
3260/tcp open  iscsi?

Aufzählung

nmap -sV --script=iscsi-info -p 3260 192.168.xx.xx

Dieses Skript zeigt an, ob eine Authentifizierung erforderlich ist.

Hinweis: Sie stellen möglicherweise fest, dass Ihre Ziele unter einer anderen IP-Adresse aufgeführt sind, wenn sie entdeckt werden. Dies passiert häufig, wenn der iSCSI-Dienst über NAT oder eine virtuelle IP exponiert ist. In solchen Fällen wird iscsiadmin nicht erfolgreich eine Verbindung herstellen. Dies erfordert zwei Anpassungen: eine am Verzeichnisnamen des automatisch von Ihren Entdeckungsaktivitäten erstellten Knotens und eine an der default-Datei, die sich in diesem Verzeichnis befindet.

Zum Beispiel versuchen Sie, eine Verbindung zu einem iSCSI-Ziel unter 123.123.123.123 am Port 3260 herzustellen. Der Server, der das iSCSI-Ziel exponiert, befindet sich tatsächlich unter 192.168.1.2, wird jedoch über NAT exponiert. isciadm wird die interne Adresse anstelle der öffentlichen Adresse registrieren:

iscsiadm -m discovery -t sendtargets -p 123.123.123.123:3260
192.168.1.2:3260,1 iqn.1992-05.com.emc:fl1001433000190000-3-vnxe
[...]

Dieser Befehl erstellt ein Verzeichnis in Ihrem Dateisystem wie folgt:

/etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/192.168.1.2\,3260\,1/

Innerhalb des Verzeichnisses gibt es eine Standarddatei mit allen Einstellungen, die erforderlich sind, um eine Verbindung zum Ziel herzustellen.

  1. Benennen Sie /etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/192.168.1.2\,3260\,1/ in /etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/123.123.123.123\,3260\,1/ um.

  2. Ändern Sie innerhalb von /etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/123.123.123.123\,3260\,1/default die Einstellung node.conn[0].address, um auf 123.123.123.123 anstelle von 192.168.1.2 zu verweisen. Dies kann mit einem Befehl wie sed -i 's/192.168.1.2/123.123.123.123/g' /etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/123.123.123.123\,3260\,1/default durchgeführt werden.

Sie können das Ziel jetzt gemäß den Anweisungen im Link einbinden.

Manuelle Aufzählung

sudo apt-get install open-iscsi

Beispiel aus den iscsiadm-Dokumenten:

Zuerst müssen Sie die Zielnamen hinter der IP entdecken:

iscsiadm -m discovery -t sendtargets -p 123.123.123.123:3260
123.123.123.123:3260,1 iqn.1992-05.com.emc:fl1001433000190000-3-vnxe
[2a01:211:7b7:1223:211:32ff:fea9:fab9]:3260,1 iqn.2000-01.com.synology:asd3.Target-1.d0280fd382
[fe80::211:3232:fab9:1223]:3260,1 iqn.2000-01.com.synology:Oassdx.Target-1.d0280fd382

Beachten Sie, dass die IP und den Port der Schnittstellen angezeigt werden, über die Sie diese Ziele erreichen können. Es kann sogar interne IPs oder andere IPs anzeigen als die, die Sie verwendet haben.

Dann fangen Sie den 2. Teil des gedruckten Strings jeder Zeile (iqn.1992-05.com.emc:fl1001433000190000-3-vnxe aus der ersten Zeile) und versuchen Sie sich anzumelden:

iscsiadm -m node --targetname="iqn.1992-05.com.emc:fl1001433000190000-3-vnxe" -p 123.123.123.123:3260 --login
Logging in to [iface: default, target: iqn.1992-05.com.emc:fl1001433000190000-3-vnxe, portal: 123.123.123.123,3260] (multiple)
Login to [iface: default, target: iqn.1992-05.com.emc:fl1001433000190000-3-vnxe, portal: 123.123.123.123,3260] successful.

Dann können Sie logout mit –logout verwenden.

iscsiadm -m node --targetname="iqn.1992-05.com.emc:fl1001433000190000-3-vnxe" -p 123.123.123.123:3260 --logout
Logging out of session [sid: 6, target: iqn.1992-05.com.emc:fl1001433000190000-3-vnxe, portal: 123.123.123.123,3260]
Logout of [sid: 6, target: iqn.1992-05.com.emc:fl1001433000190000-3-vnxe, portal: 123.123.123.123,3260] successful.

Wir können mehr Informationen darüber finden, indem wir einfach ohne irgendeinen --login/--logout Parameter verwenden.

iscsiadm -m node --targetname="iqn.1992-05.com.emc:fl1001433000190000-3-vnxe" -p 123.123.123.123:3260
# BEGIN RECORD 2.0-873
node.name = iqn.1992-05.com.emc:fl1001433000190000-3-vnxe
node.tpgt = 1
node.startup = manual
node.leading_login = No
iface.hwaddress = <empty>
iface.ipaddress = <empty>
iface.iscsi_ifacename = default
iface.net_ifacename = <empty>
iface.transport_name = tcp
iface.initiatorname = <empty>
iface.bootproto = <empty>
iface.subnet_mask = <empty>
iface.gateway = <empty>
iface.ipv6_autocfg = <empty>
iface.linklocal_autocfg = <empty>
iface.router_autocfg = <empty>
iface.ipv6_linklocal = <empty>
iface.ipv6_router = <empty>
iface.state = <empty>
iface.vlan_id = 0
iface.vlan_priority = 0
iface.vlan_state = <empty>
iface.iface_num = 0
iface.mtu = 0
iface.port = 0
node.discovery_address = 192.168.xx.xx
node.discovery_port = 3260
node.discovery_type = send_targets
node.session.initial_cmdsn = 0
node.session.initial_login_retry_max = 8
node.session.xmit_thread_priority = -20
node.session.cmds_max = 128
node.session.queue_depth = 32
node.session.nr_sessions = 1
node.session.auth.authmethod = None
node.session.auth.username = <empty>
node.session.auth.password = <empty>
node.session.auth.username_in = <empty>
node.session.auth.password_in = <empty>
node.session.timeo.replacement_timeout = 120
node.session.err_timeo.abort_timeout = 15
node.session.err_timeo.lu_reset_timeout = 30
node.session.err_timeo.tgt_reset_timeout = 30
node.session.err_timeo.host_reset_timeout = 60
node.session.iscsi.FastAbort = Yes
node.session.iscsi.InitialR2T = No
node.session.iscsi.ImmediateData = Yes
node.session.iscsi.FirstBurstLength = 262144
node.session.iscsi.MaxBurstLength = 16776192
node.session.iscsi.DefaultTime2Retain = 0
node.session.iscsi.DefaultTime2Wait = 2
node.session.iscsi.MaxConnections = 1
node.session.iscsi.MaxOutstandingR2T = 1
node.session.iscsi.ERL = 0
node.conn[0].address = 192.168.xx.xx
node.conn[0].port = 3260
node.conn[0].startup = manual
node.conn[0].tcp.window_size = 524288
node.conn[0].tcp.type_of_service = 0
node.conn[0].timeo.logout_timeout = 15
node.conn[0].timeo.login_timeout = 15
node.conn[0].timeo.auth_timeout = 45
node.conn[0].timeo.noop_out_interval = 5
node.conn[0].timeo.noop_out_timeout = 5
node.conn[0].iscsi.MaxXmitDataSegmentLength = 0
node.conn[0].iscsi.MaxRecvDataSegmentLength = 262144
node.conn[0].iscsi.HeaderDigest = None
node.conn[0].iscsi.DataDigest = None
node.conn[0].iscsi.IFMarker = No
node.conn[0].iscsi.OFMarker = No
# END RECORD

Es gibt ein Skript zur Automatisierung des grundlegenden Subnetz-Enumerationsprozesses, das verfügbar ist unter iscsiadm

Shodan

  • port:3260 AuthMethod

Referenzen

Unterstützen Sie HackTricks

Last updated