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.