30 Ocak 2015 Cuma

Code Execution Nedir ( PHP Örnek )





Code Execution : ( Komut çalıştırma ) Zaafiyetini bünyesinde barındıran yazılımın çalıştıgı sistem üzerindeki herhangi bir kullanıcı yada yöneticinin erişim bilgilerine sahip olmadan, sistem üzerinde komut çalıştırmamıza olanak sağlayan kritik seviyedeki güvenlik açıkları arasında listenin başında gelen güvenlik zaafiyeti türüdür. Code Execution zaafiyeti, komut çalıştırma fonksiyonları içerisine kullanıcılardan veri alan degişkenlerin filtrelenmeden dahil edilmesinden kaynaklanmaktadır.



Aksiyon :)

Hedefimde olan bir sitenin sunucusuna girmek için ön analizimlerim sonrasında elde ettigim  bilgiler dogrultusunda hedef sitemin üzerinde içerik yönetim sistemi wordpressin kurulu oldugu yerlerin listesini çıkartıp pentest aracı metasploit ile yaptıgım kaba kuvvet saldırısı sonucunda subdomainlerden birinin yönetici bilgilerini kırdım, yönetim panelinden sunucuya r57shell yükledikten sonra sunucu içerisindeki siteleri kontrol ettim lakin hedefimde olan site ile subdomainler ayrı sunuculardaydı, subdomain sunucusundaki sitelerde kurulu olan yazılımları içeriden incelerden reklam sayımları yapmak için kullanılan bir yazılımın  hedefimde olanana siteye ( www.site.com/reklamsayim/ ) gibi kuruldugunu farkettim ve o reklam sayım yazılımını bilgisayarıma indirerek o yazılımda kod analizi yaptım sonuç olarak 1 adet local file inc. 2 adet sql injection ve 1 adet code execute zaafiyeti tespit ettim, ilk olarak code execute zaafiyeti üzerinden hedef siteye girmeye çalıştım ve başarılı oldum. Bu yazımızda hedef sitemin sunucusuna girmekte kullandıgım zaafiyetin oluşmasına sebeb olan noktaları inceleyecegiz.




İşimize dönelim :)




 


Üst tarafta kutucuk içerisinde paylaştıgım php kodları, code execute zaafiyetine sebeb olan ilgili kodlardır. PHP programlama dili ile yazılan scriptlerde komut çalıştırmak için kullanılan bir kaç fonksiyon system(), shell_exec(), exec(), passthru() v.s dir.

Paylaştıgım php kodlarını inceledigimizde kullanıcıdan veri alan ( $referer, $server, $url, $adsname ) isimli  4 adet  degişkenin oldugunu ve bu 4 adet degişkenden ( $referer, $url, $adsname ) isimli 3 degişkenin  tarih işemleri için $logentry isimli degişkene, $logentry degişkeninde system() fonksiyonu içerisine herhangi bir filtre uygulanmadan log.log isimli dosyaya kullanıcıdan gelen verilerin yazdırılması için tanımlandıgını görüyoruz.

Dört degişkenin yaptıgı işlemler.

Kullanıcıdan referans bilgisi alınıyor.
$referer = $_SERVER["HTTP_REFERER"];

Kullanıcının erişim sağladıgı site adresi alınıyor.
$server = $_SERVER["SERVER_ADDR"];

Kullanıcının erişim urlsi alınıyor.
$url = $_REQUEST["url"];

Tıklama yaptıgı reklam türünün adını alıyor.
$adsname = $_REQUEST["adsname"];


$referer, $url, $adsname isimli degişkenlerden gelen kullanıcı isteklerinin tarih işlemleri burada işleniyor.
$logentry = time().";".date("Ymd:H:i:s").";".$adsname.";".$url.";".$referer;

( CAN ALICI NOKTA ) Kullanıcıdan gelen verilerin tarih işlemleri için tanımlanmış olan $logentry degişkeni herhangi bir filtreleme yapılmadan system() isimli komut çalıştırma fonksiyonumuz içerisinde işleme alınıyor ve kullanıcının yaptıgı tüm istemler log.log isimli dosyaya yazdırılıyor.
system("echo '$logentry' >> ../log/log.log");

www.site.com/dizin/dosya.php?url=[zararlı kod]&adsname=[zararlı kod]
Sunuculara gönderdigimiz referrer bilgilerimize müdahale edebileceginiz tamperdata, hackbar gibi yazılımlar ile referrer alanından yada direkt adres çubugunda [zararlı kod]  yazan kısımlarda '|set&' komutunu çalıştırdıktan sonra bu komutun çıktısı log.log isimli dosya içerisine yazılacaktır.



23 Ocak 2015 Cuma

Local File Inclusion Kullanımı.




Daha önce Local File Inclusion Nedir başlıklı yazımda local file inclusion açıgının kısaca tanımını yapmıştım, şimdi ise bu konuya biraz daha geniş açıdan bakacagız. Günümüzde dahi bir çok hazır scriptlerde ve dünyaca ünlü, binlerce sitenin altyapısını kullandıgı wordpress, joomla  gibi popüler  içerik yönetim sistemlerinin modullerinde dahi bu zaafiyete rastgelmek mümkün.

Local file inclusion zaafiyetini oluşturan 4 önemli php fonksiyonu bulunmaktadır.

require();
require_once();
include_once();
include();

$_POST, $_REQUEST, $_GET gibi kullanıcıdan veri alıp, verileri degişkenin tanımlandıgı fonksiyonlar üzerinde direk çalıştırmak bu tür zaafiyetlerin oluşmasına sebeb olmaktadır.


Local file inclusion zaafiyetini örnekleyen bir takım kodlar.




 Kullanımı :  http://www.zaafiyeti-bunyesinde-barindiran-site.com/kodlarin-oldugu-dosya.php?parametre=../../../../../../../../../../etc/passwd

Örnek kullanımda "../"  olarak kullandıgım kısım bir dizin altı anlamına gelmektedir onada örnek verecek olursam.

( Cpanel ) kontrol paneli kullanan sitelerin barındıgı sunucudaki script dosyalarının yüklü oldugu dizin /home/kullanici/public_html/ , Zaafiyeti bünyesinde barındıran sitede zaafiyetli dosyanın anadizinde yani public_html içinde oldugunu varsayarsak bizim alt dizinlere ulaşabilmemiz için 3 defa ../../../ yazdıktan sonra 3. ../ sonra sonunada okumak istedigimiz dosyayı yazmalıyız, Linux sunucularda /etc dizininde bulunan kullanıcı bilgilerinin içerisinde oldugu passwd dosyasını okumak için.

 http://www.zaafiyeti-bunyesinde-barindiran-site.com/kodlarin-oldugu-dosya.php?parametre=../../../etc/passwd gibi bir yol izlemeliyiz.


İlerleyen günlerde  bu yazımı güncelleyerek bu konuyu devam ettirecegim.