diff --git a/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/srop-arm64.md b/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/srop-arm64.md index ae4acc822..d358eb767 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/srop-arm64.md +++ b/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/srop-arm64.md @@ -32,7 +32,7 @@ p = process(binary.path) p.send(bytes(frame)) p.interactive() ``` -## bof przykład +## bof example ### Kod ```c @@ -103,7 +103,7 @@ payload += bytes(frame) p.sendline(payload) p.interactive() ``` -## bof przykład bez sigreturn +## przykład bof bez sigreturn ### Kod ```c @@ -136,7 +136,7 @@ W sekcji **`vdso`** można znaleźć wywołanie **`sigreturn`** w przesunięciu
-Dlatego, jeśli zostanie wycieknięty, możliwe jest **użycie tego adresu do uzyskania dostępu do `sigreturn`**, jeśli binarka go nie ładuje: +Dlatego, jeśli zostanie ujawnione, możliwe jest **użycie tego adresu do uzyskania dostępu do `sigreturn`**, jeśli binarka go nie ładuje: ```python from pwn import * @@ -189,9 +189,9 @@ python3 -m ROPGadget --binary /proc/$(pgrep srop)/mem --only "svc #0" 2>/dev/nul # With rp++ ≥ 1.0.9 (arm64 support) rp++ -f ./binary --unique -r | grep "mov\s\+x8, #0x8b" # 0x8b = __NR_rt_sigreturn ``` -Oba narzędzia rozumieją **AArch64** kodowania i będą wyświetlać kandydatów na sekwencje `mov x8, 0x8b ; svc #0`, które mogą być użyte jako *gadget SROP*. +Oba narzędzia rozumieją **AArch64** encodings i będą wyświetlać kandydatów na sekwencje `mov x8, 0x8b ; svc #0`, które mogą być użyte jako *SROP gadget*. -> Uwaga: Gdy binaria są kompilowane z **BTI**, pierwsza instrukcja każdego ważnego celu pośredniego skoku to `bti c`. Trampoliny `sigreturn` umieszczone przez linker już zawierają poprawny punkt lądowania BTI, więc gadget pozostaje użyteczny z kodu nieuprzywilejowanego. +> Uwaga: Gdy binaria są kompilowane z **BTI**, pierwsza instrukcja każdego ważnego celu pośredniego jest `bti c`. Trampoliny `sigreturn` umieszczone przez linker już zawierają poprawny BTI landing pad, więc gadget pozostaje użyteczny z kodu nieuprzywilejowanego. ## Łączenie SROP z ROP (pivot przez `mprotect`) @@ -215,7 +215,7 @@ Linux 5.16 wprowadził surowszą walidację ramek sygnałów przestrzeni użytko * Zarezerwowane słowo w `struct rt_sigframe` musi być zerowe. * Każdy wskaźnik w rekordzie *extra_context* jest wyrównany i wskazuje wewnątrz przestrzeni adresowej użytkownika. -`pwntools>=4.10` automatycznie tworzy zgodne ramki, ale jeśli budujesz je ręcznie, upewnij się, że zainicjalizujesz *reserved* na zero i pomiń rekord SVE, chyba że naprawdę go potrzebujesz—w przeciwnym razie `rt_sigreturn` dostarczy `SIGSEGV` zamiast zwracać. +`pwntools>=4.10` automatycznie tworzy zgodne ramki, ale jeśli budujesz je ręcznie, upewnij się, że zainicjalizujesz *reserved* na zero i pomiń rekord SVE, chyba że naprawdę go potrzebujesz—w przeciwnym razie `rt_sigreturn` zwróci `SIGSEGV` zamiast powrotu. Zaczynając od mainstreamowego Androida 14 i Fedory 38, przestrzeń użytkownika jest kompilowana z włączonym **PAC** (*Pointer Authentication*) i **BTI** domyślnie (`-mbranch-protection=standard`). *SROP* sam w sobie nie jest dotknięty, ponieważ jądro bezpośrednio nadpisuje `PC` z utworzonej ramki, omijając uwierzytelniony LR zapisany na stosie; jednak każdy **kolejny łańcuch ROP**, który wykonuje pośrednie skoki, musi skakać do instrukcji włączających BTI lub adresów PAC. Pamiętaj o tym przy wyborze gadżetów. diff --git a/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md b/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md index bc308888e..bde75a774 100644 --- a/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md +++ b/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md @@ -45,7 +45,7 @@ var secret = "child secret" alert(parent.secret) ``` -Jeśli uzyskasz dostęp do poprzedniego html za pomocą serwera http (takiego jak `python3 -m http.server`), zauważysz, że wszystkie skrypty będą wykonywane (ponieważ nie ma CSP, które by temu zapobiegało). **Rodzic nie będzie mógł uzyskać dostępu do zmiennej `secret` wewnątrz żadnego iframe** i **tylko iframes if2 i if3 (które są uważane za tej samej witryny) mogą uzyskać dostęp do sekretu** w oryginalnym oknie.\ +Jeśli uzyskasz dostęp do poprzedniego html za pomocą serwera http (takiego jak `python3 -m http.server`), zauważysz, że wszystkie skrypty będą wykonywane (ponieważ nie ma CSP, które by temu zapobiegało). **Rodzic nie będzie mógł uzyskać dostępu do zmiennej `secret` wewnątrz żadnego iframe** i **tylko iframes if2 i if3 (które są uważane za tej samej witryny) mogą uzyskać dostęp do secret** w oryginalnym oknie.\ Zauważ, że if4 jest uważany za mający `null` origin. ### Iframes z CSP @@ -53,8 +53,8 @@ Zauważ, że if4 jest uważany za mający `null` origin. > [!TIP] > Proszę zauważyć, że w poniższych obejściach odpowiedź na stronę w iframe nie zawiera żadnego nagłówka CSP, który zapobiega wykonaniu JS. -Wartość `self` dla `script-src` nie pozwoli na wykonanie kodu JS przy użyciu protokołu `data:` lub atrybutu `srcdoc`.\ -Jednak nawet wartość `none` CSP pozwoli na wykonanie iframe'ów, które umieszczają adres URL (pełny lub tylko ścieżkę) w atrybucie `src`.\ +Wartość `self` dla `script-src` nie pozwoli na wykonanie kodu JS używając protokołu `data:` lub atrybutu `srcdoc`.\ +Jednak nawet wartość `none` CSP pozwoli na wykonanie iframe, które umieszczają URL (pełny lub tylko ścieżkę) w atrybucie `src`.\ Dlatego możliwe jest obejście CSP strony za pomocą: ```html @@ -77,7 +77,7 @@ src="data:text/html;charset=utf-8,%3Cscript%3Evar%20secret='if4%20secret!';alert ``` Zauważ, że **poprzedni CSP zezwala tylko na wykonanie skryptu inline**.\ -Jednak **wykonane zostaną tylko skrypty `if1` i `if2`, ale tylko `if1` będzie miał dostęp do tajemnicy rodzica**. +Jednakże, **tylko skrypty `if1` i `if2` będą wykonywane, ale tylko `if1` będzie miał dostęp do tajemnicy rodzica**. ![](<../../images/image (372).png>) @@ -107,7 +107,7 @@ app.run() Społeczność badawcza nadal odkrywa kreatywne sposoby wykorzystywania iframe do pokonywania restrykcyjnych polityk. Poniżej znajdują się najbardziej znaczące techniki opublikowane w ciągu ostatnich kilku lat: -* **Dangling-markup / named-iframe data-exfiltration (PortSwigger 2023)** – Gdy aplikacja odzwierciedla HTML, ale silny CSP blokuje wykonanie skryptów, można nadal wyciekować wrażliwe tokeny, wstrzykując *dangling* ` @@ -177,7 +177,7 @@ Wartość atrybutu może być pozostawiona pusta (`sandbox=""`), aby zastosować Jak wyjaśniono w [tym artykule](https://blog.slonser.info/posts/make-self-xss-great-again/), flaga `credentialless` w iframe jest używana do ładowania strony wewnątrz iframe bez wysyłania poświadczeń w żądaniu, zachowując jednocześnie politykę tego samego pochodzenia (SOP) ładowanej strony w iframe. -Od **Chrome 110 (luty 2023) funkcja jest włączona domyślnie** i specyfikacja jest standaryzowana w przeglądarkach pod nazwą *anonymous iframe*. MDN opisuje to jako: „mechanizm do ładowania iframe'ów stron trzecich w nowej, efemerycznej partycji pamięci, aby żadne pliki cookie, localStorage ani IndexedDB nie były dzielone z rzeczywistym pochodzeniem”. Konsekwencje dla atakujących i obrońców: +Od **Chrome 110 (luty 2023) funkcja jest włączona domyślnie** i specyfikacja jest standaryzowana w przeglądarkach pod nazwą *anonymous iframe*. MDN opisuje to jako: „mechanizm do ładowania iframe'ów zewnętrznych w nowej, efemerycznej partycji pamięci, aby żadne ciasteczka, localStorage ani IndexedDB nie były dzielone z prawdziwym pochodzeniem”. Konsekwencje dla atakujących i obrońców: * Skrypty w różnych iframe'ach bez poświadczeń **wciąż dzielą to samo pochodzenie na najwyższym poziomie** i mogą swobodnie wchodzić w interakcje za pośrednictwem DOM, co czyni ataki multi-iframe self-XSS wykonalnymi (zobacz PoC poniżej). * Ponieważ sieć jest **pozbawiona poświadczeń**, każde żądanie wewnątrz iframe działa efektywnie jako sesja nieautoryzowana – punkty końcowe chronione przed CSRF zazwyczaj zawodzą, ale publiczne strony, które można wyciekować za pośrednictwem DOM, wciąż są w zasięgu.