# Server Side Inclusion/Edge Side Inclusion Injection
{% hint style="success" %}
Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}
## Server Side Inclusion Temel Bilgiler
**(Giriş [Apache belgelerinden](https://httpd.apache.org/docs/current/howto/ssi.html) alınmıştır)**
SSI (Server Side Includes), **HTML sayfalarına yerleştirilen ve sayfalar sunulurken sunucuda değerlendirilen** direktiflerdir. Mevcut bir HTML sayfasına **dinamik olarak üretilen içerik** eklemenizi sağlar, tüm sayfayı bir CGI programı veya diğer dinamik teknoloji aracılığıyla sunmak zorunda kalmadan.\
Örneğin, mevcut bir HTML sayfasına şu şekilde bir direktif yerleştirebilirsiniz:
``
Ve sayfa sunulduğunda, bu parça değerlendirilecek ve değeri ile değiştirilecektir:
`Salı, 15-Oca-2013 19:28:54 EST`
SSI kullanma kararı, sayfanızın ne kadarının statik olduğu ve sayfa her sunulduğunda ne kadarının yeniden hesaplanması gerektiği ile genellikle ilgilidir. SSI, yukarıda gösterilen mevcut zamanı gibi küçük bilgi parçaları eklemek için harika bir yoldur. Ancak sayfanızın çoğunluğu sunulduğu anda üretiliyorsa, başka bir çözüm aramanız gerekir.
Web uygulaması **`.shtml`, `.shtm` veya `.stm`** uzantılı dosyalar kullanıyorsa SSI'nin varlığını çıkarabilirsiniz, ancak bu sadece bir durum değildir.
Tipik bir SSI ifadesinin aşağıdaki formatı vardır:
```
```
### Kontrol
```javascript
// Document name
// Date
// File inclusion
// Including files (same directory)
// CGI Program results
// Including virtual files (same directory)
// Modification date of a file
// Command exec
// Command exec
// Reverse shell
// Print all variables
// Setting variables
```
## Edge Side Inclusion
**Dinamik uygulamaların veya bilgilerin önbelleğe alınması** ile ilgili bir sorun vardır, çünkü içeriğin bir sonraki kez alındığında **değişmiş** olabileceği durumlar vardır. Bu, **ESI**'nin kullanılma amacıdır; ESI etiketlerini kullanarak **önbellek versiyonundan önce oluşturulması gereken dinamik içeriği** belirtmek için.\
Eğer bir **saldırgan** önbellek içeriğine **bir ESI etiketi enjekte edebilirse**, o zaman, kullanıcılar için gönderilmeden önce belgede **rastgele içerik enjekte edebilir**.
### ESI Detection
Sunucudan gelen bir yanıttaki aşağıdaki **header**, sunucunun ESI kullandığını gösterir:
```
Surrogate-Control: content="ESI/1.0"
```
Eğer bu başlığı bulamazsanız, sunucu **her neyse ESI kullanıyor olabilir**.\
**Kör istismar yaklaşımı da kullanılabilir** çünkü bir isteğin saldırganın sunucusuna ulaşması gerekir:
```javascript
// Basic detection
hello
// If previous is reflected as "hello", it's vulnerable
// Blind detection
// XSS Exploitation Example
// Cookie Stealer (bypass httpOnly flag)
// Introduce private local files (Not LFI per se)
// Valid for Akamai, sends debug information in the response
```
### ESI istismarı
[GoSecure oluşturdu](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/) farklı ESI uyumlu yazılımlar üzerinde deneyebileceğimiz olası saldırıları anlamak için bir tablo:
* **Includes**: `` direktifini destekler
* **Vars**: `` direktifini destekler. XSS Filtrelerini atlatmak için kullanışlıdır
* **Cookie**: Belge çerezleri ESI motoruna erişilebilir
* **Upstream Headers Required**: Surrogate uygulamaları, upstream uygulama başlıkları sağlamadıkça ESI ifadelerini işleme almaz
* **Host Allowlist**: Bu durumda, ESI dahil etmeleri yalnızca izin verilen sunucu ana bilgisayarlarından mümkündür, bu da örneğin SSRF'yi yalnızca bu ana bilgisayarlara karşı mümkün kılar
| **Yazılım** | **Includes** | **Vars** | **Cookies** | **Upstream Headers Required** | **Host Whitelist** |
| :--------------------------: | :----------: | :------: | :---------: | :---------------------------: | :----------------: |
| Squid3 | Evet | Evet | Evet | Evet | Hayır |
| Varnish Cache | Evet | Hayır | Hayır | Evet | Evet |
| Fastly | Evet | Hayır | Hayır | Hayır | Evet |
| Akamai ESI Test Sunucusu (ETS) | Evet | Evet | Evet | Hayır | Hayır |
| NodeJS esi | Evet | Evet | Evet | Hayır | Hayır |
| NodeJS nodesi | Evet | Hayır | Hayır | Hayır | Opsiyonel |
#### XSS
Aşağıdaki ESI direktifi, sunucunun yanıtı içinde rastgele bir dosya yükleyecektir.
```xml
```
#### İstemci XSS korumasını atlatma
```xml
x=>alert(/Chrome%20XSS%20filter%20bypass/);>
Use to bypass WAFs:
ipt>alert(1)ript>
error=alert(1)>
```
#### Çerez Çalma
* Uzaktan çerez çalma
```xml
```
* HTTP\_ONLY çerezini XSS ile yanıt içinde yansıtarak çalın:
```bash
# This will reflect the cookies in the response
# Reflect XSS (you can put '">