Metasploit 에서 효율성을 위한 전역 변수 사용

Kali LinuxBeginner
지금 연습하기

소개

Metasploit Framework 를 사용할 때, LHOST(수신 대기할 로컬 호스트) 및 LPORT(로컬 포트) 와 같이 다양한 모듈에 대해 여러 옵션을 설정해야 하는 경우가 많습니다. 각 모듈에 대해 이러한 옵션을 반복적으로 설정하는 것은 시간이 많이 소요될 수 있습니다. Metasploit 은 이를 해결하기 위해 전역 변수 (global variables) 라는 기능을 제공합니다. 변수를 전역적으로 설정하면 해당 옵션을 사용하는 모든 모듈에 자동으로 적용되어 워크플로우 효율성을 크게 향상시킬 수 있습니다.

이 랩에서는 Metasploit 콘솔 내에서 전역 변수를 설정하고, 사용하고, 해제하는 방법을 배우게 됩니다.

setg 명령어를 사용하여 전역 LHOST 설정하기

이 단계에서는 Metasploit 콘솔을 시작하고 LHOST에 대한 전역 변수를 설정합니다. setg 명령어는 동일한 msfconsole 세션 내에서 다른 모듈에 걸쳐 유지되는 변수를 설정하는 데 사용됩니다.

먼저, 실험 환경의 IP 주소를 찾습니다. 이 IP 는 LHOST의 값으로 사용됩니다.

hostname -I | awk '{print $1}'

다음과 유사한 출력을 볼 수 있습니다 (IP 주소는 다를 수 있습니다):

192.168.3.123

이 IP 주소를 기억하십시오. 이제 Metasploit Framework 콘솔을 시작합니다. -q 플래그는 시작 배너를 억제하는 "quiet" 모드에 사용됩니다.

msfconsole -q

프롬프트가 msf6 >로 변경됩니다. 이제 LHOST 변수를 전역적으로 설정해 보겠습니다. setg 명령어 뒤에 변수 이름과 방금 찾은 IP 주소를 입력합니다.

참고: YOUR_IP_ADDRESShostname -I 명령에서 얻은 실제 IP 주소로 바꾸십시오.

setg LHOST YOUR_IP_ADDRESS

확인 메시지가 표시됩니다:

LHOST => YOUR_IP_ADDRESS

이 명령은 이제 이 세션에 대한 전역 LHOST 값으로 IP 주소를 저장했습니다. 이를 확인하려면 -g 플래그와 함께 show 명령어를 사용할 수 있으며, 이는 모든 전역으로 설정된 변수를 표시합니다.

show -g

출력에는 모든 전역 변수가 나열됩니다:

Global
=======

  Name   Value
  ----   -----
  LHOST  YOUR_IP_ADDRESS

새로운 익스플로잇 모듈 선택하기

이 단계에서는 전역 변수가 자동으로 적용되는 방식을 확인하기 위해 익스플로잇 모듈을 선택합니다. 첫 번째 예시로 일반적인 페이로드 핸들러인 exploit/multi/handler를 사용하겠습니다. 이 모듈은 들어오는 연결을 수신 대기하는 데 일반적으로 사용됩니다.

msfconsole 프롬프트 내에서 use 명령어를 사용하여 모듈을 선택합니다:

use exploit/multi/handler

명령을 실행한 후, 현재 선택된 모듈을 반영하도록 프롬프트가 변경됩니다:

msf6 exploit(multi/handler) >

이는 현재 exploit/multi/handler 모듈의 컨텍스트에 있음을 나타냅니다. 설정하거나 표시하는 모든 옵션은 이 모듈에 특정되지만, 관련 전역 변수도 상속받게 됩니다.

LHOST 값이 이미 채워져 있는 것을 확인하기

이제 모듈을 로드했으므로, 전역 LHOST 변수가 적용되었는지 확인하기 위해 해당 옵션을 살펴보겠습니다.

이 단계에서는 show options 명령어를 사용하여 현재 모듈의 구성을 표시합니다.

msf6 exploit(multi/handler) > 프롬프트에서 다음 명령을 실행합니다:

show options

이 모듈의 옵션 테이블이 표시됩니다. LHOST 변수를 찾아보십시오. 첫 번째 단계에서 전역으로 설정한 IP 주소로 값이 이미 설정되어 있는 것을 알 수 있습니다.

Module options (exploit/multi/handler):

   Name  Current Setting  Required  Description
   ----  ---------------  --------  -----------


