Skip to content

Google Dorks y Google Hacking

El Google Dork es una técnica de búsqueda avanzada que utiliza operadores y palabras clave específicas en el buscador de Google para encontrar información que normalmente no aparece en los resultados de búsqueda regulares.

La técnica de Google Dorking se utiliza a menudo en el hacking ético para encontrar información sensible y crítica en línea. Es una forma eficaz de recopilar información valiosa de una organización o individuo que puede ser utilizada para realizar pruebas de penetración y otros fines de seguridad.

Al utilizar Google Dorks, un profesional de seguridad puede buscar:

  • Credenciales expuestas: Usuarios y contraseñas
  • Archivos confidenciales: Documentos internos, configuraciones
  • Información de bases de datos: Dumps, backups
  • Datos financieros: Información de tarjetas, facturas
  • Vulnerabilidades: Paneles de administración, directorios expuestos
  • Información corporativa: Empleados, estructura organizacional
  • Configuraciones de sistemas: Archivos de configuración expuestos
  • Reconocimiento pasivo: No genera logs en sistemas objetivo
  • Información pública: Todo está indexado por Google
  • Eficiencia: Resultados rápidos y precisos
  • Cobertura amplia: Millones de sitios web indexados
  • Costo cero: Herramienta completamente gratuita
OperadorDescripciónEjemplo
site:Busca en un sitio específicosite:example.com
filetype:Busca archivos de un tipo específicofiletype:pdf
intitle:Busca en el título de las páginasintitle:"admin panel"
inurl:Busca en la URLinurl:admin
intext:Busca en el contenido de la páginaintext:password
cache:Muestra la versión en cachécache:example.com
link:Páginas que enlazan a una URLlink:example.com
related:Sitios relacionadosrelated:example.com
OperadorDescripciónEjemplo
-Excluye términossite:example.com -www
""Búsqueda exacta"exact phrase"
*Comodínadmin * panel
OROperador lógico ORadmin OR administrator
ANDOperador lógico ANDlogin AND password
()Agrupación(admin OR administrator) site:example.com

1. Archivos de Configuración y Credenciales

