10/22/2015

[METASPLOIT] Metasploit Custom Scanner 만들기(Make Simple Scan Module)

offensive-security 에서 뭐 볼게 있다 뒤적뒤적하던 중 Metasploit Unleashed 에서 간단한 Scan Moudle 코드를 보았습니다. 물론 msf 자체가 ruby로 구성되어 있어 ruby를 쓰시는 분들은 쉽게 제작할 수 있지만, 일단 샘플코드가 있다면 다른 코드로 확장하기 굉장히 유용하기 때문에 따로 포스팅할까 합니다.



이전에 여러가지 테스트 코드를 만들 때 아무 모듈이나 복사해서 구동부분만 다시짜는 식으로 사용했는데, 네트워크 관련 작업에는 샘플코드를 이용해서 작성하는것도 나쁘진 않겠네요.

일단 코드는 매우 간단합니다.
require 'msf/core'
class Metasploit3 < Msf::Auxiliary
        include Msf::Exploit::Remote::Tcp
        include Msf::Auxiliary::Scanner
        def initialize
                super(
                        'Name'           => 'My custom TCP scan',
                        'Version'        => '$Revision: 1 $',
                        'Description'    => 'My quick scanner',
                        'Author'         => 'Your name here',
                        'License'        => MSF_LICENSE
                )
                register_options(
                        [
                                Opt::RPORT(12345)
                        ], self.class)
        end

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

initialize 함수에는 이름과, 버전, Desc 등 여러 정보를 넣습니다.
나중에 msf에서 검색해서 찾을 때 조금 더 편하게 찾을 수 있겠지요.

하나 눈여겨 볼 사항은 안에 register_options 부분입니다.
 register_options(
                        [
                                Opt::RPORT(12345)
                        ], self.class)

이부분에 Opt 로 명시하게 되면, msf에서 사용할 때 우리가 적용하는 Options 부분을 작성할 수 있습니다.

run_host 함수는 해당 스캐너가 동작하는 메인 부분입니다.
인자값으로 ip를 받고 Option 으로 등록된 포트에 대해 스캔하는 작업을 진행합니다.

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

connect() 함수를 통해 ip에 대해 연결 시도 후 sock.puts를 통해 데이터 전송(greeting 변수 내용) 후
recv하여 return 된 값을 확인합니다.

물론 connect 등의 함수는 위의 include 를 통해 scanner 모듈과 tcp 모듈 불러온 부분에서 정의된 내용이겠지요.

include Msf::Exploit::Remote::Tcp
include Msf::Auxiliary::Scanner

작성 후 모듈 디렉토리에 넣어주시면 바로 사용이 가능합니다. Metasploit Unleashed 에서는 scanner 경로로 넣어줬네요.
modules/auxiliary/scanner/  에 simple_tcp.rb 이런식으로 넣어줍니다.

그리고 console 에서 검색 후 실행하면 다른 모듈처럼 쉽게 사용이 가능합니다.
use scanner/simple_tcp
msf auxiliary(simple_tcp) > hosts -R
RHOSTS => 127.0.0.1
msf auxiliary(simple_tcp) > run

[*] Received: hello metasploit from 127.0.0.1
[*] Auxiliary module execution completed

추가로 Report 부분은 Report 모듈을 include 하고 작성하면 됩니다.
include Msf::Auxiliary::Report
report_note(
:host => rhost,
:type => "myscanner_password",
:data => data
)

매번 느끼지만, 처음에 metasploit 에 대해 공부할땐 Metasploit Unleashed 가 좋은 것 같습니다.
기본적인 사용방법 공부 후 침투 대상이나 환경에 맞게 하나하나 코드 작성해서 사용하다 보시면 msf 가 굉장히 편리한 툴이란 것을 알 수 있을겁니다 : )

Reference

https://www.offensive-security.com/metasploit-unleashed/writing-scanner/


HAHWUL

Security engineer, Gopher and H4cker!

Share: | Coffee Me:

3 comments:

  1. [offensive-security] of watching, saw a simple [Scan Moudle] code [Metasploit Unleashed].

    ReplyDelete
  2. Of course [msf] itself is composed of [ruby]. it is possible to easily manufacture better to use the [ruby]. However, if there is a sample code, it is more convenient to extended with other code.

    ReplyDelete
  3. I have a copy of any modules to create a variety of test code were using the only way to re-create the driving part.
    The network-related tasks'll be fine writing by using the "Sample Code".

    ReplyDelete