Muy buenas a todos!
Esta semana -tal y como os prometí- continuaremos con esta serie de posts, en las que les explicaré las mejoras que han llegado a mis proyectos y algunos de los fallos que han sido resueltos. Además, os contaré los próximos avances y algunas ideas que tengo para cada uno de ellos. Incluso, puede que haya algún spoiler 😜
En la anterior entrada, pudimos ver como resolví diferentes fallos en varias herramientas (algunos más graves que otros) y futuras actualizaciones. Si te lo perdiste, aquí tienes el enlace: https://darkbyte.net/arreglando-bugs-y-proximas-actualizaciones-parte-i
Así que, continuando con esta misma línea, os voy a contar proyecto a proyecto en lo que he estado trabajando estos últimos meses 😋
Problemas solucionados
Probablemente, una de las actualizaciones más importantes de este artículo. Tal y como os comenté en el post anterior, Chimera ha sido remplazado por Chameleon y he mejorado sustancialmente la función ReverseB64 de Invoke-Stealth.
En primer lugar, se ha modificado el código de varias herramientas para funcionar de forma sinérgica entre sí (cosa que ya hice en su momento, pero ahora aún mejor), se han arreglado algunas que no funcionaban correctamente (como PSObfuscation) e incluso, se han deshabilitado otras (esta vez le ha tocado a BetterXencrypt) cuando se utilizan todas de forma simultánea.
El resultado final es más pequeño, mejor ofuscado y con muchas menos detecciones por parte de los antivirus y soluciones EDR. Adicionalmente, se ha mejorado el flujo y variará en función de si tenemos Python3 instalado o no, hasta que haga la implementación de Invoke-Python en esta herramienta.
Invoke-Python es un pequeño script que publicaré en breve, que nos permitirá ejecutar scripts de Python 2 y 3 desde PowerShell, descargando y utilizando las versiones portables correspondientes. Además, este script descargará todas las dependencias automáticamente y nos devolverá el script de Python listo para funcionar de forma totalmente desatendida.
Ahora es el turno de PyShell, que cada vez está más cerca de funcionar perfectamente (y que últimamente utilizo para todo). Desde la última versión, se han implementado nuevas funciones y mejorado algunas de las ya existentes.
Una de los errores más molestos de este proyecto, ha sido resuelto (por fin!) haciendo un simple cambio en la librería que imprime los colores por pantalla. Básicamente, ahora se utiliza neotermcolor en lugar de termcolor, que entre otras cosas, soluciona lo siguiente:
– Ahora no es necesario realizar ningún cambio al utilizar pyshell.py en Windows
– El prompt ya no desaparece al introducir un comando muy largo
– El prompt ya no desaparece al cambiar el tamaño de la ventana
– El prompt ya no desaparece al moverse por el historial de comandos
En cuanto a lo que mejoras se refiere, tenemos disponibles dos parámetros nuevos: –noenc y –nopre, que nos permitirán conseguir una webshell donde antes no podíamos 😄
El primero, no realizará ningún tipo de encoding sobre la URL en una petición GET, ni sobre el body en petición POST. De esta manera, evitaremos problemas en aquellos servidores que no soportan la codificación por algún motivo.
Con el segundo, evitaremos buscar la ejecución de código dentro de la etiqueta «pre» de HTML, ya que por defecto, todas las shells incluidas en el proyecto funcionan así. Por tanto, si encontrásemos un RCE en una página web, o utilizásemos una webshell de un tercero (por ejemplo, la típica one-line de PHP), sería posible utilizarla introduciendo este parámetro:
Nuevas características
Otro proyecto que ha mejorado muchísimo ha sido PSAsyncShell. Desde la primera release, han sido muchas las funciones que han sido arregladas y mejoradas. En primer lugar, se ha añadido un cliente simple para Linux hecho en bash, que nos permitirá obtener una shell asíncrona en aquellos sistemas que no disponen de PowerShell (o no es viable instalarlo por algún motivo).
En el caso del script principal, se han implementado muchas mejoras y se ha mejorado sustancialmente la comunicación entre la parte cliente y la parte servidor. Adicionalmente, se ha añadido un parámetro para debugear la comunicación, utilizando -debug en cualquiera de los dos extremos:
De esta forma, siempre podremos comprobar que la comunicación funciona correctamente en ambos extremos, así como el tamaño de los payloads y de los ficheros enviados y recibidos. Por otra parte, si os habéis fijado en la imagen anterior, el nivel de ofuscación ha sido mejorado. Y no solo eso, sino que se ha diseñado para que los payloads parezcan paquetes TCP, cuando realmente, no lo son.
El concepto es muy simple, cada comando (y la ejecución de éste) se transforma a Base64URL, se le da la vuelta y se le introduce de forma aleatoria diferentes símbolos separados por puntos (también aleatorios). De esta forma, cada uno de los paquetes TCP tiene una forma similar a la siguiente captura:
Para terminar, se ha implementado la función de download a través de «MultiPart», por lo que ahora es posible descargar ficheros en pequeños chunks, al igual que todos aquellos comandos que tengan una salida superior al límite establecido a través de este parámetro.
Próximas actualizaciones
Tal y como comenté en la entrada anterior, AutoRDPwn está en la lista de proyectos a mejorar (y probablemente, en la próxima entrada de esta serie tengáis noticias de él). Por desgracia, no os puedo traer ninguna novedad al respecto, ya que hay muchas cosas que hacer y he dedicado gran parte del tiempo en arreglar el resto de proyectos. Aun así, os prometo que la espera merecerá la pena!
Tras presentar oficialmente Thunderstorm en el congreso h-c0n 2023, comienza una de las fases más ambiciosas del proyecto: El framework.
Por ahora, tenéis disponibles los exploits que expliqué en la charla, que como ya comenté en su momento, son completamente funcionales y uno de ellos continúa siendo un 0day mientras escribo estas líneas.
Próximamente, escribiré un post completo con todo lo necesario para utilizar la herramienta, tal y como suelo hacer en cada uno de mis artículos.
Antes de despedirme, recordad que muchas de mis herramientas se encuentran en fase «beta» y es probable que se produzcan fallos en algunos escenarios. Si encuentras alguno, no dudes en hacérmelo saber 🙂
Espero que os haya gustado y os resulte útil en vuestras próximas auditorías.
Nos vemos en la próxima!