Parte: 0 — Fundamentos y prerrequisitos · Fuente: RFC 4648 (Base16/32/64) y RFC 3986 (URI) ⏱️ Duración estimada: 90 min · Nivel: Fundamentos
Entender cómo se representan y transforman los datos, base para leer volcados hex, decodificar payloads, ofuscar/desofuscar cargas y trabajar con protocolos. Al terminar distinguirás con claridad codificación de cifrado y hashing, un error conceptual muy extendido.
Al finalizar, el alumno podrá:
| # | Tema | Por qué importa |
|---|---|---|
| 1 | Bases numéricas | Binario y hex están en todas partes |
| 2 | Conversión entre bases | Leer memoria, direcciones, máscaras |
| 3 | ASCII y Unicode | Texto ↔ bytes |
| 4 | Hex dump | Ver datos crudos |
| 5 | Base64 | Transportar binario como texto |
| 6 | URL/percent encoding | Datos en URLs y web |
| 7 | Encoding vs. cifrado vs. hash | Distinción conceptual crítica |
| 8 | Cadenas de encoding | Payloads con varias capas |
0x.%XX. Clave: %20 = espacio; usado para evadir filtros y en inyecciones web.Herramientas: xxd/hexdump, base64, python3 (base64, binascii, urllib.parse), y CyberChef (https://gchq.github.io/CyberChef/) para experimentar con cadenas de operaciones. Todo disponible en Kali o en el navegador.
python
n = 0xFF
print(bin(n), oct(n), n) # binario, octal, decimal
print(int("11111111", 2), hex(255))
bash
echo -n "admin:1234" | xxd
Relaciona cada byte con su carácter ASCII. 3. Base64 ida y vuelta:
bash
echo -n "usuario:secreto" | base64
echo -n "dXN1YXJpbzpzZWNyZXRv" | base64 -d
Observa que es trivialmente reversible (¡no es cifrado!). 4. URL encoding en Python:
python
from urllib.parse import quote, unquote
print(quote("a b&c=1")) # a%20b%26c%3D1
print(unquote("%3Cscript%3E")) # <script>
192 y 168 a binario y a hex; verifica con Python.Authorization: Basic ... (Base64) y explica el riesgo.5f4dcc3b5aa765d61d8327deb882cf99 es un hash o un encoding y de qué tipo.Escribe decoder.py, una utilidad que reciba una cadena e intente detectar y decodificar automáticamente su capa externa (Base64, hex o percent-encoding), aplicándolo de forma recursiva hasta obtener texto legible o datos binarios. Debe informar de cada capa detectada y negarse a "decodificar" un hash, explicando por qué.
Criterio de aceptación: sobre una cadena con dos capas (p. ej. URL-encode de un Base64) la herramienta revela el texto original indicando ambas capas; ante un SHA-256 responde que es un hash irreversible en vez de intentar decodificarlo. Reproducible con ejemplos verificables en CyberChef.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| Llamar "cifrado" a Base64 | Base64 es codificación reversible sin clave, no ofrece confidencialidad. Corrige el concepto. |
| Base64 no decodifica (padding) | Faltan = de relleno. Ajusta el padding o usa variantes URL-safe. |
| Caracteres raros al decodificar | Confundes bytes con texto. Trabaja en bytes y decodifica con la codificación correcta. |
| Intentar "revertir" un hash | Los hashes no se revierten; a lo sumo se comparan o se craquean por diccionario. |
| URL encode/decode inconsistente | + vs %20 según contexto (form vs. path). Usa la función adecuada. |
❓ ¿Base64 aporta algo de seguridad? No en confidencialidad: cualquiera lo decodifica. Solo sirve para transportar binario por canales de texto. Nunca lo uses para "proteger" datos.
❓ ¿Por qué los atacantes codifican payloads? Para evadir filtros, WAFs o detección por firma. Ver una cadena Base64/hex/URL en un log suele merecer decodificarla y analizarla.
❓ ¿Hashing es lo mismo que cifrado? No. El cifrado es reversible con clave (confidencialidad); el hash es unidireccional (integridad). Lo vemos a fondo en la Clase 021.
❓ ¿Qué es CyberChef? Una "navaja suiza" web para encadenar operaciones de codificación, cifrado y análisis. Ideal para desofuscar payloads paso a paso.
Clase 019 — Expresiones regulares para análisis de logs y datos
Clase 021 — Criptografía: conceptos fundamentales e intuición