3260 - Pentesting ISCSI
Reading time: 6 minutes
tip
Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Wsparcie 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.
Podstawowe informacje
Z Wikipedia:
W informatyce, iSCSI to akronim od Internet Small Computer Systems Interface, standardu sieciowego do przechowywania danych opartego na protokole Internetowym (IP) do łączenia urządzeń do przechowywania danych. 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ą 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ć przechowywanie i pobieranie danych niezależnie od lokalizacji.
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 w macierzach pamięci, 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ą.
Domyślny 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.
Mount ISCSI on 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
Uwaga, że pokaże to IP i port interfejsów, gdzie możesz dotrzeć do tych celów. Może nawet pokazać wewnętrzne IP lub różne IP od tego, którego użyłeś.
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, po prostu 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 w 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
tip
Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Wsparcie 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.