feat(infra): auto-commit con 88 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
"""Genera consultas (dorks) de motor de busqueda para investigar un target.
|
||||
|
||||
Funcion pura de OSINT pasivo: a partir de un target y su tipo (persona,
|
||||
email, dominio o usuario) produce una lista de cadenas de busqueda listas
|
||||
para pegar en un buscador. No toca la red.
|
||||
"""
|
||||
|
||||
|
||||
def build_search_dorks(
|
||||
target: str,
|
||||
tipo: str = "persona",
|
||||
extra_domains: list | None = None,
|
||||
) -> list:
|
||||
"""Genera dorks de motor de busqueda adaptados al tipo de target.
|
||||
|
||||
Segun el tipo seleccionado produce las consultas mas utiles para
|
||||
investigar:
|
||||
|
||||
- persona: nombre exacto, en linkedin, con cv/curriculum, en ficheros.
|
||||
- email: el email entre comillas, en pastebin/breaches, en filetypes.
|
||||
- dominio: site:dominio, ficheros expuestos, subdominios, paneles.
|
||||
- usuario: el alias en redes sociales y foros.
|
||||
|
||||
`extra_domains` añade dorks `site:<dominio> "<target>"` para acotar la
|
||||
busqueda a dominios concretos, independientemente del tipo.
|
||||
|
||||
Args:
|
||||
target: cadena objetivo (nombre, email, dominio o username).
|
||||
tipo: uno de "persona", "email", "dominio", "usuario". Cualquier
|
||||
otro valor cae al conjunto generico (solo la frase exacta).
|
||||
extra_domains: lista opcional de dominios para acotar via site:.
|
||||
|
||||
Returns:
|
||||
lista de strings de dork en orden de generacion (sin deduplicar
|
||||
salvo el dork de frase exacta, que es la base comun).
|
||||
"""
|
||||
q = f'"{target}"' # frase exacta, base de casi todo dork
|
||||
dorks = [q]
|
||||
t = tipo.strip().lower()
|
||||
|
||||
if t == "persona":
|
||||
dorks += [
|
||||
f"{q} filetype:pdf",
|
||||
f'site:linkedin.com/in {q}',
|
||||
f'site:twitter.com {q}',
|
||||
f'intext:{q} (curriculum OR cv OR resume)',
|
||||
f'{q} (email OR correo OR contacto)',
|
||||
f'{q} filetype:doc OR {q} filetype:docx',
|
||||
]
|
||||
elif t == "email":
|
||||
dorks += [
|
||||
f'{q} site:pastebin.com',
|
||||
f'{q} (leak OR breach OR dump OR password)',
|
||||
f'{q} filetype:txt',
|
||||
f'{q} filetype:csv',
|
||||
f'{q} site:github.com',
|
||||
]
|
||||
elif t == "dominio":
|
||||
dorks += [
|
||||
f'site:{target}',
|
||||
f'site:{target} filetype:pdf',
|
||||
f'site:{target} filetype:xlsx',
|
||||
f'site:{target} (login OR admin OR dashboard)',
|
||||
f'site:{target} intext:(password OR contraseña)',
|
||||
f'site:*.{target}',
|
||||
f'-www site:{target}',
|
||||
]
|
||||
elif t == "usuario":
|
||||
dorks += [
|
||||
f'{q} site:github.com',
|
||||
f'{q} site:reddit.com',
|
||||
f'{q} (profile OR perfil OR user OR usuario)',
|
||||
f'inurl:{target}',
|
||||
]
|
||||
# Cualquier otro tipo: solo la frase exacta (ya añadida).
|
||||
|
||||
if extra_domains:
|
||||
for dom in extra_domains:
|
||||
dorks.append(f'site:{dom} {q}')
|
||||
|
||||
return dorks
|
||||
Reference in New Issue
Block a user