From e10c0fb1a5695be9f5951ba74e9eb9a5d8bf3308 Mon Sep 17 00:00:00 2001 From: adfoster-r7 Date: Wed, 6 Apr 2022 13:12:18 +0100 Subject: [PATCH 1/2] Extract navigation config to a separate file --- docs/build.rb | 695 +------------------------------------------- docs/navigation.rb | 697 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 705 insertions(+), 687 deletions(-) create mode 100644 docs/navigation.rb diff --git a/docs/build.rb b/docs/build.rb index 2597dbd61189..ebc7901f0233 100644 --- a/docs/build.rb +++ b/docs/build.rb @@ -2,6 +2,7 @@ require 'uri' require 'open3' require 'optparse' +require_relative './navigation' # Temporary build module to help migrate the Metasploit wiki https://github.com/rapid7/metasploit-framework/wiki into a format # supported by Jekyll, as well as creating a hierarchical folder structure for nested documentation @@ -31,691 +32,8 @@ def self.clone_wiki! # Configuration for generating the new website hierarchy, from the existing metasploit-framework wiki class Config include Enumerable - def initialize - @config = [ - { - path: 'Home.md', - nav_order: 1 - }, - { - path: 'Code-Of-Conduct.md', - nav_order: 2 - }, - { - title: 'Using Metasploit', - folder: 'using-metasploit', - nav_order: 3, - children: [ - { - title: 'Getting Started', - folder: 'getting-started', - nav_order: 1, - children: [ - { - path: 'Nightly-Installers.md', - nav_order: 1 - }, - { - path: 'Reporting-a-Bug.md', - nav_order: 4 - }, - ] - }, - { - title: 'Basics', - folder: 'basics', - nav_order: 2, - children: [ - { - path: 'Using-Metasploit.md', - title: 'Running modules', - nav_order: 2 - }, - { - path: 'How-to-use-msfvenom.md', - nav_order: 3 - }, - { - path: 'How-to-use-a-Metasploit-module-appropriately.md' - }, - { - path: 'How-payloads-work.md' - }, - { - path: 'Module-Documentation.md' - }, - { - path: 'How-to-use-a-reverse-shell-in-Metasploit.md' - }, - ] - }, - { - title: 'Intermediate', - folder: 'intermediate', - nav_order: 3, - children: [ - { - path: 'Evading-Anti-Virus.md' - }, - { - path: 'Payload-UUID.md' - }, - { - path: 'Running-Private-Modules.md' - }, - { - path: 'Exploit-Ranking.md' - }, - { - path: 'Hashes-and-Password-Cracking.md' - }, - { - path: 'msfdb:-Database-Features-&-How-to-Set-up-a-Database-for-Metasploit.md', - new_base_name: 'Metasploit-Database-Support.md', - title: 'Database Support' - }, - ] - }, - { - title: 'Advanced', - folder: 'advanced', - nav_order: 4, - children: [ - { - path: 'Metasploit-Web-Service.md' - }, - { - title: 'Meterpreter', - folder: 'meterpreter', - children: [ - { - path: 'Meterpreter.md', - title: 'Overview', - nav_order: 1 - }, - { - path: 'Meterpreter-Transport-Control.md', - title: without_prefix('Meterpreter ') - }, - { - path: 'Meterpreter-Unicode-Support.md', - title: without_prefix('Meterpreter ') - }, - { - path: 'Meterpreter-Paranoid-Mode.md', - title: without_prefix('Meterpreter ') - }, - { - path: 'The-ins-and-outs-of-HTTP-and-HTTPS-communications-in-Meterpreter-and-Metasploit-Stagers.md' - }, - { - path: 'Meterpreter-Timeout-Control.md', - title: without_prefix('Meterpreter ') - }, - { - path: 'Meterpreter-Wishlist.md', - title: without_prefix('Meterpreter ') - }, - { - path: 'Meterpreter-Sleep-Control.md', - title: without_prefix('Meterpreter ') - }, - { - path: 'Meterpreter-Configuration.md', - title: without_prefix('Meterpreter ') - }, - { - path: 'Meterpreter-Reliable-Network-Communication.md', - title: without_prefix('Meterpreter ') - }, - { - path: 'Debugging-Dead-Meterpreter-Sessions.md' - }, - { - path: 'Meterpreter-HTTP-Communication.md', - title: without_prefix('Meterpreter ') - }, - { - path: 'Meterpreter-Stageless-Mode.md', - title: without_prefix('Meterpreter ') - }, - { - path: 'How-to-get-started-with-writing-a-Meterpreter-script.md' - }, - { - path: 'Powershell-Extension.md' - }, - { - path: 'Python-Extension.md' - }, - ] - }, - ] - }, - { - title: 'Other', - folder: 'other', - children: [ - { - title: 'Oracle Support', - folder: 'oracle-support', - children: [ - { - path: 'Oracle-Usage.md' - }, - { - path: 'How-to-get-Oracle-Support-working-with-Kali-Linux.md' - }, - ] - }, - { - path: 'Information-About-Unmet-Browser-Exploit-Requirements.md' - }, - { - path: 'Why-CVE-is-not-available.md' - }, - { - path: 'How-to-use-the-Favorite-command.md' - }, - ] - }, - ] - }, - { - title: 'Development', - folder: 'development', - nav_order: 4, - children: [ - { - title: 'Get Started ', - folder: 'get-started', - nav_order: 1, - children: [ - { - path: 'Contributing-to-Metasploit.md', - nav_order: 1 - }, - { - path: 'dev/Setting-Up-a-Metasploit-Development-Environment.md', - nav_order: 2 - }, - { - path: 'Sanitizing-PCAPs.md', - nav_order: 3 - }, - { - path: "Navigating-and-Understanding-Metasploit's-Codebase.md", - new_base_name: 'Navigating-and-Understanding-Metasploits-Codebase.md', - title: 'Navigating the codebase' - }, - { - title: 'Git', - folder: 'git', - children: [ - { - path: 'Keeping-in-sync-with-rapid7-master.md' - }, - { - path: 'git/Git-cheatsheet.md' - }, - { - path: 'git/Using-Git.md' - }, - { - path: 'git/Git-Reference-Sites.md' - }, - { - path: 'Remote-Branch-Pruning.md' - }, - ] - }, - ] - }, - { - title: 'Developing Modules', - folder: 'developing-modules', - nav_order: 2, - children: [ - { - title: 'Guides', - folder: 'guides', - nav_order: 2, - children: [ - { - path: 'How-to-get-started-with-writing-a-post-module.md', - title: 'Writing a post module' - }, - { - path: 'Get-Started-Writing-an-Exploit.md', - title: 'Writing an exploit' - }, - { - path: 'How-to-write-a-browser-exploit-using-HttpServer.md', - title: 'Writing a browser exploit' - }, - { - title: 'Scanners', - folder: 'scanners', - nav_order: 2, - children: [ - { - path: 'How-to-write-a-HTTP-LoginScanner-Module.md', - title: 'Writing a HTTP LoginScanner' - }, - { - path: 'Creating-Metasploit-Framework-LoginScanners.md', - title: 'Writing an FTP LoginScanner' - }, - ] - }, - { - path: 'How-to-get-started-with-writing-an-auxiliary-module.md', - title: 'Writing an auxiliary module' - }, - { - path: 'How-to-use-command-stagers.md' - }, - { - path: 'How-to-write-a-check()-method.md', - new_base_name: 'How-to-write-a-check-method.md' - }, - { - path: 'How-to-check-Microsoft-patch-levels-for-your-exploit.md' - }, - ] - }, - { - title: 'Libraries', - folder: 'libraries', - children: [ - { - path: 'API.md', - nav_order: 0 - }, - { - title: 'Compiling C', - folder: 'c', - children: [ - { - path: 'How-to-use-Metasploit-Framework-Compiler-Windows-to-compile-C-code.md', - title: 'Overview', - nav_order: 1 - }, - { - path: 'How-to-XOR-with-Metasploit-Framework-Compiler.md', - title: 'XOR Support' - }, - { - path: 'How-to-decode-Base64-with-Metasploit-Framework-Compiler.md', - title: 'Base64 Support' - }, - { - path: 'How-to-decrypt-RC4-with-Metasploit-Framework-Compiler.md', - title: 'RC4 Support' - }, - ] - }, - { - path: 'How-to-log-in-Metasploit.md', - title: 'Logging' - }, - { - path: 'How-to-use-Railgun-for-Windows-post-exploitation.md', - title: 'Railgun' - }, - { - path: 'How-to-zip-files-with-Msf-Util-EXE.to_zip.md', - new_base_name: 'How-to-zip-files-with-Msf-Util-EXE-to_zip.md', - title: 'Zip' - }, - { - path: 'Handling-Module-Failures-with-`fail_with`.md', - new_base_name: 'Handling-Module-Failures-with-fail_with.md', - title: 'Fail_with' - }, - { - path: 'How-to-use-Msf-Auxiliary-AuthBrute-to-write-a-bruteforcer.md', - title: 'AuthBrute' - }, - { - path: 'How-to-Use-the-FILEFORMAT-mixin-to-create-a-file-format-exploit.md', - title: 'Fileformat' - }, - { - path: 'SQL-Injection-(SQLi)-Libraries.md', - new_base_name: 'SQL-Injection-Libraries.md', - title: 'SQL Injection' - }, - { - path: 'How-to-use-Powershell-in-an-exploit.md', - title: 'Powershell' - }, - { - path: 'How-to-use-the-Seh-mixin-to-exploit-an-exception-handler.md', - title: 'SEH Exploitation' - }, - { - path: 'How-to-clean-up-files-using-FileDropper.md', - title: 'FileDropper' - }, - { - path: 'How-to-use-PhpEXE-to-exploit-an-arbitrary-file-upload-bug.md', - title: 'PhpExe' - }, - { - title: 'HTTP', - folder: 'http', - children: [ - { - path: 'How-to-send-an-HTTP-request-using-Rex-Proto-Http-Client.md' - }, - { - path: 'How-to-parse-an-HTTP-response.md' - }, - { - path: 'How-to-write-a-module-using-HttpServer-and-HttpClient.md' - }, - { - path: 'How-to-Send-an-HTTP-Request-Using-HttpClient.md' - }, - { - path: 'How-to-write-a-browser-exploit-using-BrowserExploitServer.md', - title: 'BrowserExploitServer' - }, - ] - }, - { - title: 'Deserialization', - folder: 'deserialization', - children: [ - { - path: 'Dot-Net-Deserialization.md' - }, - { - path: 'Generating-`ysoserial`-Java-serialized-objects.md', - new_base_name: 'Generating-ysoserial-Java-serialized-objects.md', - title: 'Java Deserialization' - } - ] - }, - { - title: 'Obfuscation', - folder: 'obfuscation', - children: [ - { - path: 'How-to-obfuscate-JavaScript-in-Metasploit.md', - title: 'JavaScript Obfuscation' - }, - { - path: 'How-to-use-Metasploit-Framework-Obfuscation-CRandomizer.md', - title: 'C Obfuscation' - }, - ] - }, - { - path: 'How-to-use-the-Msf-Exploit-Remote-Tcp-mixin.md', - title: 'TCP' - }, - { - path: 'How-to-do-reporting-or-store-data-in-module-development.md', - title: 'Reporting and Storing Data' - }, - { - path: 'How-to-use-WbemExec-for-a-write-privilege-attack-on-Windows.md', - title: 'WbemExec' - }, - { - title: 'SMB', - folder: 'smb', - children: [ - { - path: 'What-my-Rex-Proto-SMB-Error-means.md' - }, - - { - path: 'Guidelines-for-Writing-Modules-with-SMB.md' - }, - ] - }, - { - path: 'Using-ReflectiveDLL-Injection.md', - title: 'ReflectiveDLL Injection' - }, - ] - }, - { - title: 'External Modules', - folder: 'external-modules', - nav_order: 3, - children: [ - { - path: 'Writing-External-Metasploit-Modules.md', - title: 'Overview', - nav_order: 1 - }, - { - path: 'Writing-External-Python-Modules.md', - title: 'Writing Python Modules' - }, - { - path: 'Writing-External-GoLang-Modules.md', - title: 'Writing GoLang Modules' - }, - ] - }, - { - title: 'Module metadata', - folder: 'module-metadata', - nav_order: 3, - children: [ - { - path: 'How-to-use-datastore-options.md' - }, - { - path: 'Module-Reference-Identifiers.md' - }, - { - path: 'Definition-of-Module-Reliability,-Side-Effects,-and-Stability.md', - new_base_name: 'Definition-of-Module-Reliability-Side-Effects-and-Stability.md' - }, - ] - } - ] - }, - { - title: 'Maintainers', - folder: 'maintainers', - children: [ - { - title: 'Process', - folder: 'process', - children: [ - { - path: 'Guidelines-for-Accepting-Modules-and-Enhancements.md' - }, - { - path: 'How-to-deprecate-a-Metasploit-module.md' - }, - { - path: 'Landing-Pull-Requests.md' - }, - { - path: 'Assigning-Labels.md' - }, - { - path: 'Adding-Release-Notes-to-PRs.md', - title: 'Release Notes' - }, - { - path: 'Rolling-back-merges.md' - }, - { - path: 'Unstable-Modules.md' - }, - ] - }, - { - path: 'Committer-Rights.md' - }, - { - title: 'Ruby Gems', - folder: 'ruby-gems', - children: [ - { - path: 'How-to-add-and-update-gems-in-metasploit-framework.md', - title: 'Adding and Updating' - }, - { - path: 'Testing-Rex-and-other-Gem-File-Updates-With-Gemfile.local-and-Gemfile.local.example.md', - new_base_name: 'using-local-gems.md', - title: 'Using local Gems' - }, - { - path: 'Merging-Metasploit-Payload-Gem-Updates.md' - }, - ] - }, - { - path: 'Committer-Keys.md' - }, - { - path: 'Metasploit-Loginpalooza.md' - }, - { - path: 'Metasploit-Hackathons.md' - }, - { - path: 'Downloads-by-Version.md' - } - ] - }, - { - title: 'Quality', - folder: 'quality', - children: [ - { - path: 'Style-Tips.md' - }, - { - path: 'Msftidy.md' - }, - { - path: 'Using-Rubocop.md' - }, - { - path: 'Common-Metasploit-Module-Coding-Mistakes.md' - }, - { - path: 'Writing-Module-Documentation.md' - }, - ] - }, - { - title: 'Google Summer of Code', - folder: 'google-summer-of-code', - children: [ - { - path: 'How-to-Apply-to-GSoC.md' - }, - { - path: 'GSoC-2017-Student-Proposal.md', - title: without_prefix('GSoC') - }, - { - path: 'GSoC-2017-Project-Ideas.md', - title: without_prefix('GSoC') - }, - { - path: 'GSoC-2018-Project-Ideas.md', - title: without_prefix('GSoC') - }, - { - path: 'GSoC-2017-Mentor-Organization-Application.md', - title: without_prefix('GSoC') - }, - { - path: 'GSoC-2019-Project-Ideas.md', - title: without_prefix('GSoC') - }, - { - path: 'GSoC-2020-Project-Ideas.md', - title: without_prefix('GSoC') - }, - { - path: 'GSoC-2021-Project-Ideas.md', - title: without_prefix('GSoC') - }, - { - path: 'GSoC-2022-Project-Ideas.md', - title: without_prefix('GSoC') - }, - ] - }, - { - title: 'Proposals', - folder: 'propsals', - children: [ - { - path: 'Bundled-Modules-Proposal.md' - }, - { - path: 'MSF6-Feature-Proposals.md' - }, - { - path: 'RFC---Metasploit-URL-support.md', - new_base_name: 'Metasploit-URL-support-proposal.md' - }, - { - path: 'Uberhandler.md' - }, - { - path: 'Work-needed-to-allow-msfdb-to-use-postgresql-common.md' - }, - { - path: 'Payload-Rename-Justification.md' - }, - ] - }, - { - title: 'Roadmap', - folder: 'roadmap', - children: [ - { - path: 'Metasploit-Framework-Wish-List.md' - }, - { - path: 'Metasploit-5.0-Release-Notes.md', - new_base_name: 'Metasploit-5-Release-Notes.md', - title: 'Metasploit Framework 5.0 Release Notes' - }, - { - path: '2017-Roadmap-Review.md' - }, - { - path: 'Metasploit-6.0-Development-Notes.md', - new_base_name: 'Metasploit-6-Release-Notes.md', - title: 'Metasploit Framework 6.0 Release Notes' - }, - { - path: '2017-Roadmap.md' - }, - { - path: 'Metasploit-Breaking-Changes.md' - }, - { - path: 'Metasploit-Data-Service-Enhancements-(Goliath).md', - new_base_name: 'Metasploit-Data-Service-Enhancements-Goliath.md', - title: 'Metasploit Data Service' - }, - ] - }, - ] - }, - { - path: 'Contact.md', - nav_order: 5 - }, - ] + def initialize(config) + @config = config end def validate! @@ -941,13 +259,16 @@ def fix_github_username_links(content) '@jlee-r7', '@jmartin-r7', '@mcfakepants', + '@Op3n4M3', + '@gwillcox-r7', '@red0xff', '@mkienow-r7', '@pbarry-r7', '@schierlm', '@timwr', '@zerosteiner', - '@harmj0y' + '@zeroSteiner', + '@harmj0y', ] ignored_tags = [ '@harmj0yDescription', @@ -1130,7 +451,7 @@ def self.run(options) Git.clone_wiki! unless options[:skip_wiki_pull] unless options[:skip_migration] - config = Config.new + config = Config.new(NAVIGATION_CONFIG) migrator = WikiMigration.new migrator.run(config, options) end diff --git a/docs/navigation.rb b/docs/navigation.rb new file mode 100644 index 000000000000..ba747b141da2 --- /dev/null +++ b/docs/navigation.rb @@ -0,0 +1,697 @@ +# This file maps the files within `metasploit-framework.wiki/` to the navigational menu +# Modify this file to change the doc site's navigation/hierarchy + +# @param path [String] the prefix to remove from a string +# @return [proc] When called with a string, the returned string has the prefix removed +def without_prefix(prefix) + proc { |value| value.sub(/^#{prefix}/, '') } +end + +NAVIGATION_CONFIG = [ + { + path: 'Home.md', + nav_order: 1 + }, + { + path: 'Code-Of-Conduct.md', + nav_order: 2 + }, + { + title: 'Using Metasploit', + folder: 'using-metasploit', + nav_order: 3, + children: [ + { + title: 'Getting Started', + folder: 'getting-started', + nav_order: 1, + children: [ + { + path: 'Nightly-Installers.md', + nav_order: 1 + }, + { + path: 'Reporting-a-Bug.md', + nav_order: 4 + }, + ] + }, + { + title: 'Basics', + folder: 'basics', + nav_order: 2, + children: [ + { + path: 'Using-Metasploit.md', + title: 'Running modules', + nav_order: 2 + }, + { + path: 'How-to-use-msfvenom.md', + nav_order: 3 + }, + { + path: 'How-to-use-a-Metasploit-module-appropriately.md' + }, + { + path: 'How-payloads-work.md' + }, + { + path: 'Module-Documentation.md' + }, + { + path: 'How-to-use-a-reverse-shell-in-Metasploit.md' + }, + ] + }, + { + title: 'Intermediate', + folder: 'intermediate', + nav_order: 3, + children: [ + { + path: 'Evading-Anti-Virus.md' + }, + { + path: 'Payload-UUID.md' + }, + { + path: 'Running-Private-Modules.md' + }, + { + path: 'Exploit-Ranking.md' + }, + { + path: 'Hashes-and-Password-Cracking.md' + }, + { + path: 'msfdb:-Database-Features-&-How-to-Set-up-a-Database-for-Metasploit.md', + new_base_name: 'Metasploit-Database-Support.md', + title: 'Database Support' + }, + ] + }, + { + title: 'Advanced', + folder: 'advanced', + nav_order: 4, + children: [ + { + path: 'Metasploit-Web-Service.md' + }, + { + title: 'Meterpreter', + folder: 'meterpreter', + children: [ + { + path: 'Meterpreter.md', + title: 'Overview', + nav_order: 1 + }, + { + path: 'Meterpreter-Transport-Control.md', + title: without_prefix('Meterpreter ') + }, + { + path: 'Meterpreter-Unicode-Support.md', + title: without_prefix('Meterpreter ') + }, + { + path: 'Meterpreter-Paranoid-Mode.md', + title: without_prefix('Meterpreter ') + }, + { + path: 'The-ins-and-outs-of-HTTP-and-HTTPS-communications-in-Meterpreter-and-Metasploit-Stagers.md' + }, + { + path: 'Meterpreter-Timeout-Control.md', + title: without_prefix('Meterpreter ') + }, + { + path: 'Meterpreter-Wishlist.md', + title: without_prefix('Meterpreter ') + }, + { + path: 'Meterpreter-Sleep-Control.md', + title: without_prefix('Meterpreter ') + }, + { + path: 'Meterpreter-Configuration.md', + title: without_prefix('Meterpreter ') + }, + { + path: 'Meterpreter-Reliable-Network-Communication.md', + title: without_prefix('Meterpreter ') + }, + { + path: 'Debugging-Dead-Meterpreter-Sessions.md' + }, + { + path: 'Meterpreter-HTTP-Communication.md', + title: without_prefix('Meterpreter ') + }, + { + path: 'Meterpreter-Stageless-Mode.md', + title: without_prefix('Meterpreter ') + }, + { + path: 'Meterpreter-Debugging-Meterpreter-Sessions.md', + title: without_prefix('Meterpreter ') + }, + { + path: 'How-to-get-started-with-writing-a-Meterpreter-script.md' + }, + { + path: 'Powershell-Extension.md' + }, + { + path: 'Python-Extension.md' + }, + ] + }, + ] + }, + { + title: 'Other', + folder: 'other', + children: [ + { + title: 'Oracle Support', + folder: 'oracle-support', + children: [ + { + path: 'Oracle-Usage.md' + }, + { + path: 'How-to-get-Oracle-Support-working-with-Kali-Linux.md' + }, + ] + }, + { + path: 'Information-About-Unmet-Browser-Exploit-Requirements.md' + }, + { + path: 'Why-CVE-is-not-available.md' + }, + { + path: 'How-to-use-the-Favorite-command.md' + }, + ] + }, + ] + }, + { + title: 'Development', + folder: 'development', + nav_order: 4, + children: [ + { + title: 'Get Started ', + folder: 'get-started', + nav_order: 1, + children: [ + { + path: 'Contributing-to-Metasploit.md', + nav_order: 1 + }, + { + path: 'dev/Setting-Up-a-Metasploit-Development-Environment.md', + nav_order: 2 + }, + { + path: 'Sanitizing-PCAPs.md', + nav_order: 3 + }, + { + path: "Navigating-and-Understanding-Metasploit's-Codebase.md", + new_base_name: 'Navigating-and-Understanding-Metasploits-Codebase.md', + title: 'Navigating the codebase' + }, + { + title: 'Git', + folder: 'git', + children: [ + { + path: 'Keeping-in-sync-with-rapid7-master.md' + }, + { + path: 'git/Git-cheatsheet.md' + }, + { + path: 'git/Using-Git.md' + }, + { + path: 'git/Git-Reference-Sites.md' + }, + { + path: 'Remote-Branch-Pruning.md' + }, + ] + }, + ] + }, + { + title: 'Developing Modules', + folder: 'developing-modules', + nav_order: 2, + children: [ + { + title: 'Guides', + folder: 'guides', + nav_order: 2, + children: [ + { + path: 'How-to-get-started-with-writing-a-post-module.md', + title: 'Writing a post module' + }, + { + path: 'Get-Started-Writing-an-Exploit.md', + title: 'Writing an exploit' + }, + { + path: 'How-to-write-a-browser-exploit-using-HttpServer.md', + title: 'Writing a browser exploit' + }, + { + title: 'Scanners', + folder: 'scanners', + nav_order: 2, + children: [ + { + path: 'How-to-write-a-HTTP-LoginScanner-Module.md', + title: 'Writing a HTTP LoginScanner' + }, + { + path: 'Creating-Metasploit-Framework-LoginScanners.md', + title: 'Writing an FTP LoginScanner' + }, + ] + }, + { + path: 'How-to-get-started-with-writing-an-auxiliary-module.md', + title: 'Writing an auxiliary module' + }, + { + path: 'How-to-use-command-stagers.md' + }, + { + path: 'How-to-write-a-check()-method.md', + new_base_name: 'How-to-write-a-check-method.md' + }, + { + path: 'How-to-check-Microsoft-patch-levels-for-your-exploit.md' + }, + ] + }, + { + title: 'Libraries', + folder: 'libraries', + children: [ + { + path: 'API.md', + nav_order: 0 + }, + { + title: 'Compiling C', + folder: 'c', + children: [ + { + path: 'How-to-use-Metasploit-Framework-Compiler-Windows-to-compile-C-code.md', + title: 'Overview', + nav_order: 1 + }, + { + path: 'How-to-XOR-with-Metasploit-Framework-Compiler.md', + title: 'XOR Support' + }, + { + path: 'How-to-decode-Base64-with-Metasploit-Framework-Compiler.md', + title: 'Base64 Support' + }, + { + path: 'How-to-decrypt-RC4-with-Metasploit-Framework-Compiler.md', + title: 'RC4 Support' + }, + ] + }, + { + path: 'How-to-log-in-Metasploit.md', + title: 'Logging' + }, + { + path: 'How-to-use-Railgun-for-Windows-post-exploitation.md', + title: 'Railgun' + }, + { + path: 'How-to-zip-files-with-Msf-Util-EXE.to_zip.md', + new_base_name: 'How-to-zip-files-with-Msf-Util-EXE-to_zip.md', + title: 'Zip' + }, + { + path: 'Handling-Module-Failures-with-`fail_with`.md', + new_base_name: 'Handling-Module-Failures-with-fail_with.md', + title: 'Fail_with' + }, + { + path: 'How-to-use-Msf-Auxiliary-AuthBrute-to-write-a-bruteforcer.md', + title: 'AuthBrute' + }, + { + path: 'How-to-Use-the-FILEFORMAT-mixin-to-create-a-file-format-exploit.md', + title: 'Fileformat' + }, + { + path: 'SQL-Injection-(SQLi)-Libraries.md', + new_base_name: 'SQL-Injection-Libraries.md', + title: 'SQL Injection' + }, + { + path: 'How-to-use-Powershell-in-an-exploit.md', + title: 'Powershell' + }, + { + path: 'How-to-use-the-Seh-mixin-to-exploit-an-exception-handler.md', + title: 'SEH Exploitation' + }, + { + path: 'How-to-clean-up-files-using-FileDropper.md', + title: 'FileDropper' + }, + { + path: 'How-to-use-PhpEXE-to-exploit-an-arbitrary-file-upload-bug.md', + title: 'PhpExe' + }, + { + title: 'HTTP', + folder: 'http', + children: [ + { + path: 'How-to-send-an-HTTP-request-using-Rex-Proto-Http-Client.md' + }, + { + path: 'How-to-parse-an-HTTP-response.md' + }, + { + path: 'How-to-write-a-module-using-HttpServer-and-HttpClient.md' + }, + { + path: 'How-to-Send-an-HTTP-Request-Using-HttpClient.md' + }, + { + path: 'How-to-write-a-browser-exploit-using-BrowserExploitServer.md', + title: 'BrowserExploitServer' + }, + ] + }, + { + title: 'Deserialization', + folder: 'deserialization', + children: [ + { + path: 'Dot-Net-Deserialization.md' + }, + { + path: 'Generating-`ysoserial`-Java-serialized-objects.md', + new_base_name: 'Generating-ysoserial-Java-serialized-objects.md', + title: 'Java Deserialization' + } + ] + }, + { + title: 'Obfuscation', + folder: 'obfuscation', + children: [ + { + path: 'How-to-obfuscate-JavaScript-in-Metasploit.md', + title: 'JavaScript Obfuscation' + }, + { + path: 'How-to-use-Metasploit-Framework-Obfuscation-CRandomizer.md', + title: 'C Obfuscation' + }, + ] + }, + { + path: 'How-to-use-the-Msf-Exploit-Remote-Tcp-mixin.md', + title: 'TCP' + }, + { + path: 'How-to-do-reporting-or-store-data-in-module-development.md', + title: 'Reporting and Storing Data' + }, + { + path: 'How-to-use-WbemExec-for-a-write-privilege-attack-on-Windows.md', + title: 'WbemExec' + }, + { + title: 'SMB', + folder: 'smb', + children: [ + { + path: 'What-my-Rex-Proto-SMB-Error-means.md' + }, + + { + path: 'Guidelines-for-Writing-Modules-with-SMB.md' + }, + ] + }, + { + path: 'Using-ReflectiveDLL-Injection.md', + title: 'ReflectiveDLL Injection' + }, + ] + }, + { + title: 'External Modules', + folder: 'external-modules', + nav_order: 3, + children: [ + { + path: 'Writing-External-Metasploit-Modules.md', + title: 'Overview', + nav_order: 1 + }, + { + path: 'Writing-External-Python-Modules.md', + title: 'Writing Python Modules' + }, + { + path: 'Writing-External-GoLang-Modules.md', + title: 'Writing GoLang Modules' + }, + ] + }, + { + title: 'Module metadata', + folder: 'module-metadata', + nav_order: 3, + children: [ + { + path: 'How-to-use-datastore-options.md' + }, + { + path: 'Module-Reference-Identifiers.md' + }, + { + path: 'Definition-of-Module-Reliability,-Side-Effects,-and-Stability.md', + new_base_name: 'Definition-of-Module-Reliability-Side-Effects-and-Stability.md' + }, + ] + } + ] + }, + { + title: 'Maintainers', + folder: 'maintainers', + children: [ + { + title: 'Process', + folder: 'process', + children: [ + { + path: 'Guidelines-for-Accepting-Modules-and-Enhancements.md' + }, + { + path: 'How-to-deprecate-a-Metasploit-module.md' + }, + { + path: 'Landing-Pull-Requests.md' + }, + { + path: 'Assigning-Labels.md' + }, + { + path: 'Adding-Release-Notes-to-PRs.md', + title: 'Release Notes' + }, + { + path: 'Rolling-back-merges.md' + }, + { + path: 'Unstable-Modules.md' + }, + ] + }, + { + path: 'Committer-Rights.md' + }, + { + title: 'Ruby Gems', + folder: 'ruby-gems', + children: [ + { + path: 'How-to-add-and-update-gems-in-metasploit-framework.md', + title: 'Adding and Updating' + }, + { + path: 'Testing-Rex-and-other-Gem-File-Updates-With-Gemfile.local-and-Gemfile.local.example.md', + new_base_name: 'using-local-gems.md', + title: 'Using local Gems' + }, + { + path: 'Merging-Metasploit-Payload-Gem-Updates.md' + }, + ] + }, + { + path: 'Committer-Keys.md' + }, + { + path: 'Metasploit-Loginpalooza.md' + }, + { + path: 'Metasploit-Hackathons.md' + }, + { + path: 'Downloads-by-Version.md' + } + ] + }, + { + title: 'Quality', + folder: 'quality', + children: [ + { + path: 'Style-Tips.md' + }, + { + path: 'Msftidy.md' + }, + { + path: 'Using-Rubocop.md' + }, + { + path: 'Common-Metasploit-Module-Coding-Mistakes.md' + }, + { + path: 'Writing-Module-Documentation.md' + }, + ] + }, + { + title: 'Google Summer of Code', + folder: 'google-summer-of-code', + children: [ + { + path: 'How-to-Apply-to-GSoC.md' + }, + { + path: 'GSoC-2017-Student-Proposal.md', + title: without_prefix('GSoC') + }, + { + path: 'GSoC-2017-Project-Ideas.md', + title: without_prefix('GSoC') + }, + { + path: 'GSoC-2018-Project-Ideas.md', + title: without_prefix('GSoC') + }, + { + path: 'GSoC-2017-Mentor-Organization-Application.md', + title: without_prefix('GSoC') + }, + { + path: 'GSoC-2019-Project-Ideas.md', + title: without_prefix('GSoC') + }, + { + path: 'GSoC-2020-Project-Ideas.md', + title: without_prefix('GSoC') + }, + { + path: 'GSoC-2021-Project-Ideas.md', + title: without_prefix('GSoC') + }, + { + path: 'GSoC-2022-Project-Ideas.md', + title: without_prefix('GSoC') + }, + ] + }, + { + title: 'Proposals', + folder: 'propsals', + children: [ + { + path: 'Bundled-Modules-Proposal.md' + }, + { + path: 'MSF6-Feature-Proposals.md' + }, + { + path: 'RFC---Metasploit-URL-support.md', + new_base_name: 'Metasploit-URL-support-proposal.md' + }, + { + path: 'Uberhandler.md' + }, + { + path: 'Work-needed-to-allow-msfdb-to-use-postgresql-common.md' + }, + { + path: 'Payload-Rename-Justification.md' + }, + ] + }, + { + title: 'Roadmap', + folder: 'roadmap', + children: [ + { + path: 'Metasploit-Framework-Wish-List.md' + }, + { + path: 'Metasploit-5.0-Release-Notes.md', + new_base_name: 'Metasploit-5-Release-Notes.md', + title: 'Metasploit Framework 5.0 Release Notes' + }, + { + path: '2017-Roadmap-Review.md' + }, + { + path: 'Metasploit-6.0-Development-Notes.md', + new_base_name: 'Metasploit-6-Release-Notes.md', + title: 'Metasploit Framework 6.0 Release Notes' + }, + { + path: '2017-Roadmap.md' + }, + { + path: 'Metasploit-Breaking-Changes.md' + }, + { + path: 'Metasploit-Data-Service-Enhancements-(Goliath).md', + new_base_name: 'Metasploit-Data-Service-Enhancements-Goliath.md', + title: 'Metasploit Data Service' + }, + ] + }, + ] + }, + { + path: 'Contact.md', + nav_order: 5 + }, +].freeze From f4a8baf9e2b9830cf8b25487b3366f3589087717 Mon Sep 17 00:00:00 2001 From: adfoster-r7 Date: Fri, 8 Apr 2022 22:45:51 +0100 Subject: [PATCH 2/2] Add pivoting section --- docs/navigation.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/navigation.rb b/docs/navigation.rb index ba747b141da2..089bb6955a4e 100644 --- a/docs/navigation.rb +++ b/docs/navigation.rb @@ -81,6 +81,9 @@ def without_prefix(prefix) { path: 'Exploit-Ranking.md' }, + { + path: 'Pivoting-in-Metasploit.md' + }, { path: 'Hashes-and-Password-Cracking.md' },