Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Leer un patrón, literales, clases y anclas

4 tareas · 35 min · Principiante

Martes 6 de abril. En Curtiembres del Atrato el servidor de archivos escribe su registro de autenticación como líneas de texto, sin campos, y el SIEM las guarda tal cual. Para encontrar algo en ellas no hay columnas que filtrar: hay que describir la forma de lo que buscas. Eso es una expresión regular, un patrón que se compara con el texto. En esta sala aprendes a leerlas antes de escribirlas: los caracteres que valen por sí mismos, las clases que admiten varios, los números de dígitos y las anclas al principio y al final de la línea. Todo es lectura de líneas ya escritas.

0 de 4 · 0%

Objetivo de la sala

Martes 6 de abril. En Curtiembres del Atrato el servidor de archivos escribe su registro de autenticación como líneas de texto, sin campos, y el SIEM las guarda tal cual. Para encontrar algo en ellas no hay columnas que filtrar: hay que describir la forma de lo que buscas. Eso es una expresión regular, un patrón que se compara con el texto. En esta sala aprendes a leerlas antes de escribirlas: los caracteres que valen por sí mismos, las clases que admiten varios, los números de dígitos y las anclas al principio y al final de la línea. Todo es lectura de líneas ya escritas.

Un patrón es una cadena que describe texto. La mayoría de los caracteres valen por sí mismos: el patrón error 404 busca exactamente esas ocho letras, espacios y cifras, en ese orden, en cualquier punto de la línea. Unos pocos caracteres son especiales y significan otra cosa.

Pieza Qué casa
. un carácter cualquiera, el que sea
[abc] uno solo de los que están entre corchetes
[a-z], [0-9] uno solo del rango
\d un dígito, igual que [0-9]
\w una letra, un dígito o un guion bajo
\s un espacio, un tabulador o un salto
+ lo anterior, una o más veces
\. un punto de verdad: la barra invertida quita el valor especial

El punto es el error más frecuente de quien empieza. Para escribir una dirección IP hay que escribir 10\.67\.20\.15, con una barra antes de cada punto. Sin ella, cada punto vale «cualquier carácter».

Responde para continuar

Un compañero busca la red interna con el patrón `10.67.20.` sin ninguna barra invertida. ¿Qué problema tiene?

Ver pista de ayuda

¿Qué valor tiene el punto en un patrón, y qué hace falta para que valga solo un punto?

El SIEM de esta sala busca en el índice auth, el registro de autenticación del servidor cat-srv-arch01. El comando regex deja solo las líneas cuyo texto casa con el patrón, y regex campo!="…" deja las que no casan. Empieza por lo fácil: un literal.

index=auth | regex _raw="Failed password"

Salen las líneas de contraseña fallida. Si alargas el literal con for invalid user, quedan solo las de cuentas que no existen en el servidor, y puedes leer de dónde vienen.

Responde para continuar

Escribe la dirección de origen de los intentos fallidos con un usuario que no existe en el servidor.

Ver pista de ayuda

Ejecuta `index=auth | regex _raw="Failed password for invalid user"` y lee la dirección que aparece después de from.

Para pedir «una palabra» sin saber cuál, se usa una clase y un +: [a-z]+ casa una o más letras minúsculas seguidas. Y para pedir una dirección de una red concreta, se escapan los puntos y se deja un \d+ para el último número.

index=auth | regex _raw="password for [a-z]+ from 203\.0\.113\.\d+"

Date cuenta de que el patrón no distingue entre un fallo y un acierto: la palabra password aparece en las dos. Lo que sigue la historia es la dirección, y la cuenta aparece en cada línea. Lee las líneas que salen como lo haría un analista, en orden.

Responde para continuar

Entre las líneas de esa dirección de fuera, escribe la cuenta que falló dos veces y a la tercera fue aceptada.

Ver pista de ayuda

Ejecuta `index=auth | regex _raw="password for [a-z]+ from 203\.0\.113\.\d+"` y lee las tres líneas de la cuenta, de la más vieja a la más nueva.

Sin ancla, un patrón se busca en cualquier parte de la línea. Dos símbolos lo atan a un extremo: ^ es el comienzo de la línea y $ es el final. ^Apr 06 0[2-8]: pide que la línea empiece por esa fecha y una hora entre las 02 y las 08; ssh2$ pide que termine en ssh2.

Un error clásico: esperar que ^ diga «lo primero que importa» en vez de «lo primero que hay en la línea». Las líneas de este registro empiezan por la fecha y el nombre del equipo, y el programa que escribe viene después.

Responde para continuar

Buscas las líneas de sudo con `index=auth | regex _raw="^sudo"` y el resultado llega vacío, aunque la línea existe. ¿Por qué?

Ver pista de ayuda

Ejecuta `index=auth | regex _raw="^sudo"` y después `index=auth | regex _raw="sudo:"` y compara dónde aparece la palabra en la línea.

Inicia sesión para registrar tus puntos y progreso en el ranking.

Whoami-Labs Pro

Whoami-Labs Pro utiliza cookies

Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad