SSRF Protocol Smuggling — Explorando Serviços Internos e Bypass de Filtros

SSRF Protocol Smuggling — Explorando Serviços Internos e Bypass de Filtros

A técnica de SSRF Protocol Smuggling é um método avançado de exploração em Cyber Security que permite abusar de vulnerabilidades de Server-Side Request Forgery (SSRF) para se comunicar com serviços internos utilizando protocolos não previstos pela aplicação. Essa abordagem possibilita contornar filtros de segurança, manipular requisições em camadas inferiores da comunicação e alcançar ativos internos que normalmente não estariam acessíveis externamente.

Neste artigo, você aprenderá como explorar essa técnica para ampliar o impacto de falhas SSRF em cenários reais e desafios de CTF (Capture The Flag). Antes de prosseguir, é importante compreender os fundamentos da vulnerabilidade SSRF e como aplicações web podem ser utilizadas como intermediárias para requisições à rede interna.

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!