Merhaba. Konuda SQL'in veri tabanı ve order by dediğimiz manuel database nasıl çekilir bundan bahsedeceğim.

Veri Tabanı Nedir?

Veri tabanı herhangi bir application'un bilgilerini kalıcı bir şekilde depolayan, sitedeki hatırlanması gereken veya gerekmeyen bilgiler burda depolanır. Bu sayede veri tabanı içindeki bilgilere bakarak sitenin işleyişini değiştirebilir. Her web sitesinde veri tabanı olmak zorunda değildir. Örneğin Reklam sitelerinde veri tabanı olmak zorunda değildir. Oladabilir ama içindeki bilgiler png'ler, jpg'ler vs. bunlar olacağı için pek bir önem arz etmeyebilir kişiye bağlı olarak.


USER ID USER NAME PASSWORD

1 admin adminpassword

2 selenia turkhackteam


Örnek bir veri tabanı. Tabi veri tabanı sadece bundan ibaret değil. Bu veri tabanı, X tablosunun içindeki Users columundan çıkan User Id, Username, User Password bilgileridir. Ahmet denen bir şahıs siteye gelip kayıt olduğunda veri tabanı Ahmeti de kaydedecek ve bir daha Ahmet tekrar siteye geldiğinde onu tanıyacaktır.

Tables, Colums

Kısaca bahsetmek gerekirse. Veri tabanında tablolar ve kolonlar bulunmakta. Veritabanındaki bilgiler tabloların altındaki kolonların içinde saklıdır. Yani şu şekilde;

Kod:
/selenia.php?id=1


Şeklinde bir siteden veri tabanını bir şekilde çektik diyelim. Eğer ki manuel olmadan çekersek örneğin Sqlmap,Jsql gibi araçlardan çekersek;

İnformation_Schema = Hep karşınıza çıkan bir tablodur. Başka bir konu da değineceğim.
XXXXX = Herhangi bir tablo.

Böyle tablolar gördük. XXXXX olanı açtık ve çeşitli columslar var.

A....
B....
..
..
Users

Gibi kolonlar gördük. Users kolonunu açtık ve karşımıza;

userıd
username
user mail
userpassword
userphone

Gibi bilgiler çıktı ve bunları görüntülediğimizde. Karşımıza veriler çıkacaktır. Veriler şifrelenedebilir. Şifresiz direk de verilebilir. Bazen veriler bile olmayabilir güvenlik açısından. Sansürlü bir şekilde olabilir. ***** şeklinde yani.


Neden manuel çekmediyseniz dedim. Manuel çekince çeken kişi direk istediği veriye ulaşmaya çalışabilir. Bu yüzden sıralama bu şekilde olmayabilir. Ama tablo ve kolon'dan bu şekilde bahsetmek istedim.

Veri Tabanı Türleri Nelerdir?

Veri tabanının neye benzediği nasıl olduğu biraz anlaşıldıysa veri tabanı türlerinden bahsedebiliriz.

MsSql = Microsoft firmasının SQL yapısıdır.
MySQL = MsSQL'in maaliyeti yüksektir. Bazen MySQL'de tercih edilebilir. Güncel tutulduğu sürece mantık olarak aynı olduğu için iki tabana da güvenilebilir.
Xml = Verilerin HTML kodlarıyla saklanan veri tabanı türüdür.
Json = Xml ile aynı mantıkdır. Sadece uzantısı Json olmaktadır.

Veri Tabanı bu şekilde. EXCEL'e benziyor aslında. Bir veri tabanımız var içinde tablolar var tablolar içinde kolonlar var örneğin Teachers kolonu içinde Teachersid, TeachersUsername,TeachersPass gibi bilgiler var. Bu bilgiler güvenlik açısından şifrelenebilir, sansürlenebilir veya bu bilgilere hiç ulaşılamaması için güncel ve aşılması zor güvenlik duvarları kullanılabilir. Veri tabanı hataları düzeltilebilir.

Veri Tabanı mantığı değildir bu baştan söylemek isterim. Veri tabanı sadece bundan ibaret değil. Bu yüzden önceki SQL konularıma da bakabilirsiniz. Aynı zamanda yeni konular da açacağım.

https://www.turkhackteam.org/web-ser...n-anlamak.html = SQL Sorguları

https://www.turkhackteam.org/web-ser...injection.html = Kör Enjeksiyon

https://www.turkhackteam.org/web-ser...hacklemek.html = Kısaca JSQL ile veri tabanı çekmek.

