From cc5296c716401bb53e6f3217db9f0612e17c3907 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 19 Aug 2025 21:11:53 +0000 Subject: [PATCH] Translated ['src/binary-exploitation/rop-return-oriented-programing/srop --- .../srop-arm64.md | 18 +++++++------- .../iframes-in-xss-and-csp.md | 24 +++++++++---------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/srop-arm64.md b/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/srop-arm64.md index 693b57274..4dc5abe27 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/srop-arm64.md +++ b/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/srop-arm64.md @@ -74,7 +74,7 @@ echo 0 | sudo tee /proc/sys/kernel/randomize_va_space # Disable ASLR ``` ## Εκμετάλλευση -Η εκμετάλλευση εκμεταλλεύεται το bof για να επιστρέψει στην κλήση του **`sigreturn`** και να προετοιμάσει τη στοίβα για να καλέσει το **`execve`** με έναν δείκτη προς το `/bin/sh`. +Η εκμετάλλευση εκμεταλλεύεται το bof για να επιστρέψει στην κλήση του **`sigreturn`** και να προετοιμάσει τη στοίβα για να καλέσει το **`execve`** με έναν δείκτη στο `/bin/sh`. ```python from pwn import * @@ -136,7 +136,7 @@ return 0;
-Επομένως, αν διαρρεύσει, είναι δυνατόν να **χρησιμοποιηθεί αυτή η διεύθυνση για πρόσβαση σε ένα `sigreturn`** αν το δυαδικό αρχείο δεν το φορτώνει: +Επομένως, αν διαρρεύσει, είναι δυνατόν να **χρησιμοποιηθεί αυτή η διεύθυνση για να αποκτήσετε πρόσβαση σε ένα `sigreturn`** αν το δυαδικό αρχείο δεν το φορτώνει: ```python from pwn import * @@ -165,13 +165,13 @@ payload += bytes(frame) p.sendline(payload) p.interactive() ``` -Για περισσότερες πληροφορίες σχετικά με το vdso, ελέγξτε: +Για περισσότερες πληροφορίες σχετικά με το vdso ελέγξτε: {{#ref}} ../ret2vdso.md {{#endref}} -Και για να παρακάμψετε τη διεύθυνση του `/bin/sh`, μπορείτε να δημιουργήσετε αρκετές μεταβλητές περιβάλλοντος που να δείχνουν σε αυτήν, για περισσότερες πληροφορίες: +Και για να παρακάμψετε τη διεύθυνση του `/bin/sh` μπορείτε να δημιουργήσετε αρκετές μεταβλητές περιβάλλοντος που να δείχνουν σε αυτήν, για περισσότερες πληροφορίες: {{#ref}} ../../common-binary-protections-and-bypasses/aslr/ @@ -189,13 +189,13 @@ python3 -m ROPGadget --binary /proc/$(pgrep srop)/mem --only "svc #0" 2>/dev/nul # With rp++ ≥ 1.0.9 (arm64 support) rp++ -f ./binary --unique -r | grep "mov\s\+x8, #0x8b" # 0x8b = __NR_rt_sigreturn ``` -Και τα δύο εργαλεία κατανοούν τις κωδικοποιήσεις **AArch64** και θα παραθέσουν υποψήφιες ακολουθίες `mov x8, 0x8b ; svc #0` που μπορούν να χρησιμοποιηθούν ως *SROP gadget*. +Και τα δύο εργαλεία κατανοούν **AArch64** κωδικοποιήσεις και θα παραθέσουν υποψήφιες ακολουθίες `mov x8, 0x8b ; svc #0` που μπορούν να χρησιμοποιηθούν ως *SROP gadget*. -> Σημείωση: Όταν οι δυαδικοί κώδικες είναι συμπιεσμένοι με **BTI**, η πρώτη εντολή κάθε έγκυρου στόχου έμμεσης κλάσης είναι `bti c`. Οι τραμπόλινες `sigreturn` που τοποθετούνται από τον συνδέτη περιλαμβάνουν ήδη την σωστή πλατφόρμα προσγείωσης BTI, έτσι ώστε το gadget να παραμένει χρησιμοποιήσιμο από μη προνομιούχο κώδικα. +> Σημείωση: Όταν οι δυαδικοί κώδικες είναι συμπιεσμένοι με **BTI**, η πρώτη εντολή κάθε έγκυρου στόχου έμμεσης κλάσης είναι `bti c`. Οι τραμπόλινες `sigreturn` που τοποθετούνται από τον σύνδεσμο περιλαμβάνουν ήδη την σωστή πλατφόρμα προσγείωσης BTI, έτσι ώστε το gadget να παραμένει χρησιμοποιήσιμο από μη προνομιούχο κώδικα. ## Σύνδεση SROP με ROP (pivot μέσω `mprotect`) -`rt_sigreturn` μας επιτρέπει να ελέγχουμε *όλους* τους γενικούς καταχωρητές και το `pstate`. Ένα κοινό μοτίβο σε x86 είναι: 1) χρησιμοποιήστε SROP για να καλέσετε `mprotect`, 2) κάντε pivot σε μια νέα εκτελέσιμη στοίβα που περιέχει shell-code. Η ακριβώς ίδια ιδέα λειτουργεί και σε ARM64: +`rt_sigreturn` μας επιτρέπει να ελέγχουμε *όλους* τους γενικούς καταχωρητές και το `pstate`. Ένα κοινό μοτίβο σε x86 είναι: 1) χρησιμοποιήστε SROP για να καλέσετε `mprotect`, 2) pivot σε μια νέα εκτελέσιμη στοίβα που περιέχει shell-code. Η ακριβώς ίδια ιδέα λειτουργεί και σε ARM64: ```python frame = SigreturnFrame() frame.x8 = constants.SYS_mprotect # 226 @@ -209,7 +209,7 @@ frame.pc = svc_call # will re-enter kernel ## Έλεγχος του πυρήνα, PAC & Shadow-Stacks -Το Linux 5.16 εισήγαγε αυστηρότερους ελέγχους των πλαισίων σήματος του χρήστη (commit `36f5a6c73096`). Ο πυρήνας τώρα ελέγχει: +Το Linux 5.16 εισήγαγε αυστηρότερο έλεγχο των πλαισίων σήματος του χρήστη (commit `36f5a6c73096`). Ο πυρήνας τώρα ελέγχει: * `uc_flags` πρέπει να περιέχει `UC_FP_XSTATE` όταν υπάρχει `extra_context`. * Η δεσμευμένη λέξη στη `struct rt_sigframe` πρέπει να είναι μηδέν. @@ -217,7 +217,7 @@ frame.pc = svc_call # will re-enter kernel `pwntools>=4.10` κατασκευάζει αυτόματα συμμορφούμενα πλαίσια, αλλά αν τα κατασκευάσετε χειροκίνητα, βεβαιωθείτε ότι έχετε μηδενίσει το *reserved* και παραλείψτε το αρχείο SVE εκτός αν το χρειάζεστε πραγματικά—διαφορετικά, το `rt_sigreturn` θα παραδώσει `SIGSEGV` αντί να επιστρέψει. -Αρχίζοντας με το mainstream Android 14 και το Fedora 38, το userland είναι μεταγλωττισμένο με **PAC** (*Pointer Authentication*) και **BTI** ενεργοποιημένα από προεπιλογή (`-mbranch-protection=standard`). Το *SROP* από μόνο του δεν επηρεάζεται επειδή ο πυρήνας αντικαθιστά το `PC` απευθείας από το κατασκευασμένο πλαίσιο, παρακάμπτοντας το αυθεντικοποιημένο LR που αποθηκεύεται στη στοίβα. Ωστόσο, οποιαδήποτε **επόμενη αλυσίδα ROP** που εκτελεί έμμεσες κλάσεις πρέπει να πηδήξει σε εντολές που είναι ενεργοποιημένες για BTI ή σε διευθύνσεις PACed. Να το έχετε υπόψη σας όταν επιλέγετε gadgets. +Αρχίζοντας με το mainstream Android 14 και το Fedora 38, το userland είναι μεταγλωττισμένο με **PAC** (*Pointer Authentication*) και **BTI** ενεργοποιημένα από προεπιλογή (`-mbranch-protection=standard`). Το *SROP* από μόνο του δεν επηρεάζεται επειδή ο πυρήνας αντικαθιστά το `PC` απευθείας από το κατασκευασμένο πλαίσιο, παρακάμπτοντας το αυθεντικοποιημένο LR που αποθηκεύεται στη στοίβα. Ωστόσο, οποιαδήποτε **επόμενη αλυσίδα ROP** που εκτελεί έμμεσες κλάσεις πρέπει να πηδήξει σε εντολές που είναι ενεργοποιημένες για BTI ή σε διευθύνσεις PACed. Κρατήστε το αυτό στο μυαλό σας όταν επιλέγετε gadgets. Οι Shadow-Call-Stacks που εισήχθησαν στο ARMv8.9 (και ήδη ενεργοποιημένες στο ChromeOS 1.27+) είναι μια μείωση σε επίπεδο μεταγλωττιστή και *δεν* παρεμβαίνουν στο SROP επειδή δεν εκτελούνται εντολές επιστροφής—η ροή ελέγχου μεταφέρεται από τον πυρήνα. diff --git a/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md b/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md index 20869223b..646b99389 100644 --- a/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md +++ b/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md @@ -54,7 +54,7 @@ alert(parent.secret) > Παρακαλώ, σημειώστε πώς στις παρακάτω παρακάμψεις η απάντηση στη σελίδα που είναι ενσωματωμένη σε iframe δεν περιέχει κανένα CSP header που να αποτρέπει την εκτέλεση JS. Η τιμή `self` του `script-src` δεν θα επιτρέψει την εκτέλεση του JS κώδικα χρησιμοποιώντας το πρωτόκολλο `data:` ή το χαρακτηριστικό `srcdoc`.\ -Ωστόσο, ακόμη και η τιμή `none` του CSP θα επιτρέψει την εκτέλεση των iframes που βάζουν μια διεύθυνση URL (ολοκληρωμένη ή απλώς τη διαδρομή) στο χαρακτηριστικό `src`.\ +Ωστόσο, ακόμη και η τιμή `none` του CSP θα επιτρέψει την εκτέλεση των iframes που βάζουν μια διεύθυνση URL (ολόκληρη ή απλώς τη διαδρομή) στο χαρακτηριστικό `src`.\ Επομένως, είναι δυνατόν να παρακαμφθεί το CSP μιας σελίδας με: ```html @@ -76,12 +76,12 @@ id="if4" src="data:text/html;charset=utf-8,%3Cscript%3Evar%20secret='if4%20secret!';alert(parent.secret)%3C%2Fscript%3E"> ``` -Σημειώστε ότι η **προηγούμενη CSP επιτρέπει μόνο την εκτέλεση του ενσωματωμένου script**.\ +Σημειώστε ότι η **προηγούμενη CSP επιτρέπει μόνο την εκτέλεση του inline script**.\ Ωστόσο, **μόνο τα scripts `if1` και `if2` θα εκτελούνται, αλλά μόνο το `if1` θα μπορεί να έχει πρόσβαση στο γονικό μυστικό**. ![](<../../images/image (372).png>) -Επομένως, είναι δυνατόν να **παρακαμφθεί μια CSP αν μπορείτε να ανεβάσετε ένα αρχείο JS στον διακομιστή και να το φορτώσετε μέσω iframe ακόμη και με `script-src 'none'`**. Αυτό μπορεί **πιθανώς να γίνει επίσης εκμεταλλευόμενοι ένα endpoint JSONP της ίδιας τοποθεσίας**. +Επομένως, είναι δυνατόν να **παρακαμφθεί μια CSP αν μπορείτε να ανεβάσετε ένα αρχείο JS στον διακομιστή και να το φορτώσετε μέσω iframe, ακόμη και με `script-src 'none'`**. Αυτό μπορεί **πιθανώς να γίνει επίσης εκμεταλλευόμενοι ένα endpoint JSONP της ίδιας τοποθεσίας**. Μπορείτε να το δοκιμάσετε με το παρακάτω σενάριο όπου ένα cookie κλέβεται ακόμη και με `script-src 'none'`. Απλώς εκτελέστε την εφαρμογή και αποκτήστε πρόσβαση σε αυτήν με τον περιηγητή σας: ```python @@ -107,7 +107,7 @@ app.run() Η ερευνητική κοινότητα συνεχίζει να ανακαλύπτει δημιουργικούς τρόπους κατάχρησης των iframes για να παρακάμψει περιοριστικές πολιτικές. Παρακάτω μπορείτε να βρείτε τις πιο αξιοσημείωτες τεχνικές που δημοσιεύθηκαν τα τελευταία χρόνια: -* **Dangling-markup / named-iframe data-exfiltration (PortSwigger 2023)** – Όταν μια εφαρμογή ανακλά HTML αλλά μια ισχυρή CSP μπλοκάρει την εκτέλεση σεναρίων, μπορείτε να διαρρεύσετε ευαίσθητους κωδικούς εισάγοντας ένα *dangling* `