본 게시글은 "나만의 해킹 랩 만들기" 서적의 실습 내용입니다.
목표 : 해킹 랩에 윈도우 가상 머신을 구축하여 칼리로 윈도우를 공격하는 방법 익히기
칼리(공격 단말) |
어댑터 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번 통신 대기 상태 확인
[부록] 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 리버스 셸이 연구된 배경 : 바운드 셸의 한계 극복을 위함
- 바인드 셸은 방화벽이나 라우터가 있다면 통신이 차단될 수 있음.
- 왜냐하면 인바운드(외부에서 내부로 들어오는 통신)를 제한하기 때문이다.
반면, 방화벽이나 라우터는 아웃바운드 통신(내부에서 외부로 나가는 통신)은 엄격하게 막지 않는 경우가 많으므로
리버스 셸 통신은 차단되지 않을 가능성이 높다.
* 바운드 셸의 한계
인바운드를 제한하는 방화벽 규칙이 있다면, 백도어를 설치하더라도 해당 포트로 들어가는 통신이 제한되기 때문에 백도어를 사용할 수 없다.
바인드 셸과는 달리 공격할 단말(칼리)에서 응답을 기다린다.