Translated ['src/pentesting-web/ssrf-server-side-request-forgery/url-for

This commit is contained in:
Translator 2025-07-22 08:46:01 +00:00
parent 8100b412c3
commit 61529ecf5c

View File

@ -158,7 +158,7 @@ The tool [**recollapse**](https://github.com/0xacb/recollapse) belirli bir girdi
### Automatic Custom Wordlists
Portswigger'dan [**URL validation bypass cheat sheet** web uygulamasına](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) göz atın; burada izin verilen host ve saldırganın host'unu girebilir ve sizin için denemek üzere bir URL listesi oluşturacaktır. Ayrıca URL'yi bir parametre, Host başlığı veya CORS başlığı içinde kullanıp kullanamayacağınızı da dikkate alır.
Portswigger'dan [**URL validation bypass cheat sheet** web uygulamasına**](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) göz atın; burada izin verilen host ve saldırganın host'unu girebilir ve sizin için denemek üzere bir URL listesi oluşturacaktır. Ayrıca, URL'yi bir parametre, Host başlığı veya CORS başlığı içinde kullanıp kullanamayacağınızı da dikkate alır.
{{#ref}}
https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet
@ -166,8 +166,8 @@ https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet
### Bypass via redirect
Sunucunun SSRF'nin **orijinal isteğini filtreliyor** olması **ama** bu isteğe olası bir **redirect** yanıtını filtrelemiyor olması mümkün olabilir.\
Örneğin, `url=https://www.google.com/` üzerinden SSRF'ye karşı savunmasız bir sunucu **url parametresini filtreliyor** olabilir. Ancak, yönlendirmek istediğiniz yere 302 yanıtı vermek için bir [python sunucusu kullanırsanız](https://pastebin.com/raw/ywAUhFrv), 127.0.0.1 gibi **filtrelenmiş IP adreslerine** veya hatta gopher gibi filtrelenmiş **protokollere** **erişebilirsiniz**.\
Sunucunun bir SSRF'nin **orijinal isteğini filtreliyor** olması **ama** bu isteğe olası bir **redirect** yanıtını filtrelemiyor olması mümkün olabilir.\
Örneğin, `url=https://www.google.com/` üzerinden SSRF'ye karşı savunmasız bir sunucu **url parametresini filtreliyor** olabilir. Ancak, yönlendirmek istediğiniz yere bir 302 yanıtı vermek için bir [python sunucusu kullanırsanız](https://pastebin.com/raw/ywAUhFrv), 127.0.0.1 gibi **filtrelenmiş IP adreslerine** veya hatta gopher gibi filtrelenmiş **protokollere** **erişebilirsiniz**.\
[Buna dair bu rapora göz atın.](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530)
```python
#!/usr/bin/env python3
@ -193,7 +193,7 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
### Blackslash-hilesi
_Backslash-hilesi_, [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) ve [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B) arasındaki bir farkı kullanır. RFC3986, URI'ler için genel bir çerçeve iken, WHATWG web URL'lerine özgüdür ve modern tarayıcılar tarafından benimsenmiştir. Anahtar ayrım, WHATWG standardının ters eğik çizgiyi (`\`) ileri eğik çizgiye (`/`) eşdeğer olarak tanımasında yatmaktadır; bu, URL'lerin nasıl ayrıştırıldığını etkiler ve özellikle bir URL'deki ana bilgisayardan yola geçişi işaret eder.
_Backslash-hilesi_, [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) ve [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B) arasındaki bir farkı kullanır. RFC3986, URI'ler için genel bir çerçeve iken, WHATWG web URL'lerine özgüdür ve modern tarayıcılar tarafından benimsenmiştir. Anahtar ayrım, WHATWG standardının backslash (`\`) karakterini forward slash (`/`) ile eşdeğer olarak tanımasında yatmaktadır; bu, URL'lerin nasıl ayrıştırıldığını etkiler ve özellikle bir URL'deki ana bilgisayardan yola geçişi işaret eder.
![https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec_difference.jpg](https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec_difference.jpg)
@ -207,10 +207,42 @@ Kullanıcı bilgisi segmentindeki “sol köşeli parantez” karakteri `[` Spri
[https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/](https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/) adresinden görüntü
### IPv6 Bölge Tanımlayıcı (%25) Hilesi
RFC 6874'ü destekleyen modern URL ayrıştırıcıları, **bölge tanımlayıcısı** içeren *link-local* IPv6 adreslerine yüzde işaretinden sonra izin verir. Bazı güvenlik filtreleri bu sözdizimini bilmez ve yalnızca köşeli parantez içindeki IPv6 literallerini kaldırır, bu da aşağıdaki yükün dahili bir arayüze ulaşmasına izin verir:
```text
http://[fe80::1%25eth0]/ # %25 = encoded '%', interpreted as fe80::1%eth0
http://[fe80::a9ff:fe00:1%25en0]/ # Another example (macOS style)
```
Eğer hedef uygulama, ana bilgisayarın *değil* `fe80::1` olduğunu doğruluyorsa ancak `%` ile ayrıştırmayı durduruyorsa, isteği yanlış bir şekilde harici olarak değerlendirebilir. Her zaman adresi **herhangi bir güvenlik kararı öncesinde** normalleştirin veya isteğe bağlı alan kimliğini tamamen kaldırın.
### Son Kütüphane Ayrıştırma CVE'leri (20222025)
Birçok ana akım çerçeve, URL doğrulaması yukarıda listelenen hilelerle aşıldığında SSRF için istismar edilebilecek ana bilgisayar uyuşmazlığı sorunları yaşamıştır:
| Yıl | CVE | Bileşen | Hata özeti | Minimal PoC |
|------|-----|-----------|--------------|-------------|
| 2024 | CVE-2024-22243 / 22262 | Spring `UriComponentsBuilder` | `[` *kullanıcı bilgileri* bölümünde izin verilmez, bu nedenle `https://example.com\[@internal` Spring tarafından ana bilgisayar `example.com` olarak, tarayıcılar tarafından ise `internal` olarak ayrıştırılır ve ana bilgisayar izin listeleri kullanıldığında açık yönlendirme ve SSRF'ye olanak tanır. Spring 5.3.34 / 6.0.19 / 6.1.6+ sürümüne yükseltin. |
| 2023 | CVE-2023-27592 | **urllib3** <1.26.15 | Ters eğik çizgi karışıklığı, `http://example.com\\@169.254.169.254/` adresinin `@` ile ayrılan ana bilgisayar filtrelerini aşmasına izin verdi. |
| 2022 | CVE-2022-3602 | OpenSSL | İsim bir `.` ile sonlandığında ana bilgisayar doğrulaması atlandı (noktasız alan karışıklığı). |
Üçüncü taraf URL ayrıştırıcılarına güvendiğinizde, **güvendiğiniz kütüphaneden dönen kanonikleştirilmiş ana bilgisayarı, kullanıcı tarafından sağlanan ham dize ile karşılaştırın** bu tür sorunları tespit etmek için.
### Yükleme oluşturma yardımcıları (2024+)
Büyük özel kelime listeleri oluşturmak zahmetlidir. Açık kaynak aracı **SSRF-PayloadMaker** (Python 3), karışık kodlamalar, zorunlu HTTP düşürme ve ters eğik çizgi varyantları dahil olmak üzere *80 k+* ana bilgisayar karıştırma kombinasyonlarını otomatik olarak oluşturabilir:
```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
```
Elde edilen liste doğrudan Burp Intruder veya `ffuf`'a verilebilir.
## Referanslar
- [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://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}}