Katz.js, un Mimikatz indetectable en Javascript con versión Rubber Ducky

Muchos de nosotros al movernos por Windows y usar herramientas para pentesting o para realizar ataques de cualquier tipo tenemos que desactivar el antivirus para que no se nos borren las que tenemos instaladas o tenemos que crear excepciones para que no sean detectadas, esto es debido a que muchos AV las detectan como una "HackTool" o incluso como un troyano.

Con DotNet2JScript se acabarán en su mayoría estos problemas dado que esta herramienta nos permitirá convertir una aplicación .NET v2 y algunas clases a JavaScript, en un formato que actualmente es totalmente indetectable por los antivirus.

Simplemente funciona implementando una clase que haga lo que quiera en "public". Como por ejemplo:

public class TestClass
{
    public TestClass()
    {
        /* Start notepad */
        Process.Start("notepad.exe");
    }
}
 
Debemos asegurarnos que es en "public". También tenemos la posibilidad de añadir el atributo "ComVisible(true)" por si queremos interactuar con el script posteriormente. Como por ejemplo:

[ComVisible(true)]
public class TestClass
{
    public void DoSomething(string arg) { }
}
 
Vamos a probar este último con el ejemplo que nos deja el creador en el repositorio de Github. Para ello deberemos compilar el programa que se encargará de generar el Javascript que nos interesa, esto es muy sencillo, simplemente deberemos descargar el repositorio y abrir el proyecto "DotNetToJScript.sln" con Microsoft Visual Studio, posteriormente en una pestaña de arriba clickeamos en compilar y luego en compilar solución, después encontraremos nuestro programa en la ruta \...\DotNetToJScript-master\DotNetToJScript-master\DotNetToJScript\bin\Debug\DonNetToJScript.exe.

Ahora pasaremos a compilar el ejemplo:

 
A continuación pasaremos el resultado que se encuentra en la carpeta "Debug" por DotNetToJScript también compilado, esto se realiza con el siguiente comando: DotNetToJScript.exe ExampleAssembly.dll -o test.js y en la misma carpeta aparecerá un archivo test.js que ejecutaremos usando: cscript .\test.js, y obtendremos la aplicación interactiva que mencioné anteriormente.


Cabe destacar que la aplicación tiene más parámetros que podremos ver si ejecutamos el comando DotNetToJScript.exe -h.

