프로그램언어+/┗ Network

Nmap 포트 스캔 명령어 옵션 파헤치기 (옵션, 에러해결)

logthink 2020. 3. 24. 10:44

현재 포트스캔을 진행하기 위해 Nmap을 사용했으며, 추가로 스캔 진행하는 IP를 숨기기 위해 Tor, proxychains을 사용함


proxychains nmap -sS -n -Pn -sV --open -O -r -max-rate 32 --max-rtt-timeout 1 -T5 -p 1-65535 -oX [대상IP].xml


# DNS 서비스 확인 스크립트

 curl ifconfig.me

 dig {} / nslookup {} / ping {} / tracert {} 


# Nmap 시스템 콜 스크립트

 nmap -sS -n -Pn -sV --open -O -r -max-rate 32 --max-rtt-timeout 1 -T5 -p 1-65535 -oX [대상IP].xml

 nmap -sT -PN -n -sV -max-rate 32 --max-rtt-timeout 1 -r -T5 -p {}-{} {}

 nmap -sS -PN -n -sV -max-rate 32 --max-rtt-timeout 1 -r -T5 -p 1-65535 --scan-delay 3 127.0.0.1



# tcpdump 스크립트

 tcpdump -i eth0 dst {목적지IP}

 tcpdump -i eth0 -w {}.log


※ 진행은 EC2 인스턴스에 SSH로 연결 후 스캔을 시도했으며, 다수 URL대상으로 정보수집을 진행하였음.



>>Troubleshooting


Q. Library error name of the lib...'libproxychains.so.3'

->snap을 이용해 관리중인 명령어를 직접 exported(환경변수설정)으로 해결

ex) export PATH=$PATH:/bin/nmap

->또한, nmap재설치하기도 했음


Q. Elastic IP address could not be associated

->할당이 가능한 외부 주소를 인스턴스와 매핑하여 해결


Q. /etc/proxychain.conf Error

->실제 존재하는 프록시를 거치는지 확인하여 해결


Q.특정 옵션이 안됨(-sT, -sS)

->apt remove nmap;apt install nmap으로 해결


Q. timeout / socket confused

->timeout은 호스트 아이피에 대해 응답 수신이 어려웠기 때문에 고정IP로 해결함

->confused는 권한 상관없이 거절되는 문제로 아직 해결중


Q. segmentation fault (core dump)

->해결중이긴한데, 접근해서는 안되는 메모리 영역을 참조해서 발생한다고 나오긴하는데

현재까지 판단되는것은 array크기 보다 큰 index를 엑세스해서 그런거 같음.

어디서? 응답 데이터를 받을때 *(어퍼스트로피)값으로 할당하는것을 ?(물음표)로 대체하여 길이를 지정해보자

sed -i bak '/(?:(?!\\r/ s/^/#/' nmap-service-probes

(NULL영역을 건들거나, 할당받은 메모리영역을 해제할때 발생한건가?)


Q. looks like an IPv6 target specification

-> nmap옵션 중 -6가 있음. 이걸로 해결



1. 스캐닝 방법

스캔

옵션

설명

TCP SYN 스텔스

-sS

 * 프로토콜(TCP) 포트를 스캔하는데 가장 빠른 방법으로 지금까지 단연 인기 있는 스캔 방법이다. 이 스캔은 연결 스캔보다 더 비밀스러우며 모든 기능적인 TCP 스택에 대해 잘 작동한다.

TCP 연결

-sT

 * 연결 스캔은 대부분의 다른 방법처럼 로우 패킷에 의존하기 보다는 장치를 스캔하는데 같은 이름의 시스템 콜을 사용한다. 이 스캔은 대부분 권한이 없는 유닉스 사용자들이 사용하며 그런 경우 SYN 스캔이 작동하지 않기 때문에 IPv6를 대상으로 사용된다.

UDP

-sU

 * UDP포트 스캔이다.

TCP FIN, Xmas, Null

-sF,
-sX,
-sN

 * 특정 목적 스캔 방법으로 방화벽 뒤에 있는 시스템을 탐험하기 위해 방화벽을 몰래 지나치는 데 사용한다. 불행히도 이 스캔들은 일부 시스템이 보여주지 않는 대상 시스템의 행동에 의존한다.

