# Nmap 요약 (ESP) {{#include ../../banners/hacktricks-training.md}} ``` nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24 ``` ## 매개변수 ### 스캔할 IP - **`,`:** IP를 직접 지정 - **`-iL `:** list_IPs - **`-iR `**: 랜덤 IP의 수, `--exclude ` 또는 `--excludefile `로 가능한 IP를 제외할 수 있습니다. ### 장비 탐지 기본적으로 Nmap은 다음과 같은 탐지 단계를 시작합니다: `-PA80 -PS443 -PE -PP` - **`-sL`**: 비침습적이며, 이름을 해결하기 위해 **DNS** 요청을 하는 대상을 나열합니다. 예를 들어 www.prueba.es/24의 모든 IP가 우리의 대상인지 확인하는 데 유용합니다. - **`-Pn`**: **핑 없음**. 모든 IP가 활성화되어 있다고 알고 있을 때 유용합니다(그렇지 않으면 많은 시간을 낭비할 수 있지만, 이 옵션은 비활성이라고 잘못 판단할 수 있습니다), 탐지 단계를 방지합니다. - **`-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 핑: 에코 응답, 타임스탬프 및 주소 마스크. 대상이 활성화되어 있는지 확인하기 위해 전송됩니다. - **`-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는 열림/닫힘을 구분합니다. 열림은 0이 아닌 다른 창 값으로 RST로 응답하고, 닫힘은 RST 창 = 0, 필터링은 ICMP 도달 불가 또는 아무것도입니다. 모든 컴퓨터가 이렇게 작동하는 것은 아니므로, 모두 닫혀 있으면 작동하지 않으며, 몇 개가 열려 있으면 잘 작동하고, 많은 개가 열려 있고 몇 개가 닫혀 있으면 반대로 작동합니다. - **`-sI`:** 유휴 스캔. 활성 방화벽이 있지만 특정 IP에 대해 필터링하지 않는 경우(또는 단순히 익명성을 원할 때) 좀비 스캐너를 사용할 수 있습니다(모든 포트에 대해 작동). 가능한 좀비를 찾기 위해 scrpit ipidseq 또는 exploit auxiliary/scanner/ip/ipidseq를 사용할 수 있습니다. 이 스캐너는 IP 패킷의 IPID 번호를 기반으로 합니다. - **`--badsum`:** 잘못된 합계를 전송하며, 컴퓨터는 패킷을 폐기하지만 방화벽은 무언가에 응답할 수 있습니다. 방화벽을 감지하는 데 사용됩니다. - **`-sZ`:** "이상한" SCTP 스캐너로, 쿠키 에코 조각이 있는 프로브를 전송할 때 열려 있으면 드롭되어야 하며, 닫혀 있으면 ABORT로 응답해야 합니다. init를 통과하지 않는 방화벽을 통과할 수 있지만, 필터링과 열림을 구분하지 않습니다. - **`-sO`:** 프로토콜 IP 스캔. 때때로 프로토콜조차 구분할 수 없는 잘못된 및 빈 헤더를 전송합니다. ICMP 도달 불가 프로토콜이 도착하면 닫힘이며, 도달 불가 포트가 도착하면 열림이며, 다른 오류가 도착하면 필터링되고, 아무것도 도착하지 않으면 열림|필터링입니다. - **`-b `:** FTPhost--> 다른 호스트에서 호스트를 스캔하는 데 사용되며, 이는 다른 머신의 ftp에 연결하고 다른 머신에서 스캔하려는 포트로 파일을 전송하도록 요청하여 수행됩니다. 응답에 따라 열려 있는지 여부를 알 수 있습니다. \[\:\@]\\[:\] 거의 모든 ftp 서버는 더 이상 이를 허용하지 않으므로 실용성이 떨어집니다. ### **초점 분석** **-p:** 스캔할 포트를 지정하는 데 사용됩니다. 모든 65,335 포트를 선택하려면: **-p-** 또는 **-p all**. Nmap은 인기 기반의 내부 분류를 사용합니다. 기본적으로 상위 1000 포트를 사용합니다. **-F** (빠른 스캔)를 사용하면 상위 100개를 분석합니다. **--top-ports **를 사용하면 상위 포트 수를 분석합니다(1에서 65,335까지). 포트를 무작위 순서로 확인합니다. 이를 방지하려면 **-r**을 사용하세요. 특정 포트를 선택할 수도 있습니다: 20-30,80,443,1024- (후자는 1024부터 검색함을 의미합니다). 프로토콜별로 포트를 그룹화할 수도 있습니다: U:53,T:21-25,80,139,S:9. Nmap의 인기 포트 내에서 범위를 선택할 수도 있습니다: -p [-1024]는 nmap-services에 포함된 포트에서 1024까지 분석합니다. **--port-ratio ** 가장 일반적인 포트를 0과 1 사이의 비율로 분석합니다. **-sV** 버전 스캔, 강도를 0에서 9까지 조절할 수 있으며, 기본값은 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, 및 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 인수 900000ms, 900, 900s, 및 15m 모두 동일한 작업을 수행합니다. Nmap은 스캔할 총 호스트 수를 그룹으로 나누고 이러한 그룹을 블록으로 분석하므로 모든 호스트가 분석될 때까지 다음 블록으로 이동하지 않습니다(사용자는 블록이 분석될 때까지 업데이트를 받지 않습니다). 이렇게 하면 Nmap이 대규모 그룹을 사용하는 것이 더 최적화됩니다. 기본적으로 클래스 C에서는 256을 사용합니다. 이는 **--min-hostgroup** _****_**;** **--max-hostgroup** _****_로 변경할 수 있습니다(병렬 스캔 그룹 크기 조정). 병렬 스캐너 수를 제어할 수 있지만 그렇게 하지 않는 것이 좋습니다(Nmap은 이미 네트워크 상태에 따라 자동 제어를 포함합니다): **--min-parallelism** _****_**;** **--max-parallelism** _****_ RTT 타임아웃을 수정할 수 있지만 일반적으로 필요하지 않습니다: **--min-rtt-timeout** _**