En mi opinión, esta herramienta no ha sido creada con el objetivo de "vacilar" a los antivirus y hacer FUD a las aplicaciones. Pero Casey Smith, mayormente conocido como subTee, decidió usar DotNetToJScript para convertir la conocidísima herramienta, Mimikatz, a Javascript, lo que generó un script de 59840 líneas (casi na') de las cuales, el 99% son totalmente ilegibles. A su vez, la herramienta generó un script totalmente FUD, a diferencia del original Mimikatz. El link del script es el siguiente: https://gist.github.com/subTee/b30e0bcc7645c790fcd993cfd0ad622f.

Vamos a comprobar esta afirmación y vamos a ver la comparación en detecciones con el Mimikatz original:


Vaya, 42/62 detecciones de antivirus, es casí seguro que si realizaremos un ataque fallido si usamos mimikatz.exe como tal. Vamos a probar con el script:


¡Sorpresa!, 0/49 detecciones, un script totalmente indetectable por los antivirus.

Pero no todo podían ser cosas buenas, el script tiene un par de defectos: el primero, este script es una versión desactualizada publicada el 13 de Noviembre de 2015 de Mimikatz, lo que quiere decir que algunos de sus módulos no funcionan como por ejemplo sekurlsa en Windows 10, pero en Windows 7 sigue funcionando a la perfección y desconozco si en Windows 8 y 8.1 también; su segundo defecto reside en la lentitud de su ejecución, el script tarda bastante de iniciarse (1 min aprox.)

Su uso es muy sencillo, simplemente copiamos todo el código del script en una bloc de notas, lo guardamos como katz.js, abrimos una terminal como administrador y ejecutamos el comando cscript .\katz.js, esperamos un poco y voalá, Mimikatz listo para usar.
C:\Users\Alejandro\Desktop>cscript .\katz.js
Microsoft (R) Windows Script Host versión 5.812
Copyright (C) Microsoft Corporation. Reservados todos los derechos.

Downloaded Latest
Preferred Load Address = 140000000
Allocated Space For 65000 at 2448E680000
Section .text   , Copied To 2448E681000
Section .rdata  , Copied To 2448E6AF000
Section .data   , Copied To 2448E6D9000
Section .pdata  , Copied To 2448E6DD000
Section .rsrc   , Copied To 2448E6DF000
Section .reloc  , Copied To 2448E6E3000
Delta = 2434E680000
Executing Mimikatz

  .#####.   mimikatz 2.0 alpha (x64) release "Kiwi en C" (Nov 13 2015 00:44:32)
 .## ^ ##.
 ## / \ ##  /* * *
 ## \ / ##   Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
 '## v ##'   http://blog.gentilkiwi.com/mimikatz             (oe.eo)
  '#####'                                     with 17 modules * * */


mimikatz(commandline) # .\katz.js
ERROR mimikatz_doLocal ; ".\katz.js" command of "standard" module not found !

Module :        standard
Full name :     Standard module
Description :   Basic commands (does not require module name)

            exit  -  Quit mimikatz
             cls  -  Clear screen (doesn't work with redirections, like PsExec)
          answer  -  Answer to the Ultimate Question of Life, the Universe, and Everything
          coffee  -  Please, make me a coffee!
           sleep  -  Sleep an amount of milliseconds
             log  -  Log mimikatz input/output to file
          base64  -  Switch file output/base64 output
         version  -  Display some version informations
              cd  -  Change or display current directory
        markruss  -  Mark about PtH

mimikatz # 

Gracias a esto, me he animado a escribir un par de payloads muy útiles para el USB Rubber Ducky que se encuentran en un repositorio del GitHub de Hackplayers, en los mismos vienen explicados paso a paso como funciona cada payload, obviando la sencillez de la sintaxis del Rubber Ducky.

Link:  https://github.com/Hackplayers/DuckyKatzJS

7 comentarios :

  1. Que nos gusta Mimikatz jejeje. Buen trabajo Alex.

    ResponderEliminar
  2. "simplemente deberemos descargar el repositorio y abrir el proyecto "DotNetToJScript.sln" con Microsoft Visual Studio, posteriormente en una pestaña de arriba clickeamos en compilar y luego en compilar solución"
    ¡No tan rápido! Algunos tuvimos que añadir la referencia a NDesk.Options antes de compilar.

    ResponderEliminar
    Respuestas
    1. Mmmmm yo no recuerdo eso que dices que hay que añadir, simplemente abrí la solución y lo puse a compilar, no tuve que hacer nada más.

      Eliminar
    2. Bueno, yo obtuve errores así porque la referencia que venía en la solución no me cargaba correctamente.
      Una vez añadida la ruta a la dll todo funciona como la seda.

      Eliminar
  3. hola, el problema es que se tarda mucho, y no me inicia solo se queda en y de ahi no pasa.

    -----------------------------
    C:\>cscript .\katz.js
    cscript .\katz.js
    Microsoft (R) Windows Script Host versi�n 5.8
    Copyright (C) Microsoft Corporation 1996-2006. Reservados todos los derechos.

    ----------------

    ResponderEliminar
    Respuestas
    1. Puede ser que tarde más o menos dependiendo de las características de tu ordenador, lo que tarde en procesar el script a mi por ejemplo me tarda en cargar 1 minuto, he probado en otro ordenador más viejo y con un procesador antiguo y me ha llegado a tarda más de 2 minutos...

      Eliminar