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:

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