Underc0de

[In]Seguridad Informática => Hacking => Mensaje iniciado por: ANTRAX en Marzo 30, 2012, 12:26:53 PM

Título: SSL Port Forward
Publicado por: ANTRAX en Marzo 30, 2012, 12:26:53 PM
Bueno, como primicia les comento que estoy trabajando en metasploit desarrollando el meterpreter para Linux y *Bsd (posix). Y que hoy por primera vez le pudimos cargar una extension despues de un ida y vuelta de parches tremendo. (Estoy mas que contento de participar en el proyecto jaja)

El tema de este post es que para esa tarea tuvimos que debuggear conexiones SSL y no podiamos modificar el codigo existente por su complejidad. Asi que hice un "port forwarder" de ssl que pueden usar para debuggear conexiones o para hacer mitm.
Bueno, solamente les comento que corre con Python >= 2.6  y bueno, espero que les sirva.

sslfwd.py:
Código (python) [Seleccionar]

#!/usr/bin/python

import sys, thread
import socket, ssl


def main():
    print("\nSSL Proxy dump (by Sebastian Fernandez)\n---------------------------------------")
    if(len(sys.argv)!=4):
        usage()
    settings = (sys.argv[1],int(sys.argv[2]),int(sys.argv[3]))
    server(settings)

def usage():
    print("Usage:\n\tsslfwd.py [host] [dst port] [src port]")
    exit()

def server(settings):
    dock_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    dock_socket.bind(('', settings[2]))
    dock_socket.listen(5)
    print("Socket listening at "+str(settings[2]))

    while True:
        client_socket = dock_socket.accept()[0]
        server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
       
        #Create SSL wrappers
        client_ssl = ssl.wrap_socket(client_socket,
                                     certfile="certfile.crt",
                                     keyfile="keyfile.key",
                                     server_side=True,
                                     ssl_version=ssl.PROTOCOL_TLSv1)

        server_ssl = ssl.wrap_socket(server_socket,
                                     ssl_version=ssl.PROTOCOL_TLSv1)
       
        server_ssl.connect((settings[0], settings[1]))

        #Start forwarding data
        thread.start_new_thread(ssl_forward, (client_ssl, server_ssl))
        thread.start_new_thread(ssl_forward, (server_ssl, client_ssl))
        lock = thread.allocate_lock()
        lock.acquire()

def ssl_forward(source, destination):
    data=' '
    while data:
        try:
            data = source.read()
        except:
            source.close()
            destination.close()
            return
        if data:
            work_data(data)
            try:
                destination.write(data)
            except:
                pass
            finally:
                pass

def work_data(data):
    data = "DATA =================\n"+data+"\nEND=====================\n"
    print(data)
    fdump.write(data)


if __name__ == '__main__':
    fdump = open('dump.dmp', 'w')
    main()
    fdump.close()


Necesitan el certificado y la clave para correr el programa, si quieren pueden usar estos que genere:

keyfile.key :

-----BEGIN RSA PRIVATE KEY-----
MIIBPAIBAAJBALpb4iX8d5Iy5eVh/7l8uj4Zii1YPXZcAElaYeE1A2kFYJhuxTdy
Ry+es9XF++hxO7Zoj+u5WA0eW+UgNdB7UjECAwEAAQJBAK522q7JPn+mGse2CRvz
gsAkVNHCrDekRbhmXv/hC4JCpsn2f7rldlFw4CIesSq1RrPBhjkSHeSTN4h/NtAl
tQkCIQDn6/4rwEvdjl/DAyqKCWR1wgf6478qQLcrpqk1mI2ZGwIhAM20691uBABF
MgQcuWPDKtfCMH1rrpxb0Nxk/ZvbC+KjAiAu7KTEnWe8MC5X+rAEtdnJqbSLosDu
/6EQB+x8l50uuQIhAKtInKVSOA6pj04RROUm24OwdIPaqBgV88GwbePa7viVAiEA
tkPhAfR44xvNHIeMUpI4860p4U4OiNzAcuaornLTnGs=
-----END RSA PRIVATE KEY-----


certfile.crt:

-----BEGIN RSA PRIVATE KEY-----
MIIBPAIBAAJBALpb4iX8d5Iy5eVh/7l8uj4Zii1YPXZcAElaYeE1A2kFYJhuxTdy
Ry+es9XF++hxO7Zoj+u5WA0eW+UgNdB7UjECAwEAAQJBAK522q7JPn+mGse2CRvz
gsAkVNHCrDekRbhmXv/hC4JCpsn2f7rldlFw4CIesSq1RrPBhjkSHeSTN4h/NtAl
tQkCIQDn6/4rwEvdjl/DAyqKCWR1wgf6478qQLcrpqk1mI2ZGwIhAM20691uBABF
MgQcuWPDKtfCMH1rrpxb0Nxk/ZvbC+KjAiAu7KTEnWe8MC5X+rAEtdnJqbSLosDu
/6EQB+x8l50uuQIhAKtInKVSOA6pj04RROUm24OwdIPaqBgV88GwbePa7viVAiEA
tkPhAfR44xvNHIeMUpI4860p4U4OiNzAcuaornLTnGs=
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIBfDCCASYCCQCMFXEk7hFlijANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJV
UzETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0
cyBQdHkgTHRkMB4XDTA5MDcyOTA4NDQ1NloXDTA5MDkyNzA4NDQ1NlowRTELMAkG
A1UEBhMCVVMxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0
IFdpZGdpdHMgUHR5IEx0ZDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC6W+Il/HeS
MuXlYf+5fLo+GYotWD12XABJWmHhNQNpBWCYbsU3ckcvnrPVxfvocTu2aI/ruVgN
HlvlIDXQe1IxAgMBAAEwDQYJKoZIhvcNAQEFBQADQQATdEbtRAD4P+F8V/L472GI
pdWYEU7eomrpJTCH0BoWmqd+WkfCFVXuylJbHpM6QgtY3RxTozWtaETQ6VpeJ57f
-----END CERTIFICATE-----


Saludos,

Autor: snf