넷캣(Netcat)은 TCP나 UDP 프로토콜을 사용하는 네트워크 연결에서 데이터를 읽고 쓰는 간단한 유틸리티 프로그램이다. 일반적으로는 UNIX의 cat과 비슷한 사용법을 가지고 있지만 cat이 파일에 쓰거나 읽듯이 nc는 network connection 에 읽거나 쓴다. 이것은 스크립트와 병용하여 network에 대한 debugging, testing tool로써 매우 편리하지만 반면 해킹에도 이용범위가 넓다. |
connect to somewhere: listen for inbound: | nc [-options] hostname port[s] [ports] ... nc -l -p port [-options] [hostname] [port] |
[ 옵션 ] | [ 설명 ] |
-c shell commands | as `-e'; use /bin/sh to exec [dangerous!!] |
-e | program to exec after connect [dangerous!!] |
-b | allow broadcasts |
-g | source-routing hop point[s], up to 8 |
-G | source-routing pointer: 4, 8, 12, ... |
-h | this cruft |
-i secs | delay interval for lines sent, ports scanned |
-k | set keepalive option on socket |
-l | listen mode, for inbound connects |
-n | numeric-only IP addresses, no DNS |
-o file | hex dump of traffic |
-p port | local port number |
-r | randomize local and remote ports |
-q secs | quit after EOF on stdin and delay of secs |
-s addr | local source address |
-T tos | set Type Of Service |
-t | answer TELNET negotiation |
-u | UDP mode |
-v | verbose [use twice to be more verbose] |
-w secs | timeout for connects and final net reads |
-z | zero-I/O mode [used for scanning] |
연결 수립 | |
넷캣은 IP주소의 임의의 포트로 연결할 수 있다.
|
서비스 배너 수집 | |
다양한 서비스를 대상으로 그대로 사용할 수 있다. 하지만 HTTP 같은 서비스의 배너를 알아내려면 우선 HTTP명령을 전송해야 한다.
위 결과를 보면 웹 서버 소프트웨어와 운영체제를 알 수 있다. |
간단한 서버 | ||||
포트 1234에서 리슨(listen)하는 간단한 채팅 서버를 만들어 보자.
클라이언트에서 입력한 모든 문자가 서버에 출력된다. 간단한 채팅 서버를 만든 셈이다. |
파일 전송 | ||||
클라이언트에서 넷캣 리스너로 파일을 전송할 수도 있고 역방향으로 파일을 전송할 수도 있다.
클라이언트에서 명령의 결과를 바로 서버 측으로 전송하거나 파일을 전송할 수 있다. |
포트 스캐닝 | |
@ 상세 출력(-v), @ DNS 이름 주소 변환 실시 안 함(-n), @ 데이터 전송 안 함(-z), @ 최대 1초의 연결 리슨 시간(-w 1)을 옵션으로 TCP 프로토콜을 사용해서 1-1023 사이의 포트를 스캔
80, 22번 포트가 열려있음을 확인할 수 있다. ※ 넷캣이 포트 스캐닝을 지원하긴 하지만 포트 스캐닝을 실시할 때는 엔맵(nmap)을 권장. |
백도어 쉘 | ||||
@ 특정 포트(-p)에서 리슨하면서(-l) @ 연결 수립 시 특정 쉘을 실행하도록(-e) 옵션을 지정하여 백도어 쉘을 실행 할 수 있다.
연결이 수립되면 서버에 임의의 리눅스 명령어를 입력할 수 있다. 명령 뒤에 ";"(세미콜론)문자를 덧붙여야 한다. (사용하는 클라이언트 마다 다를 수 있음) 위와 같이 서버에서 실행된 명령의 결과가 클라이언트 화면에 출력된다. 넷캣 리스너를 루트 권한으로 실행하면 서버에서 임의의 모든 작업을 수행할 수 있다. 누구나 해당 포트로 연결해서 넷캣 백도어를 이용할 수 있다는 점과, 넷캣 연결은 기본적으로 암호화되지 않는다는 사실에 주의해야 한다. |
리버스 쉘 | ||||
이 방법은 방금 위에서 살펴본 백도어 쉘과는 반대 케이스다. 이전 예에서는 서버가 쉘을 실행했지만 리버스 쉘에서는 원격 호스트가 서버로 연결하면서 쉘을 실행한다.
서버에서 "connect to [10.0.2.100] from (UNKNOWN)...<etc>"와 같은 메시지를 확인할 수 있다면 리버스 쉘이 성공적으로 연결된 것이다. 서버에서 임의의 명령을 입력하면 원격 머신에서 실행된다. 이처럼 원격 머신의 운영체제에서 지원하는 임의의 명령을 실행할 수 있다. |
'Essential Tools' 카테고리의 다른 글
맨페이지 간단한 색상 추가해서 보기 (0) | 2011.10.25 |
---|---|
한장으로 보는 정규 표현식(Regular Expression) cheat sheet (0) | 2011.09.10 |
[gcc] 옵션 정리 (0) | 2011.06.27 |
DJGPP 설정 (1) | 2011.05.08 |
[Port scanner] Nmap Security Scanner (0) | 2010.09.04 |