Cada dÃa, un comando de Linux o de seguridad para adivinar en seis intentos, en la terminal o en el navegador. Cómo se juega, cómo elige el comando del dÃa sin un servidor y qué cuenta la web.
Cada dÃa hay un comando de Linux o de seguridad para adivinar en seis intentos. EscribÃs uno con la misma cantidad de letras y cada letra queda verde si está en su lugar, amarilla si está en otra posición y gris si no está. Cuando termina la ronda, ganes o pierdas, aparece la ficha del comando: qué hace, tres ejemplos y una nota de seguridad.
Se llama comandle y lo armé para practicar comandos un rato por dÃa. Se juega en el navegador, en comandle.valentorassa.com, o en la terminal:
go install github.com/legiosai/comandle@latest
comandle
Es gratis, no pide cuenta y el comando del dÃa es el mismo en los dos lados. El #1 salió el 20 de octubre.
Cómo se juega
La categorÃa se ve desde el primer intento: archivos, texto, procesos, redes, permisos, sistema, seguridad, paquetes, git o contenedores. Hay 75 comandos cargados, de 4 a 8 letras, en tres niveles: básico, intermedio y avanzado.
Si le errás, el juego destapa pistas: la primera con dos intentos fallidos, la segunda con cuatro y la última con cinco. Solo valen nombres de comandos reales, de una lista de 651, asà que no se puede tantear con letras sueltas. En la terminal, ? muestra los válidos con esa cantidad de letras; en la web están en la lista de comandos, y tab completa.
Al terminar copiás el resultado, que muestra cómo te fue sin decir cuál era. Esta es una ronda del #1:
comandle #1 3/6
🟨⬛⬛🟨
🟩⬛⬛🟩
🟩🟩🟩🟩
comandle.valentorassa.com
En la web, un personaje ASCII comenta la partida al estilo de cowsay: cambia los ojos cuando vas mal, festeja con exit 0 y se muere con un segmentation fault. Por defecto es vt, el pingüino, y se puede cambiar por la vaca, un conejo, un gato, un búho, un cangrejo o un fantasma.
La ficha del final
Ese #1 era grep. Cuando la ronda termina, la ficha dice qué hace, cuándo lo usás y trae tres ejemplos para copiar:
grep -rn "TODO" ~/proyecto # archivo y número de lÃnea de cada TODO
grep -i "error" app.log # sin importar mayúsculas
sudo grep -c "Failed password" /var/log/auth.log # intentos fallidos de login por SSH
Y una nota de seguridad. La de grep avisa que sirve para auditar, buscando contraseñas en texto plano o IPs raras en un log, y que si no encuentra nada solo sabés que nada coincide con tu patrón.
Dieciséis de las fichas suman un laboratorio en securitylabs.valentorassa.com para practicar el comando con un caso armado.
Desde la terminal, la ficha de cualquier comando de la lista se pide sin jugar, y hay rondas de práctica que no suman a tus estadÃsticas:
comandle explicar chmod # la ficha de un comando
comandle practica # una ronda al azar
comandle practica find # practicar uno puntual, por ejemplo en una clase
comandle lista # los comandos de los dÃas que ya pasaron
comandle stats # tus estadÃsticas y tu racha
El mismo comando sin un servidor
La versión de terminal está escrita en Go y la web es HTML y JavaScript estático. Las dos leen el mismo commands.json y eligen el comando del dÃa con la misma regla, que en la web es esta:
export function daily(commands, n) {
if (n < 1) n = 1;
if (n <= commands.length) return commands[n - 1];
return commands[fnv1a32(`comandle-${n}`) % commands.length];
}
El orden del archivo es el calendario: el dÃa n juega la entrada n. Con 75 comandos eso alcanza hasta el 2 de enero de 2027, y si para entonces no se sumaron más, los dÃas siguen en un orden pseudoaleatorio fijo, con FNV-1a de 32 bits, el mismo hash que hash/fnv en Go. El número del dÃa sale de la fecha en Argentina (UTC−3, sin horario de verano), asà que el comando cambia a medianoche y nadie tiene que publicarlo. Un test fija que Go y JavaScript den lo mismo.
Como la respuesta viaja con el juego, cualquiera que abra el código puede ver la del dÃa. No hay un servidor que la guarde.
Qué cuenta la web
La versión de terminal no se conecta a internet. Tus estadÃsticas quedan en un archivo que solo puede leer tu usuario.
La web no usa cookies ni guarda nada que te identifique. Cuando empezás una partida, la terminás o copiás el resultado, suma 1 a un contador del dÃa:
- al terminar, en cuántos intentos o si perdiste;
- cuántos dÃas seguidos jugaste, calculado en tu navegador con el historial que ya guarda y mandado en tramos (1, 2–3, 4–7, 8–14, 15+);
- al entrar, el
refdel link y el sitio que te mandó.
fetch(ENDPOINT, {
method: "POST",
body: JSON.stringify({ event, key }),
mode: "cors",
credentials: "omit",
keepalive: true,
});
Después de leer el ?ref=, la web lo saca de la barra, asà el link que copiás queda limpio. Si tu navegador tiene activado Global Privacy Control, no manda nada.
Con eso veo cuántas partidas hay, qué comandos cuestan más y de dónde llega la gente. Cualquiera puede mandarle eventos, asà que lo leo como tendencia.
Sumá un comando
Cada comando es una entrada de data/commands.json, con categorÃa, nivel, tres pistas, resumen, explicación, tres ejemplos, la nota de seguridad y, si hay, el laboratorio:
{
"id": "chmod",
"category": "permisos",
"level": "básico",
"clues": [
"Decide quién puede leer, escribir o ejecutar un archivo.",
"Acepta modos en octal, como 755 o 600.",
"Su nombre viene de «change mode»."
],
"summary": "Cambia los permisos de archivos y directorios."
}
Como el orden es el calendario, los nuevos van siempre al final: mover una entrada cambiarÃa el comando de un dÃa que ya pasó. Al cargar, el juego revisa todas las entradas y te muestra todos los problemas juntos, para que corrijas la tuya de una vez. Los pasos están en CONTRIBUTING.md.
El código está en github.com/legiosai/comandle, con licencia Apache-2.0. Lo hice desde VT Security y lo publica Legios.
El de hoy ya está en comandle.valentorassa.com. Si lo jugás, contame en cuántos lo sacaste: en el Discord de DedSec hay un canal #comandle donde todas las mañanas a las 9 sale el del dÃa.
Lo publiqué primero en vtsecurity.com.ar.
Top comments (0)