Link Search Menu Expand Document

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>)


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