<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
Pridružite se [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) serveru kako biste komunicirali sa iskusnim hakerima i lovcima na bagove!
Tehnika napada poznata kao XPath ubacivanje se koristi kako bi se iskoristile aplikacije koje formiraju XPath (XML Path Language) upite na osnovu korisničkog unosa radi pretrage ili navigacije XML dokumenata.
- **bookstore**: Selektovani su svi čvorovi sa imenom "bookstore".
- **/bookstore**: Selektovan je korenski element bookstore. Napomena: apsolutna putanja do elementa se predstavlja putanjom koja počinje sa kosom crtom (/).
- **bookstore/book**: Selektovani su svi elementi book koji su deca bookstore.
- **//book**: Selektovani su svi elementi book u dokumentu, bez obzira na njihovu lokaciju.
- **bookstore//book**: Selektovani su svi elementi book koji su potomci elementa bookstore, bez obzira na njihovu poziciju ispod elementa bookstore.
- **//@lang**: Selektovani su svi atributi sa imenom lang.
- **/bookstore/book[1]**: Selektovan je prvi element book koji je dete elementa bookstore. Rešenje za verzije IE 5 do 9, koje indeksiraju prvi čvor kao [0], je postavljanje SelectionLanguage na XPath putem JavaScript-a.
- **/bookstore/book[last()]**: Selektovan je poslednji element book koji je dete elementa bookstore.
- **/bookstore/book[last()-1]**: Selektovan je predposlednji element book koji je dete elementa bookstore.
XPath Injection je tehnika koja se koristi za napad na aplikacije koje koriste XPath za pretragu i filtriranje podataka. Ova tehnika omogućava napadaču da izvrši proizvoljan XPath upit, što može rezultirati otkrivanjem osjetljivih informacija ili čak izvršavanjem udaljenog koda.
Da biste pristupili informacijama putem XPath Injection, prvo morate identificirati ranjivu točku unosa. To može biti bilo koji unos koji se koristi u XPath upitu, poput parametara URL-a ili korisničkog unosa. Nakon što identificirate ranjivu točku unosa, možete iskoristiti je kako biste izvršili proizvoljan XPath upit.
Jedan od načina za izvršavanje XPath Injection napada je ubacivanje zlonamjernog XPath izraza u ranjivu točku unosa. Na primjer, ako je ranjiva točka unosa korisnički unos koji se koristi u XPath upitu, možete ubaciti zlonamjerni XPath izraz koji će vratiti osjetljive informacije. Na primjer, ako je XPath upit `//user[name='admin']`, možete ubaciti zlonamjerni izraz `//user[name='admin' or 1=1]` kako biste dobili sve korisničke zapise umjesto samo admina.
Osim toga, možete koristiti funkcije poput `substring()` i `concat()` kako biste izvršili dodatne manipulacije nad podacima. Na primjer, možete koristiti `substring()` funkciju kako biste dobili samo određeni dio podataka ili `concat()` funkciju kako biste spojili više vrijednosti.
Važno je napomenuti da je XPath Injection ozbiljan sigurnosni propust i treba ga odmah popraviti. Da biste spriječili XPath Injection napade, preporučuje se korištenje parametriziranih upita ili sanitizacija unosa kako bi se spriječilo izvršavanje proizvoljnog XPath koda.
XPath Injection napad može se koristiti za identifikaciju i krađu šeme web aplikacije. Kroz ovaj napad, haker može dobiti pristup osjetljivim informacijama o strukturi baze podataka, kao što su tablice, stupci i njihovi nazivi.
Da biste izvršili ovaj napad, prvo morate pronaći ranjivu točku unosa koja koristi XPath upite za dohvaćanje podataka iz baze podataka. Zatim možete iskoristiti ovu ranjivost ubacivanjem zlonamjernog XPath izraza kako biste otkrili šemu baze podataka.
Jedan od načina za identifikaciju šeme je korištenje funkcije `extractvalue()`. Ova funkcija omogućuje izvršavanje XPath upita i dohvaćanje vrijednosti iz rezultata. Možete koristiti ovu funkciju za dohvaćanje naziva tablica i stupaca iz baze podataka.
Primjer zlonamjernog XPath izraza za izvršavanje ovog napada je sljedeći:
```plaintext
' or extractvalue(0x0a,concat(0x0a,(select table_name from information_schema.tables limit 1 offset 0))) or '
```
Ovaj izraz će pokušati dohvatiti naziv prve tablice iz `information_schema.tables` tablice. Ako je napad uspješan, dobit ćete odgovor koji sadrži naziv tablice.
Kada dobijete nazive tablica, možete nastaviti s dohvaćanjem naziva stupaca iz odabrane tablice. Primjer zlonamjernog XPath izraza za dohvaćanje naziva stupaca je sljedeći:
```plaintext
' or extractvalue(0x0a,concat(0x0a,(select column_name from information_schema.columns where table_name='ime_tablice' limit 1 offset 0))) or '
Zamijenite `ime_tablice` s nazivom tablice iz koje želite dohvatiti nazive stupaca. Ako je napad uspješan, dobit ćete odgovor koji sadrži naziv stupca.
Null ubrizgavanje je tehnika koja se koristi za iskorišćavanje grešaka u implementaciji XPath upita kako bi se dobili neželjeni rezultati ili otkrile osetljive informacije. Ova tehnika se zasniva na umetanju NULL bajtova u XPath izraz kako bi se prekinula interpretacija upita i izvršile neželjene operacije.
Da biste iskoristili null ubrizgavanje, prvo morate identifikovati tačku ubrizgavanja u aplikaciji. Ovo može biti mesto gde se korisnički unos koristi za formiranje XPath upita. Zatim, umetnite NULL bajtove u unos kako biste prekinuli izvršavanje upita i izvršili željene operacije.
Na primer, ako imate XPath upit koji izgleda ovako:
```xml
//user[name/text()='admin' and password/text()='password']
Možete iskoristiti null ubrizgavanje tako što ćete umetnuti NULL bajtove između operatora `and` kako biste prekinuli izvršavanje uslova i dobili sve korisničke naloge:
//user[name/text()='admin' and password/text()='password' or 'x'='x']
```
Null ubrizgavanje može biti veoma moćna tehnika koja omogućava izvršavanje neovlašćenih operacija i otkrivanje osetljivih informacija. Međutim, treba biti oprezan prilikom korišćenja ove tehnike, jer može dovesti do ozbiljnih posledica kao što su otkrivanje lozinki ili izvršavanje neovlašćenih komandi.
```
Username: ' or 1]%00
```
### **Dvostruki ILI u korisničkom imenu ili u lozinci** (važi samo sa jednim ranjivim poljem)
XPath injection vulnerabilities can be exploited to extract sensitive information from a web application. One common technique is to use blind exploitation, where the attacker can infer information by making logical comparisons.
To determine the length of a specific value, the attacker can use the `string-length()` function in XPath. By injecting a payload that includes this function, the attacker can retrieve the length of the desired value.
For example, to extract the length of the username, the attacker can inject the following payload:
```plaintext
' or string-length(//user/username/text())=X or '
```
The `X` in the payload should be replaced with a number to perform the comparison. If the length of the username is equal to the specified number, the application will return a valid response. Otherwise, it will return an error or no response at all.
To extract the value itself, the attacker can use a similar technique. By injecting a payload that includes a substring comparison, the attacker can retrieve the characters of the desired value one by one.
For example, to extract the username character by character, the attacker can inject the following payload:
```plaintext
' or substring(//user/username/text(),X,1)='Y' or '
```
The `X` in the payload should be replaced with the position of the character, starting from 1. The `Y` should be replaced with the desired character to compare.
By repeating this process for each character, the attacker can gradually extract the entire value.
It is important to note that blind exploitation can be a time-consuming process, as it requires making multiple requests and performing comparisons. However, it can be an effective technique for extracting sensitive information when other methods are not available.
Ovde je primer Python koda. Ovaj kod koristi `requests` biblioteku za slanje HTTP zahteva. Funkcija `get_user` prima korisničko ime kao argument i pravi URL zahteva na osnovu tog korisničkog imena. Zatim šalje GET zahtev na taj URL i vraća odgovor kao tekst. Glavna funkcija `main` traži od korisnika da unese korisničko ime, a zatim poziva `get_user` funkciju i prikazuje dobijene podatke na ekranu.
XPath Injection može se koristiti za čitanje sadržaja datoteke na ciljnom serveru. Da biste to postigli, morate pronaći ranjivu točku unosa koja koristi XPath upite za dohvaćanje podataka iz XML datoteke.
Da biste pročitali sadržaj datoteke, možete koristiti funkciju `document()` u XPath upitu. Ova funkcija omogućuje vam pristup drugim datotekama na serveru.
Primjer upita za čitanje datoteke `/etc/passwd` na Linux sustavu:
```plaintext
' or 1=1 or name()='username' or document('/etc/passwd') or '
```
Ovaj upit će vratiti sadržaj datoteke `/etc/passwd` kao rezultat XPath upita.
Važno je napomenuti da je uspješno čitanje datoteke ovisno o pravima pristupa korisnika koji izvršava XPath upit.
Out-of-Band (OOB) eksploatacija je tehnika koja se koristi za iskorišćavanje XPath Injection ranjivosti. Ova tehnika omogućava napadaču da izvrši udaljene zahteve i primi odgovore izvan ciljne aplikacije.
### OOB Kanali
OOB kanali su načini komunikacije između napadača i njegovog kontrolnog servera. Ovi kanali se koriste za slanje podataka iz ciljne aplikacije ka napadaču. Evo nekoliko OOB kanala koji se mogu koristiti:
- DNS kanal: Napadač može koristiti DNS zahtev da bi slao podatke iz ciljne aplikacije ka kontrolnom serveru. Na primer, napadač može ubaciti payload u XPath izraz koji će izazvati DNS zahtev ka kontrolnom serveru sa podacima koje želi da prenese.
- HTTP kanal: Napadač može koristiti HTTP zahtev da bi slao podatke iz ciljne aplikacije ka kontrolnom serveru. Na primer, napadač može ubaciti payload u XPath izraz koji će izazvati HTTP zahtev ka kontrolnom serveru sa podacima koje želi da prenese.
- SMTP kanal: Napadač može koristiti SMTP protokol da bi slao podatke iz ciljne aplikacije ka kontrolnom serveru. Na primer, napadač može ubaciti payload u XPath izraz koji će izazvati slanje emaila sa podacima koje želi da prenese.
### OOB Eksploatacija u praksi
Da bi se izvršila OOB eksploatacija, napadač mora prvo pronaći ranjivu tačku ubrizgavanja XPath-a u ciljnoj aplikaciji. Nakon toga, napadač može konstruisati payload koji će izazvati OOB kanal i preneti podatke ka kontrolnom serveru.
Evo nekoliko koraka koje napadač može preduzeti da bi izvršio OOB eksploataciju:
1. Identifikacija ranjive tačke ubrizgavanja XPath-a u ciljnoj aplikaciji.
2. Konstrukcija payloada koji će izazvati OOB kanal i preneti podatke ka kontrolnom serveru.
3. Slanje payloada ka ciljnoj aplikaciji i praćenje OOB kanala za primanje podataka.
4. Analiza primljenih podataka i izvršavanje odgovarajućih akcija.
Važno je napomenuti da OOB eksploatacija može biti složena i zahteva dobro razumevanje XPath Injection ranjivosti i OOB kanala. Napadač mora biti pažljiv prilikom konstrukcije payloada i praćenja OOB kanala kako bi uspešno izvršio eksploataciju.
Pridružite se [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) serveru kako biste komunicirali sa iskusnim hakerima i lovcima na bagove!
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Ako želite da vidite **oglašavanje vaše kompanije u HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podelite svoje trikove hakovanja slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.