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

272 lines
14 KiB
Markdown
Raw Normal View History

2024-02-11 01:46:25 +00:00
# 3260 - Testowanie penetracyjne protokołu iSCSI
2022-04-28 16:01:33 +00:00
<details>
2024-02-11 01:46:25 +00:00
<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>
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
Inne sposoby wsparcia HackTricks:
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
* 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.
2022-04-28 16:01:33 +00:00
</details>
2024-02-11 01:46:25 +00:00
## Podstawowe informacje
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
Z [Wikipedii](https://en.wikipedia.org/wiki/ISCSI):
2024-02-08 21:36:35 +00:00
2024-02-11 01:46:25 +00:00
> 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.
>
2024-02-11 01:46:25 +00:00
> 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.
2024-02-11 01:46:25 +00:00
**Domyślny port:** 3260
2022-05-01 13:25:53 +00:00
```
PORT STATE SERVICE VERSION
3260/tcp open iscsi?
```
2024-02-11 01:46:25 +00:00
## 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
2024-02-11 01:46:25 +00:00
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).
2024-02-11 01:46:25 +00:00
```plaintext
nmap -p 3260 <adres_IP_docelowego_systemu>
2022-05-01 13:25:53 +00:00
```
2024-02-11 01:46:25 +00:00
#### 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>
```
2024-02-11 01:46:25 +00:00
#### Analiza odpowiedzi
2024-02-11 01:46:25 +00:00
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.
2024-02-11 01:46:25 +00:00
#### Wykorzystanie iscsiadm do nawiązania połączenia
2024-02-11 01:46:25 +00:00
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
```
2021-01-15 09:05:40 +00:00
2024-02-11 01:46:25 +00:00
#### Montowanie zasobu iSCSI
2021-01-15 09:05:40 +00:00
2024-02-11 01:46:25 +00:00
Po nawiązaniu połączenia z zasobem iSCSI, możemy go zamontować na naszym systemie operacyjnym.
```plaintext
mount /dev/sdX /mnt
2022-05-01 13:25:53 +00:00
```
2024-02-11 01:46:25 +00:00
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>
2021-01-15 09:05:40 +00:00
```
2024-02-11 01:46:25 +00:00
#### Wykorzystanie showmount
2024-02-11 01:46:25 +00:00
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>
2022-05-01 13:25:53 +00:00
```
2024-02-11 01:46:25 +00:00
#### 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
2021-01-15 09:05:40 +00:00
```
2024-02-11 01:46:25 +00:00
Gdzie `<adres_IP_docelowego_systemu>` to adres IP systemu docelowego, a `<ścieżka_zasobu>` to ścieżka dostępu do zasobu NFS.
2021-01-15 09:05:40 +00:00
2024-02-11 01:46:25 +00:00
#### Analiza zasobów NFS
2021-01-15 09:05:40 +00:00
2024-02-11 01:46:25 +00:00
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.
2021-01-15 09:05:40 +00:00
2024-02-11 01:46:25 +00:00
### [Brute force](../generic-methodologies-and-resources/brute-force.md#iscsi)
2024-02-11 01:46:25 +00:00
### [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)
2024-02-11 01:46:25 +00:00
**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:
```
2024-02-11 01:46:25 +00:00
/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.
2024-02-11 01:46:25 +00:00
### [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)
2024-02-08 21:36:35 +00:00
2024-02-11 01:46:25 +00:00
## **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):
2024-02-11 01:46:25 +00:00
Po pierwsze, musisz **odkryć nazwę celu** za pomocą adresu IP:
2024-02-08 21:36:35 +00:00
```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
```
2024-02-11 01:46:25 +00:00
_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._
2024-02-11 01:46:25 +00:00
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.
```
2024-02-11 01:46:25 +00:00
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.
```
2024-02-11 01:46:25 +00:00
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
```
2024-02-11 01:46:25 +00:00
**Istnieje skrypt do automatyzacji podstawowego procesu wyliczania podsieci dostępny na** [**iscsiadm**](https://github.com/bitvijays/Pentest-Scripts/tree/master/Vulnerability\_Analysis/isciadm)
2020-09-18 11:59:55 +00:00
2022-05-01 13:25:53 +00:00
## **Shodan**
2020-09-18 11:59:55 +00:00
* `port:3260 AuthMethod`
2022-05-01 13:25:53 +00:00
## **References**
2022-04-28 16:01:33 +00:00
2024-02-08 21:36:35 +00:00
* [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)
2022-04-28 16:01:33 +00:00
<details>
2024-02-11 01:46:25 +00:00
<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>
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
Inne sposoby wsparcia HackTricks:
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
* 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.
2022-04-28 16:01:33 +00:00
</details>