Nmap 에서 Metasploit 스캐너 개발하기

NmapBeginner
지금 연습하기

소개

이번 랩에서는 Metasploit 의 모듈 구조와 기능 분석을 다시 살펴보고, 스캐너 (scanner) 를 소개하는 데 집중할 것입니다. 여러분은 자신만의 Metasploit 스캐너를 개발하는 방법을 배우게 될 것입니다.

이 랩은 실습 튜토리얼입니다. 몇 가지 작업을 이해하는 데 도움을 주기 위해, 정보 보안 이론을 포함하고 여러분이 읽어볼 가치 있는 기사를 추천하여 실습과 함께 이론적 기반을 다질 수 있도록 돕겠습니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 97%입니다.학습자들로부터 95%의 긍정적인 리뷰율을 받았습니다.

Metasploit 구조 검토 및 simple_tcp.rb 파일 생성

먼저, Metasploit 의 구조를 검토해 보겠습니다.

Metasploit 은 코드 재사용 효율성을 높이기 위해 모듈식 개념으로 설계되었습니다. 프레임워크는 Ruby 로 개발되었으며 Perl, C, Assembly 및 Python 으로 작성된 구성 요소를 포함합니다. 주로 Linux 운영 체제용으로 설계되었으므로 명령 구조는 Linux 명령 셸과 매우 유사합니다. 그러나 현재 Windows, Solaris 및 Mac 과 같은 모든 주요 운영 체제를 지원합니다.

+---------------+------------------+----------------------------------------------+
| 영어 이름  | 모듈 이름      | 설명                                  |
+---------------+------------------+----------------------------------------------+
| `Aux`         | 보조 모듈 | 침투 과정에서 정보 수집을 위한 다양한 보조 모듈 제공, |
|               |                  | 스캐닝 및 지문 인식 포함.                    |
|               |                  | 다양한 네트워크 서비스, 가짜 서비스 구축,      |
|               |                  | 로그인 자격 증명 수집, 비밀번호 추측 등.      |
+---------------+------------------+----------------------------------------------+
| `Exploits`    | 익스플로잇 모듈   | 발견된 보안 취약점 또는 구성 취약점을 악용하여   |
|               |                  | 원격 대상 시스템을 공격하고, 페이로드를 심고 실행하며, |
|               |                  | 대상 시스템에 대한 접근 제어를 획득하는 코드 구성 요소. |
+---------------+------------------+----------------------------------------------+
| `Post`        | 포스트 익스플로잇     | 익스플로잇을 통해 원격 접근 제어를 획득한 후, 제어된 시스템에서  |
|               | 모듈           | 다양한 포스트 익스플로잇 작업을 지원합니다. |
|               |                  | 민감한 정보 획득, 추가 피벗, 피벗 공격 시작 등. |
+---------------+------------------+----------------------------------------------+
| `Payloads`    | 페이로드 모듈   | 페이로드는 성공적인 익스플로잇 후 대상 시스템에서 실행되는 코드 세그먼트이며, |
|               |                  | 일반적으로 공격자를 위한 제어 세션 연결을 엽니다. |
+---------------+------------------+----------------------------------------------+
| `Encoders`    | 인코더 모듈   | 페이로드와 NOP(No Operation) 명령어를 명령어 시퀀스로 조립한 후, |
|               |                  | Metasploit은 익스플로잇 모듈이 악성 데이터 버퍼를  |
|               |                  | 실행을 위해 대상 시스템에 주입하기 전에 중요한 인코딩 단계를 수행해야 합니다. |
+---------------+------------------+----------------------------------------------+
| `Nops`        | NOP 모듈       | NOP (No Operation) 명령어는 프로그램의 실행 상태에 |
|               |                  | 실질적인 영향을 미치지 않는 연산 또는 명령어입니다. |
+---------------+------------------+----------------------------------------------+

