mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 21:24:06 +00:00
271 lines
14 KiB
Markdown
271 lines
14 KiB
Markdown
# 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>
|