SSRF Protocol Smuggling

SSRF Protocol Smuggling

Nesse artigo, você vai aprender como comunicamos com alguns serviços através do SSRF utilizando a técnica conhecida como Protocol Smuggling.

O que é o SSRF?

SSRF é uma vulnerabilidade que permite com que o atacante faça requisições para a rede interna através de uma aplicação web. Para conhecer melhor essa vulnerabilidade, leia o artigo: Explorando o Server-side Request Forgery

O que é Protocol Smuggling?

Protocol Smuggling é uma técnica que utilizamos para acessar serviços internos através do SSRF. Geralmente, quando encontramos um SSRF em uma aplicação, ele realiza uma requisição utilizando o protocolo HTTP para a URL informada pelo usuário. O protocolo HTTP contém diversos headers, segue o exemplo abaixo:

Como vamos acessar serviços internos que comunicam via socket através do SSRF? Para isso podemos utilizar o protocolo Gopher, que se comunica com raw sockets. Se abrirmos um socket na porta 8000 e fazermos uma requisição utilizando o protocolo gopher, conseguiremos interagir com o socket. Veja no exemplo abaixo:

O netcat recebeu o dado "HELLO" e enviou "HELLO GOPHER '-' " e "TEST123". Perceba que a conexão é mantida, e recebemos os dados em tempo real até cancelarmos a conexão utilizando cntrl+C. Para enviarmos dados utilizando o protocolo gopher, precisamos montar a seguinte url:

gopher://localhost:8000/_DATA

No imagem anterior, vemos que a URL especificada no curl foi: gopher://localhost:8000/_HELLO, ou seja, enviamos "HELLO" como dado para o socket.

Conhecendo o Gopherus

O Gopherus é uma ferramenta que gera payloads para explorarmos serviços internos como mysql, redis, fastcgi (php-fpm), zabbix, memcached utilizando o protocolo gopher. Para obter essa ferramenta, faça o clone do repositório.

Obtendo RCE utilizando Protocol Smuggling

Na máquina Ship do hackingclub, conseguimos explorar SSRF na aplicação web. Fazendo uma enumeração, vemos que a aplicação utiliza fastcgi, pois ao enviar uma requisição utilizando o gopher para localhost:9000 a aplicação leva 5 segundos para responder:

Podemos utilizar a payload gerada pelo gopherus para obtermos RCE. Gerando a payload:

A payload para explorar o fastcgi requer que especifiquemos um arquivo php existente dentro do servidor e o comando que executaremos no sistema. Ao enviar a payload gerada, vemos que a aplicação nos retorna erro 500:

Na maioria das vezes, vamos precisar fazer o double-encode (fazer dois urlencode) na payload (a payload é tudo que vem depois de /_) gerada pelo gopherus. O gopherus por padrão faz apenas 1 urlencode na payload, então precisamos fazer mais 1. Utilizei o urlencode do Burp para isso:

Ao enviar a requisição:

E finalmente obtemos RCE!

Referências:

GitHub - tarunkant/Gopherus: This tool generates gopher link for exploiting SSRF and gaining RCE in various servers
This tool generates gopher link for exploiting SSRF and gaining RCE in various servers - GitHub - tarunkant/Gopherus: This tool generates gopher link for exploiting SSRF and gaining RCE in various ...

https://cheatsheetseries.owasp.org/assets/Server_Side_Request_Forgery_Prevention_Cheat_Sheet_SSRF_Bible.pdf

Onde praticar Hacking ?

O Hacking Club é uma plataforma de treinamento em cybersecurity, que permite você aprender hacking de forma totalmente prática.

Temos mais de 50 ambientes com vulnerabilidades reais com write-ups para você treinar e aprender hacking. Semanalmente lançamos máquinas gratuitas para você praticar e se desafiar no hacking!