Metasploit 은 또한 다음과 같은 여러 취약점 스캐닝 구성 요소를 통합합니다.

  • Nmap 스캐너: Windows, Linux 및 Mac OS 에 적합합니다. 호스트 검색, 포트 스캔 또는 열거, 서비스 검색, 운영 체제, 하드웨어 주소, 소프트웨어 버전 및 취약점 감지에 사용됩니다.

  • NeXpose 스캐너: 네트워크를 스캔하여 실행 중인 장치를 찾고, 운영 체제 및 애플리케이션 취약점을 식별하고, 스캔된 데이터를 분석하고, 취약점 스캔 보고서를 생성합니다.

  • Nessus 스캐너: 가장 널리 사용되는 취약점 스캔 도구 중 하나입니다. 클라이언트/서버 모델을 채택하여 서버가 보안 검사를 수행하고 클라이언트가 서버를 구성하고 관리합니다. 서버는 또한 플러그인 시스템을 사용하여 사용자가 특정 기능 및 더 복잡한 보안 검사를 위한 플러그인을 추가할 수 있도록 합니다.

이제 simple_tcp.rb라는 새로운 Metasploit 스캐너 모듈을 만들 것입니다.

  1. LabEx 호스트 머신에서 xfce 터미널을 열고 다음 명령을 실행하여 Metasploitable2 대상을 시작합니다.
sudo virsh start Metasploitable2

대상 머신이 시작될 때까지 기다립니다. 1-3 분 정도 걸릴 수 있습니다.

  1. 대상 머신에 대한 연결을 ping 하여 테스트합니다.
ping 192.168.122.102

Ctrl+C를 눌러 ping 을 중지합니다.

  1. Kali Linux 컨테이너를 시작하고 다음을 실행하여 bash 환경에 들어갑니다.
docker run -ti --network host b5b709a49cd5 bash
  1. Kali 컨테이너 내부에서 대상 머신에 대한 네트워크 연결을 테스트합니다.
ping 192.168.122.102

Ctrl+C를 눌러 ping 을 중지합니다.

  1. 그런 다음 scanner 모듈 디렉토리로 이동합니다.
cd /usr/share/metasploit-framework/modules/auxiliary/scanner
  1. simple_tcp.rb라는 새 파일을 만듭니다.
sudo vi simple_tcp.rb
  1. 다음 코드를 복사하여 파일에 붙여넣습니다.
require 'msf/core'
class MetasploitModule < Msf::Auxiliary
    include Msf::Exploit::Remote::Tcp
    include Msf::Auxiliary::Scanner

    def initialize
        super(
            'Name'        => 'Mr_Zhou Scanner',
            'Version'     => '$Revision$',
            'Description' => 'Shiyanlou TCP Scanner',
            'Author'      => 'lucat',
            'License'     => MSF_LICENSE
        )
        register_options(
            [
                Opt::RPORT(12345)
            ], self.class)
    end

    def run_host(ip)
        connect()
        sock.puts('HELLO SERVER')
        data = sock.recv(1024)
        print_status("Received: #{data} from #{ip}")
        disconnect()
    end
end
  1. 이 코드는 TCP 포트를 스캔하고 서버에서 수신된 모든 데이터를 표시하는 "Mr_Zhou Scanner"라는 새로운 Metasploit 모듈을 정의합니다. 코드를 살펴보겠습니다.
def initialize
    super(
        'Name'        => 'Mr_Zhou Scanner',
        'Version'     => '$Revision$',
        'Description' => 'Shiyanlou TCP Scanner',
        'Author'      => 'lucat',
        'License'     => MSF_LICENSE
    )

이 섹션은 모듈의 이름, 설명, 작성자 및 라이선스와 같은 메타데이터를 설정합니다.

register_options(
    [
        Opt::RPORT(12345)
    ], self.class)

이 줄은 포트 12345 를 스캔하는 옵션을 등록합니다.