Section titled “1. Archivos de Configuración y Credenciales”
# Archivos de configuración expuestos
filetype:env "DB_PASSWORD"
filetype:env "API_KEY"
filetype:config "password"
filetype:ini "password"
filetype:conf "password"
# Archivos de base de datos
filetype:sql "INSERT INTO" "password"
filetype:sql "CREATE TABLE users"
filetype:db "password"
# Archivos de configuración web
filetype:php "mysql_connect"
filetype:asp "password"
filetype:jsp "password"
# Variables de entorno
intext:"DB_PASSWORD" filetype:env
intext:"SECRET_KEY" filetype:env
# Paneles de admin genéricos
intitle:"Admin Panel" OR intitle:"Administration"
intitle:"Login" OR intitle:"Sign In"
inurl:admin OR inurl:administrator
inurl:login OR inurl:signin
# Paneles específicos
intitle:"phpMyAdmin"
intitle:"cPanel"
intitle:"Webmin"
intitle:"DirectAdmin"
intitle:"ISPConfig"
# Paneles de CMS
intitle:"WordPress › Log In"
intitle:"Joomla Administration"
intitle:"Drupal" inurl:user/login
# Directorios expuestos
intitle:"Index of" "Parent Directory"
intitle:"Index of" "admin"
intitle:"Index of" "backup"
intitle:"Index of" "config"
intitle:"Index of" "logs"
# Archivos de backup
filetype:bak OR filetype:backup
filetype:old OR filetype:orig
filetype:tmp "password"
# Archivos de log
filetype:log "password" OR "login"
filetype:log "error" OR "warning"
# Información de empleados
site:linkedin.com "Company Name" "employee"
filetype:pdf "curriculum" OR "resume"
filetype:doc "employee list"
# Contactos y emails
filetype:xls "email" OR "contact"
filetype:csv "email" OR "@"
intext:"@company.com"
# Organigramas
filetype:pdf "organizational chart"
filetype:ppt "company structure"
# Documentos internos
filetype:pdf "confidential" OR "internal use"
filetype:doc "private" OR "restricted"
filetype:ppt "internal" site:example.com
# Informes financieros
filetype:pdf "financial report" OR "annual report"
filetype:xls "budget" OR "financial"
# Contratos y legales
filetype:pdf "contract" OR "agreement"
filetype:doc "terms and conditions"
# Errores de aplicación
intext:"Warning: mysql_connect()"
intext:"Fatal error:" "MySQL"
intext:"Error Occurred While Processing Request"
# Información de versiones
intext:"Apache/" "Server at"
intext:"nginx/" "server"
intitle:"Apache Tomcat" "version"
# Archivos de instalación
filetype:php "install" OR "setup"
intitle:"Installation" OR "Setup Wizard"
# Cámaras IP
intitle:"Live View" inurl:ViewerFrame
intitle:"Network Camera" inurl:home.html
inurl:"/view/index.shtml"
# Dispositivos de red
intitle:"Router Configuration"
intitle:"Switch Configuration"
intitle:"Wireless Configuration"
# Sistemas de monitoreo
intitle:"SCADA" OR "HMI"
intitle:"Control System"
# AWS S3 Buckets
site:s3.amazonaws.com filetype:xml
inurl:"s3.amazonaws.com" "Index of /"
# Google Cloud
site:storage.googleapis.com
site:appspot.com "Index of"
# APIs expuestas
inurl:"/api/" "key" OR "token"
filetype:json "api_key" OR "access_token"
# Interfaces de BD
intitle:"phpMyAdmin" "Welcome to phpMyAdmin"
intitle:"Adminer" "Database"
intitle:"MongoDB" "admin"
# Archivos de dump
filetype:sql "CREATE TABLE"
filetype:sql "INSERT INTO users"
filetype:bak "database"
# Perfiles de empleados
site:facebook.com "works at Company"
site:twitter.com "@company.com"
site:instagram.com "#company"
# Posts relacionados
site:reddit.com "company name" "employee"
site:glassdoor.com "company reviews"
# Archivos de configuración Apache
filetype:conf "ServerRoot" OR "DocumentRoot"
filetype:htaccess "RewriteRule" OR "AuthUserFile"
intext:"Apache Server Status" "Server Version"
# Archivos de configuración Nginx
filetype:conf "server_name" OR "listen"
intext:"nginx/1." "server status"
# MySQL
intext:"MySQL Error" OR "mysql_fetch_array()"
filetype:sql "mysql" "password"
intext:"Access denied for user" "using password"
# PostgreSQL
intext:"PostgreSQL query failed" OR "pg_connect()"
filetype:sql "postgresql" "password"
# MongoDB
intext:"MongoDB" "unauthorized" OR "authentication"
site:*.mongodb.net OR site:*.mongodb.com
# Oracle
intext:"ORA-" "error" OR "Oracle Error"
filetype:ora "password" OR "connect"
# Laravel
filetype:env "APP_KEY" OR "DB_PASSWORD"
intext:"Laravel" "Whoops, looks like something went wrong"
inurl:"/.env" "APP_KEY"
# Django
intext:"Django" "DEBUG = True"
filetype:py "SECRET_KEY" "Django"
# Ruby on Rails
filetype:yml "database" "password" "rails"
intext:"Ruby on Rails" "error occurred"
# Node.js
filetype:json "password" OR "secret" "node"
intext:"Express" "Error:"
# WordPress
filetype:txt "DB_PASSWORD" "wp-config"
inurl:wp-admin OR inurl:wp-login
site:*/wp-content/debug.log
# Joomla
filetype:php "JConfig" "password"
inurl:administrator/index.php "Joomla"
# Drupal
filetype:php "drupal" "password"
inurl:user/login "Drupal"
# Magento
inurl:downloader/ "Magento Connect"
intext:"Magento Commerce" "admin"
# Script básico de reconocimiento
#!/bin/bash
TARGET="example.com"
echo "=== RECONOCIMIENTO INICIAL ==="
echo "Objetivo: $TARGET"
# 1. Subdominios básicos
echo -e "\n[1] Buscando subdominios..."
SUBDOMAIN_DORKS=(
"site:*.$TARGET -www"
"site:$TARGET -site:www.$TARGET"
)
# 2. Archivos expuestos básicos
echo -e "\n[2] Buscando archivos expuestos..."
FILE_DORKS=(
"site:$TARGET filetype:pdf"
"site:$TARGET filetype:doc"
"site:$TARGET filetype:xls"
)
# 3. Paneles de administración
echo -e "\n[3] Buscando paneles de admin..."
ADMIN_DORKS=(
"site:$TARGET inurl:admin"
"site:$TARGET intitle:\"Admin Panel\""
"site:$TARGET inurl:login"
)
import requests
import time
import urllib.parse
class GoogleDorker:
def __init__(self, target):
self.target = target
self.session = requests.Session()
self.session.headers.update({
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
})
def search_dork(self, dork):
"""Ejecuta un Google Dork específico"""
query = f"{dork} site:{self.target}"
encoded_query = urllib.parse.quote(query)
url = f"https://www.google.com/search?q={encoded_query}"
try:
response = self.session.get(url)
return self.parse_results(response.text)
except Exception as e:
print(f"Error ejecutando dork: {e}")
return []
def search_multiple_dorks(self, dorks):
"""Ejecuta múltiples dorks con delay"""
results = {}
for dork in dorks:
print(f"Ejecutando: {dork}")
results[dork] = self.search_dork(dork)
time.sleep(2) # Delay para evitar rate limiting
return results
# Ejemplo de uso
dorker = GoogleDorker("example.com")
sensitive_dorks = [
'filetype:env "password"',
'intitle:"Index of" "backup"',
'inurl:admin',
'filetype:sql "password"'
]
results = dorker.search_multiple_dorks(sensitive_dorks)
#!/bin/bash
# Script para validar URLs encontradas
validate_urls() {
local urls_file="$1"
local output_file="$2"
echo "=== VALIDACIÓN DE URLs ==="
while IFS= read -r url; do
echo "Validando: $url"
# Verificar si la URL responde
status_code=$(curl -s -o /dev/null -w "%{http_code}" "$url" --max-time 10)
if [[ $status_code -eq 200 ]]; then
echo "✅ ACTIVA: $url" | tee -a "$output_file"
# Verificar contenido sensible
content=$(curl -s "$url" --max-time 10)
if echo "$content" | grep -qi "password\|admin\|login\|config"; then
echo "🚨 CONTENIDO SENSIBLE DETECTADO: $url" | tee -a "$output_file"
fi
else
echo "❌ NO RESPONDE ($status_code): $url"
fi
sleep 1
done < "$urls_file"
}
# Uso
validate_urls "found_urls.txt" "validated_results.txt"

