Merhaba dostlar! Nasılsınız, mahlenizin dost canlısı ve acemi hackeri geri döndü. Benim gibi acemilerin bilmesi gereken en yegani konulardan birisidir.
SQL sorgusunu yapıyoruz ama çoğumuz ezbere yada sorguların ne olduğundan tam anlamıyla emin değil.
Buna çözüm olarak böyle bir konu açma gereğini duydum kullanılan genel terimlerin ne anlama geldiğini ve nasıl çalıştığından bahsediceğim.
Ve sizden istediğim bir şey olucak sizce bu genel terimler arasında baska hangi terimler var ve hangi terimleri anlatmamı istersiniz, lütfen bunu yorumlarda bahsedin.
Öncellikle sorgumuz neyin ne olduğunu nereden biliyor biraz ondan bahsedeceğim.
Bu sayede neden yetkimiz bazı verilere yetkimizin olmadığının bir sebebini anlamış olucaksınız.
Hemde select ve from teriminin ne olduğunu anlamış olucaksınız.
Bu sayede neden yetkimiz bazı verilere yetkimizin olmadığının bir sebebini anlamış olucaksınız.
Hemde select ve from teriminin ne olduğunu anlamış olucaksınız.
Diyelim ki sorgumuz bir okulun veri tablosundan veri istesin.
(select)"ogrenci_numaraları"'nin verilerini ver (from)Ogrenciler tablosundan.
Bu enjeksiyonda, enjekte ettiğimiz SQL eğer okul verisinde daha önceden
use(kullan) okul(database)
execute edilmediyse imkanı yok siz okul veritabınından istediğiniz veriyi alamazsınız çünkü SQL orayı tanımıyor.
Diyelim ki SQL ile insan arasında bir diyalog olsun ve use "database" kullanılmamış olsun:
İnsan: Bütün sütunları göster, öğrenci tablosundaki.
SQL: nE?
Tablolar ve sütunlar nedir?
Size tek sefer de anlayabileceğiniz bir görsel sunacağım
Bu veri tabanın da bulunan ogrenciler tablosudur. Üst taraf sütunlara işaret eder, Sütunların altındakiler de sütun içi verilerdir
SELECT ve FROM terimi
Select terimi hangi sütundan veri istediğinizi, from terimi ise bu sütunun nerede olduğunu işaret eder
-----------------------------------------------------------------------------|
Select * from ogrenciler(Database)
Tablonun içindeki bütün sütunları size gösterir size gösterir. (Bir nevi bütün tabloyu gösterir ama kullanılan terim bütün sütunları göstermesi içindir)
-----------------------------------------------------------------------------|
-----------------------------------------------------------------------------|
Select OgrNumara, OgrAd from ogrenciler
Tablo'da bulunan oğrenci numaralarını ve oğrenci adlarını gösterir.
-----------------------------------------------------------------------------|
Eğer gene bir diyalog olsaydı ilk sorgumuz söyle olurdu:
İnsan: Bütün sütunları göster.
SQL: Nerede?
İnsan: Ogrenciler tablosundan.
SQL: Anladım, işte sütunlar.
UNION terimi nedir?
(Bunu anlatmak için Murat Yücedağ'ın "SQL Ders 33 Union / Union All Kullanımı"daki görsel rotasını kullanacağım, anlaması kolay. SQL öğrenmek isteyenler için tavsiye ederim)
(Bunu anlatmak için Murat Yücedağ'ın "SQL Ders 33 Union / Union All Kullanımı"daki görsel rotasını kullanacağım, anlaması kolay. SQL öğrenmek isteyenler için tavsiye ederim)
İstisnasız hepimizin en az bir kere kullandığı o kutsal terim peki ne olduğunu biliyor muyuz, gelin birlikte öğrenelim.
Öncellikle kitap adlı veritabanında kitap diye bir tablomuz var.
(Count sütun içindeki verileri sayar)
İçinde 28 adet veri olduğunu öğreniyoruz. (bu veriler kitapad adlı sütunun içindeki verileri temsil eder)
Bir diğer tablomuzda ise
Bu tabloda ise toplamda 12 veri olduğunu görüyoruz.
Toplamda 40 verimiz var.
Diyelim ki iki tablodaki tüm kitapları bize geri döndürmesini istiyoruz.
İste tam burada yardımımıza UNION terimi yetişiyor
bu sayede iki tablodan da tüm verileri alabiliyoruz.
Not: Bu terim tekrar eden verileri içermez, eğer içermesini istiyorsanız "ALL" formatını da eklemeniz lazım.
Not: Eğer geri dönüş verilerinin veri tipi birbirinden farklıysa UNION çalışmaz.
Peki bizim SQL enjeksiyonlarında niye fazladan bir tablo yazmıyoruz? Sonuçta UNION terimi sadece iki tablo olduğunda geçerli.
Çünkü request içinde zaten bir tablodan bir veri isteğinde bulunuyoruz örnek olarak:
Orjinal Sorgu ile bizim sorgumuzu birleştirmek için UNION terimini kullanıyoruz, düz olarak yeni bir sorgu ekliyemiyoruz çünkü bu SQL'ın doğasına aykırıdır.
Bu yüzden SQL enjeksiyonunda en önemli olan enjekte edebileceğimiz yeri bulmaktır, enjekte etmek değildir.
Beni dinlediğiniz için teşekkür ederim dostlar eğer bir hatam varsa affınıza sığınırım.
Mahlenizin dost canlısı acemi hackeri müsadenizi ister ve hepinize iyi günler diler.
Mahlenizin dost canlısı acemi hackeri müsadenizi ister ve hepinize iyi günler diler.