Skip to content

Writing External GoLang Modules

Christopher Lee edited this page Dec 12, 2018 · 5 revisions

Contributing modules in GO can be achieved in a few simple steps as outlined below. As for supported GO version, we have tested with 1.11.2, no promised for version 2.

1. Location

  • Select the appropriate module path based on the type of module you are trying to contribute
  • Be sure to include appropriate module documentation under here
  • Test your documentation is correct by executing info -d

2. Execution

  • Include this line at the top of your module: //usr/bin/env go run "$0" "$@"; exit "$?"
  • Ensure your file is an executable file

3. Setup

  • Initialize your module with the module metadata:
import "metasploit/module"
func main() {
  metadata := &module.Metadata{
    Name: "<module name",
    Description: "<describe>",
    Authors: []string{"<author 1>", "<author 2>"},
    Date: "<date module written",
    Type:"<module type>",
    Privileged:  <true|false>,
    References:  []module.Reference{},
    Options: map[string]module.Option{	
      "<option 1":     {Type: "<type>", Description: "<description>", Required: <true|false>, Default: "<default>"},		
      "<option 2":     {Type: "<type>", Description: "<description>", Required: <true|false>, Default: "<default>"},
  }}

  module.Init(metadata, <the entry method to your module>)
}

FULL EXAMPLE

Note: Above does not outline the full potential list of metadata options

Currently supported module types:

  • remote_exploit
  • remote_exploit_cmd_stager
  • capture_server
  • dos
  • single_scanner
  • single_host_login_scanner
  • multi_scanner

4. Shared Code

  • For code that is shared specific to your module create a directory in your module directory: shared/src/ metasploit will automatically add these to the GOPATH
  • For code that you think could be used across modules, add code here
  • 3rd party libs aren't currently supported but we welcome patches

5. Finalize

  • Test your Pull Request
  • Create a Pull Request
  • No coding standard here, be sure to gofmt

Metasploit Wiki Pages


Clone this wiki locally