본문 바로가기

Learning/└◆Network Hacking

nmap 스캐닝


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 회신



UDP Open Scan

 

 

 

 

사용시스템

- 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

* 칼리리눅스에서 linux20023번 포트에 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