nmap(Netowrk Mapper) CMD
nmap CMD
- Host sweep : 호스트의 alive 유무 확인 <--포트 스캐너
- Port scan : 호스트의 포트 open 유무 확인
nmap 서버의 작동 여부 및 서비스 포트를 확인할 수 있는 스캐닝 툴(zenmap-GUI)
stealth스캔 타겟에게 로그를 남기지 않고 스캐닝 (TCP Half Open/FIN/Xmas/Null스캔)
# nmap -h
■ nmap 명령어의 주요 옵션
옵션 | 설명 |
-sT | TCP Open Scan |
-sS | TCP Half Open Scan(세션을 성립시키지 않는 SYN 스캔) |
-sF | TCP FIN Scan(FIN 패킷을 이용한 스캔) |
-sN | TCP NULL Scan(NULL 패킷을 이용한 스캔) |
-sX | TCP Xmas 스캔(FIN, PSH, URG 패킷을 이용한 스캔) |
-sP | ping 이용한 호스트 활성화 여부 확인 |
-sU | UDP Port Scan |
-O | 대상 호스트의 운영체제 판별 |
-F | Fast scan (포트를 줄여서 빠르게) |
-sV | Service Version |
외에도 많이 쓰이는 옵션들 -A, -T4, -v(-vv), -o
-A all/ -T4 time,얼마나 빠르게 할 것인가.
-v detail한 출력/ -o 출력내용 저장
칼리리눅스에서는
Information Gathering > Network Scanners > Nmap
를 선택하거나 혹인 nmap(zenmap) 명령어를 사용하면 된다.
◆nmap을 이용한 포트 스캔 과정
(1) UDP Open Scan
공격자는 UDP패킷을 전송
- 포트 Open 응답없음
- 포트 Close ICMP Unreachable 회신
■ 사용시스템
- linux200(named(53))
- kaliLinux(nmap CMD)
■ 작업시나리오
* kaliLinux(nmap CMD) -----------> linux200(named(53))
[실습] UDP Open Scan
칼리리눅스에서 linux200 서버에 53번 포트가 Open 되어 있는지 확인
(kalilinux)
# vi /etc/resolv.conf
domain example.com search example.com nameserver 168.126.63.1 |
# wireshark & (Display Filter : ip.addr == 192.168.20.200)
# nmap -sU -p 53 192.168.20.200 UDP 스캔
request -> request response message
(linux200)
DNS 서비스 비활성화
# service named stop
-> named 데몬을 종료 한다.
(KaliLinux)
# wireshark & (Filter : ip.addr == 192.168.20.200)
# nmap -sU -p 53 192.168.20.200
Starting Nmap 7.01 ( https://nmap.org ) at 2016-12-29 16:57 KST Nmap scan report for 192.168.20.200 Host is up (0.00031s latency). PORT STATE SERVICE 53/udp closed domain MAC Address: 00:0C:29:13:ED:E0 (VMware) |
(linux200)
# service named start
-> named 데몬을 다시 start 한다.
(2) TCP Open Scan
공격자는 TCP SYN 패킷을 전송
- 포트 Open SYN/ACK 패킷 회신 후 ACK 전송
- 포트 Close RST/ACK 패킷 회신
TCP Open Scan/TCP Connect Scan
■ 사용시스템
- linux200(sshd(22))
- kalilinux(nmap CMD)
■ 개요
connect() 함수를 사용해서 각 포트별로 접속하여 스캔하는 방식이다.
포트가 열린 상태이면 연결 설정이 완료되며(3-way handshake 과정) 연결 완료 후 RST+ACK를 전송하여 연결을 강제로 종료한다.
포트가 닫힌 상태이면 타겟으로부터 RST+ACK 응답이 온다.
결과는 가장 정확하지만 연결 설정을 직접 수행하므로 시스템 로그가 남게 된다.
해당 포트가 방화벽에 의해 필터링 되고 있다면, 상대방으로 부터 아무런 응답 메시지를 받지 못하거나 ICMP 메시지(ICMP Destination Unreachable)를 받을 수 있다. 일반적으로 보안상 이유로 방화벽은 ICMP 메시지 응답을 주지 않도록 설정한다.
필터링 규칙
[실습] TCP Open Scan/TCP Connect Scan
칼리리눅스에서 linux200 서버에 TCP Open Scan 방식을 사용해 본다.
■ 작업시나리오
* kaliLinux(nmap CMD) --------------> linux200(sshd(22))
(KaliLinux)
# wireshark & (Fiter : ip.addr == 192.168.20.200)
# nmap -sT -p 22 192.168.20.200
Starting Nmap 7.01 ( https://nmap.org ) at 2016-12-29 17:06 KST Nmap scan report for 192.168.20.200 Host is up (0.00036s latency). PORT STATE SERVICE 22/tcp open ssh MAC Address: 00:0C:29:13:ED:E0 (VMware) Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds |
데몬이 응답했다. (방화벽이 없고 포트가 열려있는 것을 확인할 수 있다.)
두번째 패킷이 중요하다.
(linux200)
# service sshd stop
(KaliLinux)
# wireshark & (Fiter : ip.addr == 192.168.20.200)
# nmap -sT -p 22 192.168.20.200
Starting Nmap 7.01 ( https://nmap.org ) at 2016-12-29 17:08 KST Nmap scan report for 192.168.20.200 Host is up (0.00030s latency). PORT STATE SERVICE 22/tcp closed ssh MAC Address: 00:0C:29:13:ED:E0 (VMware) Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds |
데몬이 없어 운영체제가 응답했다.
(linux200)
# service sshd restart
(3) TCP Half Open Scan
공격자는 TCP SYN 패킷을 전송
- 포트 Open SYN/ACK 패킷 회신 후 RST 패킷 전송
- 포트 Close RST/ACK 패킷 회신
TCP Half Open Scan
■ 사용시스템
- linux200(telnetd(23))
- kalilinux(nmap CMD)
■ 개요
기본적으로 관리자 권한을 가지고 있어야 SYN 스캔을 할 수 있다. raw socket에 접근하여 TCP 프로토콜 헤더의 제어비트를 설정해야 하기 때문이다.
완전한 연결 설정 과정을 수행하지 않기 때문에 Half-Open(반 열린) 스캔이라고 한다. 완전한 연결을 수행하지 않기 때문에 시스템 로그가 남지 않아 그 흔적을 알 수 없는 의미로 "Stealth Scan"이라 한다.
포트가 열린 상태이면 타겟으로 부터 SYN+ACK 응답이 오그 ACK이 아닌 RST 플래그를 설정한 TCP 패킷을 전송하여 연결을 강제로 종료한다. 포트가 닫힌 상태이면 타겟으로부터 RST+ACK 응답이 온다.
연결 설정을 완료하지 않기 때문에 시스템 로그에 남지 않는다. (Stealth Scan)
해당 포트가 방화벽에 의해 필터링이 되고 있다면, 상대방으로 부터 아무런 응답 메시지를 받지 못하거나 ICMP 메세지(ICMP Destination Unreachable)를 받을 수 있다. 일반적으로 보안상의 이유로 방화벽은 ICMP 메시지 응답을 주지 않도록 설정한다.
[실습] TCP Half Open Scan
* 칼리리눅스에서 linux200의 23번 포트에 TCP Half Open Scan 방식을 테스트 한다.
■ 작업시나리오
* kaliLinux(nmap CMD) ----------> linux200(telnetd(23))
(kalilinux)
# wireshark & (Filter : ip.addr == 192.168.20.200)
# nmap -sS -p 23 192.168.20.200
Starting Nmap 7.01 ( https://nmap.org ) at 2016-12-29 17:12 KST Nmap scan report for 192.168.20.200 Host is up (0.00030s latency). PORT STATE SERVICE 23/tcp open telnet MAC Address: 00:0C:29:13:ED:E0 (VMware) |
(linux200)
# chkconfig krb5-telnet off
# service xinetd restart
(KaliLinux)
# wireshark & (Filter : ip.addr == 192.168.20.200)
# nmap -sS -p 23 192.168.20.200
Starting Nmap 7.01 ( https://nmap.org ) at 2016-12-29 17:14 KST Nmap scan report for 192.168.20.200 Host is up (0.00033s latency). PORT STATE SERVICE 23/tcp closed telnet MAC Address: 00:0C:29:13:ED:E0 (VMware) |
(linux200)
# chkconfig krb5-telnet on
# service xinetd restart
(4) FIN, Xmas, NULL Scan
공격자가
FIN Scan인 경우 TCP FIN 패킷 전송
Xmass Scan인 경우 TCP FIN/PSH/URG 패킷 전송
NULL Scan인 경우 TCP NULL 패킷 전송
- 포트 Open 응답없음
- 포트 Close RST 패킷 회신
nmap_FIN_Scan
사용시스템 - linux200(ftpd(21)) - kalilinux(nmap CMD) 작업시나리오 * kaliLinux(nmap CMD) ---------------> linux200(ftpd(21)) 실습 (kalilinux) # wireshark & (Filter: ip.addr == 192.168.20.200) NO. Time Source Destination Protocol Length Info ---------------------------------------------------------------------------------------------------------------------------- 836 4909.135945000 192.168.20.50 192.168.20.200 TCP 54 54352 > ftp [FIN] Seq=1 Win=1024 Len=0 837 4909.236555000 192.168.20.50 192.168.20.200 TCP 54 54353 > ftp [FIN] Seq=1 Win=1024 Len=0 # nmap -sF -p 21 192.168.20.200 (linux200) # service vsftpd stop (KaliLinux) # wireshark & (Filter: ip.addr == 192.168.20.200) NO. Time Source Destination Protocol Length Info ---------------------------------------------------------------------------------------------------------------------------- 858 5054.304281000 192.168.20.50 192.168.20.200 TCP 54 43377 > ftp [FIN] Seq=1 Win=1024 Len=0 859 5054.305104000 192.168.20.200 192.168.20.50 TCP 60 ftp > 43377 [RST, ACK] Seq=1 Ack=2 Win=0 Len=0 # nmap -sF -p 21 192.168.20.200 (linux200) # service vsftpd start
|
nmap_NULL_Scan
사용시스템 - linux200(vsftpd(21)) - kalilinux(nmap CMD) 작업시나리오 * kaliLinux(nmap CMD) -------------> linux200(vsftpd(21)) 실습 (kalilinux) # wireshark & (Filter : ip.addr == 192.168.20.50) NO. Time Source Destination Protocol Length Info ---------------------------------------------------------------------------------------------------------------------------- 873 5232.047885000 192.168.20.50 192.168.20.200 TCP 54 63630 > ftp [<None>] Seq=1 Win=1024 Len=0 874 5232.148356000 192.168.20.50 192.168.20.200 TCP 54 63631 > ftp [<None>] Seq=1 Win=1024 Len=0 # nmap -sN -p 21 192.168.20.200 (linux200) # service vsftpd stop (Kali Linux) # wireshark & (Filter : ip.addr == 192.168.20.50) NO. Time Source Destination Protocol Length Info ---------------------------------------------------------------------------------------------------------------------------- 904 5291.247566000 192.168.20.50 192.168.20.200 TCP 54 36053 > ftp [<None>] Seq=1 Win=1024 Len=0 905 5291.247995000 192.168.20.200 192.168.20.50 TCP 60 ftp > 36053 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0 # nmap -sN -p 21 192.168.20.200 (linux200) # service vsftpd start |
nmap_Xmas_Scan
사용시스템 - linux200 - kali linux 작업시나리오 * KaliLinux(nmap CMD) -------------> linux200(vsftpd(21)) 실습 (kali linux) (Filter : ip.addr == 192.168.20.50) # wireshark & NO. Time Source Destination Protocol Length Info ---------------------------------------------------------------------------------------------------------------------------- 1781 10204.415857000 192.168.20.50 192.168.20.200 TCP 54 41717 > ftp [FIN, PSH, URG] Seq=1 Win=1024 Urg=0 Len=0 1782 10204.516624000 192.168.20.50 192.168.20.200 TCP 54 41718 > ftp [FIN, PSH, URG] Seq=1 Win=1024 Urg=0 Len=0 # nmap -sX -p 21 192.168.20.200 (linux200) # service vsftpd stop (Kali Linux) (Filter : ip.addr == 192.168.20.50) # wireshark & NO. Time Source Destination Protocol Length Info ---------------------------------------------------------------------------------------------------------------------------- 1828 10255.936511000 192.168.20.50 192.168.20.200 TCP 54 43317 > ftp [FIN, PSH, URG] Seq=1 Win=1024 Urg=0 Len=0 1829 10255.937256000 192.168.20.200 192.168.20.50 TCP 60 ftp > 43317 [RST, ACK] Seq=1 Ack=2 Win=0 Len=0 # nmap -sX -p 21 192.168.20.200 (linux200) # service vsftpd start |
Ping스캔 의 경우
포트가 열려 있으면 ARP를 요청하고 ARP가 응답한다
포트가 닫혀 있으면 ARP를 요청하지만 ARP를 응답하지 않는다.
'Learning > └◆Network Hacking' 카테고리의 다른 글
dnmap 분산 스캐닝 (0) | 2016.12.29 |
---|---|
zenmap(xnmap) 스캐닝 (0) | 2016.12.29 |
스캐닝(Scanning) (0) | 2016.12.29 |
DNS 정보 수집 (0) | 2016.12.28 |