Nmap 요약 (ESP)

Reading time: 12 minutes

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기
nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24

매개변수

스캔할 IP

  • <ip>,<net/mask>: IP를 직접 지정
  • -iL <ips_file>: list_IPs
  • -iR <number>: 랜덤 IP의 수, --exclude <Ips> 또는 --excludefile <file>로 가능한 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 <ports>: SYN 패킷을 보내며, SYN/ACK로 응답하면 열려 있고(RST로 응답하여 연결을 종료하지 않음), RST로 응답하면 닫혀 있으며 응답이 없으면 도달할 수 없습니다. 권한이 없는 경우 자동으로 전체 연결이 사용됩니다. 포트가 주어지지 않으면 80으로 전송됩니다.
  • -PA <ports>: 이전과 같지만 ACK를 사용하며, 두 가지를 결합하면 더 나은 결과를 얻습니다.
  • -PU <ports>: 목표는 반대이며, 닫혀 있을 것으로 예상되는 포트로 전송됩니다. 일부 방화벽은 TCP 연결만 확인합니다. 닫혀 있으면 포트 도달 불가로 응답하고, 다른 ICMP로 응답하거나 응답이 없으면 도달할 수 없는 것으로 남겨집니다.
  • -PE, -PP, -PM : ICMP 핑: 에코 응답, 타임스탬프 및 주소 마스크. 대상이 활성화되어 있는지 확인하기 위해 전송됩니다.
  • -PY<ports>: 기본적으로 80에 SCTP INIT 프로브를 전송하며, INIT-ACK(열림) 또는 ABORT(닫힘) 또는 아무것도 또는 ICMP 도달 불가(비활성)로 응답할 수 있습니다.
  • -PO <protocols>: 헤더에 프로토콜을 지정하며, 기본적으로 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 <server>: FTPhost--> 다른 호스트에서 호스트를 스캔하는 데 사용되며, 이는 다른 머신의 ftp에 연결하고 다른 머신에서 스캔하려는 포트로 파일을 전송하도록 요청하여 수행됩니다. 응답에 따라 열려 있는지 여부를 알 수 있습니다. [<user>:<password>@]<server>[:<port>] 거의 모든 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 , --max-rtt-timeout , --initial-rtt-timeout

시도 횟수를 수정할 수 있습니다: --max-retries

호스트의 스캔 시간을 수정할 수 있습니다: --host-timeout

각 테스트 간의 시간을 수정하여 느리게 할 수 있습니다: --scan-delay ; --max-scan-delay

초당 패킷 수를 수정할 수 있습니다: --min-rate ; --max-rate

많은 포트는 필터링되거나 닫혀 있을 때 응답하는 데 오랜 시간이 걸립니다. 열린 포트에만 관심이 있다면 다음과 같이 더 빠르게 진행할 수 있습니다: --defeat-rst-ratelimit

Nmap의 공격성을 정의하려면: -T paranoid|sneaky|polite|normal|aggressive|insane

-T (0-1)

-T0 --> 한 번에 1개의 포트만 스캔하고 다음 포트까지 5분을 기다립니다.

-T1 및 T2 --> 매우 유사하지만 각 테스트 간에 각각 15초 및 0.4초만 기다립니다.

-T3 --> 기본 작동으로, 병렬 스캔을 포함합니다.

-T4 --> --max-rtt-timeout 1250ms --min-rtt-timeout 100ms --initial-rtt-timeout 500ms --max-retries 6 --max-scan-delay 10ms

-T5 --> --max-rtt-timeout 300ms --min-rtt-timeout 50ms --initial-rtt-timeout 250ms --max-retries 2 --host-timeout 15m --max-scan-delay 5ms

방화벽/IDS

포트에 대한 접근을 허용하지 않으며 패킷을 분석합니다.

-f 패킷을 조각화하며, 기본적으로 헤더 이후 8바이트로 조각화합니다. 이 크기를 지정하려면 ..mtu를 사용합니다(이 경우 -f를 사용하지 마세요), 오프셋은 8의 배수여야 합니다. 버전 스캐너 및 스크립트는 조각화를 지원하지 않습니다.

-D decoy1,decoy2,ME Nmap은 스캐너를 보내지만 다른 IP 주소를 원본으로 사용하여 숨깁니다. 목록에 ME를 추가하면 Nmap이 그곳에 배치하므로, 완전히 마스킹하려면 5개 또는 6개를 먼저 추가하는 것이 좋습니다. RND:로 무작위 IP를 생성할 수 있습니다. 의 무작위 IP를 생성합니다. 연결 없이 TCP 버전 감지기와 함께 작동하지 않습니다. 네트워크 내부에 있는 경우 활성 IP를 사용하는 것이 좋습니다. 그렇지 않으면 당신이 유일한 활성 IP라는 것을 쉽게 알아낼 수 있습니다.

무작위 IP를 사용하려면: nmap -D RND:10 Target_IP

-S IP Nmap이 IP 주소를 잡지 못할 때 이를 제공해야 합니다. 또한 다른 대상이 자신을 스캔하고 있다고 생각하게 만듭니다.

-e 인터페이스를 선택합니다.

