본문 바로가기
ETC/Hack

[윈도우7 해킹] Netcat을 이용한 셸 기본 연습

by lewns2 2021. 6. 23.

본 게시글은 "나만의 해킹 랩 만들기" 서적의 실습 내용입니다.

 

목표 : 해킹 랩에 윈도우 가상 머신을 구축하여 칼리로 윈도우를 공격하는 방법 익히기

 

칼리(공격 단말)
    어댑터 1
        다음에 연결됨 : 호스트 전용 어댑터
        이름 : VirtualBox Host-Only Ethernet Adapter #2
        IP 주소 : 10.0.0.2 (고정)
윈도우7(대상 단말)
    어댑터 1
        다음에 연결됨 : 호스트 전용 어댑터
        이름 : VirtualBox Host-Only Ethernet Adapter #2
        IP 주소 : 10.0.0.103 (동적)

 

1. Netcat?

Netcat은 TCP / IP 프로토콜을 사용하여 네트워크 연결을 통해 데이터를 읽고 쓰는 간단한 네트워킹 유틸리티이다.

 

https://joncraton.org/blog/46/netcat-for-windows

 

Netcat for Windows

Netcat for Windows April 10, 2009 Netcat is a simple networking utility which reads and writes data across network connections using the TCP/IP protocol. It's a wonderful tool for debugging all kinds of network problems. It allows you to read and write dat

joncraton.org

 

2. Netcat 일반 셸

 2.1 데이터 통신 확인하기 (칼리↔윈도우)

 

    1. 5555번 포트로 접속 대기 (윈도우7)

     - 5555번 포트로 접속해오는 통신에 대해 응답하는 서버와 같은 역할

응답 대기중

        nc -lvp 5555 명령 → l : 대기 모드(Listen) / v : 확장 모드(표시 내용이 늘어남) / p : 포트 번호 지정

 

        - netstat -an 명령을 통한 5555번 통신 대기 상태 확인

5555번 포트로 대기 중(LISTENING)

[부록] netstat 출력 내용

이름 의미
Proto 프로토콜 종류 (TCP, UDP, RAW 등)
Local Address 출발지 단말(로컬)의 IP 주소와 포트 번호(포트 이름)
Foreign Address 도착지 단말의 IP 주소(호스트 이름)와 포트 번호(포트 이름)
State 현재 상태

 

[부록] netstat 옵션

옵션 기능
a 모든 연결 및 수신 대기 포트 표시
n 주소나 포트 형식을 숫자로 표시
p(프로토콜) 해당 프로세스를 사용하고 있는 프로그램 이름 표시
l LISTEN 상태인 포트 표시
t 현재 연결 오프로드 상태 표시
r 라우팅 테이블 표시
x 네트워크 직접 연결, 수신기 및 공유 끝점 표시

 

    2. Netcat으로 윈도우에 접속 (칼리리눅스)

 

다시 윈도우 cmd에서 netstat 명령을 실행해보면 Foreign Address에 칼리 IP주소와 포트 번호가 표시된다.

이때, State는 ESTABLISHED로 변경돼 있다.

 

    3. 데이터 통신 확인

     - 채팅하는 것과 같은 상태가 됨을 알 수 있다.

 

 

Netcat 서버(윈도우)와 Netcat 클라이언트(칼리)가 서로 데이터 교환이 된다는 것을 알 수 있다.

 

 

3. 바인드 셸(클라이언트 → 서버)

- 공격 단말에서 대상 단말에 접속하는 형태바인드 셸(Bind shell)이라고 한다.

- 셸(shell)이란 사용자가 입력한 명령을 읽어 들여 그것을 해석하고 커널에 전달하는 프로그램을 말한다.

 

윈도우에서 Netcat을 서버로 동작시킬 때 -e 옵션을 사용한다.

-e 옵션에 연결한 후 실행한 프로그램을 지정한다. (아래 코드는 cmd.exe를 지정한 모습)

 

칼리에서 Netcat을 사용해 접속하면 윈도우 명령 프롬프트가 표시된다.

칼리 리눅스에서 윈도우 명령 프롬프트가 표시된 모습

 

4. 리버스 셸(서버 → 클라이언트 접속)

 - 서버가 클라이언트에 접속하는 방법

 

    4.1 리버스 셸이 연구된 배경 : 바운드 셸의 한계 극복을 위함

     - 바인드 셸은 방화벽이나 라우터가 있다면 통신이 차단될 수 있음.

     - 왜냐하면 인바운드(외부에서 내부로 들어오는 통신)를 제한하기 때문이다.

 

반면, 방화벽이나 라우터는 아웃바운드 통신(내부에서 외부로 나가는 통신)은 엄격하게 막지 않는 경우가 많으므로

리버스 셸 통신은 차단되지 않을 가능성이 높다.

더보기

* 바운드 셸의 한계

인바운드를 제한하는 방화벽 규칙이 있다면, 백도어를 설치하더라도 해당 포트로 들어가는 통신이 제한되기 때문에 백도어를 사용할 수 없다. 

 

    바인드 셸과는 달리 공격할 단말(칼리)에서 응답을 기다린다.

728x90
반응형