¡Muy buenas a todos!
En esta serie de tres artículos os vengo a hablar de
Covenant, un sencillo Command & Control, desarrollado por
Ryan Cobb, con el que llevo trabajando varias semanas y para el que solo tengo buenas palabras... aunque a veces sea un poco cabroncete. ¡Comencemos!
Tras sufrirlo y disfrutarlo durante tantas horas, me gustaría compartir una serie de "trucos" para resolver determinadas situaciones que pueden llegar a convertir la experiencia con Covenant en una auténtica pesadilla.
 |
Descripción gráfica de mi persona trabajando con Covenant. |
Problema 1: Si impersonamos un usuario mediante el comando MakeToken e intentamos ejecutar un comando con ShellCmd, podremos comprobar que no se ejecuta correctamente, devolviendo por pantalla el siguiente error.
 |
Fig 1: El usuario Ruperto es Administrador del equipo DC-01, sin embargo, el comando no funciona. |
Solución: En la versión actual, no hay solución todavía (v0.4). No obstante, como parche temporal, podemos emplear los comandos
ShellRunAs y
ShellCmdRunAs que nos permiten incluir el usuario y la contraseña como parámetros. Otra opción factible es lanzar los comandos mediante Powershell. Podéis indagar más en detalle en el issue abierto por
Attl4s en
GitHub.
 |
Fig 2: Empleando ShellCmdRunAs o ls sí funciona. |
Problema 2: Covenant no dispone de mecanismos de Port Forwarding por defecto, por lo que es necesario que empleemos alguna técnica externa para poder realizar esta técnica.
 |
Fig 3: Estamos trabajando en ello. |
Solución: Aunque existen infinidad de mecanismos, la manera "más nativa" de realizarlo es mediante la carga en memoria de una Meterpreter empleando el comando Shellcode.
 |
Fig 4: Donde Hex es la Meterpreter en hexadecimal. |
Problema 3: El proceso de Covenant empieza a ser inestable, e incluso, se llega a cerrar solo, impidiendo su reinicio.
 |
Fig 5: Si empiezan a salir errores de este estilo... temeos lo peor. |
Solución: La base de datos de Covenant es muy inestable, por lo que es probable que tras varias horas funcionando empiecen a aparecer diversos errores en el log del proceso llegando incluso a cerrarse solo. Aunque algunos recomiendan eliminar los SMB Grunts en los que hayamos perdido la sesión mediante el uso de un navegador SQL (
SQLite, por ejemplo), en mi caso, la única solución que ha funcionado siempre ha sido borrar la base de datos de Covenant (Covenant.db) y desplegar todo de nuevo desde cero.
 |
Fig 6: Localización del fichero covenant.db. Al buen sudo fire.
|
|
 |
Fig 7: Localización de los Grunts en el fichero Covenant.db usando SQLite. |
Y hasta aquí este primer artículo de la serie. !Nos vemos en el próximo!
Happy Juancking!
0 comentarios:
Publicar un comentario