Caso 1: Auditoría de Seguridad Corporativa

Section titled “Caso 1: Auditoría de Seguridad Corporativa”

Objetivo: Encontrar información sensible expuesta de la empresa XYZ Corp.

Terminal window
# 1. Información de empleados
site:linkedin.com "XYZ Corp" "employee"
site:facebook.com "works at XYZ Corp"
# 2. Documentos corporativos
site:xyzcorp.com filetype:pdf "internal" OR "confidential"
site:xyzcorp.com filetype:doc "employee" OR "staff"
# 3. Configuraciones expuestas
site:xyzcorp.com filetype:env OR filetype:config
site:xyzcorp.com intitle:"Index of" "config"
# 4. Subdominios y servicios
site:*.xyzcorp.com -site:www.xyzcorp.com
site:xyzcorp.com inurl:admin OR inurl:panel

Caso 2: Investigación de Brechas de Datos

Section titled “Caso 2: Investigación de Brechas de Datos”

Objetivo: Verificar si credenciales de la organización están expuestas.

Terminal window
# 1. Archivos de credenciales
"@xyzcorp.com" filetype:txt OR filetype:csv
"@xyzcorp.com" "password" filetype:sql
# 2. Dumps de bases de datos
"xyzcorp" filetype:sql "CREATE TABLE"
"xyzcorp" filetype:sql "INSERT INTO users"
# 3. Configuraciones con passwords
"xyzcorp.com" "mysql_connect" "password"
"xyzcorp.com" filetype:php "password"