Payload options (generic/shell_reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST  YOUR_IP_ADDRESS  yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Wildcard Target

보시다시피, 전역 값이 자동으로 상속되었기 때문에 이 모듈에 대해 set LHOST 명령어를 사용할 필요가 없었습니다. 이것이 전역 변수를 사용하는 강력함입니다.

unsetg 명령어를 사용하여 전역 변수 제거하기

이 단계에서는 전역 변수를 제거하는 방법을 배웁니다. 더 이상 전역적으로 적용할 필요가 없는 변수가 있다면 unsetg 명령어를 사용할 수 있습니다. 이는 모듈별로 옵션을 다시 설정하거나 세션 구성을 정리하고 싶을 때 유용합니다.

Metasploit 프롬프트에서 unsetg 명령어 뒤에 제거하려는 변수 이름을 입력합니다.

unsetg LHOST

이 명령어는 LHOST 변수를 전역 범위에서 제거합니다. 확인 메시지가 표시됩니다:

Unsetting LHOST...

이제 동일한 모듈에 대해 show options를 다시 실행하면 LHOST 값이 비어 있는 것을 볼 수 있습니다.

show options

출력 결과에서 LHOST에 설정된 값이 없음을 확인할 수 있습니다.

Module options (exploit/multi/handler):

   Name  Current Setting  Required  Description
   ----  ---------------  --------  -----------


Payload options (generic/shell_reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST                   yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Wildcard Target

이제 이 모듈을 사용하려면 set 명령어를 사용하여 로컬로 LHOST를 설정해야 합니다.

전역 옵션과 로컬 옵션 사용 시점 논의하기

마지막 단계에서는 로컬 변수와 전역 변수를 설정하는 실질적인 차이점과 각각을 언제 사용해야 하는지에 대해 논의합니다. 이를 이해하면 Metasploit 에서 더 효과적으로 작업할 수 있습니다.

로컬 변수 (set 사용)

  • 범위: set 명령어로 설정된 변수 (예: set RHOSTS 10.10.10.1) 는 현재 로드된 모듈에 로컬입니다.
  • 동작: use 명령어를 사용하여 새 모듈로 전환하면 이 로컬 변수는 폐기됩니다. 새 모듈은 해당 옵션에 대한 자체 기본값 또는 빈 값을 갖게 됩니다.
  • 사용 시점: 단일 대상 또는 모듈에 특정한 옵션에는 set을 사용합니다. 가장 일반적인 예는 RHOSTS (원격 호스트/대상 IP) 이며, 이는 거의 항상 사용하는 각 익스플로잇마다 변경됩니다. 다른 예로는 TARGETURI 또는 특정 USERNAME이 있습니다.

전역 변수 (setg 사용)

  • 범위: setg 명령어로 설정된 변수 (예: setg LHOST 192.168.3.123) 는 전체 msfconsole 세션에 전역입니다.
  • 동작: 변수와 해당 값은 해당 옵션 이름을 사용하는 모든 모듈에 자동으로 상속됩니다. 모듈을 전환해도 유지됩니다.
  • 사용 시점: 세션 전체에 걸쳐 동일하게 유지될 가능성이 있는 옵션에는 setg를 사용합니다. LHOST는 공격 머신의 IP 주소가 일반적으로 변경되지 않기 때문에 완벽한 예입니다. LPORT도 일관되게 동일한 리스닝 포트를 사용하는 경우 전역 변수로 좋은 후보가 될 수 있습니다.

명령어 요약:

  • set <VARIABLE> <VALUE>: 현재 모듈에만 변수를 설정합니다.
  • setg <VARIABLE> <VALUE>: 세션의 모든 모듈에 대해 변수를 전역으로 설정합니다.
  • unset <VARIABLE>: 현재 모듈의 로컬 변수를 지웁니다.
  • unsetg <VARIABLE>: 전역 변수를 지웁니다.

대상별 옵션에는 set을, 세션 전체 옵션에는 setg를 전략적으로 사용하면 반복적인 구성을 최소화하고 익스플로잇 프로세스에 더 집중할 수 있습니다.

이제 Metasploit 콘솔을 종료할 수 있습니다.

exit

요약

이 실습에서는 Metasploit Framework 에서 전역 변수를 효과적으로 사용하여 워크플로우를 간소화하는 방법을 배웠습니다. setg 명령어를 사용하여 전역 LHOST를 정의하고, 다른 모듈에 자동으로 채워지는 것을 관찰했으며, unsetg 명령어를 사용하여 제거하는 연습을 했습니다. 또한 로컬 (set) 변수와 전역 (setg) 변수의 주요 차이점을 학습하여 침투 테스트 중에 더 효율적인 구성 선택을 할 수 있게 되었습니다. 이 간단한 개념을 숙달하면 복잡한 시나리오에서 상당한 시간을 절약하고 오류를 줄일 수 있습니다.