Advertisement
uzycie

CVE-Detection

May 8th, 2017
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.14 KB | None | 0 0
  1. # Script for CVE Detection
  2. # Not Originally Made By Me
  3. from socket import *
  4. import re
  5. import sys
  6. import threading
  7.  
  8. port_list = [16992,16993,16994,16995,623,664]
  9.  
  10. server_rex = "Server: Intel\(R\) Active Management Technology"
  11. version_rex = "((11\.(6\.(2(7\.(3(2(6[0-3]|[0-5][0-9])|[01][0-9]{2})|[0-2]?[0-9]?[0-9]?[0-9])|[0-6])|[01]?[0-9])|5|0\.(2(5\.(3000|[0-2]?[0-9]?[0-9]?[0-9])|[0-4])|[01]?[0-9]))|"\
  12.             "10\.0\.(5(5\.[0-2]?[0-9]?[0-9]?[0-9]|[0-4])|[0-4]?[0-9])|"\
  13.             "9\.(5\.(6(1\.(30(1[01]|0?[0-9])|[0-2]?[0-9]?[0-9]?[0-9])|0)|[0-5]?[0-9])|1\.(4(1\.(30(2[0-3]|[01][0-9])|[0-2]?[0-9]?[0-9]?[0-9])|0)|[0-3]?[0-9])|0)|"\
  14.             "8\.(1\.(7(1\.(3(60[0-7]|[0-5][0-9]{2})|[0-2]?[0-9]?[0-9]?[0-9])|0)|[0-6]?[0-9])|0)|"\
  15.             "7\.(1\.(9(1\.(3(2(7[01]|[0-6][0-9])|[01][0-9]{2})|[0-2]?[0-9]?[0-9]?[0-9])|0)|[0-8]?[0-9])|0)|"\
  16.             "6\.(2\.(6(1\.(3(5(3[0-4]|[0-2][[0-9])|[0-4][0-9]{2})|[0-2]?[0-9]?[0-9]?[0-9])|0)|[0-5]?[0-9])|[01])))"
  17.  
  18. banner_rex = "%s %s" % (server_rex, version_rex)
  19.  
  20. vuln_targets = []
  21.  
  22. def check_vuln(response):
  23.         m = re.search(banner_rex, response)
  24.         if m is None:
  25.             return False
  26.  
  27.         return True
  28.  
  29. def run(host, port):
  30.     try:
  31.         s = socket(AF_INET,SOCK_STREAM)
  32.         s.settimeout(10)
  33.         s.connect((host, port))
  34.  
  35.         s.send("GET / HTTP/1.1\r\n\r\n")
  36.         resp = s.recv(1024)
  37.         s.close()
  38.  
  39.         if check_vuln(resp):
  40.             print "\n[!] %s:%d appears to be vulnerable to CVE-2017-5689" % (host,port)
  41.             vuln_targets.append("%s:%d" % (host,port))
  42.  
  43.     except Exception, e:
  44.         s.close()
  45.  
  46. def vuln_summary():
  47.     print "Vulnerable targets:"
  48.     for vuln in vuln_targets:
  49.         print vuln
  50.  
  51. def main(addr, end=0):
  52.     # get address prefix
  53.     addr_prefix = addr[0:addr.rfind('.')]
  54.  
  55.     # get start index of subnet
  56.     start = int(addr[addr.rfind('.')+1:])
  57.  
  58.     # if single ip
  59.     if end == 0:
  60.         stop = start
  61.  
  62.     # get stop index of subnet
  63.     else:
  64.         stop = int(end)
  65.  
  66.     # generate target list
  67.     addresses = []
  68.     for i in xrange(start, stop+1):
  69.         addresses.append("%s.%d" % (addr_prefix,i))
  70.  
  71.     for address in addresses:
  72.         thread_pool = []
  73.  
  74.         for port in port_list:
  75.             print "[+] checking %s:%d" % (address,port)
  76.  
  77.             t = threading.Thread(target=run, args = (address, port))
  78.             t.start()
  79.             thread_pool.append(t)
  80.  
  81.         # wait for threads to terminate
  82.         for t in thread_pool:
  83.             t.join()
  84.  
  85.         print ""
  86.  
  87.     vuln_summary()
  88.  
  89. if __name__=="__main__":
  90.     # validate ip argument
  91.     ip_rex = r"^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})(-([0-9]{1,3}))?"
  92.     m = re.search(ip_rex, sys.argv[1])
  93.     if m is None:
  94.         print "Invalid ip address or range"
  95.         exit(-1)
  96.  
  97.     first_ip = m.group(1)
  98.     rng = m.group(3)
  99.  
  100.     # no range defined, use single ip
  101.     if rng is None:
  102.         main(first_ip)
  103.  
  104.     else:
  105.         last_octet = first_ip[first_ip.rfind('.')+1:]
  106.  
  107.         if(int(last_octet) > int(rng)):
  108.             print "Invalid ip range"
  109.             exit(-1)
  110.  
  111.         main(first_ip, rng)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement