20 KiB
Nmap 요약 (ESP)
{% hint style="success" %}
AWS 해킹 학습 및 실습:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 학습 및 실습: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks 지원
- 구독 요금제를 확인하세요!
- 💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- 해킹 요령을 공유하려면 HackTricks 및 HackTricks Cloud github 저장소에 PR을 제출하세요.
{% 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 스크립트로, 오프라인 데이터베이스(중요한 다른 데이터베이스에서 다운로드)에서 얻은 서비스 버전을 확인하고 가능한 취약점을 반환합니다.
사용하는 데이터베이스:
- 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/
또한 데이터베이스 패키지를 다운로드하고 /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 지원
- 구독 요금제 확인!
- 💬 디스코드 그룹 또는 텔레그램 그룹 참여 또는 트위터 🐦 @hacktricks_live**** 팔로우하기.
- HackTricks 및 HackTricks Cloud 깃헙 레포지토리에 PR을 제출하여 해킹 트릭 공유하기.