11 KiB
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
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
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.
- 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/
- W
/etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/123.123.123.123\,3260\,1/default
, zmień ustawienienode.conn[0].address
, aby wskazywało na 123.123.123.123 zamiast 192.168.1.2. Można to zrobić za pomocą polecenia takiego jaksed -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
- https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html
- https://ptestmethod.readthedocs.io/en/latest/LFF-IPS-P2-VulnerabilityAnalysis.html#iscsiadm
{% 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
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.