Advertisement
1337ings

[Python] XSS Scanner

Sep 8th, 2016
1,674
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.63 KB | None | 0 0
  1. ######################################################################
  2. #  ______________________________________  ._______________________  #
  3. #  \_   ___ \______   \_   _____/\______ \ |   \__    ___/   _____/  #
  4. #  /    \  \/|       _/|    __)_  |    |  \|   | |    |  \_____  \   #
  5. #  \     \___|    |   \|        \ |    `   \   | |    |  /        \  #
  6. #   \______  /____|_  /_______  //_______  /___| |____| /_______  /  #
  7. #          \/       \/        \/         \/                     \/   #
  8. ###########################################################################
  9. #  _________ .__          .__         __________             .__          #
  10. #  \_   ___ \|  |_________|__| ______ \______   \____   ____ |  |   ____  #
  11. #  /    \  \/|  |  \_  __ \  |/  ___/  |     ___/  _ \ /  _ \|  | _/ __ \ #
  12. #  \     \___|   |  \  | \/  |\___ \   |    |  (  <_> |  <_> )  |_\  ___/ #
  13. #   \______  /___|  /__|  |__/____  >  |____|   \____/ \____/|____/\___  >#
  14. #          \/     \/              \/                                   \/ #
  15. ###########################################################################
  16.  
  17. import mechanize
  18. import sys
  19.  
  20. br = mechanize.Browser()
  21. br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11)Gecko/20071127 Firefox/2.0.0.11')]
  22. br.set_handle_robots(False)
  23. br.set_handle_refresh(False)
  24.  
  25.  
  26. class color:
  27.    RED = '\033[91m'
  28.    BOLD = '\033[1m'
  29.    UNDERLINE = '\033[4m'
  30.    END = '\033[0m'
  31.  
  32.  
  33. print color.BOLD + color.RED + """
  34. __  __     ______     ______        ______     ______     _____    
  35. /\_\_\_\  /\ ___\  /\ ___\     /\ ___\  /\ __ \  /\ __ \
  36. \/_/\_\/_  \ \___  \ \ \___  \    \ \ \__ \ \ \ \/\ \ \ \ \/\ \
  37.  /\_\/\_\ \/\_____\ \/\_____\    \ \_____\ \ \_____\ \ \____/
  38.  \/_/\/_/   \/_____/   \/_____/      \/_____/   \/_____/   \/____/
  39.                                                                    
  40.  
  41. """ + color.END
  42.  
  43.  
  44. def initializeAndFind(firstDomains):
  45.  
  46.     dummy = 0  
  47.     firstDomains = []  
  48.     if len(sys.argv) >=2:  
  49.         url = sys.argv[1]
  50.     else:
  51.         print "URL format; AOL.com not http or www"
  52.         return 0
  53.    
  54.     smallurl = sys.argv[1] 
  55.  
  56.     allURLS = []
  57.     allURLS.append(url)
  58.     largeNumberOfUrls = [] 
  59.  
  60.     noSecondParameter = 0
  61.     if len(sys.argv) < 3:
  62.         noSecondParameter = 0
  63.     else:
  64.         noSecondParameter = 1
  65.     if sys.argv[1]:
  66.         print "Doing a short traversal."
  67.         print "   "
  68.         for url in allURLS:
  69.             x = str(url)
  70.             smallurl = x
  71.             url = "http://www." + str(url)
  72.             try:
  73.                 br.open(url)
  74.                 print "Crawling "+ str(url)
  75.                 print "   "
  76.                 try:
  77.                     for link in br.links():
  78.                         if smallurl in str(link.absolute_url):
  79.                             firstDomains.append(str(link.absolute_url))
  80.                     firstDomains = list(set(firstDomains))
  81.                 except:
  82.                     dummy = 0
  83.             except:
  84.                 dummy = 0
  85.         print "Number of crawled pages " + str(len(firstDomains))
  86.         print "  "
  87.        
  88.     if noSecondParameter != 0:
  89.         if(sys.argv[2] == "-e"):
  90.             print "Doing a comprehensive traversal. This could take a while."
  91.             for link in firstDomains:
  92.                 try:
  93.                     br.open(link)
  94.                     try:
  95.                         for newlink in br.links():
  96.                             if smallurl in str(newlink.absolute_url):
  97.                                 largeNumberOfUrls.append(newlink.absolute_url)
  98.                     except:
  99.                         dummy = 0
  100.                 except:
  101.                     dummy = 0
  102.    
  103.             firstDomains = list(set(firstDomains + largeNumberOfUrls))
  104.             print "Total Number of links has become: " + str(len(firstDomains))
  105.     return firstDomains
  106.  
  107.  
  108. def findxss(firstDomains):
  109.     print "Beginning scan."
  110.     print "  "
  111.     xssLinks = []          
  112.     count = 0          
  113.     dummyVar = 0           
  114.     if len(firstDomains) > 0:  
  115.         for link in firstDomains:
  116.             y = str(link)
  117.             print "\n[!]  "+ str(link) + "  [!]\n\n"
  118.             if 'jpg' in y:     
  119.                 print "There's no XSS in jpg silly goose"
  120.             elif 'pdf' in y:
  121.                 print "There's no XSS in pdf silly goose"
  122.             else:
  123.                 try:
  124.                     br.open(str(link)) 
  125.                 except:
  126.                     dummyVar = 0
  127.                 try:
  128.                     for form in br.forms():
  129.                         count = count + 1
  130.                 except:
  131.                     dummyVar = 0
  132.                 if count > 0:      
  133.                     try:
  134.                         params = list(br.forms())[0]
  135.                     except:
  136.                         dummyVar = 0
  137.                     try:
  138.                         br.select_form(nr=0)
  139.                     except:
  140.                         dummyVar = 0
  141.                     for p in params.controls:
  142.                         par = str(p)
  143.                         if 'TextControl' in par:
  144.                             print str(p.name)
  145.                             try:
  146.                                 br.form[str(p.name)] = '<svg "ons>'
  147.                             except:
  148.                                 dummyVar = 0
  149.                             try:
  150.                                 br.submit()
  151.                             except:
  152.                                 dummyVar = 0
  153.                             try:
  154.                                 if '<svg "ons>' in br.response().read():   
  155.                                     print "\n\nXSS discovered on" + str(link) + " the payload is <svg \"ons>" + "\n\n"
  156.                                     xssLinks.append(link)
  157.                                 else:
  158.                                     dummyVar = 0
  159.                             except:
  160.                                 print "could not read the page"
  161.                             try:
  162.                                 br.back()
  163.                             except:
  164.                                 dummyVar = 0
  165.  
  166.  
  167.                             try:
  168.                                 br.form[str(p.name)] = 'javascript:alert(1)'   
  169.                             except:
  170.                                 dummyVar = 0
  171.                             try:
  172.                                 br.submit()
  173.                             except:
  174.                                 dummyVar = 0
  175.                             try:
  176.                                 if '<a href="javascript:alert(1)' in br.response().read():
  177.                                     print "\n\nXSS discovered on" + str(link) + " the payload is javascript:alert(1)" + "\n\n"
  178.                                     xssLinks.append(link)
  179.                                 else:
  180.                                     dummyVar = 0
  181.                             except:
  182.                                 print "Could not read a page"
  183.                             try:
  184.                                 br.back()      
  185.                             except:
  186.                                 dummyVar = 0
  187.                     count = 0
  188.         for link in xssLinks:      
  189.             print link
  190.     else:
  191.         print "No links found"
  192.         print "|||||||||||||||||||||||||||||||||||||||"
  193.         print "         [!] Commands [!] "
  194.         print "python XSS.py aol.com | No http or www."
  195.         print "|||||||||||||||||||||||||||||||||||||||"
  196.  
  197.  
  198. firstDomains = []
  199. firstDomains = initializeAndFind(firstDomains)
  200. findxss(firstDomains)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement