"""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: ""` 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