hacktricks/generic-methodologies-and-resources/pentesting-network/nmap-summary-esp.md

20 KiB

Nmap 요약 (ESP)

{% hint style="success" %} AWS 해킹 학습 및 실습:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 학습 및 실습: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원
{% endhint %}

{% embed url="https://websec.nl/" %}

nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24

매개변수

스캔할 IP

  • <ip>,<net/mask>: 직접 IP를 나타냄
  • -iL <ips_file>: IP 목록
  • -iR <number>: 랜덤 IP 수, --exclude <Ips> 또는 --excludefile <file>로 가능한 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 <ports>: SYN 패킷을 보내어 SYN/ACK로 응답하면 열림(연결을 끝내지 않기 위해 RST로 응답), RST로 응답하면 닫힘, 응답이 없으면 접근할 수 없음. 권한이 없는 경우 전체 연결이 자동으로 사용됨. 포트가 지정되지 않은 경우 80번으로 보냄.
  • -PA <ports>: 이전과 유사하지만 ACK로, 두 옵션을 결합하면 더 나은 결과를 얻을 수 있음.
  • -PU <ports>: 반대 목적으로, 닫혀 있을 것으로 예상되는 포트로 보냄. 일부 방화벽은 TCP 연결만 확인함. 닫혀 있으면 포트 접근 불가로 응답하며, 다른 ICMP로 응답하거나 응답이 없으면 대상 접근 불가로 남김.
  • -PE, -PP, -PM : ICMP PINGS: 에코 응답, 타임스탬프 및 어드레스마스크. 대상이 활성 상태인지 확인하기 위해 보냄.
  • -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는 열림/닫힘을 구별함(열린 것은 창 값이 다른 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 <server>: FTPhost--> 다른 호스트에서 호스트를 스캔하는 데 사용됨, 다른 기계의 FTP에 연결하여 해당 기계에서 다른 기계로 스캔할 포트로 파일을 보내도록 요청함, 응답에 따라 해당 포트가 열렸는지 여부를 알 수 있음. [<user>:<password>@]<server>[:<port>] 대부분의 FTP 서버는 더 이상 이 작업을 허용하지 않으므로 실용적인 용도가 거의 없음.

중심 분석

-p: 스캔할 포트를 지정하는 데 사용됨. 65335개를 선택하려면: -p- 또는 -p all. Nmap은 내부적으로 인기에 따라 분류됨. 기본적으로 상위 1000개를 사용함. -F (빠른 스캔)으로 상위 100개를 분석함. **--top-ports <number>**로 해당 수의 상위 포트를 분석함(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 <ratio>**로 0과 1 사이의 비율로 가장 일반적인 포트를 분석함

-sV 버전 스캔, 기본적으로 7로 강도를 조절할 수 있음.

--version-intensity <number> 강도를 조절하여 더 낮은 값은 가장 가능성이 높은 프로브만 보내고 모두 보내지 않음. 이를 통해 UDP 스캔 시간을 크게 단축할 수 있음.

-O OS 감지

--osscan-limit 호스트를 올바르게 스캔하려면 적어도 하나의 열린 포트와 하나의 닫힌 포트가 있어야 하며, 이 조건이 충족되지 않고 이 옵션을 설정한 경우 OS 예측을 시도하지 않음(시간을 절약함) --osscan-guess OS 감지가 완벽하지 않을 때 더 많은 노력을 기울입니다.

스크립트

--script <filename>|<category>|<directory>|<expression>[,...]

기본적으로 -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 <n1>=<v1>,<n2>={<n3>=<v3>},<n4>={<v4>,<v5>}

--script-args-file <filename>

--script-help <filename>|<category>|<directory>|<expression>|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 <numhosts>; --max-hostgroup <numhosts> (병렬 스캔 그룹 크기 조정)

병렬 스캔 수를 제어할 수 있지만 권장하지 않음 (nmap은 네트워크 상태에 따라 자동 제어): --min-parallelism <numprobes>; --max-parallelism <numprobes>

RTT 타임아웃을 조정할 수 있지만 일반적으로 필요하지 않음: --min-rtt-timeout <time>, --max-rtt-timeout <time>, --initial-rtt-timeout <time>

시도 횟수를 조정할 수 있음: --max-retries <numtries>

호스트의 스캔 시간을 조정할 수 있음: --host-timeout <time>

각 테스트 사이의 시간을 느리게 조정할 수 있음: --scan-delay <time>; --max-scan-delay <time>

초당 패킷 수를 조정할 수 있음: --min-rate <number>; --max-rate <number>

많은 포트가 필터링되거나 닫혀 있어 응답이 오래 걸릴 수 있으므로 열린 포트만 관심이 있다면 더 빠르게 진행 가능: --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:<number>로 무작위 IP를 생성할 수 있음. TCP 연결 없는 버전 탐지기와 함께 작동하지 않음. 네트워크 내에 있을 경우 활성 상태인 IP를 사용하는 것이 좋음.

무작위 IP 사용: nmap-D RND: 10 Ip_target

-S IP Nmap이 IP 주소를 감지하지 못할 때 사용하며, 다른 대상이 스캔 중인 것처럼 보이도록 함.

-e <interface> 인터페이스 선택

많은 관리자들은 모든 것이 올바르게 작동하도록 입력 포트를 열어두고 다른 솔루션을 찾는 것보다 쉽게 만들기 때문에 DNS 또는 FTP 포트가 될 수 있음. 이 취약성을 찾기 위해 nmap은 다음을 포함: --source-port <portnumber>;-g <portnumber> 동일

--data <hex string> 16진수 텍스트 전송: --data 0xdeadbeef and --data \xCA\xFE\x09

--data-string <string> 일반 텍스트 전송: --data-string "Scan conducted by Security Ops, extension 7192"

--data-length <number> Nmap은 헤더만 보내며, 여기에 무작위로 생성된 바이트 수를 추가함

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

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

--ttl <value>

--randomize-hosts 공격이 덜 눈에 띄도록 함

--spoof-mac <MAC address, prefix, or vendor name> MAC 주소 변경: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2, and Cisco --proxies <쉼표로 구분된 프록시 URL 목록> 프록시를 사용하는 경우, 때로는 프록시가 nmap이 원하는만큼의 연결을 유지하지 못할 수 있으므로 병렬성을 수정해야 합니다: --max-parallelism

-sP 우리가 있는 네트워크에서 호스트를 발견하기 위해 ARP를 사용합니다.

많은 관리자들이 방화벽에서 특정 포트(예: 20, 53 및 67)에서 오는 모든 패킷을 통과시키는 규칙을 만듭니다. nmap에게 이러한 포트에서 패킷을 보내도록 지시할 수 있습니다: nmap --source-port 53 Ip

출력

-oN file 일반 출력

-oX file XML 출력

-oS file 스크립트 키디 출력

-oG file grepable 출력

-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 스크립트로, 오프라인 데이터베이스(중요한 다른 데이터베이스에서 다운로드)에서 얻은 서비스 버전을 확인하고 가능한 취약점을 반환합니다.

사용하는 데이터베이스:

  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/

또한 데이터베이스 패키지를 다운로드하고 /usr/share/nmap/scripts/vulscan/에 추가해야 합니다.

사용법:

모두 사용: sudo nmap -sV --script=vulscan HOST_A_ESCANEAR

특정 데이터베이스 사용: sudo nmap -sV --script=vulscan --script-args vulscandb=cve.csv HOST_A_ESCANEAR

Nmap 서비스 스캔 속도 향상 x16

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

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

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

{% embed url="https://websec.nl/" %}

{% hint style="success" %} AWS 해킹 학습 및 실습:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 학습 및 실습: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원
{% endhint %}