hacktricks/network-services-pentesting/3260-pentesting-iscsi.md
2024-02-11 01:46:25 +00:00

271 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 3260 - Testowanie penetracyjne protokołu iSCSI
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
## Podstawowe informacje
Z [Wikipedii](https://en.wikipedia.org/wiki/ISCSI):
> W informatyce, **iSCSI** to skrót od **Internet Small Computer Systems Interface**, standard oparty na protokole Internet Protocol (IP) do sieciowego przechowywania danych, łączący obiekty przechowywania danych. Zapewnia dostęp na poziomie bloku do urządzeń przechowywania, przesyłając polecenia SCSI przez sieć TCP/IP. iSCSI jest używane do transferu danych w sieciach lokalnych (LAN), sieciach rozległych (WAN) lub w Internecie, umożliwiając niezależne od lokalizacji przechowywanie i pobieranie danych.
>
> Protokół umożliwia klientom (nazywanym inicjatorami) wysyłanie poleceń SCSI (CDB) do urządzeń przechowywania (celów) na zdalnych serwerach. Jest to protokół sieciowej pamięci masowej (SAN), który umożliwia organizacjom konsolidację pamięci masowej w tablicach pamięci, jednocześnie zapewniając klientom (takim jak serwery baz danych i serwery internetowe) iluzję lokalnie podłączonych dysków SCSI. Konkuruje głównie z Fibre Channel, ale w przeciwieństwie do tradycyjnego Fibre Channel, który zwykle wymaga dedykowanego okablowania, iSCSI może być uruchamiane na dużą odległość przy użyciu istniejącej infrastruktury sieciowej.
**Domyślny port:** 3260
```
PORT STATE SERVICE VERSION
3260/tcp open iscsi?
```
## Wyliczanie
### iSCSI
iSCSI (Internet Small Computer System Interface) to protokół komunikacyjny, który umożliwia przesyłanie bloków danych między serwerem a urządzeniem pamięci masowej. Podczas testowania penetracyjnego, wyliczanie iSCSI może dostarczyć cennych informacji na temat systemu docelowego.
#### Skanowanie portów
Aby rozpocząć wyliczanie iSCSI, można rozpocząć od skanowania portów, aby znaleźć otwarte porty iSCSI. Można to zrobić za pomocą narzędzi takich jak Nmap, skanując porty 3260 (domyślny port iSCSI).
```plaintext
nmap -p 3260 <adres_IP_docelowego_systemu>
```
#### Wykorzystanie iscsiadm
Po zidentyfikowaniu otwartego portu iSCSI, można użyć narzędzia iscsiadm do nawiązania połączenia z serwerem iSCSI i uzyskania informacji o dostępnych zasobach.
```plaintext
iscsiadm -m discovery -t sendtargets -p <adres_IP_docelowego_systemu>
```
#### Analiza odpowiedzi
Po wykonaniu powyższej komendy, otrzymamy odpowiedzi zawierające informacje o dostępnych zasobach iSCSI. Możemy przeanalizować te odpowiedzi, aby uzyskać informacje takie jak adresy IP, porty, identyfikatory iSCSI, nazwy zasobów itp.
#### Wykorzystanie iscsiadm do nawiązania połączenia
Po zidentyfikowaniu interesującego nas zasobu iSCSI, możemy użyć narzędzia iscsiadm do nawiązania połączenia z tym zasobem.
```plaintext
iscsiadm -m node -T <identyfikator_iSCSI> -p <adres_IP_docelowego_systemu> -l
```
#### Montowanie zasobu iSCSI
Po nawiązaniu połączenia z zasobem iSCSI, możemy go zamontować na naszym systemie operacyjnym.
```plaintext
mount /dev/sdX /mnt
```
Gdzie `/dev/sdX` to urządzenie iSCSI, które zostało nawiązane, a `/mnt` to ścieżka montowania.
#### Analiza zasobów iSCSI
Po zamontowaniu zasobu iSCSI, możemy przeglądać i analizować zawartość tego zasobu, aby znaleźć cenne informacje lub potencjalne luki w zabezpieczeniach.
### NFS
NFS (Network File System) to protokół umożliwiający udostępnianie plików i katalogów między systemami operacyjnymi w sieci. Podczas testowania penetracyjnego, wyliczanie NFS może dostarczyć informacji na temat dostępnych zasobów NFS i potencjalnych luk w zabezpieczeniach.
#### Skanowanie portów
Aby rozpocząć wyliczanie NFS, można rozpocząć od skanowania portów, aby znaleźć otwarte porty NFS. Można to zrobić za pomocą narzędzi takich jak Nmap, skanując porty 111 i 2049 (domyślne porty NFS).
```plaintext
nmap -p 111,2049 <adres_IP_docelowego_systemu>
```
#### Wykorzystanie showmount
Po zidentyfikowaniu otwartych portów NFS, można użyć polecenia showmount, aby uzyskać informacje na temat dostępnych zasobów NFS.
```plaintext
showmount -e <adres_IP_docelowego_systemu>
```
#### Analiza odpowiedzi
Po wykonaniu powyższej komendy, otrzymamy odpowiedzi zawierające informacje o dostępnych zasobach NFS. Możemy przeanalizować te odpowiedzi, aby uzyskać informacje takie jak ścieżki dostępu, uprawnienia, nazwy zasobów itp.
#### Montowanie zasobu NFS
Po zidentyfikowaniu interesującego nas zasobu NFS, możemy go zamontować na naszym systemie operacyjnym.
```plaintext
mount -t nfs <adres_IP_docelowego_systemu>:<ścieżka_zasobu> /mnt
```
Gdzie `<adres_IP_docelowego_systemu>` to adres IP systemu docelowego, a `<ścieżka_zasobu>` to ścieżka dostępu do zasobu NFS.
#### Analiza zasobów NFS
Po zamontowaniu zasobu NFS, możemy przeglądać i analizować zawartość tego zasobu, aby znaleźć cenne informacje lub potencjalne luki w zabezpieczeniach.
```
nmap -sV --script=iscsi-info -p 3260 192.168.xx.xx
```
Ten skrypt wskaże, czy wymagane jest uwierzytelnienie.
### [Brute force](../generic-methodologies-and-resources/brute-force.md#iscsi)
### [Montowanie ISCSI w systemie Linux](https://www.synology.com/en-us/knowledgebase/DSM/tutorial/Virtualization/How\_to\_set\_up\_and\_use\_iSCSI\_target\_on\_Linux)
**Uwaga:** Może się zdarzyć, że gdy twoje cele zostaną odkryte, zostaną one wymienione pod innym adresem IP. 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 zmian: jednej w nazwie katalogu węzła automatycznie utworzonego podczas działań odkrywania, oraz jednej w pliku `default` znajdującym się w tym katalogu.
Na przykład, próbujesz połączyć się z docelowym iSCSI o adresie 123.123.123.123 na porcie 3260. Serwer wystawiający docelowy iSCSI jest faktycznie pod adresem 192.168.1.2, ale jest wystawiony przez NAT. isciadm zarejestruje adres _wewnętrzny_ zamiast adresu _publicznego_:
```
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 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 pliku `/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 `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`
Teraz można zamontować cel zgodnie z instrukcjami pod linkiem.
### [Zamontuj ISCSI w systemie Windows](https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/ee338476\(v=ws.10\)?redirectedfrom=MSDN)
## **Ręczne wyliczanie**
```bash
sudo apt-get install open-iscsi
```
Przykład z [dokumentacją iscsiadm](https://ptestmethod.readthedocs.io/en/latest/LFF-IPS-P2-VulnerabilityAnalysis.html#iscsiadm):
Po pierwsze, musisz **odkryć nazwę celu** za pomocą adresu IP:
```bash
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
```
_Należy zauważyć, że zostaną wyświetlone I**P i porty interfejsów**, na których można **osiągnąć** te **cele**. Może nawet **pokazać wewnętrzne IP lub inne IP** niż to, które zostało użyte._
Następnie **przechwytujesz drugą część wydrukowanego ciągu znaków z każdej linii** (_iqn.1992-05.com.emc:fl1001433000190000-3-vnxe_ z pierwszej linii) i **próbujesz się zalogować**:
```bash
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`
```bash
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 jedynie **bez** jakichkolwiek parametrów `--login`/`--logout`.
```bash
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 wyliczania podsieci dostępny na** [**iscsiadm**](https://github.com/bitvijays/Pentest-Scripts/tree/master/Vulnerability\_Analysis/isciadm)
## **Shodan**
* `port:3260 AuthMethod`
## **References**
* [https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html](https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html)
* [https://ptestmethod.readthedocs.io/en/latest/LFF-IPS-P2-VulnerabilityAnalysis.html#iscsiadm](https://ptestmethod.readthedocs.io/en/latest/LFF-IPS-P2-VulnerabilityAnalysis.html#iscsiadm)
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>