[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/