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

11 KiB
Raw Blame History

3260 - Pentesting ISCSI

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Basic Information

From Wikipedia:

W informatyce, iSCSI to akronim od Internet Small Computer Systems Interface, standard sieciowy oparty na protokole Internetowym (IP) do łączenia zasobów pamięci masowej. Umożliwia dostęp na poziomie bloków do urządzeń pamięci masowej, przesyłając polecenia SCSI przez sieć TCP/IP. iSCSI jest używane do ułatwienia transferów danych przez intranety oraz do zarządzania pamięcią masową na dużych odległościach. Może być używane do przesyłania danych przez sieci lokalne (LAN), sieci rozległe (WAN) lub Internet i może umożliwiać niezależne od lokalizacji przechowywanie i pobieranie danych.

Protokół pozwala klientom (nazywanym inicjatorami) na wysyłanie poleceń SCSI (CDB) do urządzeń pamięci masowej (celów) na zdalnych serwerach. Jest to protokół sieci pamięci masowej (SAN), który pozwala organizacjom na konsolidację pamięci masowej w macierze pamięci masowej, jednocześnie zapewniając klientom (takim jak serwery baz danych i serwery internetowe) iluzję lokalnie podłączonych dysków SCSI. Głównie konkuruje z Fibre Channel, ale w przeciwieństwie do tradycyjnego Fibre Channel, który zazwyczaj wymaga dedykowanego okablowania, iSCSI może być uruchamiane na dużych odległościach, wykorzystując istniejącą infrastrukturę sieciową.

Default port: 3260

PORT     STATE SERVICE VERSION
3260/tcp open  iscsi?

Enumeracja

nmap -sV --script=iscsi-info -p 3260 192.168.xx.xx

Ten skrypt wskaże, czy wymagana jest autoryzacja.

Brute force

Zamontuj ISCSI na Linuxie

Uwaga: Możesz zauważyć, że gdy twoje cele zostaną odkryte, są one wymienione pod innym adresem IP. Zwykle zdarza się to, gdy usługa iSCSI jest wystawiona przez NAT lub wirtualny adres IP. W takich przypadkach iscsiadmin nie będzie w stanie się połączyć. Wymaga to dwóch poprawek: jednej do nazwy katalogu węzła automatycznie utworzonego przez twoje działania odkrywcze oraz jednej do pliku default znajdującego się w tym katalogu.

Na przykład, próbujesz połączyć się z celem iSCSI na 123.123.123.123 na porcie 3260. Serwer wystawiający cel iSCSI znajduje się w rzeczywistości pod adresem 192.168.1.2, ale jest wystawiony przez NAT. isciadm zarejestruje adres wewnętrzny zamiast publicznego adresu:

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
[...]

To polecenie utworzy katalog w twoim systemie plików w ten sposób:

/etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/192.168.1.2\,3260\,1/

W katalogu znajduje się domyślny plik z wszystkimi ustawieniami niezbędnymi do połączenia z celem.

  1. Zmień nazwę /etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/192.168.1.2\,3260\,1/ na /etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/123.123.123.123\,3260\,1/
  2. W /etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/123.123.123.123\,3260\,1/default, zmień ustawienie node.conn[0].address, aby wskazywało na 123.123.123.123 zamiast 192.168.1.2. Można to zrobić za pomocą polecenia takiego jak 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

Możesz teraz zamontować cel zgodnie z instrukcjami w linku.

Zamontuj ISCSI na Windows

Ręczna enumeracja

sudo apt-get install open-iscsi

Przede wszystkim musisz odkryć nazwy celów za adresem 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

Note that it will show the IP and port of the interfaces where you can reach those targets. It can even show internal IPs or different IPs from the one you used.

Następnie złap drugą część wydrukowanego ciągu z każdej linii (iqn.1992-05.com.emc:fl1001433000190000-3-vnxe z pierwszej linii) i spróbuj się zalogować:

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.

Następnie możesz wylogować się używając 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.

Możemy znaleźć więcej informacji na ten temat, używając bez żadnego parametru --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

Istnieje skrypt do automatyzacji podstawowego procesu enumeracji podsieci dostępny pod iscsiadm

Shodan

  • port:3260 AuthMethod

Referencje

{% hint style="success" %} Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie dla HackTricks
{% endhint %}