mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
162 lines
8.7 KiB
Markdown
162 lines
8.7 KiB
Markdown
# 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}}
|