Merhabalar ben Anka Red Team'den Bunjo, bu konuda manual şekilde blind sql zafiyetinin nasıl sömürülebileceğini anlatacağım.
Bu konuda arkada dönen PHP kodlarını ve sorguyu detaylı bir şekilde anlattığım için tekrar anlatmıyorum.
Blind SQL Injection Nedir?
Kör SQL enjeksiyonu (Blind SQL Injection), bir web uygulamasının veritabanı üzerindeki kritik bilgileri çalmak veya manipüle etmek için yapılan bir saldırı türüdür.
Bu saldırı, web uygulamasının giriş formları veya URL parametreleri gibi kullanıcı tarafından sağlanan giriş alanları aracılığıyla gerçekleştirilir.
Blind SQL Injection'da, saldırgan doğrudan hedeflenen SQL kodunu veritabanına enjekte etmek yerine, web uygulamasının yanıtlarını inceleyerek veritabanındaki bilgiler hakkında bilgi edinmeye çalışır.
Saldırgan, genellikle mantıksal ifadelerin doğruluğunu test etmek için kör SQL enjeksiyonu kullanır. Örneğin, saldırgan, web uygulamasının yanıtlarında bulunan belirli bir mesajın varlığına dayalı olarak veritabanı sorgularının sonucunu çıkarabilir.
Blind SQL Injection saldırıları genellikle otomatik araçlar veya özel olarak yazılmış scriptler kullanılarak gerçekleştirilir. Bu saldırıların hedefi genellikle kullanıcı kimlik bilgileri, şifreler, kredi kartı numaraları gibi hassas bilgileri içeren veritabanı tablolarına erişmektir.
DVWA Kurulumu
DVWA Adresi:
Database Kurulumu:
Create Database butonuna basınız.
Güvenlik Seviyesinin Ayarlanması:
Kendinize göre seçip pratik yapabilirsiniz, ben bu konuda "low" düzeyini kullanacağım.
Rich (BB code):
apt install dvwa
DVWA Adresi:
CoffeeScript:
http://127.0.0.1:42001/
Database Kurulumu:
Create Database butonuna basınız.
Güvenlik Seviyesinin Ayarlanması:
Kendinize göre seçip pratik yapabilirsiniz, ben bu konuda "low" düzeyini kullanacağım.
Zafiyetin Tespiti
"SQL Injection (Blind)" Sekmesine geliyorum.
Burada bulunan forma bir veri girdiğimde veritabanı içerisinde sorgu döndüğünü anlıyorum.
Kullanıcı ID değeri için girdiğim veriyi arttırarak bir hata mesajı almaya çalışıyorum.
6 değerini verdiğim zaman hata alıyorum, bu bana id değerinin en fazla 5 olduğunu gösteriyor.
Bu hata mesajından yola çıkarak sorguyu doğru yapmaya çalışıyorum.
Bu payload ile, 6. ID değerinden gelen false değerini OR operatörüyle 1 değeri 1 değerine eşit olduğu için gelen true değeriyle birlikte dönen kod,
false OR true şeklinde oluyor. OR operatörü kullanıldığı sorgu en az bir adet true değerini içeriyorsa bütün sorguyu true olarak tamamlar.
sonuç olarak true değeri döndüğü için, PHP kodu bizlere ID değerinin bulunduğunu söyledi.
Database İsminin Uzunluğunun Öğrenilmesi
Database isminin uzunluğunu, girdiğimiz sayıya eşit olup olmadığını kontrol ederek uzunluğunu öğrenmeye çalışalım.
False değeri döndüğü için, database isminin uzunluğunun 1 harf olmadığını bu şekilde tespit edebilirsiniz.
konuyu uzatmamak için 4 değerini deniyorum
Burada true dönüyor, veritabanı ismi 4 harfliymiş.
"SQL Injection (Blind)" Sekmesine geliyorum.
Burada bulunan forma bir veri girdiğimde veritabanı içerisinde sorgu döndüğünü anlıyorum.
Kullanıcı ID değeri için girdiğim veriyi arttırarak bir hata mesajı almaya çalışıyorum.
6 değerini verdiğim zaman hata alıyorum, bu bana id değerinin en fazla 5 olduğunu gösteriyor.
Bu hata mesajından yola çıkarak sorguyu doğru yapmaya çalışıyorum.
Bu payload ile, 6. ID değerinden gelen false değerini OR operatörüyle 1 değeri 1 değerine eşit olduğu için gelen true değeriyle birlikte dönen kod,
false OR true şeklinde oluyor. OR operatörü kullanıldığı sorgu en az bir adet true değerini içeriyorsa bütün sorguyu true olarak tamamlar.
sonuç olarak true değeri döndüğü için, PHP kodu bizlere ID değerinin bulunduğunu söyledi.
Database İsminin Uzunluğunun Öğrenilmesi
Database isminin uzunluğunu, girdiğimiz sayıya eşit olup olmadığını kontrol ederek uzunluğunu öğrenmeye çalışalım.
False değeri döndüğü için, database isminin uzunluğunun 1 harf olmadığını bu şekilde tespit edebilirsiniz.
konuyu uzatmamak için 4 değerini deniyorum
Burada true dönüyor, veritabanı ismi 4 harfliymiş.
Database İsminin Öğrenilmesi
Burada ASCII karakterleri kullanacağız, yine true ya da false değerleri alarak harf tespiti yapmaya çalışacağız.
ASCII - Binary Karakter Tablosu
Letter | ASCII Code | Binary | Letter | ASCII Code | Binary |
---|---|---|---|---|---|
a | 097 | 01100001 | A | 065 | 01000001 |
b | 098 | 01100010 | B | 066 | 01000010 |
c | 099 | 01100011 | C | 067 | 01000011 |
d | 100 | 01100100 | D | 068 | 01000100 |
e | 101 | 01100101 | E | 069 | 01000101 |
f | 102 | 01100110 | F | 070 | 01000110 |
g | 103 | 01100111 | G | 071 | 01000111 |
h | 104 | 01101000 | H | 072 | 01001000 |
i | 105 | 01101001 | I | 073 | 01001001 |
j | 106 | 01101010 | J | 074 | 01001010 |
k | 107 | 01101011 | K | 075 | 01001011 |
l | 108 | 01101100 | L | 076 | 01001100 |
m | 109 | 01101101 | M | 077 | 01001101 |
n | 110 | 01101110 | N | 078 | 01001110 |
o | 111 | 01101111 | O | 079 | 01001111 |
p | 112 | 01110000 | P | 080 | 01010000 |
q | 113 | 01110001 | Q | 081 | 01010001 |
r | 114 | 01110010 | R | 082 | 01010010 |
s | 115 | 01110011 | S | 083 | 01010011 |
t | 116 | 01110100 | T | 084 | 01010100 |
u | 117 | 01110101 | U | 085 | 01010101 |
v | 118 | 01110110 | V | 086 | 01010110 |
w | 119 | 01110111 | W | 087 | 01010111 |
x | 120 | 01111000 | X | 088 | 01011000 |
y | 121 | 01111001 | Y | 089 | 01011001 |
z | 122 | 01111010 | Z | 090 | 01011010 |
Burada 1. Veritabanının ilk harfinin karşılığının 97 yani "a" değerine karşılık gelip gelmediğini kontrol ediyoruz.
False dönüyor, ilk harf "a" değilmiş.
100 yani "d" harfi için deniyorum.
true dönüyor. Kullandığımız yazılımın ismi DVWA olduğuna göre database ismi de aynı şekilde.
Bilmiyormuş gibi devam ediyoruz.
"118" yani "v" harfi için deniyorum yine true dönüyor, bu şekilde devam edebilirsiniz.
Tablo Sayısının Öğrenilmesi
Yine aynı şekilde true, false değerlerinden yola çıkaracağız.
1 adet tablonun olup olmadığı kontrol ediyor.
True dönüyor site de en az 1 adet tablo var.
2 değeri kontrol ediliyor.
Burada da yine aynı mantık en az 2 tablo olduğunu anlıyoruz.
3 için deniyoruz.
Hata alıyoruz, 2 adet tablo varmış (username, password şeklinde olabilir )
Okuyan herkese teşekkür ederim, yeni konuda devam edeceğim