Linux command - Nmap

sycho·2023년 12월 19일
0

Linux Commands

목록 보기
13/30

Nmap

  • Network Mapper의 약자다.

  • 오픈소스 프로그램이며, 설치를 하려면 ubuntu에서는 다음과 같이 한다.

$ sudo apt install nmap
  • 빠르게 네트워크 지도를 형성 (mapping) 한다는 것에서 이름을 따왔으며, 간단한 command 형태로 사용이 가능하기도 하고 Nmap scripting engine을 활용해 script 형태로 활용하는 것도 가능하다.

  • 몇가지 기능으로는

    • 단일 혹은 다수의 네트워크들에 있는 서버, 라우터, 스위치, 휴대용 기기 등의 장치들이 뭐가 있는지 파악
    • 시스템 상에서 돌아가고 웹서버, DNS 서버 외의 서비스들이 뭐가 있는지
    • 각 서비스들의 버전이 어떤지 확인 (이를 통해 가질 수 있는 잠재적 보안 위협 요소들 파악도 가능)
    • 각 장치에서 돌아가고 있는 OS 정보 및 해당 OS의 버전.
    • Nmap scripting engine에 있는 script들을 통해 시스템 공격을 해가지고 취약점이 존재하는지 확인
    • Zenmap이라는 GUI 지원을 통해 좀 더 보기 편한 네트워크 상태 파악 가능.
  • 주로 네트워크 보안이 잘 이루어져 있는지를 파악하기 위한 도구로 사용된다.

  • 엄청 기능이 많으며, 모든 정보는 이 manual page에서 확인이 가능하다.

  • 아무데서나 쓰면 불법이며(...) scanme.nmap.org라는 실험용 사이트가 있다.

commands

기본적인 scan 방식

-sp

  • ping을 이용해서 scan하는 것이다. 특정 subnetwork에 있는 device들이 무엇인지를 scan할 때 쓴다.
$ nmap -sp 192.168.1.1/24

[hostname]

  • 단일 host의 port를 전부 scan을 한다.
