Nmap 요약 (ESP)
Reading time: 12 minutes
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
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
-sV 버전 스캔, 강도를 0에서 9까지 조절할 수 있으며, 기본값은 7입니다.
--version-intensity
-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
--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
병렬 스캐너 수를 제어할 수 있지만 그렇게 하지 않는 것이 좋습니다(Nmap은 이미 네트워크 상태에 따라 자동 제어를 포함합니다): --min-parallelism
RTT 타임아웃을 수정할 수 있지만 일반적으로 필요하지 않습니다: --min-rtt-timeout , --max-rtt-timeout , --initial-rtt-timeout
시도 횟수를 수정할 수 있습니다: --max-retries
호스트의 스캔 시간을 수정할 수 있습니다: --host-timeout
각 테스트 간의 시간을 수정하여 느리게 할 수 있습니다: --scan-delay ; --max-scan-delay
초당 패킷 수를 수정할 수 있습니다: --min-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를 사용하려면: nmap -D RND:10 Target_IP
-S IP Nmap이 IP 주소를 잡지 못할 때 이를 제공해야 합니다. 또한 다른 대상이 자신을 스캔하고 있다고 생각하게 만듭니다.
-e
많은 관리자가 모든 것이 제대로 작동하도록 하기 위해 모든 포트를 열어 두며, 이는 다른 해결책을 찾는 것보다 더 쉽습니다. 이러한 포트는 DNS 포트 또는 FTP 포트일 수 있습니다... 이 취약점을 찾기 위해 Nmap은 다음을 포함합니다: --source-port
--data
--data-string
--data-length
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
-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는 다음과 같습니다:
- Scipvuldb.csv | http://www.scip.ch/en/?vuldb
- Cve.csv | http://cve.mitre.org
- Osvdb.csv | http://www.osvdb.org
- Securityfocus.csv | http://www.securityfocus.com/bid/
- Securitytracker.csv | http://www.securitytracker.com
- Xforce.csv | http://xforce.iss.net
- Exploitdb.csv | http://www.exploit-db.com
- 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
파일에서 totalwaitms
및 tcpwrappedms
값을 전혀 변경하고 싶지 않다면, 이러한 값이 nmap-service-probes
파일에서 완전히 무시되도록 파싱 코드를 수정할 수 있습니다.
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.