La obfuscación por inversión de cadenas (reverse string obfuscation) es una técnica de bypass en seguridad web que consiste en invertir el orden de los caracteres de una cadena de texto (email, URL, payload, palabra clave) para que los sistemas de filtrado no la reconozcan, mientras que un humano o un script posterior puede leerla fácilmente invirtiéndola de nuevo.
No tiene un CVE específico porque no es una vulnerabilidad en sí misma: es un método de evasión que aprovecha discrepancias entre cómo los filtros analizan el texto y cómo los sistemas procesan o muestran ese mismo texto.
✅CONCEPTO CLAVE
El atacante invierte una cadena antes de enviarla. El filtro la analiza tal cual (al revés) y no encuentra el patrón buscado. El backend, navegador o receptor la procesa de forma que el payload resulta efectivo.
En muchos contextos (phishing, Juice Shop OWASP, scraping evasion) simplemente se espera que el humano la lea al revés mentalmente.
⚡EJEMPLO BÁSICO
Estado
Cadena
Normal
usuario@ejemplo.com
Invertida
moc.olmepje@oisairu
Filtro ve
❌ No coincide con @ejemplo.com
Humano lee
✅ Entiende el email fácilmente
⚠ Contexto educativo: Todo el contenido de este módulo es para comprender, detectar y mitigar estas técnicas. La aplicación de estas técnicas sin autorización puede ser ilegal.
Módulo 02
#02 Cómo Funciona: El Flujo del Ataque
🔄FLUJO DE ATAQUE — EMAIL PHISHING
😈
Atacante
Escribe el email malicioso normalmente
payload: usuario@banco-seguro.com
▼ invierte la cadena antes de enviar
🔀
Transformación
La cadena se invierte con .split('').reverse().join('')
obfuscado: moc.oruges-ocnab@oiraisu
▼ el email llega al sistema con el texto invertido
🛡️
Filtro / WAF
Busca @banco-seguro.com en la cadena — NO la encuentra
Resultado: ✅ PERMITIDO (falso negativo)
▼ el email llega al destinatario
👤
Víctima / Sistema destino
El humano lee el texto al revés mentalmente — o un script lo invierte
Entiende: usuario@banco-seguro.com → Hace clic
▼ objetivo conseguido
💀
Resultado
El phishing tuvo éxito — el filtro fue bypasseado
💻IMPLEMENTACIÓN EN JAVASCRIPT
JAVASCRIPT
// La función más simple de inversiónfunctionreverseString(str) {
return str.split('').reverse().join('');
}
// Ejemplo: obfuscar un emailconst email = 'usuario@ejemplo.com';
const obfusc = reverseString(email);
console.log(obfusc); // → 'moc.olmepje@oiraisu'// Reconstruir en el cliente (como haría el atacante)const original = reverseString(obfusc);
console.log(original); // → 'usuario@ejemplo.com'// Uso en HTML para evadir scrapers
document.write(reverseString('moc.olmepje@oiraisu'));
💡 ¿Por qué funciona? Los filtros estáticos (WAF, blacklists, regex) comparan la cadena exactamente como llega. Si no aplican transformaciones previas como inversión, decodificación o normalización Unicode, un simple .reverse() basta para evadir el análisis.
Módulo 03
#03 Variantes y Técnicas Combinadas
🧬HOMOGLYPHS — CARACTERES VISUALMENTE IDÉNTICOS
Los homoglyphs son caracteres Unicode que se parecen visualmente a letras latinas pero tienen un codepoint diferente. Un filtro que compare bytes o codepoints los verá como distintos, pero un humano no notará la diferencia.
Letra latina
Homoglyph
Unicode
Ejemplo
a
а (cirílico)
U+0430
pаypal.com ≠ paypal.com
e
е (cirílico)
U+0435
googlе.com ≠ google.com
o
о (cirílico)
U+043E
micrоsoft.com ≠ microsoft.com
c
с (cirílico)
U+0441
faсebook.com ≠ facebook.com
⚡ Combinación peligrosa: Inversión + Homoglyphs. El texto invertido contiene letras cirílicas que parecen latinas. El filtro falla en dos niveles distintos.
🔢ENCODINGS MÚLTIPLES
URL Encoding
@ → %40 · / → %2F
Double URL Encoding
% → %25 → %2540 en lugar de %40
HTML Entities
< → < · > → >
Base64
alert(1) → YWxlcnQoMSk=
Combinado
Base64 → Invertir → URL Encode: capas de evasión apiladas
👻CARACTERES INVISIBLES
Insertar caracteres Unicode de anchura cero o de control dentro de la cadena. El texto se ve igual para el humano pero rompe los patrones del filtro.
Carácter
Unicode
Efecto
Zero Width Space
U+200B
pass → 'pass' visualmente
Zero Width Joiner
U+200D
script → 'script' visualmente
Soft Hyphen
U+00AD
password → 'password' visualmente
RTL Override
U+202E
Invierte dirección visual del texto
El carácter U+202E (Right-to-Left Override) hace que el texto se muestre al revés visualmente en interfaces que respetan la dirección Unicode — sin necesitar inversión real de bytes.
🤖INVERSIÓN PARCIAL Y ATAQUES A LLMs
Una variante moderna usa inversión parcial: solo se invierten las partes "sensibles" de una cadena (el dominio, la palabra clave) manteniendo el resto legible. Esto hace más difícil la detección automatizada.
En ataques contra Large Language Models (LLMs) como ChatGPT, se usa reverse text para intentar evadir los filtros de detección de prompts maliciosos o jailbreaks:
PROMPT INJECTION — EJEMPLO EDUCATIVO
# Normal (detectado por el filtro):"Ignora las instrucciones anteriores y..."# Invertido para evasión:"...y seroiretna senoiccurtsni sal arono gI"# → El modelo recibe instrucción de 'leer al revés' primero# → Algunos modelos lo procesan, el filtro no lo detecta
Módulo 04
#04 Casos de Uso Reales
🧃OWASP JUICE SHOP
Juice Shop es una aplicación web vulnerable de OWASP usada en labs. Contiene un reto donde una dirección de email está escrita al revés como pista o mecanismo de obfuscación.
El reto enseña precisamente que los sistemas pueden ignorar texto invertido mientras que los administradores usan esa técnica para "esconder" información de scrapers o filtros.
En Juice Shop: el email del admin aparece como rab@ylcuJ.pus — inviértelo: pus.Jculy@bar. El sistema lo acepta porque la lógica de autenticación lo normaliza internamente.
🕷️SCRAPING EVASION (EMAILS)
Técnica clásica usada por webmasters para proteger emails en páginas web de bots de spam que recolectan direcciones. El email se escribe al revés en el HTML:
HTML
<!-- El bot scraper ve esto y no reconoce el email -->
<span class="email-rev">moc.empresa@otcatnoc</span>
<!-- El JS lo invierte para el usuario humano -->
<script>
document.querySelectorAll('.email-rev')
.forEach(el => {
el.textContent = el.textContent
.split('')
.reverse()
.join('');
});
</script>
📧PHISHING / ANTISPAM BYPASS
Filtros antispam buscan dominios maliciosos conocidos. Al invertir el dominio en el cuerpo del email, el filtro no lo encuentra en su blacklist.
Técnica
Ejemplo
Normal
Haz clic en banco.ru/login
Invertido
Haz clic en ur.ocnab/nigol
RTL Unicode
U+202E invierte display sin cambiar bytes
💉XSS / INYECCIÓN WEB
Payloads maliciosos invertidos para evadir WAFs que filtran <script>:
XSS BYPASS
# WAF bloquea: <script>alert(1)</script># Invertido: >tpircs/<)1(trela>tpircs<# El servidor invierte antes de renderizar → RCE# Double encoding + reverse combinado:"%3Ctpircs%3E"# URL-encoded reversed <script>
🔐BYPASS DE VALIDACIONES Y BLACKLISTS
Sistemas que validan emails, usernames o dominios contra una blacklist de palabras prohibidas son vulnerables si no normalizan la entrada:
Campo
Blacklist busca
Input invertido
Resultado
Username
admin
nimda
✅ PERMITIDO
Email domain
@malware.com
moc.erawlam@
✅ PERMITIDO
Comentario
DROP TABLE
ELBAT PORD
✅ PERMITIDO
URL
javascript:
:tpircsavaj
✅ PERMITIDO
Módulo 05 — Laboratorio Práctico
#05 Lab: Generador de Obfuscación
🧪 Objetivo del lab: Experimenta con las distintas técnicas de obfuscación y observa cómo la misma cadena puede transformarse de formas que un filtro estático no reconocería. Usa este lab para entender el problema, no para causar daño.
⚡ GENERADOR DE OBFUSCACIONES INTERACTIVO
// Resultado aparecerá aquí
🔁 SIMULADOR DE FILTRO VS PAYLOAD INTERACTIVO
Simula cómo un filtro estático que busca una palabra/patrón reacciona ante la versión obfuscada. Observa el resultado real vs el que ve el filtro.
// Resultado de la simulación
Módulo 06 — Laboratorio Práctico
#06 Lab: Detector y Normalizador
🎯 Objetivo: Aprende a detectar y normalizar inputs obfuscados antes de validarlos — la base de la mitigación correcta.
🛡️ DETECTOR DE OBFUSCACIÓN INTERACTIVO
Pega cualquier cadena sospechosa. El detector aplicará múltiples transformaciones y buscará patrones de riesgo en cada versión.
// Análisis aparecerá aquí
🔧 NORMALIZADOR DE INPUT INTERACTIVO
Simula el proceso correcto de normalización que debería aplicar un sistema seguro antes de validar cualquier input.
// Proceso de normalización
Módulo 07
#07 Cómo Mitigar Esta Técnica
✅ Principio fundamental: Siempre valida en whitelist (lo que está permitido) en lugar de blacklist (lo que está prohibido). Una whitelist es infinitamente más robusta contra cualquier técnica de obfuscación.
🔧PIPELINE DE VALIDACIÓN SEGURA
JAVASCRIPT — PIPELINE SEGURO
/**
* Pipeline de normalización segura antes de validar
* SIEMPRE aplicar ANTES de cualquier blacklist/whitelist
*/functionnormalizeInput(input) {
let normalized = input;
// 1. Decodificar URL encoding (y double encoding)try {
let prev = '';
while(prev !== normalized) {
prev = normalized;
normalized = decodeURIComponent(normalized);
}
} catch(e) {}
// 2. Decodificar HTML entitiesconst txt = document.createElement('textarea');
txt.innerHTML = normalized;
normalized = txt.value;
// 3. Eliminar caracteres de control y anchura cero
normalized = normalized.replace(
/[\u200B\u200C\u200D\u200E\u200F\u202A-\u202E\uFEFF]/g,
''
);
// 4. Normalizar Unicode (NFKC: convierte homoglyphs)
normalized = normalized.normalize('NFKC');
// 5. Convertir a minúsculas
normalized = normalized.toLowerCase();
// 6. Comprobar también la versión invertidaconst reversed = normalized.split('').reverse().join('');
return { normalized, reversed };
}
// Validación con whitelist de emailfunctionvalidateEmail(input) {
const { normalized, reversed } = normalizeInput(input);
const emailRegex = /^[a-z0-9._%+\-]+@[a-z0-9.\-]+\.[a-z]{2,}$/;
// Validar tanto la versión normal como la invertidareturn emailRegex.test(normalized) || emailRegex.test(reversed);
}
✅CHECKLIST DE MITIGACIÓN
Marca cada medida que hayas implementado o comprendido:
Normalización exhaustiva del input antes de validar