Initial commit, que empiece la fiesta

This commit is contained in:
Kevin Muñoz 2024-11-16 13:47:53 -05:00
parent aa2d4305c6
commit 24354760fa
Signed by: mrhacker
GPG Key ID: E5616555DD4EDAAE
2 changed files with 633 additions and 1 deletions

199
README.md
View File

@ -1,2 +1,199 @@
# SEVO
# 🕵️‍♂️ SEVO - Security Email Validator OSINT v1.0.0
![Version](https://img.shields.io/badge/version-1.0.0-blue.svg)
![License](https://img.shields.io/badge/license-MIT-green.svg)
![Category](https://img.shields.io/badge/category-OSINT-orange.svg)
![OPSEC](https://img.shields.io/badge/OPSEC-friendly-green.svg)
Una potente herramienta OSINT diseñada para la verificación, análisis de seguridad y reconocimiento de direcciones de correo electrónico. Ideal para investigadores de seguridad, analistas OSINT, profesionales de ciberseguridad y entusiastas del Bug Bounty.
## 📋 Características Principales
### Verificación de Correos
- Análisis sintáctico avanzado
- Verificación de registros MX
- Validación SMTP en tiempo real
- Detección de correos inexistentes
- Análisis de respuestas del servidor
### Análisis de Seguridad
- Puntuación de seguridad (0-100)
- Detección de SPF y política
- Análisis DMARC y nivel de aplicación
- Verificación de DKIM
- Detección de MTA-STS
- Análisis TLSRPT
- Verificación DNSSEC
- Evaluación de spoofing posible
### Características OSINT
- Fingerprinting de servidores
- Análisis de infraestructura
- Detección de protecciones
- Modo sigiloso para OPSEC
- Análisis detallado en modo verbose
## 🚀 Instalación
### Requisitos del Sistema
```bash
# Arch Linux
sudo pacman -S bind-tools openbsd-netcat coreutils bc
# Debian/Ubuntu
sudo apt install bind9-host netcat coreutils bc
# Kali Linux
sudo apt update && sudo apt install bind9-host netcat-openbsd coreutils bc
```
### Instalación Rápida
```bash
git clone https://github.com/tuuser/sevo.git
cd sevo
chmod +x sevo
./sevo --version
```
## 💡 Uso
### Sintaxis Básica
```bash
./sevo [opciones] <email>
```
### Opciones Disponibles
```
-v, --verbose Modo verbose, muestra información detallada
-s, --stealth Modo sigiloso, más lento pero menos detectable
-d, --delay N Añade un delay de N segundos entre consultas
-h, --help Muestra esta ayuda
--version Muestra la versión
```
### Ejemplos de Uso
```bash
# Verificación básica
./sevo usuario@dominio.com
# Análisis detallado con información de seguridad
./sevo -v usuario@dominio.com
# Modo sigiloso con delay de 2 segundos
./sevo -s -d 2 usuario@dominio.com
```
## 📊 Interpretación de Resultados
### Puntuación de Seguridad
- **80-100**: Excelente protección
- **50-79**: Protección moderada
- **0-49**: Protección débil
### Indicadores de Estado
| Símbolo | Significado |
|---------|-------------|
| ✅ | Verificación exitosa/Característica presente |
| ❌ | Verificación fallida/Característica ausente |
| ⚠️ | Advertencia/Riesgo potencial |
| 🔍 | Análisis en proceso |
### Ejemplo de Salida
```
╔════════════════════════════════════════════════════════════════
║ 🔒 Análisis de Seguridad para dominio.com
╠════════════════════════════════════════════════════════════════
║ 📊 Puntuación de Seguridad: 95/100
║ ✅ Características de Seguridad Detectadas:
║ - SPF
║ - SPF_STRICT
║ - DMARC
║ - DMARC_ENFORCED
║ - DKIM
║ - TLSRPT
║ ⚠️ Vulnerabilidades Detectadas:
║ - MTA-STS no configurado
║ 🎯 Estado de Protecciones:
║ - SPF Estricto: ✅
║ - DMARC Enforced: ✅
║ - Spoofing Posible: ✅ NO
╚════════════════════════════════════════════════════════════════
```
## 🛡️ Características de Seguridad Analizadas
### SPF (Sender Policy Framework)
- Presencia de registro SPF
- Política (-all, ~all, ?all, +all)
- Nivel de restricción
### DMARC (Domain-based Message Authentication)
- Presencia de registro DMARC
- Política (reject, quarantine, none)
- Porcentaje de aplicación
- Nivel de enforcement
### DKIM (DomainKeys Identified Mail)
- Verificación de selectores comunes
- Detección de claves públicas
- Estado de implementación
### Protecciones Adicionales
- MTA-STS para seguridad de transporte
- TLSRPT para reportes TLS
- DNSSEC para seguridad DNS
## 🎯 Casos de Uso
### Investigaciones de Seguridad
- Validación de correos sospechosos
- Análisis de configuraciones
- Detección de vulnerabilidades
### Auditorías
- Evaluación de seguridad de correo
- Verificación de configuraciones
- Identificación de riesgos
### Bug Bounty
- Reconocimiento de objetivos
- Verificación de correos
- Análisis de infraestructura
## ⚠️ Consideraciones OPSEC
- Utilizar con VPN/Proxy cuando sea necesario
- Activar modo sigiloso para reconocimiento discreto
- Usar delays apropiados para evitar detección
- Limitar frecuencia de consultas
- Documentar hallazgos de forma segura
## 📝 Notas Legales
Esta herramienta está diseñada para uso ético y profesional en:
- Pruebas autorizadas
- Investigaciones legítimas
- Auditorías de seguridad
- Análisis de sistemas propios
El uso indebido puede estar sujeto a restricciones legales.
## 🤝 Contribución
Las contribuciones son bienvenidas:
- Reporte de bugs
- Nuevas características
- Mejoras de documentación
- Optimizaciones de código
## 📜 Licencia
Este proyecto está bajo la Licencia MIT.
---
⚡ Desarrollado con ❤️ por la comunidad OSINT

435
sevo Executable file
View File

@ -0,0 +1,435 @@
#!/bin/bash
# Versión del script
VERSION="1.0.0"
# Colores y símbolos
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
MAGENTA='\033[0;35m'
CYAN='\033[0;36m'
NC='\033[0m'
CHECK_MARK="✓"
CROSS_MARK="✗"
WARN_MARK="⚠️"
LOADING="⏳"
SEARCH="🔍"
VERBOSE=false
STEALTH=false
DELAY=0
SECURITY_SCORE=0
IS_SPOOFABLE=false
SPF_STRICT=false
DMARC_ENFORCED=false
show_banner() {
echo "
███████╗███╗ ███╗ █████╗ ██╗██╗ ██████╗ ███████╗██╗███╗ ██╗████████╗
██╔════╝████╗ ████║██╔══██╗██║██║ ██╔═══██╗██╔════╝██║████╗ ██║╚══██╔══╝
█████╗ ██╔████╔██║███████║██║██║ ██║ ██║███████╗██║██╔██╗ ██║ ██║
██╔══╝ ██║╚██╔╝██║██╔══██║██║██║ ██║ ██║╚════██║██║██║╚██╗██║ ██║
███████╗██║ ╚═╝ ██║██║ ██║██║███████╗╚██████╔╝███████║██║██║ ╚████║ ██║
╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚══════╝ ╚═════╝ ╚══════╝╚═╝╚═╝ ╚═══╝ ╚═╝
"
echo -e "${CYAN} Email OSINT Validator v$VERSION${NC}"
echo -e "${YELLOW} Uso ético - Solo para investigación autorizada${NC}"
echo
}
show_help() {
echo "Uso: $0 [opciones] <email>"
echo
echo "Opciones:"
echo " -v, --verbose Modo verbose, muestra información detallada"
echo " -s, --stealth Modo sigiloso, más lento pero menos detectable"
echo " -d, --delay N Añade un delay de N segundos entre consultas"
echo " -h, --help Muestra esta ayuda"
echo " --version Muestra la versión"
echo
echo "Ejemplos:"
echo " $0 usuario@dominio.com"
echo " $0 -v usuario@dominio.com"
echo " $0 -s -d 2 usuario@dominio.com"
exit 0
}
show_spinner() {
local pid=$1
local delay=0.1
local spinstr='⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏'
printf "\r"
while ps -p $pid > /dev/null 2>&1; do
local temp=${spinstr#?}
printf "\r[%c] " "$spinstr"
local spinstr=$temp${spinstr%"$temp"}
sleep $delay
done
printf "\r \r"
}
log() {
local level=$1
local message=$2
if [[ $VERBOSE == true ]] || [[ $level != "DEBUG" ]]; then
case $level in
"INFO") echo -e "${GREEN}${CHECK_MARK}${NC} $message";;
"WARN") echo -e "${YELLOW}${WARN_MARK}${NC} $message";;
"ERROR") echo -e "${RED}${CROSS_MARK}${NC} $message";;
"DEBUG") echo -e "${BLUE}${SEARCH}${NC} $message";;
esac
fi
}
analyze_mx_security() {
local domain=$1
local security_features=()
local vulnerabilities=()
local spf_strict=false
local dmarc_enforced=false
local spoofable=false
local security_score=0
local max_score=100
log "DEBUG" "Iniciando análisis de seguridad profundo para $domain"
log "DEBUG" "Analizando registros SPF..."
local spf_record=$(host -t TXT "$domain" | grep "v=spf1")
if [ -n "$spf_record" ]; then
security_features+=("SPF")
security_score=$((security_score + 20))
if [[ $spf_record =~ "-all" ]]; then
security_features+=("SPF_STRICT")
spf_strict=true
security_score=$((security_score + 15))
elif [[ $spf_record =~ "~all" ]]; then
security_features+=("SPF_SOFT_FAIL")
vulnerabilities+=("SPF no es estricto (usa ~all)")
security_score=$((security_score + 10))
elif [[ $spf_record =~ "\?all" ]]; then
vulnerabilities+=("SPF en modo neutral")
security_score=$((security_score + 5))
elif [[ $spf_record =~ "\+all" ]]; then
vulnerabilities+=("SPF permite cualquier remitente")
spoofable=true
fi
else
vulnerabilities+=("No se encontró registro SPF")
spoofable=true
fi
log "DEBUG" "Analizando política DMARC..."
local dmarc_record=$(host -t TXT "_dmarc.$domain" | grep "v=DMARC1")
if [ -n "$dmarc_record" ]; then
security_features+=("DMARC")
security_score=$((security_score + 20))
if [[ $dmarc_record =~ "p=reject" ]]; then
security_features+=("DMARC_ENFORCED")
dmarc_enforced=true
security_score=$((security_score + 15))
elif [[ $dmarc_record =~ "p=quarantine" ]]; then
security_features+=("DMARC_QUARANTINE")
security_score=$((security_score + 10))
elif [[ $dmarc_record =~ "p=none" ]]; then
vulnerabilities+=("DMARC en modo monitoreo")
security_score=$((security_score + 5))
fi
if [[ $dmarc_record =~ "pct=100" ]] || [[ ! $dmarc_record =~ "pct=" ]]; then
security_score=$((security_score + 5))
else
local pct=$(echo "$dmarc_record" | grep -oP 'pct=\K[0-9]+')
vulnerabilities+=("DMARC solo aplicado al $pct% del tráfico")
fi
else
vulnerabilities+=("No se encontró registro DMARC")
spoofable=true
fi
log "DEBUG" "Analizando configuración DKIM..."
local dkim_selectors=("default" "google" "mail" "email" "key1" "selector1" "selector2")
local dkim_found=false
for selector in "${dkim_selectors[@]}"; do
if host -t TXT "${selector}._domainkey.$domain" 2>/dev/null | grep -q "v=DKIM1"; then
security_features+=("DKIM")
security_score=$((security_score + 15))
dkim_found=true
break
fi
done
if ! $dkim_found; then
vulnerabilities+=("No se encontró registro DKIM")
fi
log "DEBUG" "Verificando MTA-STS..."
if host -t TXT "_mta-sts.$domain" 2>/dev/null | grep -q "v=STSv1"; then
security_features+=("MTA-STS")
security_score=$((security_score + 10))
else
vulnerabilities+=("MTA-STS no configurado")
fi
if host -t TXT "_smtp._tls.$domain" 2>/dev/null | grep -q "v=TLSRPTv1"; then
security_features+=("TLSRPT")
security_score=$((security_score + 5))
fi
if dig "$domain" +dnssec | grep -q "RRSIG"; then
security_features+=("DNSSEC")
security_score=$((security_score + 10))
fi
cat << EOF
╔════════════════════════════════════════════════════════════════
║ 🔒 Análisis de Seguridad para $domain
╠════════════════════════════════════════════════════════════════
║ 📊 Puntuación de Seguridad: $security_score/$max_score
EOF
if [ ${#security_features[@]} -gt 0 ]; then
cat << EOF
║ ✅ Características de Seguridad Detectadas:
EOF
for feature in "${security_features[@]}"; do
printf "║ - %s\n" "$feature"
done
fi
if [ ${#vulnerabilities[@]} -gt 0 ]; then
cat << EOF
║ ⚠️ Vulnerabilidades Detectadas:
EOF
for vuln in "${vulnerabilities[@]}"; do
printf "║ - %s\n" "$vuln"
done
fi
cat << EOF
║ 🎯 Estado de Protecciones:
║ - SPF Estricto: $(if $spf_strict; then echo "✅"; else echo "❌"; fi)
║ - DMARC Enforced: $(if $dmarc_enforced; then echo "✅"; else echo "❌"; fi)
║ - Spoofing Posible: $(if $spoofable; then echo "⚠️ SÍ"; else echo "✅ NO"; fi)
╚════════════════════════════════════════════════════════════════
EOF
SECURITY_SCORE=$security_score
IS_SPOOFABLE=$spoofable
SPF_STRICT=$spf_strict
DMARC_ENFORCED=$dmarc_enforced
}
fingerprint_server() {
local response=$1
local server_info=$(echo "$response" | grep -i "^220" | head -n1)
if [[ $server_info =~ "Microsoft" ]]; then
log "INFO" "Servidor detectado: Microsoft Exchange/Office 365"
[[ $VERBOSE == true ]] && log "DEBUG" "Sistema de correo empresarial Microsoft"
elif [[ $server_info =~ "Google" ]]; then
log "INFO" "Servidor detectado: Google Workspace"
[[ $VERBOSE == true ]] && log "DEBUG" "Sistema de correo Google Workspace"
elif [[ $server_info =~ "Postfix" ]]; then
log "INFO" "Servidor detectado: Postfix"
[[ $VERBOSE == true ]] && log "DEBUG" "Servidor de correo Postfix (Linux)"
elif [[ $server_info =~ "Exim" ]]; then
log "INFO" "Servidor detectado: Exim"
[[ $VERBOSE == true ]] && log "DEBUG" "Servidor de correo Exim"
elif [[ $server_info =~ "Sendmail" ]]; then
log "INFO" "Servidor detectado: Sendmail"
[[ $VERBOSE == true ]] && log "DEBUG" "Servidor de correo Sendmail"
elif [[ $server_info =~ "Zimbra" ]]; then
log "INFO" "Servidor detectado: Zimbra"
[[ $VERBOSE == true ]] && log "DEBUG" "Suite de colaboración Zimbra"
else
log "INFO" "Servidor no identificado específicamente"
[[ $VERBOSE == true ]] && log "DEBUG" "Banner del servidor: $server_info"
fi
}
validate_email() {
local email=$1
local domain=$(echo "$email" | cut -d "@" -f 2)
local our_hostname="email-validator-osint.local"
log "INFO" "Verificando correo: $email"
if ! echo "$email" | grep -E "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$" >/dev/null; then
log "ERROR" "Formato de correo inválido"
return 1
fi
log "INFO" "La sintaxis del correo es correcta"
log "INFO" "Buscando registros MX..."
local mx_output=$(host -t MX "$domain")
if [ $? -ne 0 ]; then
log "ERROR" "No se encontraron registros MX para $domain"
return 1
fi
log "INFO" "Registros MX encontrados:"
local primary_mx=""
local current_priority=999
while read -r line; do
if [[ $line =~ "is handled by" ]]; then
local server=$(echo "$line" | awk '{print $NF}' | sed 's/\.$//')
local priority=$(echo "$line" | awk '{print $(NF-1)}')
log "INFO" "MX record encontrado: $server (Prioridad $priority)"
if [ -z "$primary_mx" ] || [ "$priority" -lt "$current_priority" ]; then
primary_mx=$server
current_priority=$priority
fi
fi
done <<< "$mx_output"
[[ $VERBOSE == true ]] && analyze_mx_security "$domain"
if [ -n "$primary_mx" ]; then
[[ $STEALTH == true ]] && sleep $DELAY
echo -ne "${LOADING} Iniciando diálogo con $primary_mx "
temp_commands=$(mktemp)
{
echo "EHLO $our_hostname"
echo "MAIL FROM:<validator@$our_hostname>"
echo "RCPT TO:<$email>"
echo "QUIT"
} > "$temp_commands"
nc -w 10 "$primary_mx" 25 < "$temp_commands" > response.tmp 2>&1 &
nc_pid=$!
show_spinner $nc_pid
wait $nc_pid
rm -f "$temp_commands"
echo -e "\r${CHECK_MARK} Diálogo con $primary_mx completado "
log "INFO" "Respuestas del servidor:"
local email_status="válido"
local problem_description=""
local valid_response=false
while read -r line; do
if [[ $line =~ ^[0-9]{3} ]]; then
echo " $line"
local code=${line:0:3}
valid_response=true
if [[ $code == "220" ]] && [[ $VERBOSE == true ]]; then
fingerprint_server "$line"
fi
case $code in
250)
if [[ $line =~ "RCPT" ]]; then
email_status="válido"
log "INFO" "Correo verificado exitosamente"
fi
;;
421)
email_status="no verificable"
problem_description="El servidor no está disponible temporalmente"
log "WARN" "$problem_description"
;;
450|452)
email_status="temporalmente no disponible"
problem_description="Buzón temporalmente no disponible"
log "WARN" "$problem_description"
;;
500|501|502|503|504)
if [[ $VERBOSE == true ]]; then
log "DEBUG" "Código $code: Error de protocolo (normal durante la negociación)"
fi
;;
550)
if [[ $line =~ "RCPT" ]] || [[ $line =~ "user" ]] || [[ $line =~ "recipient" ]]; then
email_status="no válido"
problem_description="La dirección de correo no existe"
log "ERROR" "$problem_description"
fi
;;
551|553)
email_status="no válido"
problem_description="La dirección de correo no está permitida"
log "ERROR" "$problem_description"
;;
554)
email_status="no válido"
problem_description="Transacción fallida"
log "ERROR" "$problem_description"
;;
esac
fi
done < response.tmp
rm -f response.tmp
if [[ "$email_status" == "válido" ]]; then
log "INFO" "El correo $email es válido"
return 0
elif [[ "$email_status" == "no válido" ]]; then
log "ERROR" "El correo $email no es válido"
[ -n "$problem_description" ] && log "ERROR" "Razón: $problem_description"
return 1
else
log "WARN" "Estado del correo $email: $email_status"
[ -n "$problem_description" ] && log "WARN" "Razón: $problem_description"
return 1
fi
fi
}
for cmd in host nc timeout dig bc mktemp; do
if ! command -v $cmd &> /dev/null; then
echo -e "${RED}${CROSS_MARK} Error: El comando '$cmd' no está instalado.${NC}"
echo " Instala las dependencias necesarias con:"
echo " sudo pacman -S bind-tools openbsd-netcat coreutils bc"
echo " o"
echo " sudo apt install bind9-host netcat coreutils bc"
exit 1
fi
done
while [[ $# -gt 0 ]]; do
case $1 in
-v|--verbose) VERBOSE=true; shift;;
-s|--stealth) STEALTH=true; shift;;
-d|--delay) DELAY="$2"; shift 2;;
-h|--help) show_help;;
--version) echo "Email Validator OSINT v$VERSION"; exit 0;;
*) EMAIL="$1"; shift;;
esac
done
if [ -z "$EMAIL" ]; then
show_help
fi
show_banner
validate_email "$EMAIL"
exit_code=$?
if [[ $VERBOSE == true ]] && [[ $exit_code -eq 0 ]]; then
echo -e "\n${GREEN}🎉 Análisis completado exitosamente${NC}"
if [[ $SECURITY_SCORE -ge 80 ]]; then
echo -e "${GREEN}🛡️ El dominio tiene buenas protecciones de seguridad${NC}"
elif [[ $SECURITY_SCORE -ge 50 ]]; then
echo -e "${YELLOW}⚠️ El dominio tiene protecciones moderadas${NC}"
else
echo -e "${RED}⚠️ El dominio tiene protecciones débiles${NC}"
fi
fi
exit $exit_code