Use [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=ssrf-server-side-request-forgery) para construir e **automatizar fluxos de trabalho** facilmente com as **ferramentas** da comunidade **mais avançadas** do mundo.\
Aprenda e pratique Hacking AWS:<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
Aprenda e pratique Hacking GCP: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
Uma vulnerabilidade de **Server-side Request Forgery (SSRF)** ocorre quando um atacante manipula uma **aplicação do lado do servidor** para fazer **requisições HTTP** para um domínio de sua escolha. Essa vulnerabilidade expõe o servidor a requisições externas arbitrárias direcionadas pelo atacante.
A primeira coisa que você precisa fazer é capturar uma interação SSRF gerada por você. Para capturar uma interação HTTP ou DNS, você pode usar ferramentas como:
Normalmente, você descobrirá que o SSRF só funciona em **certos domínios ou URLs na lista branca**. Na página a seguir, você tem uma **compilação de técnicas para tentar contornar essa lista branca**:
Se o servidor estiver corretamente protegido, você pode **contornar todas as restrições explorando um Open Redirect dentro da página da web**. Como a página da web permitirá **SSRF para o mesmo domínio** e provavelmente **seguirá redirecionamentos**, você pode explorar o **Open Redirect para fazer o servidor acessar qualquer recurso interno**.\
* O esquema de URL DICT é descrito como sendo utilizado para acessar definições ou listas de palavras via o protocolo DICT. Um exemplo dado ilustra uma URL construída visando uma palavra específica, banco de dados e número de entrada, bem como um exemplo de um script PHP que pode ser potencialmente mal utilizado para conectar-se a um servidor DICT usando credenciais fornecidas pelo atacante: `dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>`
* Identificado como um protocolo para transferência segura de arquivos sobre shell seguro, um exemplo é fornecido mostrando como um script PHP poderia ser explorado para conectar-se a um servidor SFTP malicioso: `url=sftp://generic.com:11111/`
* O Protocolo de Transferência de Arquivos Trivial, operando sobre UDP, é mencionado com um exemplo de um script PHP projetado para enviar uma requisição a um servidor TFTP. Uma requisição TFTP é feita para 'generic.com' na porta '12346' para o arquivo 'TESTUDPPACKET': `ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET`
* Este segmento cobre o Protocolo de Acesso a Diretórios Leves, enfatizando seu uso para gerenciar e acessar serviços de informações de diretório distribuídos sobre redes IP. Interaja com um servidor LDAP no localhost: `'%0astats%0aquit' via ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.`
* Um método é descrito para explorar vulnerabilidades SSRF para interagir com serviços SMTP no localhost, incluindo etapas para revelar nomes de domínios internos e outras ações investigativas com base nessa informação.
* Se o SSRF for executado pelo **curl**, o curl tem um recurso chamado [**URL globbing**](https://everything.curl.dev/cmdline/globbing) que pode ser útil para contornar WAFs. Por exemplo, neste [**writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-easylfi) você pode encontrar este exemplo de **traversal de caminho via protocolo `file`**:
* A capacidade do protocolo Gopher de especificar IP, porta e bytes para comunicação com o servidor é discutida, juntamente com ferramentas como Gopherus e remote-method-guesser para criar payloads. Duas utilizações distintas são ilustradas:
Usando este protocolo, você pode especificar o **IP, porta e bytes** que deseja que o servidor **envie**. Então, você pode basicamente explorar um SSRF para **comunicar-se com qualquer servidor TCP** (mas você precisa saber como se comunicar com o serviço primeiro).\
Felizmente, você pode usar [Gopherus](https://github.com/tarunkant/Gopherus) para criar payloads para vários serviços. Além disso, [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) pode ser usado para criar payloads _gopher_ para serviços _Java RMI_.
Software de análise em servidores frequentemente registra o cabeçalho Referrer para rastrear links de entrada, uma prática que expõe inadvertidamente as aplicações a vulnerabilidades de Server-Side Request Forgery (SSRF). Isso ocorre porque tal software pode visitar URLs externas mencionadas no cabeçalho Referrer para analisar o conteúdo do site de referência. Para descobrir essas vulnerabilidades, o plugin do Burp Suite "**Collaborator Everywhere**" é recomendado, aproveitando a forma como as ferramentas de análise processam o cabeçalho Referer para identificar possíveis superfícies de ataque SSRF.
Uma má configuração que poderia permitir a conexão a qualquer backend através de uma configuração simples é ilustrada com um exemplo de configuração do Nginx:
Nesta configuração, o valor do campo Server Name Indication (SNI) é utilizado diretamente como o endereço do backend. Essa configuração expõe uma vulnerabilidade a Server-Side Request Forgery (SSRF), que pode ser explorada simplesmente especificando o endereço IP ou nome de domínio desejado no campo SNI. Um exemplo de exploração para forçar uma conexão a um backend arbitrário, como `internal.host.com`, usando o comando `openssl` é dado abaixo:
Se a página da web estiver criando automaticamente um PDF com algumas informações que você forneceu, você pode **inserir algum JS que será executado pelo próprio criador de PDF** (o servidor) enquanto cria o PDF e você poderá abusar de um SSRF. [**Encontre mais informações aqui**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)**.**
Para algumas explorações, você pode precisar **enviar uma resposta de redirecionamento** (potencialmente para usar um protocolo diferente como gopher). Aqui você tem diferentes códigos em python para responder com um redirecionamento:
Use [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=ssrf-server-side-request-forgery) para construir e **automatizar fluxos de trabalho** facilmente, impulsionados pelas **ferramentas** comunitárias **mais avançadas** do mundo.\
Flask permite usar **`@`** como caractere inicial, o que permite fazer **o nome do host inicial ser o nome de usuário** e injetar um novo. Requisição de ataque:
Foi descoberto que é possível **iniciar o caminho** de uma solicitação com o caractere **`;`** o que permite usar então **`@`** e injetar um novo host para acessar. Solicitação de ataque:
### Servidor Web Integrado do PHP <a href="#heading-php-built-in-web-server-case-study-ssrf-through-incorrect-pathname-interpretation" id="heading-php-built-in-web-server-case-study-ssrf-through-incorrect-pathname-interpretation"></a>
PHP permite o uso do **caractere `*` antes de uma barra no caminho** da URL, no entanto, possui outras limitações, como o fato de que só pode ser usado para o caminho raiz `/` e que pontos `.` não são permitidos antes da primeira barra, então é necessário usar um endereço IP codificado em hexadecimal sem ponto, por exemplo:
Se você está tendo **problemas** para **exfiltrar conteúdo de um IP local** por causa de **CORS/SOP**, **DNS Rebidding** pode ser usado para contornar essa limitação:
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) é uma ferramenta para realizar ataques de [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding). Ela inclui os componentes necessários para reconfigurar o endereço IP do nome DNS do servidor de ataque para o endereço IP da máquina alvo e para servir cargas úteis de ataque para explorar software vulnerável na máquina alvo.
3. Uma **conexão TLS** é criada entre a vítima e o domínio do atacante. O atacante introduz a **carga útil dentro** do **ID de Sessão ou Ticket de Sessão**.
4. O **domínio** iniciará um **loop infinito** de redirecionamentos contra **ele mesmo**. O objetivo disso é fazer com que o usuário/bot acesse o domínio até que ele realize **novamente** uma **solicitação DNS** do domínio.
5. Na solicitação DNS, um endereço **IP privado** é fornecido **agora** (127.0.0.1, por exemplo)
6. O usuário/bot tentará **restabelecer a conexão TLS** e, para fazer isso, enviará o **ID de Sessão/Ticket ID** (onde a **carga útil** do atacante estava contida). Então, parabéns, você conseguiu fazer o **usuário/bot atacar a si mesmo**.
Note que durante este ataque, se você quiser atacar localhost:11211 (_memcache_), você precisa fazer a vítima estabelecer a conexão inicial com www.attacker.com:11211 (a **porta deve sempre ser a mesma**).\
Para **realizar este ataque você pode usar a ferramenta**: [https://github.com/jmdx/TLS-poison/](https://github.com/jmdx/TLS-poison/)\
Para **mais informações**, dê uma olhada na palestra onde este ataque é explicado: [https://www.youtube.com/watch?v=qGpAJxfADjo\&ab\_channel=DEFCONConference](https://www.youtube.com/watch?v=qGpAJxfADjo\&ab\_channel=DEFCONConference)
A diferença entre um blind SSRF e um não blind é que no blind você não pode ver a resposta da solicitação SSRF. Então, é mais difícil explorar porque você só poderá explorar vulnerabilidades bem conhecidas.
**Verificando o tempo** das respostas do servidor, pode ser **possível saber se um recurso existe ou não** (talvez leve mais tempo acessar um recurso existente do que acessar um que não existe)
Se você encontrar uma vulnerabilidade SSRF em uma máquina rodando dentro de um ambiente de nuvem, pode ser capaz de obter informações interessantes sobre o ambiente de nuvem e até mesmo credenciais:
_remote-method-guesser_ é um scanner de vulnerabilidades _Java RMI_ que suporta operações de ataque para a maioria das vulnerabilidades comuns de _Java RMI_. A maioria das operações disponíveis suporta a opção `--ssrf`, para gerar uma carga útil _SSRF_ para a operação solicitada. Juntamente com a opção `--gopher`, cargas úteis _gopher_ prontas para uso podem ser geradas diretamente.
SSRF Proxy é um servidor proxy HTTP multi-threaded projetado para tunelizar o tráfego HTTP do cliente através de servidores HTTP vulneráveis a Server-Side Request Forgery (SSRF).
Aprenda e pratique Hacking AWS:<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
Aprenda e pratique Hacking GCP: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
Use [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=ssrf-server-side-request-forgery) para construir e **automatizar fluxos de trabalho** facilmente com as **ferramentas** da **comunidade mais avançadas** do mundo.\