← Volver al listado de tecnologías
Leviathan Nivel 3 - Comparación de Strings
Leviathan Nivel 3 - Comparación de Strings
Objetivo
Similar al nivel 1, hay un binario level3 que pide contraseña.
Exploración
ls -la
./level3
# Enter the password>
Solución
Usa ltrace como en el nivel 1:
ltrace ./level3
Ingresa cualquier texto y observa la llamada a strcmp().
strcmp("tu_input", "snlprintf\n")
Ejecuta nuevamente con la contraseña correcta y obtendrás shell como leviathan4.
cat /etc/leviathan_pass/leviathan4
Teoría: strcmp() y Seguridad
Cómo Funciona strcmp
int strcmp(const char *s1, const char *s2);
- Retorna 0 si son iguales
- Retorna negativo si s1 < s2
- Retorna positivo si s1 > s2
Problema de Seguridad
Comparar contraseñas en texto plano es vulnerable a:
- Análisis dinámico (ltrace)
- Análisis estático (strings, objdump)
- Timing attacks (medir tiempo de comparación)
Práctica Segura
// Inseguro
if (strcmp(input, "secret") == 0) { ... }
// Mejor (hash)
if (verify_hash(input, stored_hash)) { ... }
Por Qué ltrace Funciona
- Linking dinámico: El programa usa libc
- ltrace intercepta: PLT (Procedure Linkage Table)
- Muestra argumentos: Incluye strings comparados
Protecciones Posibles
| Técnica | Efectividad |
|---|---|
| Compilación estática | Dificulta ltrace |
| Ofuscación | Solo retrasa |
| Anti-debugging | Puede ser evadido |
| No almacenar en texto plano | Correcto |
Comandos Aprendidos
| Comando | Uso |
|---|---|
ltrace | Interceptar strcmp |
strings | Ver strings en binario |
Siguiente Nivel
- Usuario: leviathan4