$ nmap (서비스 운영 주소. 보안상 비공개)
Starting Nmap 7.80 ( https://nmap.org ) at 2023-12-19 17:55 KST
Nmap scan report for (서비스 운영 주소. 보안상 비공개)
Host is up (0.00085s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE
80/tcp open  http

stealth scan (-sS)

  • SYN packet을 보낸 다음에 response가 SYN/ACK인 경우, 해당 port가 열려있다는 것을 확인하는 형식으로 scan.

  • 하지만 3-way handshake를 절대로 완료하지 않으므로 scan된 대상은 scanning system이 누구인지를 파악하지를 못한다.

  • 시간이 좀 오래걸린다. root 권한을 필요로 한다.

$ sudo nmap -sS scanme.nmap.org

version scan (-sV)

  • 각 서비스가 무슨 버전을 사용하는지 scan할 때 쓰인다.

  • 다만 실제로 해당 서비스가 해당 버전을 사용한다는 것이 100% 보장되는 것은 아니니 맹신하진 말자.

$ nmap -sV (서비스 운영 주소. 보안상 비공개)
Starting Nmap 7.80 ( https://nmap.org ) at 2023-12-19 18:07 KST
Nmap scan report for (서비스 운영 주소. 보안상 비공개)
Host is up (0.00063s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE VERSION
80/tcp open  http    Boa httpd

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 12.18 seconds

OS scan (-O)

  • 각 서비스가 무슨 OS를 사용하는지 scan할 때 쓰인다

  • 이것도 100% 정확하진 않다. 그리고 root 권한이 필요하다.

$ sudo nmap -O (서비스 운영 주소. 보안상 비공개)
Starting Nmap 7.80 ( https://nmap.org ) at 2023-12-19 18:10 KST
Nmap scan report for (서비스 운영 주소. 보안상 비공개)
Host is up (0.00049s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE
80/tcp open  http
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Linux 2.6.17 - 2.6.36 (98%), D-Link DIR-600 or DIR-645 WAP (Linux 2.6.33) (98%), Linux 2.6.32 - 2.6.35 (96%), Linux 2.6.23 - 2.6.38 (94%), AXIS 207W Network Camera (93%), DD-WRT v24-sp2 (Linux 2.6.24) (93%), Linux 2.6.13 - 2.6.32 (93%), Linux 2.6.16 - 2.6.35 (embedded) (93%), Linux 2.6.24 - 2.6.36 (93%), DD-WRT (Linux 2.6.34) (92%)
No exact OS matches for host (test conditions non-ideal).

OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 9.25 seconds

Aggressive scan (-A)

  • OS 감지, 버전 감지, script scanning과 traceroute까지 전부 한번에 하는 option
$ nmap -A 110.76.94.120
Starting Nmap 7.80 ( https://nmap.org ) at 2023-12-19 18:12 KST
Nmap scan report for (서비스 운영 주소. 보안상 비공개)
Host is up (0.00069s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE VERSION
80/tcp open  http    Boa httpd
|_http-server-header: Httpd/1.0
|_http-title: Site doesn't have a title (text/html).

여러 host 한번에 scan

  • 여러가지 방법이 있다. 첫번째는 그냥 한줄에 띄어쓰기로 구분해서 집어넣는 것이다.
$ nmap 192.164.0.1 192.164.0.2 192.164.0.3
  • 아니면 *을 사용해서 특정 subnet의 모든 host를 한번에 scan하는 것도 가능하다.
$ nmap 192.164.0.*
  • 아니면 쉼표를 사용해도 된다.
$ nmap 192.164.0.1,2,3
  • 아니면 -으로 범위를 나타내도 된다.
$ nmap 192.164.0-255

port scan (-p, --top-ports)

  • 특정 host의 특정 port에 대해 scan을 하고 싶다면 -p를 쓰자
$ nmap -p 973 192.164.0.1
  • 여기에 port의 type까지 명시를 하면, 해당 port에서 운영중인 서비스에 관한 정보까지 확실하게 파악이 가능하다. 예를들어 밑과 같이 하면 port 973에서 운영하는 것이 TCP connection이라고 생각하고 그것에 대한 추가 정보까지를 파악하는 것이 가능하다.
$ nmap -p T:7777, 973 192.164.0.1
  • 특정 port 범위에 대해 scan하고 싶으면 -을 쓰자. 밑은 76~973번 port에 대해 scan한다.
$ nmap -p 76-973 192.164.0.1
  • --top-ports를 사용하면 가장 자주 사용되는 걸로 알려진 port중 상위 n개를 scan한다. 밑은 상위 10개에 대해서 scan을 한다.
$ nmap --top-ports 10 192.164.0.1

scan from file (-iL)

  • 특정 ip주소들을 가지는 host들에 대해서 scan을 하고 싶다면 그것을 파일에 저장한 다음에... 다음과 같이 하면 된다. 파일이 ips.txt라면
$ nmap -iL ./ips.txt

output verbosity and format

-v

  • 좀 더 상세한 output이 나온다.
$ nmap -v (서비스 운영 주소. 보안상 비공개)
Starting Nmap 7.80 ( https://nmap.org ) at 2023-12-19 18:25 KST
Initiating Ping Scan at 18:25
Scanning (서비스 운영 주소. 보안상 비공개) [2 ports]
Completed Ping Scan at 18:25, 0.00s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 18:25
Completed Parallel DNS resolution of 1 host. at 18:25, 1.00s elapsed
Initiating Connect Scan at 18:25
Scanning (서비스 운영 주소. 보안상 비공개) [1000 ports]
Discovered open port 80/tcp on 110.76.94.120
Completed Connect Scan at 18:25, 4.00s elapsed (1000 total ports)
Nmap scan report for 110.76.94.120
Host is up (0.00081s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE
80/tcp open  http

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 5.03 seconds

-oN

  • output을 text파일로 전달을 한다. 평소에 나오는 output과 약간 양식이 다르다. 밑의 command로 output.txt에다가 저장한다.
$ nmap -oN output.txt (서비스 운영 주소. 보안상 비공개)
  • output은 다음과 같이 나왔다
$ cat output.txt
# Nmap 7.80 scan initiated Tue Dec 19 18:26:47 2023 as: nmap -oN output.txt (서비스 운영 주소. 보안상 비공개)
Nmap scan report for (서비스 운영 주소. 보안상 비공개)
Host is up (0.00081s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE
80/tcp open  http

# Nmap done at Tue Dec 19 18:26:53 2023 -- 1 IP address (1 host up) scanned in 5.73 seconds

-oX

  • xml 형식으로 출력을 한다.
$ nmap -oX output.xml (서비스 운영 주소. 보안상 비공개)

-oA

  • 많이 사용되는 3개의 출력 형식인 xml, Nmap, gnmap 확장자로 output을 저장한다. 이름은 지정 가능.
nmap -oA output (서비스 운영 주소. 보안상 비공개)

Nmap Scripting Engine

  • nmap을 활용해서 script 파일을 만들 때 사용되는 엔진들.

  • 존재하는 script를 사용하거나, 본인이 직접 script를 사용하거나, Lua를 사용해서 이미 존재하는 script를 편집하는게 가능하다.

  • 자세한것은 이 링크 참고 여기서는 자세히 설명 안할 예정

Zenmap

  • Nmap을 위한 GUI. 무료이며 오픈소스이다.

  • 이것도 자세히 설명은 하지 않을거며 궁금하면 이 링크 참고

profile
CS 학부생, 핵심 관심 분야 : Embed/System/Architecture/SWE

0개의 댓글