Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix the generate command's tab completion for -o and -f #16027

Merged
merged 1 commit into from
Jan 11, 2022

Conversation

zeroSteiner
Copy link
Contributor

Fixes #16022. This updates the tab completion routine for the generate command that is provided by payload modules. It removes completion for the invalid -t flag, fixes the -f flag and marks -o for completion as a file path.

Verification

List the steps needed to make sure this thing works

  • Start msfconsole
  • use payload/python/meterpreter/reverse_tcp
  • Type in generate -o and hit tab, see the contents of the current working directory suggested (along with the current modules valid datastore options)
  • Type in generate -f and hit tab, see the supported formats suggested (again, along with the current modules valid datastore options)

Demo

msf6 payload(java/meterpreter/reverse_tcp) > generate -o 
Display all 108 possibilities? (y or n)
msf6 payload(java/meterpreter/reverse_tcp) > generate -o modules/
auxiliary  encoders   evasion    exploits   nops       payloads   post       
msf6 payload(java/meterpreter/reverse_tcp) > generate -o modules/

@cdelafuente-r7
Copy link
Contributor

Thanks @zeroSteiner for fixing this! I was able to confirm tab completion works as expected for both -o and -f options.

msf6 payload(python/meterpreter/reverse_tcp) > generate -o
Display all 126 possibilities? (y or n)
msf6 payload(python/meterpreter/reverse_tcp) > generate -o test/
functional  hooks       kubernetes  lib         modules     scripts     tests
msf6 payload(python/meterpreter/reverse_tcp) > generate -f
Display all 102 possibilities? (y or n)
generate -f AutoLoadStdapi=               generate -f ReverseListenerComm=          generate -f hta-psh
generate -f AutoRunScript=                generate -f ReverseListenerThreaded=      generate -f jar
generate -f AutoSystemInfo=               generate -f SessionCommunicationTimeout=  generate -f java
generate -f AutoUnhookProcess=            generate -f SessionExpirationTimeout=     generate -f js_be
generate -f AutoVerifySessionTimeout=     generate -f SessionLogging=               generate -f js_le
generate -f ConsoleLogging=               generate -f SessionRetryTotal=            generate -f jsp
generate -f ENCODER=                      generate -f SessionRetryWait=             generate -f loop-vbs
generate -f EnableStageEncoding=          generate -f StageEncoder=                 generate -f macho
generate -f EnableUnicodeEncoding=        generate -f StageEncoderSaveRegisters=    generate -f msi
generate -f HandlerSSLCert=               generate -f StageEncodingFallback=        generate -f msi-nouac
generate -f HttpCookie=                   generate -f StagerRetryCount=             generate -f num
generate -f HttpHostHeader=               generate -f StagerRetryWait=              generate -f osx-app
generate -f HttpReferer=                  generate -f TimestampOutput=              generate -f perl
generate -f InitialAutoRunScript=         generate -f VERBOSE=                      generate -f pl
generate -f LHOST=                        generate -f WORKSPACE=                    generate -f powershell
generate -f LPORT=                        generate -f asp                           generate -f ps1
generate -f LogLevel=                     generate -f aspx                          generate -f psh
generate -f MeterpreterPrompt=            generate -f aspx-exe                      generate -f psh-cmd
generate -f MeterpreterTryToFork=         generate -f axis2                         generate -f psh-net
generate -f MinimumRank=                  generate -f base32                        generate -f psh-reflection
generate -f PayloadProcessCommandLine=    generate -f base64                        generate -f py
generate -f PayloadUUIDName=              generate -f bash                          generate -f python
generate -f PayloadUUIDRaw=               generate -f c                             generate -f python-reflection
generate -f PayloadUUIDSeed=              generate -f csharp                        generate -f raw
generate -f PayloadUUIDTracking=          generate -f dll                           generate -f rb
generate -f PingbackRetries=              generate -f dw                            generate -f ruby
generate -f PingbackSleep=                generate -f dword                         generate -f sh
generate -f Prompt=                       generate -f elf                           generate -f vba
generate -f PromptChar=                   generate -f elf-so                        generate -f vba-exe
generate -f PromptTimeFormat=             generate -f exe                           generate -f vba-psh
generate -f PythonMeterpreterDebug=       generate -f exe-only                      generate -f vbapplication
generate -f ReverseAllowProxy=            generate -f exe-service                   generate -f vbs
generate -f ReverseListenerBindAddress=   generate -f exe-small                     generate -f vbscript
generate -f ReverseListenerBindPort=      generate -f hex                           generate -f war
msf6 payload(python/meterpreter/reverse_tcp) > generate -f elf
generate -f elf     generate -f elf-so

I have a quick question before it lands: is having the current modules valid datastore options necessary for these options? I believe it would required a deeper change in Framework to remove them from tab completion, just checking.

@zeroSteiner
Copy link
Contributor Author

Yeah it's kind of necessary because the datastore options for the module are also valid arguments. You can see them used in the cmd_generate method.

@cdelafuente-r7 cdelafuente-r7 merged commit e8208c6 into rapid7:master Jan 11, 2022
@cdelafuente-r7 cdelafuente-r7 added the rn-fix release notes fix label Jan 11, 2022
@cdelafuente-r7
Copy link
Contributor

Release Notes

This fixes an issue with tab completion for the generate command. Completion now works with both the -f and -o flags.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
easy library rn-fix release notes fix usability Usability improvements
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add tab completion to the generate command -o argument
3 participants