Photon: Herramienta OSINT en Kali Linux
Photon: Herramienta OSINT en Kali Linux
Photon es una herramienta de rastreo (crawler) increíblemente rápida y flexible diseñada para la recolección de información (OSINT). A diferencia de los crawlers tradicionales que solo descargan el HTML de una página, Photon extrae inteligentemente diversos tipos de datos útiles para un auditor de seguridad o un hacker ético.
Aquí tienes un desglose de lo que hace y cómo se usa:
🔍 ¿Qué puede extraer Photon?
Cuando apuntas Photon hacia un dominio, este analiza el sitio y organiza la información en diferentes categorías:
URLs: Enlaces internos, externos y aquellos que contienen parámetros (ideales para buscar vulnerabilidades tipo SQLi o XSS).
Archivos: Documentos PDF, JS, CSS, imágenes, etc.
Información de contacto: Correos electrónicos y cuentas de redes sociales.
Secretos y llaves: Puede encontrar claves de API, IDs de clientes de Amazon o tokens de autenticación expuestos en el código.
Subdominios: Identifica otros dominios relacionados con el objetivo.
Cadenas de texto personalizadas: Puedes usar expresiones regulares (Regex) para buscar patrones específicos.
🛠️ Comandos básicos de uso
Aunque Kali Linux suele tener muchas herramientas preinstaladas, a veces necesitas clonar Photon desde su repositorio de GitHub. Una vez instalada, estos son los comandos más comunes:
1. Rastreo simple
Para realizar un escaneo básico de un sitio web:
python3 photon.py -u https://ejemplo.com
2. Controlar la profundidad del rastreo
El parámetro -l (level) determina qué tan profundo llegará el crawler en los enlaces:
python3 photon.py -u https://ejemplo.com -l 3
3. Exportar resultados
Photon crea automáticamente una carpeta llamada ejemplo.com con archivos .txt para cada categoría de datos encontrada. Sin embargo, puedes exportar a formato JSON si lo prefieres:
python3 photon.py -u https://ejemplo.com --export=json
4. Modo "Ninja" (Sigilo)
Si quieres evitar ser bloqueado rápidamente, puedes usar proxies y agentes de usuario (User-Agents) aleatorios:
python3 photon.py -u https://ejemplo.com --user-agent --seeds
💡 ¿Por qué usar Photon y no otros?
Velocidad: Está basado en hilos (threads), lo que lo hace mucho más rápido que herramientas como
httrack.Inteligencia: No solo "mira" el sitio; extrae activamente datos que son valiosos para la fase de reconocimiento.
Ligereza: No requiere una configuración pesada ni bases de datos complejas.
[!WARNING]
Nota de seguridad: Recuerda que utilizar herramientas de rastreo en sitios web sin autorización puede ser detectado por sistemas WAF (Web Application Firewalls) y podría violar los términos de servicio del sitio o leyes locales. Úsalo siempre en entornos controlados o con permiso explícito.
Para extraer datos específicos con Photon, la clave está en el uso de filtros y expresiones regulares (Regex). Photon permite filtrar el "ruido" para que te enfoques únicamente en lo que necesitas para tu auditoría.
Aquí te explico cómo realizar extracciones personalizadas y avanzadas:
🎯 1. Extracción con Expresiones Regulares (Regex)
Si buscas un patrón específico que Photon no trae por defecto (como números de tarjetas, formatos de ID internos o palabras clave), usa el parámetro -r.
Ejemplo: Buscar archivos que mencionen la palabra "confidencial" o "admin":
python3 photon.py -u https://ejemplo.com -r "confidencial|admin"
📂 2. Extraer tipos de archivos específicos
Si solo te interesan los documentos (para buscar metadatos) o archivos de configuración, puedes usar comandos combinados de Linux tras el escaneo, pero Photon ya clasifica esto en la carpeta files.
Para ver rápidamente qué extensiones ha encontrado:
cat ejemplo.com/external.txt | grep "\.pdf\|\.docx\|\.xls"
🔧 3. Filtrar por tipos de datos (Keys, Emails, Scripts)
Photon guarda todo en archivos separados dentro de la carpeta del proyecto. Si buscas "secretos" (llaves API, tokens), revisa directamente el archivo de inteligencia:
Ver llaves de API encontradas:
cat ejemplo.com/secret.txtVer correos electrónicos:
cat ejemplo.com/emails.txtVer parámetros de URL (útil para inyecciones):
cat ejemplo.com/param.txt
🚀 4. Uso de "Seeds" (Semillas)
A veces el dato que buscas no está en la página principal. Puedes alimentar a Photon con una lista de URLs específicas (seeds) para que empiece el rastreo desde ahí:
python3 photon.py -u https://ejemplo.com --seeds lista_de_urls.txt
📊 Resumen de parámetros para datos específicos
| Parámetro | Función | Utilidad |
-r | Regex personalizado | Buscar patrones como ID-[0-9]{5}. |
--regex | Alias de -r | Igual al anterior. |
--exclude | Excluir URLs | Evita rastrear zonas irrelevantes (ej. /pago/). |
--user-agent | Cambiar User-Agent | Evita bloqueos para acceder a datos protegidos. |
Pro-Tip: Integración con otras herramientas
Si lo que buscas es extraer datos para luego procesarlos en masa, utiliza la exportación JSON. Esto te permite pasar los datos a herramientas como jq para filtrar por terminal:
cat ejemplo.com.json | jq '.emails'
Para ser más específicos, Photon es excepcionalmente bueno encontrando "Secretos" y "Parámetros".
Si quieres "cazar" algo concreto, aquí tienes los tres escenarios más comunes y cómo configurarlos:
1. Extraer Credenciales y Claves (Leaks)
Photon tiene un motor interno que busca patrones de claves de API (Google, AWS, Azure), tokens de sesión y contraseñas olvidadas en comentarios de JavaScript.
Para maximizar esto, usa el nivel de profundidad 3 y revisa el archivo de secretos:
Comando:
python3 photon.py -u https://objetivo.com -l 3Resultado: Revisa
objetivo.com/secret.txt.
2. Extraer Parámetros para Inyección (SQLi, XSS)
Si tu objetivo es encontrar vulnerabilidades, lo que buscas son URLs que terminen en algo como ?id=10&user=admin. Photon los separa automáticamente.
Comando:
python3 photon.py -u https://objetivo.comResultado: Revisa
objetivo.com/param.txt. Estos son tus puntos de entrada para herramientas como sqlmap.
3. Extraer solo archivos de un tipo (ej. Backups o Config)
Si sospechas que hay archivos .zip, .sql o .env expuestos, puedes usar una expresión regular para que Photon te avise en cuanto vea uno.
Comando:
python3 photon.py -u https://objetivo.com -r "\.sql|\.env|\.bak|\.zip"Resultado: Aparecerán en la terminal resaltados y se guardarán en los archivos de log.
💡 Ejemplo de flujo de trabajo real:
Supongamos que buscas correos corporativos para un ejercicio de phishing o auditoría:
Ejecutas:
python3 photon.py -u https://empresa.com -l 2Vas a la carpeta:
cd empresa.comLimpias los resultados:
sort -u emails.txt > correos_limpios.txt
¿Qué ocurre si no encuentra nada?
Si Photon no arroja resultados, suele ser por dos razones:
WAF/Bloqueo: El servidor detectó el escaneo rápido. Usa
--delay 2para ir más lento.Rutas Ocultas: Photon solo encuentra lo que está enlazado. Si el archivo no tiene un link directo, necesitarás usar FFUF o Dirbuster para hacer fuerza bruta de directorios.
Vamos a pasar a la acción. Si lo que buscas es algo tan específico como una API Key, un Token de acceso o una ruta de respaldo (backup), aquí tienes cómo construir el comando "quirúrgico" en Photon.
Para que yo pueda darte la sintaxis exacta, necesito saber cuál de estos es tu objetivo, pero aquí tienes los comandos para los casos más valiosos en ciberseguridad:
🔑 Caso A: Extraer API Keys (AWS, Google, Stripe, etc.)
Photon ya tiene patrones internos, pero si buscas una en particular (por ejemplo, de Firebase o un servicio interno), usa este comando:
python3 photon.py -u https://objetivo.com -l 3 -r "AIza[0-9A-Za-z-_]{35}|[0-9a-f]{32}"
¿Qué hace?: Busca el patrón estándar de Google API Keys y hashes MD5/Hexadecimales de 32 caracteres que suelen ser tokens o contraseñas.
📦 Caso B: Extraer Archivos Sensibles (.env, .git, .zip)
Si buscas archivos de configuración donde los desarrolladores suelen olvidar credenciales:
python3 photon.py -u https://objetivo.com -r "\.env|\.git|\.yml|\.config|\.bak"
Tip: Revisa después el archivo
objetivo.com/files.txt. Si encuentras un.env, ¡tienes la lotería! Ahí suelen estar las credenciales de la base de datos en texto plano.
📧 Caso C: Extraer Usuarios o Nombres de Dominio Internos
Si estás en una fase de reconocimiento para adivinar nombres de usuario:
python3 photon.py -u https://objetivo.com --keys
¿Qué hace?: El flag
--keysintenta extraer metadatos y cadenas que parecen nombres de usuario o identificadores únicos dentro de los scripts JS.
🛡️ ¿Cómo evitar que te bloqueen mientras extraes?
Si el sitio tiene una seguridad mínima, detectará cientos de peticiones por segundo y baneará tu IP. Usa esto para ser más discreto:
python3 photon.py -u https://objetivo.com -l 2 --delay 1 --user-agent
--delay 1: Espera un segundo entre peticiones.--user-agent: Cambia tu identidad (no parecerás un script de Python, sino un navegador normal).
Estructura de los datos extraídos
Photon organizará todo así:
scripts.txt: Todos los archivos JS (aquí es donde suelen estar las llaves de API).secret.txt: Lo que Photon considera "oro" (tokens, llaves, sesiones).param.txt: Variables para intentar inyecciones.
Para extraer información de Firebase (específicamente la Firebase API Key y la Database URL), Photon es excelente porque analiza los archivos JavaScript donde los desarrolladores suelen dejar la configuración del SDK de Firebase por error o descuido.
Aquí tienes el comando quirúrgico para cazar configuraciones de Firebase:
🛠️ El Comando Maestro para Firebase
Copia y pega esto en tu terminal de Kali:
python3 photon.py -u https://objetivo.com -l 3 -r "AIza[0-9A-Za-z-_]{35}|[a-z0-9-]+\.firebaseio\.com"
¿Qué está buscando este comando?
AIza[0-9A-Za-z-_]{35}: Es el patrón estándar de las API Keys de Google/Firebase. Casi todas empiezan por "AIza".[a-z0-9-]+\.firebaseio\.com: Busca la URL de la base de datos (Realtime Database).
📂 Dónde buscar los resultados
Una vez que Photon termine, no mires solo la terminal. Ve a la carpeta que creó y revisa estos dos archivos:
objetivo.com/secret.txt: Aquí es donde Photon guarda automáticamente lo que detecta como claves.objetivo.com/scripts.txt: Este archivo contiene las rutas de todos los archivos.js.Tip Pro: A veces la configuración de Firebase está "ofuscada". Puedes usar
greppara buscar dentro de los scripts descargados:grep -rE "apiKey|authDomain|databaseURL" objetivo.com/
⚠️ ¿Qué hacer si encuentras los datos?
Si logras extraer algo como esto:
const firebaseConfig = {
apiKey: "AIzaSyAbC123...",
authDomain: "app-proyecto.firebaseapp.com",
databaseURL: "https://app-proyecto.firebaseio.com",
// ...
};
El siguiente paso lógico para un auditor no es Photon, sino verificar si la base de datos está mal configurada (permisos de lectura/escritura abiertos).
[!TIP]
Prueba rápida de vulnerabilidad:
Intenta acceder a:
https://app-proyecto.firebaseio.com/.json
Si ves datos: La base de datos es pública y vulnerable.
Si ves "Permission denied": Está protegida correctamente.
🚀 Potenciando la búsqueda con "Wayback"
Si el sitio actual parece limpio, puedes pedirle a Photon que busque en el historial de Internet (archivos que ya no existen pero quedaron grabados):
python3 photon.py -u https://objetivo.com --wayback -r "AIza[0-9A-Za-z-_]{35}"
Esto es muy efectivo porque los desarrolladores suelen borrar las llaves del código después de darse cuenta del error, pero estas permanecen en los archivos históricos de la Wayback Machine.
Una vez que has extraído una Firebase API Key con Photon, el siguiente paso es verificar si esa llave tiene permisos excesivos o si la base de datos está mal configurada. No necesitas hacerlo manualmente; existen herramientas y scripts diseñados específicamente para esto.
Aquí tienes cómo automatizar el testeo de forma profesional:
1. Uso de "Baserunner" (Herramienta Automatizada)
Baserunner es una de las herramientas más sencillas para testear llaves de Firebase. Te permite verificar qué servicios están abiertos (Firestore, Realtime Database, Cloud Storage, etc.).
Instalación:
git clone https://github.com/m6002/baserunner.git
cd baserunner
npm install
Ejecución:
Simplemente pegas la configuración que encontraste con Photon en el archivo de configuración de Baserunner y lo ejecutas. La herramienta intentará leer y escribir datos automáticamente para decirte si es vulnerable.
2. Script Rápido en Python (Test de Realtime Database)
Si tienes la API Key y el ID del proyecto (o la URL de Firebase), puedes usar este pequeño script para automatizar la comprobación de lectura pública:
import requests
project_id = "tu-proyecto-id" # Lo sacas de la URL de firebaseio.com
url = f"https://{project_id}.firebaseio.com/.json"
response = requests.get(url)
if response.status_code == 200:
print(f"[!] VULNERABLE: La base de datos es pública.")
print(response.text[:500]) # Muestra los primeros 500 caracteres de datos
elif response.status_code == 401 or response.status_code == 403:
print("[+] SEGURA: Acceso denegado (Permisos configurados).")
else:
print(f"[-] Error desconocido: {response.status_code}")
3. Herramienta "GCP Scanner"
Dado que Firebase es parte de Google Cloud Platform (GCP), a menudo una llave de Firebase da acceso a otros servicios de Google. GCP Scanner automatiza la revisión de más de 15 servicios usando esa misma API Key.
Comando:
python3 gcp_scanner.py -k TU_API_KEYQué busca: Cubetas de Storage abiertas, funciones de Cloud desprotegidas o instancias de computación.
4. Análisis de "Security Rules" (El punto crítico)
La automatización te dirá si puedes entrar, pero es importante entender por qué. Firebase utiliza un sistema de reglas basado en JSON. El error más común que estas herramientas detectan es este:
Regla Vulnerable:
JSON{ "rules": { ".read": true, ".write": true } }Esta configuración permite que cualquier persona en el mundo borre o descargue toda tu base de datos usando solo la URL.
Resumen del Flujo de Trabajo (Workflow)
Para optimizar tu tiempo en Kali, este es el orden lógico:
Photon: Extraes la
apiKeyy ladatabaseURL.Curl / Navegador: Intentas acceder a
URL/.jsonpara un test rápido de lectura.Baserunner / Firebase Scanner: Automatizas el test de escritura (intento de crear un registro "test").
Reporte: Si el test de escritura funciona, la vulnerabilidad es crítica.
Si solo tienes la API Key (la cadena que empieza por AIza...), todavía tienes una pieza fundamental, pero te falta el "mapa" para saber a qué apunta. En Firebase, la API Key no es un secreto en sí mismo (es pública por diseño), el problema es cuando esa llave da acceso a servicios cuyas reglas de seguridad están mal configuradas.
Para automatizar el testeo teniendo solo la llave, usaremos un método para "descubrir" a qué proyecto pertenece y qué permisos tiene.
1. Identificar el Proyecto (Reverse Lookup)
Antes de testear, necesitas saber el project-id. Puedes usar una herramienta llamada gcp-get-project-info o un simple comando de curl contra las APIs de Google:
curl -X POST "https://www.googleapis.com/identitytoolkit/v3/relyingparty/getProjectConfig?key=TU_API_KEY_AQUI"
Si funciona: Te devolverá un JSON con el
projectIdy los dominios autorizados.Si el
projectIdes "ejemplo-app": Entonces tu URL de base de datos probablemente seahttps://ejemplo-app.firebaseio.com/.
2. Automatización con "F-Scanner"
F-Scanner es una herramienta diseñada específicamente para cuando tienes la llave pero no sabes qué hay detrás.
Instalación en Kali:
git clone https://github.com/shriyanshs/f-scanner.git
cd f-scanner
python3 -m pip install -r requirements.txt
Testeo automático:
Este comando intentará adivinar el nombre del proyecto basándose en la llave y probará automáticamente si la base de datos es abierta:
python3 f-scanner.py -k TU_API_KEY_AQUI
3. Test de Servicios Específicos (GCP)
A menudo, una llave de Firebase también es una llave de Google Maps, YouTube o Google Drive si el desarrollador no restringió la llave en la consola de Google Cloud.
Puedes usar la herramienta g-api-scanner para probar la llave contra todos los servicios de Google de una sola vez:
Herramienta: G-API-Scanner
Uso:
python3 g-api-scanner.py -k TU_API_KEYResultado esperado: Te dirá una lista de "Vulnerable" o "Not Vulnerable" para servicios como:
Cloud Vision API
Google Maps Static
Firebase Database
4. ¿Qué puedes hacer manualmente con esa Key?
Si quieres probar si puedes extraer información de usuarios (Auth), puedes usar este endpoint de Google:
curl -X POST "https://www.googleapis.com/identitytoolkit/v3/relyingparty/signupNewUser?key=TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{"email":"test@test.com","password":"password123","returnSecureToken":true}'
Si te devuelve un token: Significa que el registro de usuarios está abierto y puedes crear cuentas en su aplicación.
Si devuelve error: El servicio de autenticación está protegido o desactivado.
Resumen de tu situación:
Tener la llave de 35 caracteres es como tener la llave de un edificio. Ahora, con estas herramientas, estás probando cada puerta (Base de datos, Storage, Auth) para ver cuál se olvidaron de cerrar con llave.