# Nmap 요약 (ESP)
{% hint style="success" %}
AWS 해킹 학습 및 실습:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
GCP 해킹 학습 및 실습: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
HackTricks 지원
* [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* 해킹 요령을 공유하려면 [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
{% endhint %}
{% embed url="https://websec.nl/" %}
```
nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24
```
## 매개변수
### 스캔할 IP
* **`,`:** 직접 IP를 나타냄
* **`-iL `:** IP 목록
* **`-iR `**: 랜덤 IP 수, `--exclude ` 또는 `--excludefile `로 가능한 IP 제외
### 장비 발견
기본적으로 Nmap은 `-PA80 -PS443 -PE -PP`로 구성된 발견 단계를 시작합니다.
* **`-sL`**: 침입적이지 않으며, 이름을 해결하기 위해 DNS 요청을 하는 대상을 나열함. 예를 들어 www.prueba.es/24의 모든 IP가 대상인지 확인하는 데 유용함.
* **`-Pn`**: 핑 없음. 모두 활성 상태임을 알고 있는 경우 유용함(그렇지 않으면 많은 시간이 소요될 수 있지만, 이 옵션은 활성 상태가 아니라고 잘못 알려줄 수도 있음). 발견 단계를 방지함.
* **`-sn`** : 포트 스캔 없음. 정찰 단계를 완료한 후 포트를 스캔하지 않음. 비교적 은밀하며, 소규모 네트워크 스캔을 허용함. 권한이 있는 경우 80번으로 ACK(-PA)를 보내고, 443번으로 SYN(-PS)를 보내며, 에코 요청과 타임스탬프 요청을 보냄. 대상이 네트워크인 경우 ARP(-PR)만 사용함. 다른 옵션과 함께 사용하면 다른 옵션의 패킷만 삭제됨.
* **`-PR`**: ARP 핑. 네트워크 내 컴퓨터를 분석할 때 기본적으로 사용되며, 핑을 사용하는 것보다 빠름. ARP 패킷을 사용하지 않으려면 `--send-ip`를 사용함.
* **`-PS `**: SYN 패킷을 보내어 SYN/ACK로 응답하면 열림(연결을 끝내지 않기 위해 RST로 응답), RST로 응답하면 닫힘, 응답이 없으면 접근할 수 없음. 권한이 없는 경우 전체 연결이 자동으로 사용됨. 포트가 지정되지 않은 경우 80번으로 보냄.
* **`-PA `**: 이전과 유사하지만 ACK로, 두 옵션을 결합하면 더 나은 결과를 얻을 수 있음.
* **`-PU `**: 반대 목적으로, 닫혀 있을 것으로 예상되는 포트로 보냄. 일부 방화벽은 TCP 연결만 확인함. 닫혀 있으면 포트 접근 불가로 응답하며, 다른 ICMP로 응답하거나 응답이 없으면 대상 접근 불가로 남김.
* **`-PE, -PP, -PM`** : ICMP PINGS: 에코 응답, 타임스탬프 및 어드레스마스크. 대상이 활성 상태인지 확인하기 위해 보냄.
* **`-PY`**: 기본적으로 80번으로 SCTP INIT 프로브를 보내며, INIT-ACK(열림) 또는 ABORT(닫힘) 또는 아무것도 또는 ICMP 접근 불가능(비활성)으로 응답할 수 있음.
* **`-PO `**: 헤더에 프로토콜이 표시됨, 기본적으로 1(ICMP), 2(IGMP) 및 4(Encap IP). ICMP, IGMP, TCP(6) 및 UDP(17) 프로토콜의 경우 프로토콜 헤더가 전송되며, 나머지는 IP 헤더만 전송됨. 헤더의 형태가 잘못되어 프로토콜이 도달하지 않거나 동일한 프로토콜의 응답이 도착하여 상태를 알 수 있음.
* **`-n`**: DNS 없음
* **`-R`**: 항상 DNS
### 포트 스캔 기술
* **`-sS`**: 연결을 완료하지 않아 추적이 남지 않음, 사용 가능한 경우 매우 좋음(권한). 기본적으로 사용됨.
* **`-sT`**: 연결을 완료하여 추적이 남음, 확실한 경우 사용 가능함. 기본적으로 권한 없이 사용됨.
* **`-sU`**: UDP를 위한 느린 스캔. 주로: DNS(53), SNMP(161,162), DHCP(67 및 68), (-sU53,161,162,67,68): 열림(응답), 닫힘(포트 접근 불가), 필터링(다른 ICMP), 열림/필터링(아무것도). 열림/필터링의 경우, -sV는 nmap이 지원하는 버전 중 하나를 감지하고 실제 상태를 감지할 수 있도록 여러 요청을 보냄. 시간이 많이 소요됨.
* **`-sY`**: SCTP 프로토콜이 연결을 설정하지 못하므로 로그가 없음, -PY처럼 작동함
* **`-sN,-sX,-sF`:** Null, Fin, Xmas, 일부 방화벽을 관통하고 정보를 추출할 수 있음. SYN, RST 또는 ACK 플래그가 없는 모든 요청에 RST로 응답해야 한다는 사실에 기초함: 열림/필터링(아무것도), 닫힘(RST), 필터링(ICMP 접근 불가). Windows, CIsco, BSDI 및 OS/400에서 신뢰할 수 없음. Unix에서는 신뢰할 수 있음.
* **`-sM`**: Maimon 스캔: FIN 및 ACK 플래그를 보냄, 현재 BSD에서는 모두 닫힌 것으로 반환됨.
* **`-sA, sW`**: ACK 및 Window, 방화벽을 감지하기 위해 사용되며, 포트가 필터링되었는지 여부를 알 수 있음. -sW는 열림/닫힘을 구별함(열린 것은 창 값이 다른 RST로 응답함): 열림(창 값이 0이 아닌 RST), 닫힘(창 값 = 0인 RST), 필터링(ICMP 접근 불가 또는 아무것도). 모든 컴퓨터가 이렇게 작동하는 것은 아니므로, 모두 닫힌 경우 작동하지 않음, 몇 개가 열린 경우 잘 작동함, 많이 열렸고 몇 개가 닫힌 경우 반대로 작동함.
* **`-sI`:** Idle 스캔. 활성 방화벽이 있지만 특정 IP로 필터링되지 않는다는 것을 알고 있는 경우(또는 단순히 익명성을 원하는 경우) 좀비 스캐너를 사용할 수 있음(모든 포트에 대해 작동함), 가능한 좀비를 찾기 위해 ipidseq 스크립트 또는 exploit auxiliary/scanner/ip/ipidseq를 사용할 수 있음. 이 스캐너는 IP 패킷의 IPID 번호에 기초함.
* **`--badsum`:** 합이 잘못된 패킷을 보냄, 컴퓨터는 패킷을 버릴 수 있지만 방화벽은 응답할 수 있음, 방화벽을 감지하는 데 사용됨.
* **`-sZ`:** "이상한" SCTP 스캐너, 쿠키 에코 조각을 보내면 열린 경우 삭제되거나 닫힌 경우 ABORT로 응답해야 함. init을 통과하지 못하는 방화벽을 통과할 수 있지만, 필터링된 것과 열린 것을 구별하지 못함.
* **`-sO`:** 프로토콜 IP 스캔. 때로는 프로토콜을 식별할 수 없는 잘못된 및 빈 헤더를 보냄. ICMP 접근 불가능 프로토콜이 도착하면 닫힘, 접근 불가능한 포트가 도착하면 열림, 다른 오류가 도착하면 필터링, 아무것도 도착하지 않으면 열림|필터링.
* **`-b `:** FTPhost--> 다른 호스트에서 호스트를 스캔하는 데 사용됨, 다른 기계의 FTP에 연결하여 해당 기계에서 다른 기계로 스캔할 포트로 파일을 보내도록 요청함, 응답에 따라 해당 포트가 열렸는지 여부를 알 수 있음. \[\:\@]\\[:\] 대부분의 FTP 서버는 더 이상 이 작업을 허용하지 않으므로 실용적인 용도가 거의 없음.
### 중심 분석
**-p:** 스캔할 포트를 지정하는 데 사용됨. 65335개를 선택하려면: **-p-** 또는 **-p all**. Nmap은 내부적으로 인기에 따라 분류됨. 기본적으로 상위 1000개를 사용함. **-F** (빠른 스캔)으로 상위 100개를 분석함. **--top-ports \**로 해당 수의 상위 포트를 분석함(1부터 65335까지). 포트를 무작위로 확인하므로 이를 방지하려면 **-r**을 사용함. 또한 포트를 선택할 수 있음: 20-30,80,443,1024- 이후의 포트를 확인함. 또한 프로토콜별로 포트를 그룹화할 수 있음: U:53,T:21-25,80,139,S:9. Nmap의 인기 있는 포트 범위 내에서 범위를 선택할 수도 있음: -p \[-1024] nmap-services에 포함된 1024까지 분석함. **--port-ratio \**로 0과 1 사이의 비율로 가장 일반적인 포트를 분석함
**-sV** 버전 스캔, 기본적으로 7로 강도를 조절할 수 있음.
**--version-intensity \** 강도를 조절하여 더 낮은 값은 가장 가능성이 높은 프로브만 보내고 모두 보내지 않음. 이를 통해 UDP 스캔 시간을 크게 단축할 수 있음.
**-O** OS 감지
**--osscan-limit** 호스트를 올바르게 스캔하려면 적어도 하나의 열린 포트와 하나의 닫힌 포트가 있어야 하며, 이 조건이 충족되지 않고 이 옵션을 설정한 경우 OS 예측을 시도하지 않음(시간을 절약함)
**--osscan-guess** OS 감지가 완벽하지 않을 때 더 많은 노력을 기울입니다.
**스크립트**
\--script _\_|_\_|_\_|_\_\[,...]
기본적으로 -sC 또는 --script=default로 사용 가능
사용 가능한 유형: auth, broadcast, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version, and vuln
* **Auth:** 인증을 위해 사용 가능한 모든 _스크립트_ 실행
* **Default:** 도구의 기본 _스크립트_ 실행
* **Discovery:** 대상 또는 피해자의 정보 검색
* **External:** 외부 리소스 사용을 위한 _스크립트_
* **Intrusive:** 피해자나 대상에 대해 침입적으로 간주되는 _스크립트_ 사용
* **Malware:** 악성 코드나 _백도어_로 인한 열린 연결 확인
* **Safe:** 침입적이지 않은 _스크립트_ 실행
* **Vuln:** 가장 잘 알려진 취약점 발견
* **All:** 가능한 모든 NSE 확장 _스크립트_ 실행
스크립트 검색:
**nmap --script-help="http-\*" -> http-로 시작하는 것들**
**nmap --script-help="not intrusive" -> 해당하지 않는 모든 것들**
**nmap --script-help="default or safe" -> 하나 또는 둘 다에 속하는 것들**
**nmap --script-help="default and safe" --> 둘 다에 속하는 것들**
**nmap --script-help="(default or safe or intrusive) and not http-\*"**
\--script-args _\_=_\_,_\_={_\_=_\_},_\_={_\_,_\_}
\--script-args-file _\_
\--script-help _\_|_\_|_\_|_\_|all\[,...]
\--script-trace ---> 스크립트 진행 상황 정보 제공
\--script-updatedb
**스크립트 사용 시: nmap --script Script_Name target** --> 스크립트와 스캐너가 실행되며, 스캐너 옵션도 추가할 수 있음, **“safe=1”**을 추가하여 안전한 것들만 실행 가능
**시간 제어**
**Nmap은 초, 분, ms 단위로 시간을 조정할 수 있음:** --host-timeout arguments 900000ms, 900, 900s, and 15m 모두 동일한 작업을 수행
Nmap은 총 호스트 수를 그룹으로 나누어 그룹을 블록 단위로 분석하므로 모든 그룹이 분석될 때까지 다음 블록으로 넘어가지 않음 (사용자도 블록이 분석될 때까지 업데이트를 받지 않음). 이 방식으로 nmap은 대규모 그룹을 사용하는 것이 더 효율적임. 기본적으로 클래스 C에서 256을 사용함.
변경 가능: **--min-hostgroup** _**\**_**;** **--max-hostgroup** _**\**_ (병렬 스캔 그룹 크기 조정)
병렬 스캔 수를 제어할 수 있지만 권장하지 않음 (nmap은 네트워크 상태에 따라 자동 제어): **--min-parallelism** _**\**_**;** **--max-parallelism** _**\**_
RTT 타임아웃을 조정할 수 있지만 일반적으로 필요하지 않음: **--min-rtt-timeout** _**\