# 3260 - Pentesting ISCSI
{% hint style="success" %}
Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* 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.
{% endhint %}
## Informazioni di base
Da [Wikipedia](https://en.wikipedia.org/wiki/ISCSI):
> In informatica, **iSCSI** è un acronimo per **Internet Small Computer Systems Interface**, uno standard di rete di archiviazione basato su protocollo Internet (IP) per collegare strutture di archiviazione dati. Fornisce accesso a livello di blocco ai dispositivi di archiviazione trasmettendo comandi SCSI su una rete TCP/IP. iSCSI è utilizzato per facilitare il trasferimento di dati su intranet e per gestire l'archiviazione su lunghe distanze. Può essere utilizzato per trasmettere dati su reti locali (LAN), reti geografiche (WAN) o su Internet e può abilitare l'archiviazione e il recupero dei dati indipendentemente dalla posizione.
>
> Il protocollo consente ai client (chiamati iniziatori) di inviare comandi SCSI (CDB) ai dispositivi di archiviazione (target) su server remoti. È un protocollo di rete di archiviazione (SAN), che consente alle organizzazioni di consolidare l'archiviazione in array di archiviazione fornendo ai client (come server di database e web) l'illusione di dischi SCSI collegati localmente. Compete principalmente con Fibre Channel, ma a differenza del tradizionale Fibre Channel che di solito richiede cablaggio dedicato, iSCSI può essere eseguito su lunghe distanze utilizzando l'infrastruttura di rete esistente.
**Porta predefinita:** 3260
```
PORT STATE SERVICE VERSION
3260/tcp open iscsi?
```
## Enumerazione
```
nmap -sV --script=iscsi-info -p 3260 192.168.xx.xx
```
Questo script indicherà se è necessaria l'autenticazione.
### [Brute force](../generic-methodologies-and-resources/brute-force.md#iscsi)
### [Mount ISCSI su Linux](https://www.synology.com/en-us/knowledgebase/DSM/tutorial/Virtualization/How\_to\_set\_up\_and\_use\_iSCSI\_target\_on\_Linux)
**Nota:** Potresti scoprire che quando i tuoi obiettivi vengono trovati, sono elencati sotto un indirizzo IP diverso. Questo tende a succedere se il servizio iSCSI è esposto tramite NAT o un IP virtuale. In casi come questi, `iscsiadmin` non riuscirà a connettersi. Questo richiede due modifiche: una al nome della directory del nodo creato automaticamente dalle tue attività di scoperta e una al file `default` contenuto all'interno di questa directory.
Ad esempio, stai cercando di connetterti a un obiettivo iSCSI su 123.123.123.123 alla porta 3260. Il server che espone l'obiettivo iSCSI si trova effettivamente su 192.168.1.2 ma è esposto tramite NAT. isciadm registrerà l'indirizzo _interno_ piuttosto che l'indirizzo _pubblico_:
```
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
[...]
```
Questo comando creerà una directory nel tuo filesystem in questo modo:
```
/etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/192.168.1.2\,3260\,1/
```
All'interno della directory, c'è un file predefinito con tutte le impostazioni necessarie per connettersi al target.
1. Rinomina `/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/`
2. All'interno di `/etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/123.123.123.123\,3260\,1/default`, cambia l'impostazione `node.conn[0].address` per puntare a 123.123.123.123 invece di 192.168.1.2. Questo può essere fatto con un comando come `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`
Ora puoi montare il target secondo le istruzioni nel link.
### [Mount ISCSI on Windows](https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/ee338476\(v=ws.10\)?redirectedfrom=MSDN)
## **Enumerazione manuale**
```bash
sudo apt-get install open-iscsi
```
Esempio dalla [documentazione di iscsiadm](https://ptestmethod.readthedocs.io/en/latest/LFF-IPS-P2-VulnerabilityAnalysis.html#iscsiadm):
Prima di tutto è necessario **scoprire i nomi dei target** dietro l'IP:
```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
```
_Nota che mostrerà l'I**P e la porta delle interfacce** dove puoi **raggiungere** quegli **obiettivi**. Può persino **mostrare IP interni o IP diversi** da quello che hai usato._
Poi **cattura la 2ª parte della stringa stampata di ogni riga** (_iqn.1992-05.com.emc:fl1001433000190000-3-vnxe_ dalla prima riga) e **prova a effettuare il login**:
```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.
```
Poi, puoi **logout** usando `–logout`
```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.
```
Possiamo trovare **ulteriori informazioni** su di esso semplicemente utilizzando **senza** alcun parametro `--login`/`--logout`
```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 =
iface.ipaddress =
iface.iscsi_ifacename = default
iface.net_ifacename =
iface.transport_name = tcp
iface.initiatorname =
iface.bootproto =
iface.subnet_mask =
iface.gateway =
iface.ipv6_autocfg =
iface.linklocal_autocfg =
iface.router_autocfg =
iface.ipv6_linklocal =
iface.ipv6_router =
iface.state =
iface.vlan_id = 0
iface.vlan_priority = 0
iface.vlan_state =
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 =
node.session.auth.password =
node.session.auth.username_in =
node.session.auth.password_in =
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
```
**C'è uno script per automatizzare il processo di enumerazione di base delle subnet disponibile su** [**iscsiadm**](https://github.com/bitvijays/Pentest-Scripts/tree/master/Vulnerability\_Analysis/isciadm)
## **Shodan**
* `port:3260 AuthMethod`
## **Riferimenti**
* [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" %}
Impara e pratica il hacking AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Impara e pratica il hacking GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Supporta HackTricks
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos su github.
{% endhint %}