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

11 KiB
Raw Blame History

3260 - Pentesting ISCSI

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres moyens de soutenir HackTricks :

Informations de base

En informatique, iSCSI est l'acronyme de Internet Small Computer Systems Interface, une norme de 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 transmettant des commandes SCSI sur un réseau TCP/IP. L'iSCSI est utilisé pour faciliter les transferts de données sur les intranets et pour gérer le stockage à 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 le stockage et la récupération de données indépendamment de l'emplacement.

Le protocole permet aux clients (appelés initiateurs) d'envoyer des commandes SCSI (CDBs) à des dispositifs de stockage (cibles) sur des serveurs distants. C'est un protocole de réseau de zone de stockage (SAN), permettant aux organisations de consolider le stockage dans des tableaux de stockage tout en fournissant aux clients (tels que les serveurs de bases de données et web) l'illusion de disques SCSI attachés localement. Il est principalement en concurrence avec Fibre Channel, mais contrairement au Fibre Channel traditionnel qui nécessite généralement un câblage dédié, l'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.

Force brute

Monter ISCSI sur Linux

Note : Vous pouvez constater que lorsque vos cibles sont découvertes, elles sont répertoriées sous une adresse IP différente. Cela se produit souvent si le service iSCSI est exposé via NAT ou une IP virtuelle. Dans des cas comme ceux-ci, iscsiadmin échouera à se connecter. Cela nécessite deux ajustements : un pour le nom du répertoire du nœud automatiquement créé 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 va créer 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 comme indiqué dans le lien.

Monter ISCSI sur Windows

Énumération manuelle

sudo apt-get install open-iscsi

Tout d'abord, vous devez découvrir le nom de la cible derrière l'IP :

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

Notez qu'il affichera l'IP et le port des interfaces où vous pouvez atteindre ces cibles. Il peut même afficher des IP internes ou différentes IP de celle que vous avez utilisée.

Ensuite, vous capturez 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 :

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 vous déconnecter en utilisant logout

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

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éseaux disponible sur iscsiadm

Shodan

  • port:3260 AuthMethod

Références

{% embed url="https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html" %}

Apprenez le hacking AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres moyens de soutenir HackTricks :