Fix #4717 - Change AllowWin32SEH's default to false
This is patch to change AllowWin32SEH to false. Root cause: The truely intended behavior is that if the user doesn't set a BufferRegister and the encoder is for Windows, the AllowWin32SEH code should kick in. The problem here is that msfencode and msfvenom handle the platform information differently, so we get different results. With msfencode, the platform information isn't passed when alpha_mixed is used, so even if you're using the encoder for Win32, the encoder doesn't actually know about this. But everything works out just fine anyway because people don't actually rely on AllowWin32SEH. With msfvenom, the platform information is passed, so the encoder actually knows it's for Windows. The two conditions are met (regster and platform), so AllowWin32SEH kicks in. However, the AllowWin32SEH technique enforces the BufferRegister to ECX, and that there's no GetPC, so by default this isn't going to work. The solution: We are actually better off with setting AllowWin32SEH to false, mainly because the SEH technique is pretty much dead (congrats MSFT!). And we want the GetPC routine by default. If people want to use AllowWin32SEH routine, they can simply set AllowWin32SEH to true to bring it right back. For example: e = framework.encoders.create('x86/alpha_mixed') e.datastore.import_options_from_hash({'AllowWin32SEH'=>true}) buf = e.encode("AAAA", nil, nil, ::Msf::Module::PlatformList.win32) Or in msfvenom: msfvenom -p windows/meterpreter/bind_tcp -e x86/alpha_mixed AllowWin32SEH=true -f raw Fix #4717bug/bundler_fix
parent
036cb77dd0
commit
a543d957d4
|
@ -55,15 +55,6 @@ class Metasploit3 < Msf::Encoder::Alphanum
|
||||||
buf + Rex::Encoder::Alpha2::AlphaMixed::gen_decoder(reg, off)
|
buf + Rex::Encoder::Alpha2::AlphaMixed::gen_decoder(reg, off)
|
||||||
end
|
end
|
||||||
|
|
||||||
#
|
|
||||||
# Configure SEH getpc code on Windows
|
|
||||||
#
|
|
||||||
def init_platform(platform)
|
|
||||||
if(platform.supports?(::Msf::Module::PlatformList.win32))
|
|
||||||
datastore['AllowWin32SEH'] = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Encodes a one byte block with the current index of the length of the
|
# Encodes a one byte block with the current index of the length of the
|
||||||
# payload.
|
# payload.
|
||||||
|
|
|
@ -58,16 +58,6 @@ class Metasploit3 < Msf::Encoder::Alphanum
|
||||||
buf + Rex::Encoder::Alpha2::AlphaUpper::gen_decoder(reg, off)
|
buf + Rex::Encoder::Alpha2::AlphaUpper::gen_decoder(reg, off)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Configure SEH getpc code on Windows
|
|
||||||
#
|
|
||||||
def init_platform(platform)
|
|
||||||
if(platform.supports?(::Msf::Module::PlatformList.win32))
|
|
||||||
datastore['AllowWin32SEH'] = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Encodes a one byte block with the current index of the length of the
|
# Encodes a one byte block with the current index of the length of the
|
||||||
# payload.
|
# payload.
|
||||||
|
|
Loading…
Reference in New Issue