mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/ssrf-server-side-request-forgery/url-for
This commit is contained in:
parent
b4bdebc241
commit
41be4c0b06
@ -156,18 +156,18 @@ https://metadata/expected/path/..%2f..%2f/vulnerable/path
|
|||||||
|
|
||||||
A ferramenta [**recollapse**](https://github.com/0xacb/recollapse) pode gerar variações a partir de uma entrada dada para tentar contornar a regex utilizada. Confira [**este post**](https://0xacb.com/2022/11/21/recollapse/) também para mais informações.
|
A ferramenta [**recollapse**](https://github.com/0xacb/recollapse) pode gerar variações a partir de uma entrada dada para tentar contornar a regex utilizada. Confira [**este post**](https://0xacb.com/2022/11/21/recollapse/) também para mais informações.
|
||||||
|
|
||||||
### Listas de Palavras Personalizadas Automáticas
|
### Automatic Custom Wordlists
|
||||||
|
|
||||||
Confira o [**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) da portswigger, onde você pode introduzir o host permitido e o do atacante, e ele gerará uma lista de URLs para você tentar. Ele também considera se você pode usar a URL em um parâmetro, em um cabeçalho Host ou em um cabeçalho CORS.
|
Confira o [**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) da portswigger onde você pode introduzir o host permitido e o do atacante e ele gerará uma lista de URLs para você tentar. Ele também considera se você pode usar a URL em um parâmetro, em um cabeçalho Host ou em um cabeçalho CORS.
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet
|
https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
### Bypass via redirecionamento
|
### Bypass via redirect
|
||||||
|
|
||||||
Pode ser possível que o servidor esteja **filtrando a solicitação original** de um SSRF **mas não** uma possível **resposta de redirecionamento** a essa solicitação.\
|
Pode ser possível que o servidor esteja **filtrando a requisição original** de um SSRF **mas não** uma possível **resposta de redirecionamento** a essa requisição.\
|
||||||
Por exemplo, um servidor vulnerável a SSRF via: `url=https://www.google.com/` pode estar **filtrando o parâmetro url**. Mas se você usar um [servidor python para responder com um 302](https://pastebin.com/raw/ywAUhFrv) para o lugar onde você deseja redirecionar, pode ser capaz de **acessar endereços IP filtrados** como 127.0.0.1 ou até mesmo **protocolos** filtrados como gopher.\
|
Por exemplo, um servidor vulnerável a SSRF via: `url=https://www.google.com/` pode estar **filtrando o parâmetro url**. Mas se você usar um [servidor python para responder com um 302](https://pastebin.com/raw/ywAUhFrv) para o lugar onde você deseja redirecionar, você pode ser capaz de **acessar endereços IP filtrados** como 127.0.0.1 ou até mesmo **protocolos** filtrados como gopher.\
|
||||||
[Confira este relatório.](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530)
|
[Confira este relatório.](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530)
|
||||||
```python
|
```python
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
@ -191,9 +191,9 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
|
|||||||
```
|
```
|
||||||
## Truques Explicados
|
## Truques Explicados
|
||||||
|
|
||||||
### Truque do Backslash
|
### Truque do Blackslash
|
||||||
|
|
||||||
O _truque do backslash_ explora uma diferença entre o [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) e [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). Enquanto a RFC3986 é uma estrutura geral para URIs, o WHATWG é específico para URLs da web e é adotado por navegadores modernos. A principal distinção reside no reconhecimento do backslash (`\`) pelo padrão WHATWG como equivalente ao barra (`/`), impactando como as URLs são analisadas, especificamente marcando a transição do nome do host para o caminho em uma URL.
|
O _truque do backslash_ explora uma diferença entre o [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) e [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). Enquanto a RFC3986 é uma estrutura geral para URIs, o WHATWG é específico para URLs da web e é adotado por navegadores modernos. A principal distinção reside no reconhecimento do padrão WHATWG de que o backslash (`\`) é equivalente ao barra (`/`), impactando como as URLs são analisadas, especificamente marcando a transição do nome do host para o caminho em uma URL.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@ -207,10 +207,42 @@ O caractere “colchete esquerdo” `[` na seção de userinfo pode fazer com qu
|
|||||||
|
|
||||||
imagem de [https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/](https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/)
|
imagem de [https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/](https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/)
|
||||||
|
|
||||||
|
### Truque do Identificador de Zona IPv6 (%25)
|
||||||
|
|
||||||
|
Analisadores de URL modernos que suportam a RFC 6874 permitem que endereços IPv6 *link-local* incluam um **identificador de zona** após um sinal de porcentagem. Alguns filtros de segurança não estão cientes dessa sintaxe e apenas removerão literais IPv6 entre colchetes, permitindo que a carga útil a seguir alcance uma interface interna:
|
||||||
|
```text
|
||||||
|
http://[fe80::1%25eth0]/ # %25 = encoded '%', interpreted as fe80::1%eth0
|
||||||
|
http://[fe80::a9ff:fe00:1%25en0]/ # Another example (macOS style)
|
||||||
|
```
|
||||||
|
Se a aplicação alvo valida que o host *não* é `fe80::1`, mas para de analisar no `%`, pode tratar incorretamente a solicitação como externa. Sempre normalize o endereço **antes** de qualquer decisão de segurança ou remova completamente o identificador de zona opcional.
|
||||||
|
|
||||||
|
### CVEs Recentes de Análise de Bibliotecas (2022–2025)
|
||||||
|
|
||||||
|
Vários frameworks populares sofreram problemas de incompatibilidade de nome de host que podem ser explorados para SSRF uma vez que a validação de URL tenha sido contornada com os truques listados acima:
|
||||||
|
|
||||||
|
| Ano | CVE | Componente | Sinopse do bug | PoC Mínimo |
|
||||||
|
|-----|-----|------------|----------------|------------|
|
||||||
|
| 2024 | CVE-2024-22243 / ‑22262 | Spring `UriComponentsBuilder` | `[` não é permitido na seção *userinfo*, então `https://example.com\[@internal` é analisado como host `example.com` pelo Spring, mas como `internal` pelos navegadores, permitindo redirecionamento aberto e SSRF quando listas de permissão de host são usadas. Atualize para Spring 5.3.34 / 6.0.19 / 6.1.6+. |
|
||||||
|
| 2023 | CVE-2023-27592 | **urllib3** <1.26.15 | A confusão com a barra invertida permitiu que `http://example.com\\@169.254.169.254/` contornasse filtros de host que separam em `@`. |
|
||||||
|
| 2022 | CVE-2022-3602 | OpenSSL | A verificação de nome de host foi pulada quando o nome é finalizado com um `.` (confusão de domínio sem ponto). |
|
||||||
|
|
||||||
|
Quando você depende de analisadores de URL de terceiros, **compare o host canonicamente retornado pela biblioteca em que você confia com a string bruta fornecida pelo usuário** para detectar essas classes de problemas.
|
||||||
|
|
||||||
|
### Auxiliares de geração de payload (2024+)
|
||||||
|
|
||||||
|
Criar grandes listas de palavras personalizadas manualmente é trabalhoso. A ferramenta de código aberto **SSRF-PayloadMaker** (Python 3) agora pode gerar *80 k+* combinações de manipulação de host automaticamente, incluindo codificações mistas, downgrade forçado de HTTP e variantes de barra invertida:
|
||||||
|
```bash
|
||||||
|
# Generate every known bypass that transforms the allowed host example.com to attacker.com
|
||||||
|
python3 ssrf_maker.py --allowed example.com --attacker attacker.com -A -o payloads.txt
|
||||||
|
```
|
||||||
|
A lista resultante pode ser alimentada diretamente no Burp Intruder ou `ffuf`.
|
||||||
|
|
||||||
## Referências
|
## Referências
|
||||||
|
|
||||||
- [https://as745591.medium.com/albussec-penetration-list-08-server-side-request-forgery-ssrf-sample-90267f095d25](https://as745591.medium.com/albussec-penetration-list-08-server-side-request-forgery-ssrf-sample-90267f095d25)
|
- [https://as745591.medium.com/albussec-penetration-list-08-server-side-request-forgery-ssrf-sample-90267f095d25](https://as745591.medium.com/albussec-penetration-list-08-server-side-request-forgery-ssrf-sample-90267f095d25)
|
||||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Request%20Forgery/README.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Request%20Forgery/README.md)
|
- [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Request%20Forgery/README.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Request%20Forgery/README.md)
|
||||||
- [https://portswigger.net/research/new-crazy-payloads-in-the-url-validation-bypass-cheat-sheet](https://portswigger.net/research/new-crazy-payloads-in-the-url-validation-bypass-cheat-sheet)
|
- [https://portswigger.net/research/new-crazy-payloads-in-the-url-validation-bypass-cheat-sheet](https://portswigger.net/research/new-crazy-payloads-in-the-url-validation-bypass-cheat-sheet)
|
||||||
|
- [https://nvd.nist.gov/vuln/detail/CVE-2024-22243](https://nvd.nist.gov/vuln/detail/CVE-2024-22243)
|
||||||
|
- [https://github.com/hsynuzm/SSRF-PayloadMaker](https://github.com/hsynuzm/SSRF-PayloadMaker)
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user