Fix trailing backslash in shell registry operations#21004
Open
EclipseAditya wants to merge 1 commit intorapid7:masterfrom
Open
Fix trailing backslash in shell registry operations#21004EclipseAditya wants to merge 1 commit intorapid7:masterfrom
EclipseAditya wants to merge 1 commit intorapid7:masterfrom
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
registry_enumkeysand other shell-based registry functions silently fail when the key path ends with a trailing backslash (\). This is becausenormalize_keypreserves the trailing backslash, which then gets interpolated into acmd.execommand like:The
\"at the end is interpreted bycmd.exeas an escaped double-quote, producing a malformed command. Meterpreter sessions are unaffected because they use the Windows API directly, which tolerates trailing backslashes.This caused
exploit/windows/persistence/registry(and similar modules) to incorrectly report "System does not have powershell" on shell sessions while working correctly on meterpreter sessions.The fix:
normalize_keyvia.chomp("\\")— this protects all 10+ shell registry functions at the normalization layernormalize_keyandsplit_keyFixes #20899
Verification
windows/x64/shell/reverse_tcp)use exploit/windows/persistence/registryset SESSION <shell_session_id>checkThe target is vulnerable. Registry writable(notSystem does not have powershell)set SESSION <meterpreter_session_id>checkThe target is vulnerable. Registry writable(no regression)bundle exec rspec spec/lib/msf/core/post/windows/registry_spec.rb