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

162 lines
8.8 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
{{#include ../banners/hacktricks-training.md}}
## Informations de base
De [Wikipedia](https://en.wikipedia.org/wiki/ISCSI):
> En informatique, **iSCSI** est un acronyme pour **Internet Small Computer Systems Interface**, une norme de mise en réseau de stockage basée sur le protocole Internet (IP) pour relier des installations de stockage de données. Il fournit un accès au niveau des blocs aux dispositifs de stockage en transportant des commandes SCSI sur un réseau TCP/IP. iSCSI est utilisé pour faciliter les transferts de données sur des intranets et pour gérer le stockage sur de longues distances. Il peut être utilisé pour transmettre des données sur des réseaux locaux (LAN), des réseaux étendus (WAN) ou Internet et peut permettre un stockage et une récupération de données indépendants de l'emplacement.
>
> Le protocole permet aux clients (appelés initiateurs) d'envoyer des commandes SCSI (CDB) à des dispositifs de stockage (cibles) sur des serveurs distants. C'est un protocole de réseau de stockage (SAN), permettant aux organisations de consolider le stockage dans des ensembles de stockage tout en fournissant aux clients (tels que les serveurs de bases de données et les serveurs web) l'illusion de disques SCSI attachés localement. Il concurrence principalement le Fibre Channel, mais contrairement au Fibre Channel traditionnel qui nécessite généralement un câblage dédié, iSCSI peut être exécuté sur de longues distances en utilisant l'infrastructure réseau existante.
**Port par défaut :** 3260
```
PORT STATE SERVICE VERSION
3260/tcp open iscsi?
```
## Énumération
```
nmap -sV --script=iscsi-info -p 3260 192.168.xx.xx
```
Ce script indiquera si une authentification est requise.
### [Brute force](../generic-hacking/brute-force.md#iscsi)
### [Monter ISCSI sur Linux](https://www.synology.com/en-us/knowledgebase/DSM/tutorial/Virtualization/How_to_set_up_and_use_iSCSI_target_on_Linux)
**Remarque :** Vous pouvez constater que lorsque vos cibles sont découvertes, elles sont répertoriées sous une adresse IP différente. Cela a tendance à se produire si le service iSCSI est exposé via NAT ou une IP virtuelle. Dans de tels cas, `iscsiadmin` échouera à se connecter. Cela nécessite deux ajustements : un pour le nom de répertoire du nœud créé automatiquement par vos activités de découverte, et un pour le fichier `default` contenu dans ce répertoire.
Par exemple, vous essayez de vous connecter à une cible iSCSI sur 123.123.123.123 au port 3260. Le serveur exposant la cible iSCSI est en réalité à 192.168.1.2 mais exposé via NAT. isciadm enregistrera l'adresse _interne_ plutôt que l'adresse _publique_ :
```
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
[...]
```
Cette commande créera un répertoire dans votre système de fichiers comme ceci :
```
/etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/192.168.1.2\,3260\,1/
```
Dans le répertoire, il y a un fichier par défaut avec tous les paramètres nécessaires pour se connecter à la cible.
1. Renommez `/etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/192.168.1.2\,3260\,1/` en `/etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/123.123.123.123\,3260\,1/`
2. Dans `/etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/123.123.123.123\,3260\,1/default`, changez le paramètre `node.conn[0].address` pour qu'il pointe vers 123.123.123.123 au lieu de 192.168.1.2. Cela peut être fait avec une commande telle que `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`
Vous pouvez maintenant monter la cible selon les instructions dans le lien.
### [Monter ISCSI sur Windows](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/ee338476(v=ws.10)?redirectedfrom=MSDN>)
## **Énumération manuelle**
```bash
sudo apt-get install open-iscsi
```
Tout d'abord, vous devez **découvrir les noms des cibles** derrière 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
```
_Remarque qu'il affichera l'I**P et le port des interfaces** où vous pouvez **atteindre** ces **cibles**. Il peut même **afficher des IP internes ou des IP différentes** de celle que vous avez utilisée._
Ensuite, vous **attrapez la 2ème partie de la chaîne imprimée de chaque ligne** (_iqn.1992-05.com.emc:fl1001433000190000-3-vnxe_ de la première ligne) et **essayez de vous connecter** :
```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.
```
Ensuite, vous pouvez **logout** en utilisant `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.
```
Nous pouvons trouver **plus d'informations** à ce sujet en utilisant simplement **sans** aucun paramètre `--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 = <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
```
**Il existe un script pour automatiser le processus de base d'énumération de sous-réseau disponible sur** [**iscsiadm**](https://github.com/bitvijays/Pentest-Scripts/tree/master/Vulnerability_Analysis/isciadm)
## **Shodan**
- `port:3260 AuthMethod`
## **Références**
- [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)
{{#include ../banners/hacktricks-training.md}}