PHP ile yazılan scriptlere kullanım kısıtlaması yapmak istenildiğinde genelde hep aynı yöntemler kullanılır.
Bunlar 2 aşamadan oluşmaktadır.
- Scriptin üzerinde çalıştığı domaini bulması.
- Karlılaştırma
Tabi ki kodlar ioncube, zend gibi araçlar ile şifrelenmiş olacak. Yoksa lisanslama olayının bir anlamı kalmaz.
Karşılaştırma işlemi birkaç türlü olabilir. Eğer script direk sahibinden alınmış ise, muhtemelen karşılaştırılırken 3. parti bir sunucuya istek gönderilmez.
İzin verilen domain olup olmadığı karşılaştırmasını direk script içerisinden yapar.
Bazı durumlarda ise uzaktaki script sahibine ait sunucudaki bir dosyaya istek gönderir ve lisans alan domain listesini çekerek oradan kontrol yapar.
PHP de scriptin üzerinde çalıştığı domain adresine aşağıdaki kodla erişilir.
$_SERVER['HTTP_HOST']
Domain adresi bulunduktan sonra izin verilen domain olup olmadığı hemen hemen aşağıdaki karlışaştırma cümleciği ile yapılır.
if($_SERVER['HTTP_HOST'] != $izinverilendomainadresi)
- Tabi bu işlemi yapan kodlar muhtemelen her sayfaya include edilmiş, config.php gibi fonksiyonların veya ana işlevlerin çalıştığı dosyada bulunmaktadır.
- $_SERVER dizisi readonly'dir(Aslında tam olarak değildir, aşağıda açıklayacağım).
Teorimiz $_SERVER dizisinden, scriptin üzerinde çalıştığı domaini saklayan veriyi değiştirmektir.
Yukarıda da dediğim gibi bu dizi readonly'dir. Ama birkaç akıl oyunu ile bu dizide değişiklik yapmamız mümkündür.
Dikkat edilecek bir nokta ise değiştireceğimiz verinin script içerisinde ne sıklıkta hangi yerlerde kullanıldığıdır.
Örneğin $_SERVER['HTTP_HOST'] sadece lisans kontrolünde kullanılan değişken ise bunu değiştirdiğimizde herhangi bir sorun oluşmaz.
Eğer bu değişken html etiketlerinde href attributelerinde kullanılan bir değişken ise biraz sıkıntı olabilir.
auto_prepend_file anahtarı ile php de herhangi bir dosya çalışmadan önce istediğimiz bir sayfayı include edebiliriz.
Bu sayede $_SERVER['HTTP_HOST'] değişkeninin içeriğini de değiştirebiliriz.
Hemen bir test yapalım.
- Scriptin lisanslidomain.com a lisanslı olduğunu biliyoruz ve biz bunu localhost da çalıştırmaya çalışalım.
- config.php yi bozmadan $_SERVER['HTTP_HOST'] değişkenini lisanslidomain.com yapmamız gerekiyor.
config.php (
zend veya ioncube ile şifrelenmiş olduğunu varsayıyoruz)
if($_SERVER['HTTP_HOST']!="lisanslidomain.com")
die("Scripti satın alın");
?>
index.php
$_SERVER['HTTP_HOST']="lisanslidomain.com";
include "config.php";
echo "scripti satın aldığınız için teşekkür ederiz";
?>
Yukarıdaki kodları çalıştırdığınızda
die("Scripti satın alın");
satırının işlediğini göreceksiniz. Çünkü config.php include edildiğinde
$_SERVER dizisinin elemanları tekrar atanır.
Şimdi de bir
.htaccess dosyası oluşturalım.
.htaccess
php_value auto_prepend_file c:\www\h4ckinger.php
h4ckinger.php
$_SERVER['HTTP_HOST']='lisanslidomain.com';
Kodları tekrar çalıştırdığımızda
echo "scripti satın aldığınız için teşekkür ederiz";
satırının işlediğini göreceksiniz. Çünkü h4ckinger.php, config php çağırıldıktan sonra otomatik olarak sayfaya dahil olmuştur.
Bu işlemleri htaccess yerine php.ini ile yapmanız da mümkündür.
Son olarak lisans kontrolü sadece HTTP_HOST elemanı ile yapılmamaktadır.
print_r($_SERVER) kodu ile $_SERVER değişkenlerinin elemanlarını görüp hayal gücünüzle istediğinizi yapabilirsiniz.
*Yukarıda:"Bazı durumlarda ise uzaktaki script sahibine ait sunucudaki bir dosyaya istek gönderir ve lisans alan domain listesini çekerek oradan kontrol yapar." demiştik.
Böyle bir durumda snifferlar aracılığı ile lisans sahibi domain listesine ulaşıp sonra $_SERVER dizisinde değişiklik yapabilirsiniz.
Buraya kadar anlattıklarım işin saldırı boyutuyla ilgiliydi.
Ne tür bir önlem alabiliriz derseniz, en basit olarak "
ini_get()" fonksiyonu ile "
auto_prepend_file" da herhangi bir değişiklik olup olmadığını kontrol edebiliriz.
if(ini_get("auto_prepend_file")){die("Scripti satın alın");}
Yukarıdaki ufak kontrolü config dosyamızda lisans kontrolü yaptığımız satırın üstüne koymamız yeterli olacaktır.
Son olarak bu makalede anlattıklarım tamamen bilgi amaçlıdır. Lütfen kötü amaçlar için kullanmayalım. Bu işlerden ekmek kazananların haklarına girmeyelim.
Orjinal yazıya bağlantı vererek alıntı yapabilirsiniz.
21 yorum:
peki verdiğin örnekte karşılaştırma işlemi config.php içindemi yapılıyor yoksa index.php içindemi ? yani config.php de karşılaştırma yapılıyorsa .htaccess ile bypass edilebilirmi ?
"Tabi bu işlemi yapan kodlar muhtemelen her sayfaya include edilmiş, config.php gibi fonksiyonların veya ana işlevlerin çalıştığı dosyada bulunmaktadır."
Döküman da neden config php de karşılaştırma yapıldığını açıklamıştım aslında. Yani hangi karşılaştırmanın hangi dosyada yapıldığı o kadar önemli değil ama config.php, functions.php gibi her sayfaya include edilmiş dosyalarla yapılırsa bu karşılaştırma işlemi daha sağlıklı olur.
dökümanda config.php ile index.php nin kodları görünmüyor o yüzden kafam karıştı kaynağı görüntüleyip bakabildim kodlara ayrıca döküman çok iyi teşekkürler :)
getenv("HTTP_HOST") kullanılırsa lisans bypass edilemez herhalde?
@Adsız
getenv() ile kontrol edilirse ediliyorsa $_SERVER['VALUE']='xxx'; gibi bir atamayla bypass edilmez. Ama şu şekilde bypass edilebilir.
apache_setenv('HTTP_HOST','xxx');
sevgili h4, ioncube ile dosya şifrelemek istiyorum. bunun için neler gerektiği hakkında bilgin var mı? veya ioncube dışında sağlam bir alternatif?
Daha önce hiç şifreleme yapmadım ama sitesinden online olarak şifreleme yapılabiliyor. Dosya başı 50 cent diye hatırlıyorum. Trial seçeneği de varmış sanırım. Oradan da şifrelediğimiz dosyaların geçerliliği 8 saat oluyormuş.
Ioncube şu anda bence diğerlerinden daha güvenli.
qinvent.com ioncube kırabiliyormuş, dosya başı 10-15 $'a sanırım. ilgilenenlere duyurulur.
slm asim ismin öylemiydi ? öyle duymustum hahaha neyse buraya yorum yapmicaktim aslinda ben ..
yolcu yazdigin yere bisi yazacaktim ama yazamiyorum. yorumlarimi kapatdin ordan ya???
acsanaaaa
hadi byeeeeee
+ bisiler yaz bloguna uzun zmndir bisi yazmamisin
okuyamiyorum :|
burda ziyaretci defteri gibi bisi olmadigi icin buraya yaziyorummmmmm :D
sen php den anliyorsun :D
bi bakarmisin buraya
www.sonkralice.net/php-dersleri
nasil olmus? ne eklemem gerek? eksikler ney?
aeo kib
Sonkralice abartmaya saçmalamaya başladın sen :d
Bu şekilde yaparsan site içerisindeki base hreflerde o şekilde olur :) coderleri bu kadar malmı sanıyorsunuz :)
@Sonkralice
Bence web sitende her türlü konudan ziyade tek bir alan ile ilgili içerik bulundur. Bu hem ziyaretçi açısından hem de özgünlük açısından fayda sağlar.
@emrecim :) biraz daha kibar olabilirdin :P
yaaa sen nerden ciktin simdi yaaaa
ne sacmalamasi ne abartmasi kiskanc sey seni...
@h4ckinger :) iyide tek bir alan olursa hit fazla olmaz. degisik seyler her bölümden birseyler var. hit kötü olursa alexada kötü oluyor :D aslinda ben sana sitemi degilde php ders site bölümünü sormustum :D sen phpden anliyorsun diye :D php yeni basliyan icin daha ne gibi seyler ekliye bilirim acisindan. yinede tsk. ederim
iyi geceler size aeo kib :D
@Webloader
"Dikkat edilecek bir nokta ise değiştireceğimiz verinin script içerisinde ne sıklıkta hangi yerlerde kullanıldığıdır.
Örneğin $_SERVER['HTTP_HOST'] sadece lisans kontrolünde kullanılan değişken ise bunu değiştirdiğimizde herhangi bir sorun oluşmaz.
Eğer bu değişken html etiketlerinde href attributelerinde kullanılan bir değişken ise biraz sıkıntı olabilir."
Yazının içerisinde de belirttiğim gibi.
h4ckinger usta bloggerini güncelleştirmeni isterim takip ediyorum her ay 2 post atıyorsun canım sıkılıyor :D
helal olsun kardeşim valla
sonkroliçe sen neden anlıyorsun ? orda burda ona buna laf atıyorsun kimsin sen ? sendemi msnene php yazınca koder oldun ? burda asıma laf atıyosun embesil seni
sen önce bir ismini yaz, ben ona birsey demedim bile, sadece fikrini sordum. tam tersi yani. ben bikere msne php bile yazmadim. yuh yani. sen önce git biraz bilgi sahibi ol sonra fikir sahibi olursun, bilgi sahibi olmiyan fikir sahibi olamaz.
h4ckinger, kusura bakma. xD o bebeye cevapimi yazmasam ölürdüm.
aeo kib
Güzel makale teşerkürler ..
Baya güzel bilgiler var
Tartışmalar da cabası :)
Yorum Gönder
Yorumlarınızı adsız olarak yapmamanız konuya olan ilgi ve samimiyetinizi göstericektir