Manuel Blind SQL Injection! #1

Carlonhack

Uzman üye
20 Şub 2022
1,288
323
m9RCVr.png
m9RCVr.png



kbrn6ph.png


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.

kbrn6ph.png


DVWA Kurulumu

Rich (BB code):
apt install dvwa
1edtk9e.png


DVWA Adresi:

CoffeeScript:
http://127.0.0.1:42001/

a8phsbm.png


Database Kurulumu:

Create Database butonuna basınız.


igv87dw.png


Güvenlik Seviyesinin Ayarlanması:

Kendinize göre seçip pratik yapabilirsiniz, ben bu konuda "low" düzeyini kullanacağım.

jadb65o.png


kbrn6ph.png


Zafiyetin Tespiti

"SQL Injection (Blind)" Sekmesine geliyorum.

Burada bulunan forma bir veri girdiğimde veritabanı içerisinde sorgu döndüğünü anlıyorum.


hmpeijs.png


Kullanıcı ID değeri için girdiğim veriyi arttırarak bir hata mesajı almaya çalışıyorum.

gmjtdvr.png


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.

h49227w.png


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.



kbrn6ph.png


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.

de2coj7.png


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


k6zt6zz.png


Burada true dönüyor, veritabanı ismi 4 harfliymiş.


kbrn6ph.png


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


LetterASCII CodeBinaryLetterASCII CodeBinary
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.

gauxvkl.png


False dönüyor, ilk harf "a" değilmiş.

100 yani "d" harfi için deniyorum.

lin7thb.png


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.


46yqry1.png


"118" yani "v" harfi için deniyorum yine true dönüyor, bu şekilde devam edebilirsiniz.

kbrn6ph.png


Tablo Sayısının Öğrenilmesi

Yine aynı şekilde true, false değerlerinden yola çıkaracağız.


1 adet tablonun olup olmadığı kontrol ediyor.

dslc6oy.png


True dönüyor site de en az 1 adet tablo var.

2 değeri kontrol ediliyor.

ew3ogmb.png


Burada da yine aynı mantık en az 2 tablo olduğunu anlıyoruz.

3 için deniyoruz.


9z579hv.png


Hata alıyoruz, 2 adet tablo varmış (username, password şeklinde olabilir :) )


kbrn6ph.png


Okuyan herkese teşekkür ederim, yeni konuda devam edeceğim :)
Eline sağlık
 

Yagami Light0

Katılımcı Üye
5 May 2023
699
306
m9RCVr.png
m9RCVr.png



kbrn6ph.png


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.

kbrn6ph.png


DVWA Kurulumu

Rich (BB code):
apt install dvwa
1edtk9e.png


DVWA Adresi:

CoffeeScript:
http://127.0.0.1:42001/

a8phsbm.png


Database Kurulumu:

Create Database butonuna basınız.


igv87dw.png


Güvenlik Seviyesinin Ayarlanması:

Kendinize göre seçip pratik yapabilirsiniz, ben bu konuda "low" düzeyini kullanacağım.

jadb65o.png


kbrn6ph.png


Zafiyetin Tespiti

"SQL Injection (Blind)" Sekmesine geliyorum.

Burada bulunan forma bir veri girdiğimde veritabanı içerisinde sorgu döndüğünü anlıyorum.


hmpeijs.png


Kullanıcı ID değeri için girdiğim veriyi arttırarak bir hata mesajı almaya çalışıyorum.

gmjtdvr.png


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.

h49227w.png


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.



kbrn6ph.png


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.

de2coj7.png


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


k6zt6zz.png


Burada true dönüyor, veritabanı ismi 4 harfliymiş.


kbrn6ph.png


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


LetterASCII CodeBinaryLetterASCII CodeBinary
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.

gauxvkl.png


False dönüyor, ilk harf "a" değilmiş.

100 yani "d" harfi için deniyorum.

lin7thb.png


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.


46yqry1.png


"118" yani "v" harfi için deniyorum yine true dönüyor, bu şekilde devam edebilirsiniz.

kbrn6ph.png


Tablo Sayısının Öğrenilmesi

Yine aynı şekilde true, false değerlerinden yola çıkaracağız.


1 adet tablonun olup olmadığı kontrol ediyor.

dslc6oy.png


True dönüyor site de en az 1 adet tablo var.

2 değeri kontrol ediliyor.

ew3ogmb.png


Burada da yine aynı mantık en az 2 tablo olduğunu anlıyoruz.

3 için deniyoruz.


9z579hv.png


Hata alıyoruz, 2 adet tablo varmış (username, password şeklinde olabilir :) )


kbrn6ph.png


Okuyan herkese teşekkür ederim, yeni konuda devam edeceğim :)
eline saglik, yararli konu
 
Ü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.