Objetivo: Mapear la infraestructura tecnológica de la organización.

Terminal window
# 1. Servidores y servicios
site:xyzcorp.com "Apache" OR "nginx" OR "IIS"
site:xyzcorp.com "Server: " OR "X-Powered-By:"
# 2. Aplicaciones web
site:xyzcorp.com "WordPress" OR "Joomla" OR "Drupal"
site:xyzcorp.com "Laravel" OR "Django" OR "Rails"
# 3. Servicios en la nube
site:s3.amazonaws.com "xyzcorp"
site:storage.googleapis.com "xyzcorp"
# 4. Dispositivos IoT
"xyzcorp" intitle:"Network Camera"
"xyzcorp" intitle:"Router" OR "Switch"
#!/usr/bin/env python3
"""
Automatizador de Google Dorks con múltiples funcionalidades
"""
import requests
import json
import time
import random
from bs4 import BeautifulSoup
import argparse
class AdvancedDorker:
def __init__(self):
self.session = requests.Session()
self.user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36'
]
def rotate_user_agent(self):
"""Rota User-Agent para evitar detección"""
ua = random.choice(self.user_agents)
self.session.headers.update({'User-Agent': ua})
def search_with_proxy(self, dork, proxy=None):
"""Ejecuta búsqueda con proxy opcional"""
if proxy:
self.session.proxies = {'http': proxy, 'https': proxy}
self.rotate_user_agent()
# Implementar lógica de búsqueda
pass
def export_results(self, results, format='json'):
"""Exporta resultados en diferentes formatos"""
if format == 'json':
with open('dork_results.json', 'w') as f:
json.dump(results, f, indent=2)
elif format == 'csv':
# Implementar exportación CSV
pass
# Dorks categorizados
DORK_CATEGORIES = {
'credentials': [
'filetype:env "DB_PASSWORD"',
'filetype:config "password"',
'intext:"mysql_connect" "password"'
],
'admin_panels': [
'intitle:"Admin Panel"',
'inurl:admin/login',
'intitle:"phpMyAdmin"'
],
'sensitive_files': [
'intitle:"Index of" "backup"',
'filetype:sql "password"',
'filetype:log "password"'
]
}
import googlesearch
import time
def advanced_google_dork(dork, num_results=10, delay=1):
"""
Ejecuta Google Dork usando la API de googlesearch-python
"""
results = []
try:
for url in googlesearch.search(dork, num=num_results, stop=num_results, pause=delay):
results.append(url)
print(f"Encontrado: {url}")
except Exception as e:
print(f"Error en búsqueda: {e}")
return results
# Ejemplo de uso masivo
def mass_dorking(target, categories):
all_results = {}
for category, dorks in categories.items():
print(f"\n=== CATEGORÍA: {category.upper()} ===")
category_results = []
for dork in dorks:
full_dork = f"{dork} site:{target}"
print(f"Ejecutando: {full_dork}")
results = advanced_google_dork(full_dork, num_results=5, delay=2)
category_results.extend(results)
time.sleep(random.uniform(3, 7)) # Delay aleatorio
all_results[category] = category_results
return all_results
# Uso
target = "example.com"
results = mass_dorking(target, DORK_CATEGORIES)
# Extensión básica para Burp Suite
from burp import IBurpExtender, ITab
from javax.swing import JPanel, JButton, JTextArea, JLabel
import threading
class BurpExtender(IBurpExtender, ITab):
def registerExtenderCallbacks(self, callbacks):
self._callbacks = callbacks
self._helpers = callbacks.getHelpers()
callbacks.setExtensionName("Google Dorker")
# Crear UI
self._panel = JPanel()
self._dork_area = JTextArea(10, 50)
self._result_area = JTextArea(20, 50)
self._execute_btn = JButton("Ejecutar Dorks", actionPerformed=self.execute_dorks)
# Layout
self._panel.add(JLabel("Google Dorks:"))
self._panel.add(self._dork_area)
self._panel.add(self._execute_btn)
self._panel.add(JLabel("Resultados:"))
self._panel.add(self._result_area)
callbacks.addSuiteTab(self)
def getTabCaption(self):
return "Google Dorker"
def getUiComponent(self):
return self._panel
def execute_dorks(self, event):
# Ejecutar dorks en thread separado
threading.Thread(target=self._run_dorks).start()
def _run_dorks(self):
dorks = self._dork_area.getText().split('\n')
results = []
for dork in dorks:
if dork.strip():
# Implementar lógica de búsqueda
result = f"Resultados para: {dork}\n"
results.append(result)
self._result_area.setText('\n'.join(results))
#!/bin/bash
# Script con rotación de proxies
PROXIES=(
"proxy1:port"
"proxy2:port"
"proxy3:port"
)
rotate_proxy() {
local proxy=${PROXIES[$RANDOM % ${#PROXIES[@]}]}
export http_proxy="http://$proxy"
export https_proxy="http://$proxy"
echo "Usando proxy: $proxy"
}
# Ejecutar dork con proxy rotativo
execute_dork_with_rotation() {
local dork="$1"
for i in {1..3}; do
rotate_proxy
# Ejecutar búsqueda (ejemplo con curl)
response=$(curl -s --proxy "$http_proxy" \
"https://www.google.com/search?q=$(echo "$dork" | sed 's/ /%20/g')")
if [[ $? -eq 0 ]]; then
echo "Búsqueda exitosa con proxy $i"
break
fi
sleep 5
done
}
import random
import time
class SmartDelay:
def __init__(self):
self.request_count = 0
self.last_request_time = 0
def calculate_delay(self):
"""Calcula delay inteligente basado en patrones"""
self.request_count += 1
current_time = time.time()
# Delay base entre 2-5 segundos
base_delay = random.uniform(2, 5)
# Aumentar delay cada 10 búsquedas
if self.request_count % 10 == 0:
base_delay += random.uniform(5, 10)
# Delay adicional si las búsquedas son muy frecuentes
if current_time - self.last_request_time < 3:
base_delay += random.uniform(3, 8)
self.last_request_time = current_time
return base_delay
def apply_delay(self):
"""Aplica el delay calculado"""
delay = self.calculate_delay()
print(f"Aplicando delay de {delay:.2f} segundos...")
time.sleep(delay)
# Uso en dorking automatizado
delay_manager = SmartDelay()
for dork in dork_list:
execute_dork(dork)
delay_manager.apply_delay()
def generate_dork_variations(base_dork):
"""Genera variaciones de un dork para evitar detección"""
variations = []
# Variaciones básicas
variations.append(base_dork)
variations.append(base_dork.replace('"', "'"))
variations.append(base_dork.replace(' AND ', ' & '))
variations.append(base_dork.replace(' OR ', ' | '))
# Agregar wildcards
if '*' not in base_dork:
variations.append(base_dork.replace(' ', ' * '))
# Usar sinónimos
synonyms = {
'admin': ['administrator', 'root', 'manager'],
'login': ['signin', 'auth', 'access'],
'password': ['passwd', 'pwd', 'secret']
}
for word, syns in synonyms.items():
if word in base_dork.lower():
for syn in syns:
variations.append(base_dork.replace(word, syn))
return list(set(variations)) # Eliminar duplicados
# Ejemplo
base = 'site:example.com intitle:"admin login"'
variations = generate_dork_variations(base)
for var in variations:
print(var)

Estados Unidos:

  • Computer Fraud and Abuse Act (CFAA): Prohibe acceso no autorizado
  • Digital Millennium Copyright Act (DMCA): Protege contenido digital
  • State Privacy Laws: Leyes estatales de privacidad

Unión Europea:

  • GDPR: Regulación de protección de datos
  • NIS Directive: Seguridad de redes y sistemas de información
  • Cybersecurity Act: Marco de ciberseguridad

América Latina:

  • Brasil (LGPD): Lei Geral de Proteção de Dados
  • México: Ley Federal de Protección de Datos Personales
  • Argentina: Ley de Protección de Datos Personales
Principios Éticos:
✅ Permitido:
- Investigación de seguridad autorizada
- Auditorías de seguridad con consentimiento
- Investigación académica con permisos
- Verificación de exposición de datos propios
- Pentesting con autorización escrita
❌ Prohibido:
- Acceso no autorizado a sistemas
- Descarga de información confidencial
- Uso con fines maliciosos
- Violación de términos de servicio
- Explotación de vulnerabilidades sin autorización
  1. Obtener autorización por escrito antes de realizar dorking
  2. Respetar robots.txt y términos de servicio
  3. No acceder a contenido protegido sin autorización
  4. Reportar vulnerabilidades de manera responsable
  5. Documentar todas las actividades para auditoría legal
⚠️ AVISO LEGAL IMPORTANTE:
Esta documentación sobre Google Dorks es únicamente para
fines educativos y de investigación en ciberseguridad.
RESPONSABILIDAD DEL USUARIO:
- Obtener autorización explícita antes de usar estas técnicas
- Cumplir con todas las leyes locales e internacionales
- Respetar la privacidad y términos de servicio
- No utilizar para acceso no autorizado
USO ÉTICO OBLIGATORIO:
- Solo en sistemas propios o con autorización
- Para mejorar la seguridad, no para comprometerla
- Siguiendo principios de disclosure responsable
- Con fines defensivos y educativos únicamente
EXENCIÓN DE RESPONSABILIDAD:
Los autores no se responsabilizan por el mal uso de esta
información. El uso indebido puede constituir delito.
Terminal window
# 1. Pagodo - Dorking automatizado
git clone https://github.com/opsdisk/pagodo.git
cd pagodo
pip install -r requirements.txt
python pagodo.py -d example.com -g dorks.txt
# 2. GooDork - Dorker en Go
go get github.com/dwisiswant0/goodork
goodork -t example.com -q "admin panel"
# 3. Dorkbot - Framework de dorking
git clone https://github.com/utiso/dorkbot.git
cd dorkbot
python dorkbot.py -l google -o example.com
# Integración con APIs alternativas
# 1. Bing Search API
import requests
def bing_dork(query, api_key):
endpoint = "https://api.bing.microsoft.com/v7.0/search"
headers = {"Ocp-Apim-Subscription-Key": api_key}
params = {"q": query, "count": 50}
response = requests.get(endpoint, headers=headers, params=params)
return response.json()
# 2. DuckDuckGo (sin API oficial, scraping)
def duckduckgo_dork(query):
url = f"https://duckduckgo.com/html/?q={query}"
# Implementar scraping responsable
pass
# 3. Yandex Search API
def yandex_dork(query, api_key):
url = "https://yandex.com/search/xml"
params = {
"query": query,
"key": api_key,
"folderid": "folder_id"
}
# Implementar llamada a API
pass
  • OWASP: Guías de testing web
  • NIST: Frameworks de ciberseguridad
  • SANS: Recursos de seguridad informática
  • Bug Bounty Platforms: HackerOne, Bugcrowd
  • Security Conferences: DEF CON, Black Hat, BSides

Google Dorking es una técnica fundamental en el arsenal de cualquier profesional de ciberseguridad. Su poder radica en la capacidad de encontrar información sensible que las organizaciones han expuesto inadvertidamente en internet.

  1. Herramienta poderosa: Puede revelar vulnerabilidades críticas
  2. Accesible y gratuita: Solo requiere conocimiento de operadores
  3. Reconocimiento pasivo: No genera logs en sistemas objetivo
  4. Requiere responsabilidad: Debe usarse éticamente y legalmente
  5. Complementa otras técnicas: Parte integral de OSINT y pentesting
  • Para Pentesters: Integrar dorking en metodologías de testing
  • Para Organizaciones: Auditar regularmente su exposición en buscadores
  • Para Individuos: Verificar qué información personal está indexada
  • Para Estudiantes: Practicar en entornos controlados y legales

Recuerda siempre: Con gran poder viene gran responsabilidad. Usa estas técnicas únicamente para mejorar la seguridad, nunca para comprometer sistemas o violar la privacidad.


Última actualización: 2025-01-23 Versión: 3.0