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 rozszerzeniami .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 wewnątrz treści z 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
Wymagane nagłówki upstream: Aplikacje zastępcze nie przetworzą instrukcji ESI, chyba że aplikacja upstream dostarczy nagłówki
Lista dozwolonych hostów: W tym przypadku włączenia ESI są możliwe tylko z dozwolonych hostów serwera, co sprawia, że SSRF, na przykład, jest możliwe tylko przeciwko tym hostom
Poniższa dyrektywa ESI załadowuje 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:
Poprzez określenie wartości xslt
dla parametru dca, możliwe jest dołączenie eXtensible Stylesheet Language Transformations (XSLT)
opartego na ESI. Dołączenie powoduje, że HTTP surrogate pobiera pliki XML i XSLT, przy czym ten ostatni filtruje pierwszy. Takie pliki XML są podatne na ataki XML External Entity (XXE), umożliwiając atakującym przeprowadzenie ataków SSRF. Jednak użyteczność tego podejścia jest ograniczona, ponieważ ESI już działa jako wektor SSRF. Z powodu braku wsparcia w podstawowej bibliotece Xalan, zewnętrzne DTD nie są przetwarzane, co uniemożliwia ekstrakcję lokalnych plików.
Plik XSLT:
Check the XSLT page:
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)
Oprogramowanie
Includes
Vars
Ciasteczka
Wymagane nagłówki upstream
Lista dozwolonych hostów
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