def run_host(ip)
    connect()
    sock.puts('HELLO SERVER')
    data = sock.recv(1024)
    print_status("Received: #{data} from #{ip}")
    disconnect()
end

이 메서드는 각 대상 IP 주소에 대해 실행됩니다. 지정된 포트에 연결하고 "HELLO SERVER" 문자열을 보내고 서버에서 데이터를 수신하여 출력한 다음 연결을 끊습니다.

파일을 저장하고 편집기를 종료합니다.

리스닝 서버 설정

simple_tcp.rb 스캐너를 테스트하기 위해 대상 머신에 리스닝 서버를 설정해야 합니다.

LabEx 호스트에서 새 Xfce 터미널을 열고 shiyanlou.txt라는 파일을 만듭니다.

vi shiyanlou.txt

이 파일에 원하는 텍스트를 입력합니다. 이 텍스트는 리스닝 포트에 연결될 때 스캐너로 다시 전송됩니다. 예를 들어:

Life is short, i use Python.

파일을 저장하고 편집기를 종료합니다.

다음으로, 포트 12345(스캐너가 구성된 포트) 에서 리스닝 서버를 시작하고 shiyanlou.txt의 내용을 연결하는 모든 클라이언트에 보냅니다.

sudo nc -l 12345 < shiyanlou.txt

이제 서버는 포트 12345 에서 리스닝하며 들어오는 연결을 기다립니다.

simple_tcp 스캐너 실행

이제 simple_tcp 스캐너 모듈과 리스닝 서버를 설정했으므로 스캐너를 실행하고 작동하는지 확인해 보겠습니다.

먼저, Kali Linux 컨테이너에서 Metasploit 콘솔을 시작합니다.

cd ~
sudo msfconsole

콘솔이 로드되면 simple_tcp 모듈을 사용합니다.

use auxiliary/scanner/simple_tcp

info 명령을 사용하여 모듈 정보를 볼 수 있습니다.

info

다음은 표시될 수 있는 출력의 예입니다.

Name:          Mr_Zhou Scanner
Description:   Shiyanlou TCP Scanner
Author:        lucat
License:       Metasploit Framework License (BSD)
Version:       $Revision$

다음으로, 대상 호스트 IP 주소를 설정합니다.

set RHOSTS 192.168.122.1

참고: RHOST (단수) 가 아닌 RHOSTS (복수) 를 사용하십시오. show options 명령으로 사용할 옵션을 확인할 수 있습니다.

마지막으로, 스캐너를 실행합니다.

run

모든 것이 올바르게 설정되면 리스닝 서버에서 메시지를 볼 수 있습니다.

[+] Received: Life is short, i use Python. from 192.168.122.1

해당 메시지를 받지 못한 경우, 리스닝 서버로 돌아가서 sudo nc -l 12345 < shiyanlou.txt를 다시 실행하십시오.

축하합니다! Metasploit 스캐너 모듈을 성공적으로 개발하고 테스트했습니다.

Metasploit 콘솔을 종료하려면 Ctrl+D 를 누른 다음 검사를 시작합니다.

요약

이 랩에서는 자신만의 Metasploit 스캐너 모듈을 개발하는 방법을 배웠습니다. Metasploit 모듈 구조를 검토하고, simple_tcp.rb라는 새로운 TCP 스캐너 모듈을 만들었으며, 스캐너를 테스트하기 위해 리스닝 서버를 설정하고, 서버에서 데이터를 수신하여 표시하기 위해 스캐너를 성공적으로 실행했습니다.

Metasploit 스캐너 개발에 대한 이러한 실습 경험은 프레임워크의 기능과 사용자 정의 모듈로 확장하는 방법을 더 잘 이해하는 데 도움이 될 것입니다. 이 지식을 사용하여 더 발전된 스캐너 또는 다양한 침투 테스트 작업에 사용할 수 있는 다른 유형의 모듈을 만들 수 있습니다.