Selam arkadaşlar. Bu başlık altında “Hacker Web Exploitation Uncovered” isimli kitaptan öğrendiğim web hacking tekniklerini sizlerle paylaşmayı düşünüyorum. Burada anlatacağım konuları anlayabilmeniz için temel düzeyde php bilgisine ve scriptleri kendi bilgisayarınızda test edebilmeniz amacıyla bir webserver’a ihtiyaç duyacaksınız. Ben kendi bilgisayarımda açık kaynak kodlu “Web-Developer Controller“ isimli programın 0.999’uncu beta versiyonunu kullanıyorum. Programın boyutu 40MB civarı. İçinde apache, mySQL ve php ile birlikte geliyor.
Programı indirme adresi : http://www.devside.net/server/webdeveloper
Kurulumu yaptıktan sonra programın masaüstündeki simgesine çift tıklatın. Apache2 ve MySQL servislerinin yanında “running” yazıyor olmasına dikkat edin. Eğer “stopped” yazıyorsa “Start Service” butonuna tıklayıp servisleri çalışır hale getirin. Daha sonra menüden “Information” seçeneğini seçip localhost’a tıklayın. Eğer “Index of” başlıklı bir sayfa ile karşılaşıyorsanız herşey yolunda demektir. Bu sayfa server’in default dizini olan c:wwwwebroot klasörünün içeriğini gösterir. Bu klasörü açın ve “exploitation” isimli yeni bir klasör oluşturun. Bütün çalışmalarımız bu klasörün içinde bulunacak. Evet lafı uzatmadan birinci konumuza geçebiliriz.
Web Exploitation Ders 1 – Üst Dizindeki Dosyaların İçeriğini Görme
Notepad’ı açın ve aşağıdaki php kodunu yapıştırın.
Kod:
<? if(empty($HTTP_GET_VARS["id"])) //id diye bir şey gönderilmemişse form oluştur. { echo " <form> enter id (integer)<input type=text name=id> <input type=submit> </form> "; exit; }; $id = $HTTP_GET_VARS["id"]; //id gönderilmişse buradan devam et if(file_exists("data/".$id.".txt")) //böyle bir dosya var mı? { $f=fopen("data/".$id.".txt", "r"); //varsa okumak için aç $s=fread($f, 1024); echo $s; //içeriğini göster fclose($f); } else echo "records not found"; //yoksa bu mesajı göster ?>
Dosyayı c:wwwwebrootexploitation içine “1.php” olarak kaydedin. Daha sonra tarayıcıyı açıp http://localhost/exploitation/1.php‘e gidin. Gördüğünüz gibi bir textbox ve düğme.
İlk if kontrolünde “id” isimli form bilgisinin gönderilip gönderilmediği kontrol ediliyor. Böyle bir bilgi gönderilmemişse (empy fonksiyonu true gönderiyorsa) bir form oluşturuluyor ve geri kalan kod işleme konulmuyor (exit). Bu kontrolü yapmamızın nedeni sayfanın kendi kendine query göndermesi dolayısıyladır. Yani form ve script işlemleri için iki ayrı dosya kullanmak yerine olayı tek sayfada hallediyoruz.
Textbox içine 1 girin ve düğmeye basın. “records not found” gibi bir mesajla karşılaşacaksınız. Burada bizim için önemli olan kısım adres satırındaki url’dir. http://localhost/exploitation/1.php?id=1, id= den sonra bizim bir önceki sayfada girmiş olduğumuz bilgi görülmektedir. 2 yazarsan id=2, a yazarsan id=a görürsün. ? gibi bir şey girersen id=%3F görülür. Burada % kısmından sonraki ? karakterinin 16 bitlik Unicode kodudur. Niçin ? değil de %3F görüldü. Çünkü ?, /, &, =, : gibi karakterler url tanımlamada kullanılır. Bunlar query olarak gönderilirken karışıklık olmaması için % tanımlayıcısıyla beraber unicode kodu verilir.
Şimdi c:wwwwebrootexploitation dizinimize “test.txt” isimli bir dosya oluşturup içine birşeyler yazın. (mesela asdasd)
Adres satırına http://localhost/exploitation/1.php?id=..%2Ftestyazıp git’e tıklayın. Test.txt isimli dosyanın içeriğini göreceksiniz. Burada scriptte belirtilen data dizininin bir üstüne girmek için sorgulama, textbox içinde ../test tümcesi adres satırından ise ..%2Ftest şeklinde yapılabilir. %2F / karakterinin unicode kodudur.
Dikkat edilmesi gereken bir noktada test.txt yerine test kelimesi kullanılmıştır. Bunun sebebi php script’inde zaten açılacak dosyanın sonuna .txt uzantısı eklenecek olmasıdır.