Server Side Inclusion/Edge Side Inclusion Injection
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
(Wprowadzenie zaczerpnięte z dokumentacji Apache)
SSI (Server Side Includes) to dyrektywy, które są umieszczane w stronach HTML i oceniane na serwerze podczas serwowania stron. Pozwalają one na dodawanie dynamicznie generowanej treści do istniejącej strony HTML, bez konieczności serwowania całej strony za pomocą programu CGI lub innej technologii dynamicznej. Na przykład, możesz umieścić dyrektywę w istniejącej stronie HTML, taką jak:
<!--#echo var="DATE_LOCAL" -->
A gdy strona jest serwowana, ten fragment zostanie oceniony i zastąpiony swoją wartością:
Wtorek, 15-Sty-2013 19:28:54 EST
Decyzja o tym, kiedy używać SSI, a kiedy mieć stronę całkowicie generowaną przez jakiś program, zazwyczaj zależy od tego, ile strony jest statyczne, a ile musi być przeliczane za każdym razem, gdy strona jest serwowana. SSI to świetny sposób na dodanie małych fragmentów informacji, takich jak aktualny czas - pokazany powyżej. Ale jeśli większość twojej strony jest generowana w momencie, gdy jest serwowana, musisz poszukać innego rozwiązania.
Możesz wnioskować o obecności SSI, jeśli aplikacja webowa używa plików z rozszerzeniem .shtml
, .shtm
lub .stm
, ale to nie jest jedyny przypadek.
Typowa ekspresja SSI ma następujący format:
Istnieje problem z buforowaniem informacji lub dynamicznych aplikacji, ponieważ część treści może być różna przy następnym pobraniu treści. To jest to, do czego służy ESI, aby wskazać za pomocą tagów ESI dynamiczną treść, która musi być generowana przed wysłaniem wersji z pamięci podręcznej. Jeśli atakujący jest w stanie wstrzyknąć tag ESI do treści w pamięci podręcznej, to mógłby być w stanie wstrzyknąć dowolną treść do dokumentu przed jego wysłaniem do użytkowników.
Następujący nagłówek w odpowiedzi z serwera oznacza, że serwer używa ESI:
Jeśli nie możesz znaleźć tego nagłówka, serwer może mimo wszystko używać ESI. Można również zastosować podejście ślepej eksploitacji, ponieważ żądanie powinno dotrzeć do serwera atakującego:
GoSecure stworzył tabelę, aby zrozumieć możliwe ataki, które możemy przeprowadzić przeciwko różnemu oprogramowaniu obsługującemu ESI, w zależności od wspieranej funkcjonalności:
Includes: Obsługuje dyrektywę <esi:includes>
Vars: Obsługuje dyrektywę <esi:vars>
. Przydatne do omijania filtrów XSS
Cookie: Ciasteczka dokumentu są dostępne dla silnika ESI
Upstream Headers Required: Aplikacje zastępcze nie przetworzą instrukcji ESI, chyba że aplikacja upstream dostarczy nagłówki
Host Allowlist: W tym przypadku, włączenia ESI są możliwe tylko z dozwolonych hostów serwerowych, co sprawia, że SSRF, na przykład, jest możliwe tylko przeciwko tym hostom
Oprogramowanie
Includes
Vars
Ciasteczka
Upstream Headers Required
Host Whitelist
Squid3
Tak
Tak
Tak
Tak
Nie
Varnish Cache
Tak
Nie
Nie
Tak
Tak
Fastly
Tak
Nie
Nie
Nie
Tak
Akamai ESI Test Server (ETS)
Tak
Tak
Tak
Nie
Nie
NodeJS esi
Tak
Tak
Tak
Nie
Nie
NodeJS nodesi
Tak
Nie
Nie
Nie
Opcjonalnie
Następująca dyrektywa ESI załaduje dowolny plik wewnątrz odpowiedzi serwera
Zdalna kradzież ciasteczka
Kradnij cookie HTTP_ONLY za pomocą XSS, odzwierciedlając je w odpowiedzi:
Nie myl tego z "Lokalnym włączeniem pliku":
Poniższe doda nagłówek Location
do odpowiedzi
Dodaj nagłówek w wymuszonej prośbie
Dodaj nagłówek w odpowiedzi (przydatne do obejścia "Content-Type: text/json" w odpowiedzi z XSS)
To wyśle informacje debugowe zawarte w odpowiedzi:
Możliwe jest użycie składni eXtensible Stylesheet Language Transformations (XSLT)
w ESI, po prostu wskazując wartość parametru dca
jako xslt
. Może to pozwolić na nadużycie XSLT do stworzenia i wykorzystania podatności na zewnętrzne encje XML (XXE):
Plik XSLT:
Sprawdź stronę XSLT:
XSLT Server Side Injection (Extensible Stylesheet Language Transformations)Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)