hacktricks/network-services-pentesting/3260-pentesting-iscsi.md

189 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 3260 - Pentesting ISCSI
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
## Grundinformationen
Von [Wikipedia](https://en.wikipedia.org/wiki/ISCSI):
> 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.
### [Brute force](../generic-methodologies-and-resources/brute-force.md#iscsi)
### [Mount ISCSI auf Linux](https://www.synology.com/en-us/knowledgebase/DSM/tutorial/Virtualization/How\_to\_set\_up\_and\_use\_iSCSI\_target\_on\_Linux)
**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.
### [ISCSI unter Windows einbinden](https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/ee338476\(v=ws.10\)?redirectedfrom=MSDN)
## **Manuelle Aufzählung**
```bash
sudo apt-get install open-iscsi
```
Beispiel aus den [iscsiadm-Dokumenten](https://ptestmethod.readthedocs.io/en/latest/LFF-IPS-P2-VulnerabilityAnalysis.html#iscsiadm):
Zuerst müssen Sie die **Zielnamen** hinter der IP entdecken:
```bash
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 I**P 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**:
```bash
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.
```bash
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.
```bash
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**](https://github.com/bitvijays/Pentest-Scripts/tree/master/Vulnerability\_Analysis/isciadm)
## **Shodan**
* `port:3260 AuthMethod`
## **Referenzen**
* [https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html](https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html)
* [https://ptestmethod.readthedocs.io/en/latest/LFF-IPS-P2-VulnerabilityAnalysis.html#iscsiadm](https://ptestmethod.readthedocs.io/en/latest/LFF-IPS-P2-VulnerabilityAnalysis.html#iscsiadm)
{% hint style="success" %}
Lernen & üben Sie AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Lernen & üben Sie GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Unterstützen Sie HackTricks</summary>
* Überprüfen Sie die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Teilen Sie Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos senden.
</details>
{% endhint %}