mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 22:52:06 +00:00
235 lines
13 KiB
Markdown
235 lines
13 KiB
Markdown
# 3260 - ISCSI 펜테스팅
|
||
|
||
<details>
|
||
|
||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||
|
||
HackTricks를 지원하는 다른 방법:
|
||
|
||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github 저장소에 PR을 제출**하세요.
|
||
|
||
</details>
|
||
|
||
## 기본 정보
|
||
|
||
[Wikipedia](https://en.wikipedia.org/wiki/ISCSI)에서 가져온 내용:
|
||
|
||
> 컴퓨팅에서 **iSCSI**는 **Internet Small Computer Systems Interface**의 약자로, 데이터 저장 시설을 연결하는 IP 기반 스토리지 네트워킹 표준입니다. TCP/IP 네트워크를 통해 SCSI 명령을 전송하여 스토리지 장치에 블록 수준의 액세스를 제공합니다. iSCSI는 이너넷과 장거리 스토리지 관리를 위해 데이터 전송을 용이하게 합니다. 이는 로컬 영역 네트워크(LAN), 광역 네트워크(WAN) 또는 인터넷을 통해 데이터를 전송할 수 있으며 위치에 독립적인 데이터 저장 및 검색을 가능하게 할 수 있습니다.
|
||
>
|
||
> 이 프로토콜은 클라이언트(이니셔에이터)가 원격 서버의 스토리지 장치(타겟)에 SCSI 명령(CDB)을 보낼 수 있도록 합니다. 이는 스토리지 영역 네트워크(SAN) 프로토콜로, 조직이 스토리지를 스토리지 어레이로 통합할 수 있으면서 데이터베이스 및 웹 서버와 같은 클라이언트에게 로컬로 연결된 SCSI 디스크와 같은 환상을 제공합니다. 주로 Fibre Channel과 경쟁하지만 전통적인 Fibre Channel과 달리 전용 케이블이 필요한 경우가 많은 Fibre Channel과 달리 iSCSI는 기존 네트워크 인프라를 사용하여 장거리에서 실행할 수 있습니다.
|
||
|
||
**기본 포트:** 3260
|
||
```
|
||
PORT STATE SERVICE VERSION
|
||
3260/tcp open iscsi?
|
||
```
|
||
## 열거
|
||
|
||
### iSCSI 서비스 확인
|
||
|
||
iSCSI 서비스는 TCP 포트 3260을 사용합니다. 따라서, 해당 포트가 열려 있는지 확인해야 합니다. 다음 명령어를 사용하여 포트 스캔을 수행할 수 있습니다.
|
||
|
||
```bash
|
||
nmap -p 3260 <target_ip>
|
||
```
|
||
|
||
### iSCSI 서버 정보 수집
|
||
|
||
iSCSI 서버에 대한 정보를 수집하는 것은 중요합니다. 다음 명령어를 사용하여 iSCSI 서버의 정보를 확인할 수 있습니다.
|
||
|
||
```bash
|
||
iscsiadm -m discovery -t sendtargets -p <target_ip>
|
||
```
|
||
|
||
위 명령어를 실행하면 iSCSI 서버의 IP 주소와 포트 번호를 얻을 수 있습니다.
|
||
|
||
### iSCSI 서버 연결
|
||
|
||
iSCSI 서버에 연결하기 위해 다음 명령어를 사용할 수 있습니다.
|
||
|
||
```bash
|
||
iscsiadm -m node -T <target_name> -p <target_ip> -l
|
||
```
|
||
|
||
위 명령어에서 `<target_name>`은 iSCSI 서버의 이름이고, `<target_ip>`는 iSCSI 서버의 IP 주소입니다.
|
||
|
||
### iSCSI 서버 인증 우회
|
||
|
||
iSCSI 서버에 연결할 때 인증을 우회해야 하는 경우, 다음 명령어를 사용할 수 있습니다.
|
||
|
||
```bash
|
||
iscsiadm -m node -T <target_name> -p <target_ip> --op=update --name=node.session.auth.authmethod --value=None
|
||
```
|
||
|
||
위 명령어를 실행하면 인증 우회가 가능해집니다.
|
||
|
||
### iSCSI 서버 마운트
|
||
|
||
iSCSI 서버에 연결한 후, 다음 명령어를 사용하여 iSCSI 볼륨을 마운트할 수 있습니다.
|
||
|
||
```bash
|
||
mount /dev/sdX /mnt
|
||
```
|
||
|
||
위 명령어에서 `/dev/sdX`는 iSCSI 디바이스의 경로이고, `/mnt`는 마운트할 디렉토리입니다.
|
||
```
|
||
nmap -sV --script=iscsi-info -p 3260 192.168.xx.xx
|
||
```
|
||
이 스크립트는 인증이 필요한지 여부를 나타냅니다.
|
||
|
||
### [무차별 대입 공격](../generic-methodologies-and-resources/brute-force.md#iscsi)
|
||
|
||
### [리눅스에서 ISCSI 마운트](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
|
||
```
|
||
다음은 [iscsiadm 문서](https://ptestmethod.readthedocs.io/en/latest/LFF-IPS-P2-VulnerabilityAnalysis.html#iscsiadm)에서의 예시입니다:
|
||
|
||
먼저 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
|
||
```
|
||
_참고로, 여기에서는 대상에 도달할 수 있는 인터페이스의 IP와 포트를 보여줍니다. 심지어 사용한 IP와는 다른 내부 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`
|
||
|
||
## **참고 자료**
|
||
|
||
* [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>htARTE (HackTricks AWS Red Team Expert)</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요</strong></a><strong>!</strong></summary>
|
||
|
||
HackTricks를 지원하는 다른 방법:
|
||
|
||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github 저장소에 PR을 제출하세요.**
|
||
|
||
</details>
|