NOTA IMPORTANTE: El delito informático está severamente castigado por la ley. Esta página no promueve el delito informático, es divulgativa y muestra los mecanismos que utilizan los cibercriminales para poder identificar el ataque si has sido victima de uno de ellos. En el caso de que hayas sido victima de un ataque te recomendamos que busques recursos legales en la sección Cibercrime Law o en la página del Instituto Nacional de Ciberseguridad: https://www.incibe.es/

BlogPython Training

Cómo: crear un shell evasivo en Python, parte 3: crear el script del atacante

Bienvenidos a todos. En la parte anterior de esta miniserie de fuego rápido, construimos la parte víctima del caparazón. Hoy, construiremos la parte del atacante. Este script inicializará la interacción con la parte víctima del shell, enviará comandos y recibirá la salida.

Hay algunos conceptos que necesitaremos discutir para comprender completamente este script, así que comencemos.

Paso 1: Configurar la ruta del intérprete e importar módulos

Ya hemos comentado que lo primero que debemos hacer al escribir un script es establecer la ruta del intérprete e importar los módulos que necesitemos. Sigamos adelante y hagamos eso ahora:

Hemos configurado nuestra ruta de intérprete para que este archivo sea un script de Python. Repasemos rápidamente nuestros módulos y cuál es su propósito.

  • sys – Salir del guión cuando sea necesario.
  • enchufe – Para comunicarse en el localhost (no utilizado).
  • enhebrar – Para iniciar el hilo de suplantación de ARP.
  • tiempo – Hacer intervalos entre respuestas ARP.
  • Inicio sesión – Para ocultar el error “Sin ruta IPv6” que produce scapy.
  • escamoso – Construir y enviar paquetes que contienen los comandos y recibir la salida.

Es posible que haya notado que hemos colocado la importación de Scapy dentro de un intentar; esto es en caso de que el usuario no tenga Scapy instalado. Si no se puede importar Scapy, no podemos ejecutar el script, así que le decimos al usuario y salimos.

Ahora que tenemos nuestra ruta de intérprete y nuestros módulos, pasemos a tomar alguna entrada de nuestro usuario.

Paso 2: recibir información del usuario

Para inicializar y operar correctamente el shell, necesitaremos alguna entrada del usuario. Si necesita un repaso sobre la entrada básica del usuario, puede ver este artículo.

Solo usaremos el Datos crudos() función para recibir información del usuario. Solicitaremos la IP de la víctima, la IP para suplantar y la interfaz para enviar paquetes. Echemos un vistazo a este código:

Podemos ver aquí que los hemos establecido dentro de un intentar en caso de que el usuario interrumpa la entrada. También hemos establecido verbo conf. a cero. Esto significa configurar verbosidad. Establecer esto en cero oculta los mensajes de “Paquete enviado” para que no se derramen por todas partes.

Ahora que tenemos la entrada de nuestro usuario, podemos pasar al inicio de la inicialización. Primero, necesitaremos obtener la dirección MAC de la víctima.

Paso 3: Obtenga la dirección MAC de la víctima

Para enviar correctamente nuestros paquetes de suplantación de identidad ARP, necesitaremos saber la dirección MAC de la víctima (la dirección grabada en la tarjeta de interfaz de red). Podemos encontrar esta dirección haciendo ARP peticiones y devolviendo el resultado.

Haremos una función llamada getMAC (), que realizará una solicitud ARP, recibirá la respuesta y devolverá la dirección MAC de origen. Veamos ahora esta función:

La captura de pantalla es bastante pequeña, pero al expandirla podemos ver que enviamos una solicitud ARP a la dirección MAC de transmisión, solicitando la respuesta de la víctima. Esta solicitud se enviará a través de la interfaz elegida por el usuario.

Una vez que obtenemos una respuesta, iteramos a través de nuestros paquetes recibidos, devolviendo el valor de la dirección MAC de origen.

Ahora que tenemos nuestra función, la llamamos y almacenamos la dirección devuelta en el victimMAC variable. Ahora que tenemos el MAC de nuestra víctima, podemos hacer nuestra función de suplantación e iniciar el hilo.

Paso 4: Inicie el hilo de suplantación de ARP

Para falsificar nuestra IP y enviar comandos al mismo tiempo, necesitaremos iniciar un hilo. A hilo básicamente significa que una función específica se ejecutará en paralelo al script, por lo que podemos ejecutar varios conjuntos de código a la vez.

Primero, necesitaremos crear una función para falsificar nuestra IP con respuestas ARP. Enviaremos otra respuesta cada 5 segundos. Analicemos esta función ahora:

Hemos creado una nueva variable llamada spoofStatus y hemos establecido su valor en Cierto. Luego definimos una nueva función simplemente llamada veneno. Esta función entra en un ciclo infinito, y en cada iteración verificará el valor de spoofStatus. Si esto es Falso, detendrá la función. De lo contrario, enviará una respuesta ARP a la víctima y esperará 5 segundos antes de repetir la iteración.

Ahora que tenemos nuestra función, necesitaremos comenzar nuestro hilo. Para iniciar un hilo, debemos almacenar nuestro objeto hilo en una variable y agregar esta variable a una lista. Necesitamos comenzar el hilo con el .comienzo() método. Echemos un vistazo a este código ahora:

Podemos ver aquí que hemos creado una lista vacía llamada “hilo”. Hemos colocado nuestro hilo comenzando dentro de un intentar en caso de que el hilo no se inicie. Una vez que este código se complete, deberíamos tener nuestra función de suplantación de identidad ejecutándose en paralelo al resto del script.

Ahora que tenemos nuestro hilo de suplantación en ejecución, necesitaremos inicializar la interacción con la víctima.

Paso 5: inicialización de la interacción

Si recuerda la parte de la víctima del caparazón, debemos enviar algunos datos a la víctima para iniciar la interacción. Simplemente necesitamos enviar algunas cadenas inútiles y esperar una respuesta para ver si todo va bien.

Veamos este código de inicialización:

Muy bien, primero enviamos la cadena “hola víctima“y esperar la respuesta para saber que la víctima está lista para interactuar. Luego enviamos la cadena”informe“y recopilamos la respuesta. Luego extraemos los datos del paquete recibido y los almacenamos en la variable de solicitud. Los datos de este paquete son la solicitud de la getsysinfo () función de nuestra porción de caparazón víctima.

Ahora que tenemos nuestra inicialización completa, podemos comenzar a enviar comandos.

Paso 6: enviar comandos al shell

Ahora que hemos completado nuestra inicialización, podemos utilizar nuestro shell. Simplemente hacemos un bucle infinito y usamos Datos crudos() para solicitar al atacante un comando (utilizando el indicador de la víctima). Luego enviamos la cadena dada por el atacante a la víctima para que sea ejecutada como un comando. Luego recibimos la salida y la imprimimos directamente en el terminal.

Echemos un vistazo a este bucle infinito:

También agregamos una declaración if que verifica si el atacante ingresa la cadena “adiós“. Si el atacante ingresa esta cadena, la variable spoofStatus se establece en False y llamamos a la .unirse() en nuestro hilo para volver a unirlo con el script principal, donde deja de ejecutarse y finalmente cierra el script.

Aquí hay un enlace pastebin al script del atacante.

Ahí lo tenemos. Ahí está la parte del atacante de nuestro script. Siento que este artículo es demasiado largo para probar el shell, así que lo probaremos en la siguiente parte.

Si usted tiene ningún preguntas, déjelas en los comentarios a continuación, y haré todo lo posible para responderlas y aclarar cualquier confusión.

¡Gracias por leer!

-Defaltar

Imagen de portada a través de Shutterstock

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar