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

162 lines
8.7 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 - Pentesting ISCSI
{{#include ../banners/hacktricks-training.md}}
## 기본 정보
From [Wikipedia](https://en.wikipedia.org/wiki/ISCSI):
> In computing, **iSCSI**는 **Internet Small Computer Systems Interface**의 약자로, 데이터 저장 시설을 연결하기 위한 인터넷 프로토콜(IP) 기반의 스토리지 네트워킹 표준입니다. SCSI 명령을 TCP/IP 네트워크를 통해 전송하여 스토리지 장치에 블록 수준 액세스를 제공합니다. iSCSI는 인트라넷을 통한 데이터 전송을 용이하게 하고 장거리에서 스토리지를 관리하는 데 사용됩니다. 로컬 영역 네트워크(LAN), 광역 네트워크(WAN) 또는 인터넷을 통해 데이터를 전송할 수 있으며, 위치에 독립적인 데이터 저장 및 검색을 가능하게 합니다.
>
> 이 프로토콜은 클라이언트(initiators라고 함)가 원격 서버의 스토리지 장치(targets)에 SCSI 명령(CDBs)을 전송할 수 있도록 합니다. 이는 스토리지 영역 네트워크(SAN) 프로토콜로, 조직이 스토리지를 스토리지 배열로 통합하면서 데이터베이스 및 웹 서버와 같은 클라이언트에 로컬에 연결된 SCSI 디스크의 환상을 제공합니다. 주로 파이버 채널과 경쟁하지만, 전통적인 파이버 채널은 일반적으로 전용 케이블링이 필요한 반면, iSCSI는 기존 네트워크 인프라를 사용하여 장거리에서 실행할 수 있습니다.
**기본 포트:** 3260
```
PORT STATE SERVICE VERSION
3260/tcp open iscsi?
```
## 열거
```
nmap -sV --script=iscsi-info -p 3260 192.168.xx.xx
```
이 스크립트는 인증이 필요한지 여부를 나타냅니다.
### [Brute force](../generic-hacking/brute-force.md#iscsi)
### [Mount ISCSI on Linux](https://www.synology.com/en-us/knowledgebase/DSM/tutorial/Virtualization/How_to_set_up_and_use_iSCSI_target_on_Linux)
**참고:** 타겟이 발견될 때 다른 IP 주소 아래에 나열될 수 있습니다. 이는 iSCSI 서비스가 NAT 또는 가상 IP를 통해 노출될 때 발생하는 경향이 있습니다. 이러한 경우 `iscsiadmin`은 연결에 실패합니다. 이는 발견 활동에 의해 자동으로 생성된 노드의 디렉토리 이름과 이 디렉토리에 포함된 `default` 파일에 대한 두 가지 조정이 필요합니다.
예를 들어, 123.123.123.123의 포트 3260에서 iSCSI 타겟에 연결하려고 합니다. 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` 설정을 192.168.1.2 대신 123.123.123.123를 가리키도록 변경합니다. 이는 `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`와 같은 명령으로 수행할 수 있습니다.
이제 링크의 지침에 따라 대상을 마운트할 수 있습니다.
### [Windows에서 ISCSI 마운트](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/ee338476(v=ws.10)?redirectedfrom=MSDN>)
## **수동 열거**
```bash
sudo apt-get install open-iscsi
```
먼저 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
```
_참고로, 이는 **대상에 도달할 수 있는 인터페이스의 I**P 및 포트**를 보여줍니다. 심지어 **내부 IP 또는 사용한 것과 다른 IP**를 보여줄 수도 있습니다._
그런 다음 **각 줄의 인쇄된 문자열의 두 번째 부분을 잡고** (_iqn.1992-05.com.emc:fl1001433000190000-3-vnxe_ 첫 번째 줄에서) **로그인 시도**:
```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.
```
그런 다음 `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.
```
우리는 `--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
```
**기본 서브넷 열거 프로세스를 자동화하는 스크립트는** [**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)
{{#include ../banners/hacktricks-training.md}}