많은 관리자가 모든 것이 제대로 작동하도록 하기 위해 모든 포트를 열어 두며, 이는 다른 해결책을 찾는 것보다 더 쉽습니다. 이러한 포트는 DNS 포트 또는 FTP 포트일 수 있습니다... 이 취약점을 찾기 위해 Nmap은 다음을 포함합니다: --source-port ;-g 동일합니다.

--data 16진수 텍스트를 전송합니다: --data 0xdeadbeef 및 --data \xCA\xFE\x09

--data-string 일반 텍스트를 전송합니다: --data-string "Security Ops에 의해 수행된 스캔, 내선 7192"

--data-length Nmap은 헤더만 전송하며, 이를 통해 더 많은 바이트 수를 추가할 수 있습니다(무작위로 생성됨).

IP 패킷을 완전히 구성하려면 --ip-options를 사용하세요.

전송 및 수신된 패킷의 옵션을 보려면 --packet-trace를 지정하세요. Nmap에서 IP 옵션을 사용하는 방법에 대한 자세한 정보와 예제는 http://seclists.org/nmap-dev/2006/q3/52를 참조하세요.

--ttl

--randomize-hosts 공격을 덜 눈에 띄게 만듭니다.

--spoof-mac <MAC address, prefix, or vendor name> MAC을 변경합니다. 예: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2, 및 Cisco

--proxies 프록시를 사용합니다. 때때로 프록시가 Nmap이 원하는 만큼 많은 열린 연결을 유지하지 않으므로 병렬성을 수정해야 할 수 있습니다: --max-parallelism

-sP ARP를 통해 네트워크의 호스트를 발견합니다.

많은 관리자가 특정 포트에서 오는 모든 패킷을 통과시키는 방화벽 규칙을 생성합니다(예: 20,53 및 67). Nmap에 이러한 포트에서 패킷을 전송하도록 지시할 수 있습니다: nmap --source-port 53 IP

출력

-oN file 일반 출력

-oX file XML 출력

-oS file 스크립트 키디 출력

-oG file Greppable 출력

-oA file -oS를 제외한 모든 것

-v level 상세도

-d level 디버깅

--reason 호스트 및 상태의 이유

--stats-every time 매번 그 시간마다 진행 상황을 알려줍니다.

--packet-trace 어떤 패킷이 나가는지 보기 위해, --version-trace 또는 --script-trace와 같은 필터를 지정할 수 있습니다.

--open 열린, 열림|필터링 및 필터링되지 않은 것을 보여줍니다.

--resume file 요약을 출력합니다.

기타

-6 IPv6 허용

-A -O -sV -sC --traceroute와 동일합니다.

실행 시간

Nmap이 실행되는 동안 옵션을 변경할 수 있습니다:

v / V 상세도 수준을 증가/감소시킵니다.

d / D 디버깅 수준을 증가/감소시킵니다.

p / P 패킷 추적을 켜거나 끕니다.

? 실행 시간 상호작용 도움말 화면을 인쇄합니다.

Vulscan

오프라인 데이터베이스에서 얻은 서비스 버전을 살펴보는 Nmap 스크립트(다른 매우 중요한 것들에서 다운로드됨)이며, 가능한 취약점을 반환합니다.

사용하는 DB는 다음과 같습니다:

  1. Scipvuldb.csv | http://www.scip.ch/en/?vuldb
  2. Cve.csv | http://cve.mitre.org
  3. Osvdb.csv | http://www.osvdb.org
  4. Securityfocus.csv | http://www.securityfocus.com/bid/
  5. Securitytracker.csv | http://www.securitytracker.com
  6. Xforce.csv | http://xforce.iss.net
  7. Exploitdb.csv | http://www.exploit-db.com
  8. Openvas.csv | http://www.openvas.org

Nmap 폴더에 다운로드하고 설치하려면:

wget http://www.computec.ch/projekte/vulscan/download/nmap_nse_vulscan-2.0.tar.gz && tar -czvf nmap_nse_vulscan-2.0.tar.gz vulscan/ && sudo cp -r vulscan/ /usr/share/nmap/scripts/

DB 패키지도 다운로드하여 /usr/share/nmap/scripts/vulscan/에 추가해야 합니다.

사용법:

모두 사용하려면: sudo nmap -sV --script=vulscan HOST_TO_SCAN

특정 DB를 사용하려면: sudo nmap -sV --script=vulscan --script-args vulscandb=cve.csv HOST_TO_SCAN

Nmap 서비스 스캔 x16 속도 향상

이 게시물에 따르면 모든 totalwaitms 값을 **/usr/share/nmap/nmap-service-probes**에서 300으로, **tcpwrappedms**를 200으로 수정하여 nmap 서비스 분석 속도를 높일 수 있습니다.

또한, 특정하게 정의된 **servicewaitms**가 없는 프로브는 기본값으로 **5000**을 사용합니다. 따라서 각 프로브에 값을 추가하거나, service_scan.h에서 기본값을 변경하여 nmap을 직접 컴파일할 수 있습니다.

/usr/share/nmap/nmap-service-probes 파일에서 totalwaitmstcpwrappedms 값을 전혀 변경하고 싶지 않다면, 이러한 값이 nmap-service-probes 파일에서 완전히 무시되도록 파싱 코드를 수정할 수 있습니다.

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기