linux

Explicación de :(){ :|:& };: en Linux

Introducción

Hay un “comando” (que no es un comando) de Linux que no es tan peligroso si lo ejecutas en tu PC (con un reinicio basta) pero que en un servidor puede causar una denegación de servicios.

Dicho comando es :(){ :|:& };:

El comando en cuestión, como lo dije arriba, no es un comando. Es la definición de una función junto con la llamada a la misma.

Explicación de :(){ :|:& };: en Linux

Parece una serie de emoticones o símbolos raros, pero no lo son. Es la definición de una función que entiende la terminal con el lenguaje bash. Vamos a explicarlo.

Si vienes de PHP, una función se define así:

See the gist on github.

O en JavaScript:

See the gist on github.

En Go:

See the gist on github.

Pues en bash igualmente puedes escribir la función:

See the gist on github.

Pero a diferencia de los lenguajes que conocemos, bash permite el símbolo “:” como el nombre de una función. Entonces lo que hace :(){ :|:& };: es crear la función llamada “dos puntos” (o sea, : ).

Dentro de la función, se llama a sí misma y la salida la redirige con | a la función dos puntos, es decir, a sí misma de nuevo. Y el & es para que el proceso se ejecute en segundo plano.

Función legible

Entonces si la hacemos bonita se vería así:

See the gist on github.

Pero para no confundirmos podemos llamar a la función “bomba” y quedaría mejor explicada:

See the gist on github.

Como vemos, después de la llave ponemos un ; para terminar la definición de la función. Y luego la llamamos.

¿Qué logramos con esto?

Terminar con los recursos de la computadora en donde se ejecuta. No elimina nada, no roba nada pero deja la computadora inservible hasta el siguiente reinicio.

Ya que cada llamada a la función crea dos nuevos subprocesos y así sucesivamente, como en un árbol binario.

Para evitar esto simplemente no escribimos el comando y ya. O limitamos los procesos que un usuario puede tener.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Compartir
Publicado por
parzibyte

Entradas recientes

Imprimir PDF con Bot de Telegram

La impresión de un PDF en cualquier impresora se puede automatizar con un bot de…

2 días hace

Enviar mensaje con bot de Telegram usando JavaScript (lado del cliente)

Hoy te enseñaré cómo enviar un mensaje a un usuario desde un bot de Telegram…

3 días hace

PHP: incrustar imagen en base64

El día de hoy te enseñaré algo muy sencillo pero útil al programar con PHP:…

3 días hace

Plugin ESC POS – Actualización 3.4.0: imprimir HTML

El plugin para imprimir en impresoras térmicas alcanza hoy su versión 3.4.0 agregando soporte para…

4 días hace

JavaScript (lado del cliente): leer pixeles de imagen

En ocasiones es necesario leer los pixeles y colores de una imagen con JavaScript del…

2 semanas hace

PHP y JavaScript: llenar select con AJAX

Siguiendo con los tutoriales de listas desplegables o select con JavaScript, vamos a ver cómo…

2 semanas hace

Esta web usa cookies.