TCP ACK

-sA

 * ack스캔은 보통 방화벽 규칙 세트를 정밀하게 표시하기 위해 사용한다.
특히 ack 스캔은 방화벽 규칙이 제대로 된 상태에 있는지 아닌지를 이해하는데 도움을 준다. 단점은 열린 포트와 닫힌 포트를 구별하지 못하는 점이다.

TCP Window

-sW

 * 윈도우 스캔은 ack스캔과 같은데 특정 장치에 대해서는 열린 포트와 닫힌 포트를 구별할 수 있다는 점에서 다르다.

TCP Maimon

-sM

 * 이 모호한 방화벽-침투 스캔 방법은 fin 스캔과 유사한데 ack 플래그도 포함한다. 
이는 더 많은 패킷 필터링 방화벽을 잡게 허락하는데 단점은 FIN 스캔보다 더 적은 시스템에 대해 작동한다는 점이다.

TCP Idle

-sI

 * Idle 스캔은 모든 방법 중 가장 비밀스러운 스캔방법이며 때로는 신뢰성 있는 Ip 주소 관계조차도 탐험한다. 불행히도 이 스캔 역시 느리고 복잡하다.

IP 프로토콜

-sO

 * 프로토콜 스캔은 어느 ip 프로토콜이 대상 장치에 의해 지원되는지를 결정한다.
이것은 tcp나 udp포트 번호보다는 ip프로토콜 숫자를 통해 순환하기 때문에 기술적으로 포트 스캔이 아니다. 하지만 여전히 –P 옵션을 사용해 스캔된 프로토콜 번호를 선택하고 결과를 보통의 포트 테이블 형식으로 보고하며 포트 스캐닝 방법과 같은 스캔 엔진을 사용한다.

TCP FTP 바운스

-b

 * tcp FTP 바운스 스캔 종류는 FTP서버를 속여 프록시로 포트 스캔을 수행하게 한다. 대부분의 FTP 서버는 이제 이 스캔을 방지하게 패치됐다.

 

2. 포트선택

옵션

설명

-p <포트>

 * -p 인수를 통해 해당 포트를 지정합니다. <포트명 대신 해당 서비스가 매치될 수도 있습니다(예 : -p ssh)

-p 22, 25, 80

 * 다수의 포트 선택은 ,로 구분지어 사용할 수 있습니다.

-p 20-25,443,5900-5950

 * 포트의 범위를 –를 이용하여 확장할 수 있습니다.

-p-

 * 전체 포트범위(1~65535)를 스캔합니다.

-p http*

 * 와일드카드(*)는 포트와 이와 유사한 이름을 매치시키는데 사용할 수 있습니다.
    (ex : http(80), https(443), http-proxy(8080))

 

3. 스캔 성능 옵션

옵션

설명

-T[0~5]

 * 타이밍 템플릿은 많은 변수에 영향을 주는데 전체 Nmap 속도를 아주 느리게(-T0)부터 아주 공격적(빠르게)으로(-T5)까지 옵션을 통해 설정할 수 있다.

--min-rtt-timeout
--max-rlt-timeout
--initial-rlt-timeout

 * 포트 스캔 프로브가 응답하기를 기다릴 최소, 최대, 시작 시간을 지정한다.

--host-timeout

 * Nmap 이 주어진 시간보다 더 많이 걸리는 스캔은 포기하게 한다.

--min-rate, --max-rate

 * Nmap 이 초마다 보내는 프로브 패킷 숫자의 하한과 상한을 지정한다.

--max-retries

 * 하나의 포트에 전해지는 포트 스캔 프로브 재전송의 최대 숫자를 지정한다.

--min-hostgroup
--max-hostgroup

 * Nmap 이 병렬로 포트 스캔할 호스트의 최소 개수와 최대 개수를 지정한다.

--min-parellelism, --max-parallelism

 * 포트 스캔 프로브의 최소와 최대 숫자를 한정 짓는다.

--scan-delay,

--max-scan-delay

 * 프로브를 어느 개인 호스트에 보내는 사이에 적어도 주어진 시간동안 기다리게 한다. 스캔 지연은 패킷 손실을 탐지하면 할수록 더 커지며 최대는 –max-scan-delay로 지정할 수 있다.

 

4. 출력 옵션

옵션

설명

-v

 * 출력 형식을 다양하게 해 Nmap 진행 중 스캔에 대한 더 많은정보를 출력하게 한다. 열린 포트는 발견 됐다고 보여지며 Nmap 이 몇 분보다 더 많이 걸릴 거라고 생각하면 추정 완료 시간을 제공한다.

-d

 * 디버깅 레벨을 증가시켜 Nmap 이 버그를 추적하는데 유용할 수 있는 옵션에 대한 상세한 사항을 출력하게 하거나 간단히 어떻게 작동하는지에 대한 내용을 출력하게 한다. 충분한 정보를 볼 수 없다면 –d5처럼 원하는 레벨을 붙여 더 높은 레벨을 시도해 볼만 하다.

--packet-trace

 * Nmap 이 보내지거나 받은 모든 패킷의 요약을 출력한다. Nmap 이 수면 아래에서 무엇을 하는지 이해할 수 있는데 귀중한 방법이 되기도 한다.

-oN <파일명>

 * <파일명>으로 지정한 파일에 Nmap 의 일반적인 결과를 저장한다. 이 형식은 대부분 런타임으로 Nmap 에 의해 출력되는 표준 상호작용 출력과 같다.

-Ox <파일명>

 * <파일명>으로 지정한 파일에 XML 형식으로 Nmap 출력 결과를 저장한다. 이는 Nmap 결과를 처리하는 스크립트와 프로그램에 의한 사용형식에 선호된다.

-oG <파일명>

 * <파일명>으로 지정한 파일에 Nmap 의 grepable 형식으로 출력 결과를 지정한다. 이 형식은 다른 데이터로 grep,awk,sed하기 용이하다.

-oA <파일명>

 * 이 형식은 위의 3가지 출력 결과를 모두 각각의 파일명으로 출력한다. 
예를 들어 test.nmap, test,xml, test.gnmap과 같이 3가지 타입의 파일을 생성한다.

--open

 * Nmap 의 포트 테이블 중에서 열린 포트만 보여준다.

 

5. 핑 스캔

옵션

설명

-sP

 * 핑 스캔(ICMP)사용, 내부단은 ARP 요청이 대신함

-sL

 * 목록 스캔(서버가 살았는지 죽었는지 확인하는 좋은 방법)

-PS

 * TCP SYN 패킷을 보낸다.(SYN ->SYN,ACK -> RST)

-PA

 * TCP ACK 패킷을 보낸다. (위의 –PS와 비슷하지만 방화벽을 우회하기 위해 ACK를 보낸다)

-PU

 * UDP핑. 빈 UDP패킷을 해당 포트로 보낸다. TCP필터링을 피해간다.

-PE, -PP, -PM

 * ICMP 패킷용 스캔

-PO

 * IP 프로토콜 핑. ICMP, IGMP, IP 패킷을 이용한 스캔

-PR

 * ARP스캔

 

6. 기타 옵션

옵션

설명

-6

 * Nmap 이 IPv6프로토콜을 사용해서 대상을 스캔한다.

-r

 * Nmap 의 탐지를 더 어렵기 하기 위해서 포트 스캔 순서를 랜덤화 해서 수행한다.

-PN

 * 핑 테스트를 건너뛴다. (시간과 은닉의 장점을 추구한다.)

--reason

 * Nmap 의 포트 구별방식을 설명한다.

 


>>Nmap 옵션 참고사이트

https://nmap.org/book/man-briefoptions.html

http://jsoohouse.blogspot.com/2015/03/nmap-network-scanning.html

https://4lugin.tistory.com/136

https://www.solanara.net/solanara/nmap


>>Nmap 수상한 트래픽 탐지

http://pchero21.com/?p=888


>>Nmap 오류(Connection refused)

https://cnpnote.tistory.com/entry/PYTHON-%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%97%90%EC%84%9C-connection-refused%EC%98%A4%EB%A5%98%EA%B0%80-%EB%B0%9C%EC%83%9D%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C-%EC%86%8C%EC%BC%93


>>Nmap 오류(operation already in progress)

https://m.blog.naver.com/PostView.nhn?blogId=nds239&logNo=220463980726&proxyReferer=https%3A%2F%2Fwww.google.com%2F