hacktricks/network-services-pentesting/3260-pentesting-iscsi.md
2023-06-03 13:10:46 +00:00

9.9 KiB
Raw Blame History

Informations de base

En informatique, iSCSI est un acronyme pour Internet Small Computer Systems Interface, une norme de réseau de stockage basée sur le protocole Internet (IP) pour relier les installations de stockage de données. Il fournit un accès de niveau bloc 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 les 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 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 (CDB) aux 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 matrices 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 concurrence principalement Fibre Channel, mais contrairement à 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 de 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

Monter ISCSI sur Linux

Remarque: 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 adresse IP virtuelle. Dans de tels cas, iscsiadmin échouera à se connecter. Cela nécessite deux ajustements: l'un au nom de répertoire du nœud créé automatiquement par vos activités de découverte, et l'autre au 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 pointer 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 du lien.

Monter ISCSI sur Windows

Énumération manuelle

sudo apt-get install open-iscsi

Tout d'abord, vous devez découvrir le nom des cibles derrière l'adresse 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 que cela affichera l'adresse IP et le port des interfaces où vous pouvez atteindre ces cibles. Il peut même afficher des adresses IP internes ou différentes de celle que vous avez utilisée.

Ensuite, vous attrapez la deuxiè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

Shodan

  • port:3260 AuthMethod

Références

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

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
  • Il existe un script pour automatiser le processus d'énumération de sous-réseau de base disponible sur iscsiadm

  • Travaillez-vous dans une entreprise de cybersécurité? Voulez-vous voir votre entreprise annoncée dans HackTricks? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF? Consultez les PLANS D'ABONNEMENT!

  • Découvrez The PEASS Family, notre collection exclusive de NFT

  • Obtenez le swag officiel PEASS & HackTricks

  • Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-moi sur Twitter 🐦@carlospolopm.

  • Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et hacktricks-cloud.