[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kullanarak dünyanın **en gelişmiş** topluluk araçları tarafından desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\
<summary><strong>Sıfırdan kahramana kadar AWS hacklemeyi öğrenin</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
Bir **Sunucu Tarafı İstek Sahtekarlığı (SSRF)** zafiyeti, bir saldırganın bir **sunucu tarafı uygulamasını** manipüle ederek istedikleri bir alan adına **HTTP istekleri yapmasına neden olduğunda ortaya çıkar.** Bu zafiyet, saldırgan tarafından yönlendirilen keyfi harici isteklere sunucuyu maruz bırakır.
Yapmanız gereken ilk şey, sizin tarafınızdan oluşturulan bir SSRF etkileşimini yakalamaktır. Bir HTTP veya DNS etkileşimini yakalamak için şu araçları kullanabilirsiniz:
Genellikle SSRF'nin yalnızca **belirli beyaz listelenen alanlarda** veya URL'de çalıştığını göreceksiniz. Aşağıdaki sayfada, o beyaz listeyi atlatmaya çalışmak için **derlenmiş tekniklerin bir derlemesi** bulunmaktadır:
Sunucu doğru bir şekilde korunuyorsa, web sayfası içindeki bir Açık Yönlendirme'yi sömürerek **tüm kısıtlamaları atlayabilirsiniz**. Çünkü web sayfası**aynı alan adına SSRF'ye izin verecek** ve muhtemelen **yönlendirmeleri takip edecektir**, **Sunucunun iç herhangi bir kaynağa erişmesi için Açık Yönlendirmeyi sömürebilirsiniz**.\
* DICT URL şeması, DICT protokolü aracılığıyla tanımlar veya kelime listelerine erişim için kullanıldığı belirtilir. Verilen bir örnek, belirli bir kelimeyi, veritabanını ve giriş numarasını hedefleyen oluşturulmuş bir URL'i ve bir PHP betiğinin, saldırgan tarafından sağlanan kimlik bilgilerini kullanarak bir DICT sunucusuna bağlanmak için potansiyel olarak yanlış kullanıldığı bir örneği gösterir: `dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>`
* Güvenli kabuk üzerinden güvenli dosya transferi için bir protokol olarak tanımlanır, bir PHP betiğinin kötü niyetli bir SFTP sunucusuna bağlanmak için nasıl sömürülebileceğini gösteren bir örnek sunulur: `url=sftp://generic.com:11111/`
* UDP üzerinden çalışan Trivial File Transfer Protocol, bir PHP betiğinin bir TFTP sunucusuna bir istek göndermek için tasarlandığı bir örnekle belirtilir. 'generic.com' üzerinde '12346' portuna 'TESTUDPPACKET' dosyası için bir TFTP isteği yapılır: `ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET`
* Bu bölüm, IP ağları üzerinde dağıtılmış dizin bilgi hizmetlerini yönetmek ve erişmek için kullanılan Hafif Dizin Erişim Protokolü'nü kapsar. Localhost'taki bir LDAP sunucusuyla etkileşim: `'%0astats%0aquit' via ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.`
* SSRF zafiyetlerini kullanarak localhost'taki SMTP hizmetleriyle etkileşimde bulunmak için bir yöntem açıklanmıştır, dahili alan adlarını ortaya çıkarmak için adımlar ve bu bilgilere dayalı daha fazla araştırma eylemleri içerir.
* Eğer SSRF **curl** tarafından yürütülüyorsa, curl'ün [**URL globbing**](https://everything.curl.dev/cmdline/globbing) adında bir özelliği vardır ve bu özellik WAF'leri atlatmak için kullanışlı olabilir. Örneğin bu [**yazıda**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-easylfi) **`file` protokolü aracılığıyla yol geçişi** için bir örnek bulabilirsiniz:
* Gopher protokolünün sunucu ile iletişim için IP, port ve baytları belirleme yeteneği ele alınırken, Gopherus ve remote-method-guesser gibi araçlar da paylaşılan yükler oluşturmak için kullanılmaktadır. İki farklı kullanım örneği verilmiştir:
Bu protokolü kullanarak sunucunun **göndermesini istediğiniz IP, port ve baytları belirleyebilirsiniz**. Daha sonra, temelde bir SSRF'yi sömürerek **herhangi bir TCP sunucusuyla iletişim kurabilirsiniz** (ancak önce hizmetle nasıl iletişim kurulacağını bilmelisiniz).\
Neyse ki, çeşitli hizmetler için yükler oluşturmak için [Gopherus](https://github.com/tarunkant/Gopherus) kullanabilirsiniz. Ayrıca, _Java RMI_ hizmetleri için _gopher_ yükleri oluşturmak için [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) kullanılabilir.
Sunuculardaki analiz yazılımları genellikle gelen bağlantıları izlemek için Referrer başlığını kaydeder, bu uygulamaları yanlışlıkla Sunucu Tarafı İstek Sahtekarlığı (SSRF) açıklarına maruz bırakır. Bu, çünkü bu tür yazılımlar, Referer başlığında belirtilen harici URL'leri analiz etmek için ziyaret edebilir. Bu açıkları ortaya çıkarmak için, Burp Suite eklentisi "**Collaborator Everywhere**" önerilir, analiz araçlarının Referer başlığını işleme şeklini kullanarak potansiyel SSRF saldırı yüzeylerini belirlemek.
Bu yapılandırmada, Sunucu Adı Gösterimi (SNI) alanındaki değer doğrudan arka uç adresi olarak kullanılır. Bu kurulum, yalnızca istenen IP adresini veya alan adını SNI alanında belirterek sömürülebilecek olan Sunucu Tarafı İstek Sahtekarlığı (SSRF) açığına maruz kalır. `openssl` komutunu kullanarak, örneğin `internal.host.com` gibi keyfi bir arka uca bağlantı zorlamak için bir sömürü örneği aşağıda verilmiştir:
Web sayfası otomatik olarak sağladığınız bazı bilgilerle bir PDF oluşturuyorsa, PDF oluşturulurken sunucu tarafından yürütülecek olan bazı JS kodları**ekleyebilirsiniz** ve bir SSRF'yi istismar edebilirsiniz. [**Daha fazla bilgiyi buradan bulabilirsiniz**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)**.**
Bazı istismarlar için **bir yönlendirme yanıtı göndermeniz gerekebilir** (muhtemelen farklı bir protokol olan gopher'ı kullanmak için). Burada yönlendirme ile yanıt vermek için farklı python kodları bulunmaktadır:
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) kullanarak dünyanın en gelişmiş topluluk araçları tarafından desteklenen **otomatik iş akışlarını** kolayca oluşturun ve otomatikleştirin.\
Bu yazıdan [**hileler**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies).
### Flask
<details>
<summary>Flask vekil açığı olan kod</summary>
```python
from flask import Flask
from requests import get
app = Flask('__main__')
SITE_NAME = 'https://google.com'
@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def proxy(path):
return get(f'{SITE_NAME}{path}').content
if __name__ == "__main__":
app.run(threaded=False)
```
</details>
Flask, **`@`** karakterini başlangıç karakteri olarak kullanmaya izin verir, bu da **başlangıç ana bilgisayar adını kullanıcı adı yapar** ve yeni bir tane enjekte etmeyi sağlar. Saldırı isteği:
```http
GET @evildomain.com/ HTTP/1.1
Host: target.com
Connection: close
```
### Spring Boot <a href="#heading-ssrf-on-spring-boot-through-incorrect-pathname-interpretation" id="heading-ssrf-on-spring-boot-through-incorrect-pathname-interpretation"></a>
Keşfedildi ki bir isteğin yolunu karakter **`;`** ile başlatmak mümkündür, bu da daha sonra **`@`** kullanmaya ve yeni bir ana bilgisayar enjekte etmeye olanak tanır. Saldırı isteği:
```http
GET ;@evil.com/url HTTP/1.1
Host: target.com
Connection: close
```
### PHP Dahili Web Sunucusu <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>
<details>
<summary>Zararlı PHP kodu</summary>
```php
<?php
$site = "http://ifconfig.me";
$current_uri = $_SERVER['REQUEST_URI'];
$proxy_site = $site.$current_uri;
var_dump($proxy_site);
echo "\n\n";
$response = file_get_contents($proxy_site);
var_dump($response);
?>
```
</details>
PHP, URL'nin yolundaki **slash'tan önce `*` karakterinin kullanılmasına izin verir**, ancak yalnızca kök dizin `/` için kullanılabilir ve noktalar `.` ilk slash'tan önce izin verilmediği için, örneğin noktasız-hex kodlu bir IP adresinin kullanılması gerekmektedir:
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity), [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding) saldırıları gerçekleştirmek için bir araçtır. Saldırganın saldırı sunucusunun DNS adını hedef makinenin IP adresine yeniden bağlamak ve hedef makinedeki zayıf yazılımları sömürmek için saldırı yüklerini sunmak için gerekli bileşenleri içerir.
6. Kullanıcı/bot, **TLS bağlantısını yeniden kurmaya çalışacak** ve bunu yapmak için **Ses** Kimliği/Bilet Kimliği'ni gönderecektir (saldırganın yükünün bulunduğu yer). Bu sayede kullanıcının/botun **kendisine saldırmasını başardınız**.
Bu saldırı sırasında, localhost:11211 (_memcache_)'yi hedef almak istiyorsanız, kurbanın ilk bağlantıyı www.attacker.com:11211 ile kurmasını sağlamanız gerekir (port **her zaman aynı olmalıdır**).\
Bu saldırının açıklandığı sunumu incelemek için daha fazla bilgi için şuraya bakın: [https://www.youtube.com/watch?v=qGpAJxfADjo\&ab\_channel=DEFCONConference](https://www.youtube.com/watch?v=qGpAJxfADjo\&ab\_channel=DEFCONConference)
Kör bir SSRF ile normal bir SSRF arasındaki fark, körde SSRF isteğinin yanıtını görememenizdir. Bu nedenle, yalnızca bilinen güvenlik açıklarını sömürebileceğiniz için daha zor sömürülebilir.
Sunucudan gelen yanıtların **zamanını kontrol ederek**, bir kaynağın var olup olmadığını**belirlemek mümkün olabilir** (belki var olan bir kaynağa erişmek, olmayan bir kaynağa erişmekten daha uzun sürebilir)
Bir bulut ortamında çalışan bir makinede bir SSRF açığı bulursanız, bulut ortamı hakkında ilginç bilgiler elde edebilir ve hatta kimlik bilgilerini alabilirsiniz:
_remote-method-guesser_, en yaygın _Java RMI_ açıkları için saldırı işlemlerini destekleyen bir _Java RMI_ güvenlik açığı tarayıcısıdır. Mevcut işlemlerin çoğu, istenen işlem için bir _SSRF_ yükü oluşturmak için `--ssrf` seçeneğini destekler. `--gopher` seçeneği ile birlikte, hazır kullanıma hazır _gopher_ yükleri doğrudan oluşturulabilir.
SSRF Proxy, Server-Side Request Forgery (SSRF) açıklarına sahip HTTP sunucuları üzerinden istemci HTTP trafiğini yönlendirmek için tasarlanmış çoklu iş parçacıklı bir HTTP proxy sunucusudur.