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

13 KiB
Raw Permalink Blame History

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
{% endhint %}

Основна інформація

З Вікіпедії:

У комп'ютерних технологіях, iSCSI є абревіатурою для Internet Small Computer Systems Interface, стандарту зберігання даних на основі Інтернет-протоколу (IP) для з'єднання сховищ даних. Він забезпечує доступ на рівні блоків до пристроїв зберігання, передаючи команди SCSI через мережу TCP/IP. iSCSI використовується для полегшення передачі даних через інтрамережі та для управління зберіганням на великих відстанях. Його можна використовувати для передачі даних через локальні мережі (LAN), широкомасштабні мережі (WAN) або Інтернет і може забезпечити незалежне від місця зберігання та вилучення даних.

Протокол дозволяє клієнтам (які називаються ініціаторами) надсилати команди SCSI (CDB) до пристроїв зберігання (цілей) на віддалених серверах. Це протокол мережі зберігання (SAN), що дозволяє організаціям консолідувати зберігання в масиви зберігання, одночасно надаючи клієнтам (таким як сервери бази даних і веб-сервери) ілюзію локально підключених дисків SCSI. Він в основному конкурує з Fibre Channel, але на відміну від традиційного Fibre Channel, який зазвичай вимагає спеціального кабелю, iSCSI може працювати на великих відстанях, використовуючи існуючу мережеву інфраструктуру.

Порт за замовчуванням: 3260

PORT     STATE SERVICE VERSION
3260/tcp open  iscsi?

Перерахування

nmap -sV --script=iscsi-info -p 3260 192.168.xx.xx

Цей скрипт вказуватиме, чи потрібна аутентифікація.

Brute force

Mount ISCSI on Linux

Примітка: Ви можете виявити, що коли ваші цілі виявлені, вони перераховані під іншою IP-адресою. Це зазвичай трапляється, якщо служба iSCSI відкрито через NAT або віртуальну IP-адресу. У таких випадках iscsiadmin не зможе підключитися. Це вимагає двох налаштувань: одного для імені каталогу вузла, автоматично створеного вашими діями з виявлення, і одного для файлу default, що міститься в цьому каталозі.

Наприклад, ви намагаєтеся підключитися до цілі iSCSI на 123.123.123.123 на порту 3260. Сервер, що відкриває ціль iSCSI, насправді знаходиться за адресою 192.168.1.2, але відкритий через NAT. isciadm зареєструє внутрішню адресу, а не публічну адресу:

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
[...]

Ця команда створить каталог у вашій файловій системі, як ось цей:

/etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/192.168.1.2\,3260\,1/

У каталозі є файл за замовчуванням з усіма налаштуваннями, необхідними для підключення до цілі.

  1. Перейменуйте /etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/192.168.1.2\,3260\,1/ на /etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/123.123.123.123\,3260\,1/
  2. У /etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/123.123.123.123\,3260\,1/default змініть налаштування node.conn[0].address, щоб вказати на 123.123.123.123 замість 192.168.1.2. Це можна зробити за допомогою команди, такої як 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

Тепер ви можете змонтувати ціль відповідно до інструкцій у посиланні.

Монтування ISCSI на Windows

Ручна енумерація

sudo apt-get install open-iscsi

Приклад з iscsiadm docs:

По-перше, вам потрібно виявити імена цілей за 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

Зверніть увагу, що він покаже IP та порт інтерфейсів, де ви можете досягти цих цілей. Він навіть може показати внутрішні IP-адреси або різні IP-адреси від тієї, яку ви використовували.

Тоді ви захоплюєте 2-гу частину надрукованого рядка кожного рядка (iqn.1992-05.com.emc:fl1001433000190000-3-vnxe з першого рядка) і намагаєтеся увійти:

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.

Тоді ви можете вийти за допомогою 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.

Ми можемо знайти більше інформації про це, просто використовуючи без будь-якого --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

Є скрипт для автоматизації базового процесу перерахунку підмереж, доступний за адресою iscsiadm

Shodan

  • port:3260 AuthMethod

Посилання

{% hint style="success" %} Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks
{% endhint %}