ORDER BY / Manuel Veri Tabanı Çekmek

En en sevdiğim kısımdır. Order by da çok uzman değilim ama uzman olunması gereken bir konu çünkü artık Sqlmap,havij gibi araçlar işlevliğini yitiriyor. Daha çok Manuel kullanabileceğimiz siteler çıkıyor.


ORDER BY Avantajları;

Bir kere bazı siteleri SQLmap'e vs. atarız ve bize İnjection yani açık yok der. Bazen Null çeker yani db çekmez. Ama o sitede İnjection olabilir. Blind injection olabilir, Order by olabilir. Bu yüzden artık işlevliğini yitiriyor. Ama SQL bilinmeli her ne kadar eskisede.
Order by da .html gibi siteleri de çekebiliriz. Yani illaki bir ıd olması gerekmiyor. SQLmap gibi araçlarda .php?id= şeklinde istiyor. Ama manuel de hem böyle hem de sonu .html olanları da çekebiliriz bir avantajı da bu.

ORDER BY Nasıl Yapılıyor

Önce bir web sitesi hayal edelim.

Kod:
xxxx.x/selenia.php?id=1


Sitemiz bu. Öncelikle manuel injection olduğunu anlamak ve kolon sayısı tespiti için order by kullanacağız.

Kod:
xxxx.x/selenia.php?id=1'+order+by+1--+-


Burdaki +'lar yerine boşlukda olabilir. Şimdi burda 1. kolonu sorgulattık. Site eski haline dönüyorsa henüz amacımıza ulaşmadık.


Kod:
xxxx.x/selenia.php?id=1'+order+by+100--+-


Yaptığımızda bize hata veriyorsa. Bu durumda 100'den küçük bir sayıya ulaşmaya çalışacağız. Şimdi bu yaptığımız iki işlemde 1 den büyük 100 den küçük olduğunu anladık daha sonra 100 yerine 50 dediğimizde site eski haline dönüyorsa arttırarak gideceğiz 100'e kadar. 51 yaptığımızda web sitesi hata veriyorsa burda kolon sayısının 50 olduğunu tespit ettik.

NOT: Bunun yapılması bile bir Manuel İnjection olduğu anlamına gelir. Ama db çekerken bazı sorunlar çıkabilir.

Kolon sayısını 50 olarak tespit ettikten sonra union select dediğimiz bir şey uygulayacağız. Diğer SQL konularıma bakarsanız daha iyi anlarsınız. Kendi select sorgularımızı oluşturacağız. Kolonu 50 bulmuş olmayalım 10 bulmuş olalım.

Kod:
xxxx.x/selenia.php?id=1+union+select+1,2,3,4,5,6,7,8,9,10--+-


Yaptığımızda sitemiz aynı olacaktır ama web sitesinde minik sayılar görünecektir. Örneğin bu sayılar 2 ve 5 olsun. Bu sayılar bazen çıkmayadabilir çıkmayacağı durumda


Kod:
1+and+0+union+select+1,2,3,4,5,6,7,8,9,10--+-


Yaparız. Sayıları gördükten sonra örneğin 2 ve 5 var diyelim.


Kod:
1+and+0+union+select+1,database(),3,4,version(),6, 7,8,9,10--+-


Yaptığımızda veriler çekiliyorsa artık manuel bir şekilde database'i çekebiliyoruz demektir. Burda database ismi ve versiyonunu öğreniyoruz. Eğerki Not Allowed gibi izin verilmedi hataları veriyorsa sitede güvenlik duvarı yani waff olabilir.

Manuel'de Waff Bypass'ı Yapmak

Bunun için gerçekten çok yöntem var. Ama ben unhex ve /*1337union*/ Yöntemlerini kullanıyorum.

Kod:
1+and+0+union+select+1,database(),3,4,5,6,7,8,9,10--+-


Bunu yaptığımızda bize bilgileri vermiyorsa.

Kod:
1+and+0+union+select+1,unhex(hex(database())),3,4, 5,6,7,8,9,10--+-


Yapıyoruz bu sayede güvenlik duvarını bypass edip verilerin görülmesini sağlayabiliriz. Bzen bu işe yaramaz o durumda union olan kısma


Kod:
/*1337union*/+select.....


Şeklinde devam edilerek denenebilir. Manuel bir şekilde web sitelerinden database bu şekilde çekiliyor. Konum bu kadardı okuyanlara teşekkür ederim iyi forumlar :))