SQL Injection Nedir ?

AimCraviTe

Üye
13 Ara 2015
231
46



SQL Injection, bir saldırganın bir uygulamanın veritabanında yaptığı sorguları engellemesine izin veren bir web güvenlik açığıdır. Genellikle bir saldırganın normalde alamadığı verileri görüntülemesini sağlar. Bu, diğer kullanıcılara ait verileri veya uygulamanın kendisinin erişebileceği diğer verileri içerebilir. Çoğu durumda, bir saldırgan bu verileri değiştirebilir veya silebilir ve bu da uygulamanın içeriğinde veya davranışında kalıcı değişikliklere neden olabilir.

Bazı durumlarda, saldırgan, altta yatan sunucuyu veya diğer arka uç altyapısını tehlikeye atmak veya hizmet reddi saldırısı gerçekleştirmek için bir SQL enjeksiyon saldırısını artırabilir.


E2lDNN.png


Başarılı bir SQL enjeksiyon saldırıların etkileri nelerdir?

Başarılı bir SQL enjeksiyon saldırısı, şifreler, kredi kartı bilgileri veya kişisel kullanıcı bilgileri gibi hassas verilere yetkisiz erişime neden olabilir. Son yıllarda yaşanan birçok yüksek profilli veri ihlali, SQL hasarlarının sonucu olarak ortaya çıkmakta ve itibar hasarına ve yasal cezalara yol açmaktadır. Bazı durumlarda, saldırgan bir kuruluşun sistemlerinde kalıcı bir arka kapı bulabilir ve uzun süre fark edilmeyebilecek uzun vadeli bir uzlaşmaya yol açabilir.

SQL enjeksiyon örnekleri:

Farklı durumlarda ortaya çıkan çok çeşitli SQL enjeksiyon açıkların saldırıları ve teknikleri vardır. Bazı yaygın SQL enjeksiyon örnekleri şunları içerir:​


[*] Gizli verileri almak, ek sonuçlar döndürmek için bir SQL sorgusunu değiştirebileceğiniz yer.
[*] Uygulamaların mantığına müdahale etmek için bir sorguyu değiştirebileceğiniz ve uygulamaların mantığını iptal etmek yada devre dışı bırakmak vs.
[*] Farklı veritabanı tablolarından veri alabileceğiniz UNION saldırıları.
[*] Veritabanının incelenmesi ve yapısı hakkında bilgi edinebileceğiniz yerler.
[*] Kontrol ettiğiniz bir sorgunun sonuçlarının uygulamanın yanıtlarında döndürülmediği SQL enjeksiyonu.


Gizli verilerin alınması

Farklı kategorideki ürünleri gösteren bir alışveriş uygulaması düşünün. Kullanıcı Hediyeler kategorisine tıkladığında, tarayıcı URL’yi ister:

https://insecure-website.com/products?category=Gifts

Bu, uygulamanın ilgili ürünlerin ayrıntılarını veritabanından almak için bir SQL sorgusu yapmasına neden olur:

Ürünler arasından seçim yapın. Örnek: 'Gifts' Ve released = 1

Ve bu SQL sorgusu veritabanından geri dönmesini ister ve şöyle liste gelir::

  • Tüm Detaylar (*)
  • Ürünler tablosu (*)
  • Kategorinin Hediyeler olduğu yer (*)
  • Ve serbest bırakılan 1 (*)
Serbest bırakılan kısıtlama = 1, serbest bırakılmayan ürünleri gizlemek için kullanılıyor. Yayımlanmamış ürünler için, muhtemelen serbest bırakılmış = 0. Uygulama, SQL enjeksiyon saldırılarına karşı hiçbir savunma uygulamamaktadır, bu nedenle bir saldırgan aşağıdaki gibi bir saldırı oluşturabilir:

https://insecure-website.com/products?category=Gifts'--

Ve bu SQL sorgusu ile sonuçlanan kaynak ise:

Buradaki en önemli şey, çift tire dizisinin - SQL'deki bir yorum göstergesi olmasıdır ve sorgunun geri kalanının yorum olarak yorumlandığı anlamına gelir. Bu, sorgunun geri kalanını etkin bir şekilde kaldırır, bu nedenle artık VE serbest bırakılmaz = 1'i içermez. Bu, yayınlanmamış ürünler de dahil olmak üzere tüm ürünlerin görüntülendiği anlamına gelir. Ve bir saldırgan, bir saldırgan uygulamanın, bilmedikleri kategoriler de dahil olmak üzere herhangi bir kategorideki tüm ürünleri görüntülemesine neden olabilir:

Yani tam olarak: SELECT * FROM products WHERE category = 'Gifts' OR 1=1--' AND released = 1 Şeklindedir.


https://insecure-website.com/products?category=Gifts'+OR+1=1--

Değiştirilen sorgu, kategorinin Hediyeler olduğu veya 1'in 1'e eşit olduğu tüm öğeleri döndürür. 1 = 1 her zaman doğruysa, sorgu tüm öğeleri döndürür.


Uygulama mantığını iptal etme

Kullanıcıların bir kullanıcı adı ve şifre ile giriş yapmasına izin veren bir uygulamayı düşünün. Bir kullanıcı kullanıcı adı kullanıcısı ve şifre bluecheese gönderirse, uygulama aşağıdaki SQL sorgusunu gerçekleştirerek kimlik bilgilerini kontrol eder:

SELECT * kullanıcılardan FRHERE username = 'wiener' AND password = 'bluecheese'

Sorgu bir kullanıcının ayrıntılarını döndürürse, giriş başarılı olur. Aksi takdirde, reddedilir.

Burada, bir saldırgan, sorgunun WHERE yan tümcesinden parola denetimini kaldırmak için, yalnızca SQL yorum dizisini kullanarak bir parola olmadan herhangi bir kullanıcı olarak oturum açabilir. Örneğin, kullanıcı adı yöneticisini göndermek '- ve boş bir şifre aşağıdaki sorguyla sonuçlanır:

SELECT * kullanıcılardan NEREDE kullanıcı adı = 'yönetici' - 'VE şifre =' '

Bu sorgu, kullanıcı adı yönetici olan kullanıcıyı döndürür ve saldırganı bu kullanıcı olarak başarılı bir şekilde günlüğe kaydeder.


Diğer veritabanı tablolarından veri alma
Veritabanını inceleme

Bir SQL enjeksiyon güvenlik açığının ilk tanımlanmasının ardından, veritabanı hakkında bazı bilgiler edinmek genellikle yararlıdır. Bu bilgi çoğu zaman daha fazla yararlanmanın yolunu açabilir.

Veritabanının sürüm ayrıntılarını sorgulayabilirsiniz. Bunun yapılma şekli veritabanı tipine bağlıdır, böylece hangi tekniğin işe yaradığı ile ilgili veritabanı tipini çıkartabilirsiniz. Örneğin, Oracle’da şunları yapabilirsiniz:

SELECT * FROM v $ sürüm

Ayrıca, hangi veritabanı tablolarının mevcut olduğunu ve hangi sütunları içerdiğini de belirleyebilirsiniz. Örneğin, çoğu veritabanında tabloları listelemek için aşağıdaki sorguyu uygulayabilirsiniz:

SELECT * FROM Instagram Hesabındaki Resim ve Videoları information_schema.tables


SQL enjeksiyon güvenlik açıkları

Birçok SQL enjeksiyonu örneği, güvenlik açıklarıdır. Bu, uygulamanın SQL sorgusunun sonuçlarını veya yanıtları içindeki herhangi bir veritabanı hatasının ayrıntılarını döndürmediği anlamına gelir. İzinsiz verilere erişmek için hala kör güvenlik açıklarından yararlanılabilir, ancak söz konusu teknikler genellikle daha karmaşık ve gerçekleştirilmesi zordur.

Güvenlik açığının doğasına ve ilgili veritabanına bağlı olarak,SQL ekleme güvenlik açıklarından yararlanmak için aşağıdaki teknikler kullanılabilir:


  • Tek bir koşulun gerçeğine bağlı olarak, uygulamanın yanıtında fark edilebilir bir farkı tetiklemek için sorgunun mantığını değiştirebilirsiniz. Bu, bazı Boole mantığına veya koşullu olarak yeni bir koşul enjekte edilmesini içerebilir.
    [*]Sorgunun işlenmesinde bir zaman gecikmesini koşullu olarak tetikleyebilir ve uygulamanın yanıt vermesi için geçen süreye bağlı olarak koşulun gerçekliğini çıkarmanıza olanak tanır.
    [*]OAST tekniklerini kullanarak bant dışı bir ağ etkileşimini tetikleyebilirsiniz. Bu teknik son derece güçlüdür ve diğer tekniklerin yapmadığı durumlarda çalışır. Çoğunlukla, örneğin bant dışı kanaldan doğrudan veri aktarabilirsiniz, örneğin verileri kontrol ettiğiniz bir etki alanı için bir DNS aramasına yerleştirerek.

SQL enjeksiyon güvenlik açıklarının çoğu, Burp Suite web güvenlik açığı tarayıcısı kullanılarak hızlı ve güvenilir bir şekilde bulunabilir. Ve SQL enjeksiyon, uygulamadaki her giriş noktasına karşı sistematik bir test seti kullanılarak manuel olarak tespit edilebilir. Bu genellikle şunları içerir:

[*]Tekli alıntı karakterini göndermek 've hataları veya diğer anomalileri aramak.
[*]OR 1 = 1 ve OR 1 = 2 gibi Boole koşullarını gönderme ve uygulamanın farklılıklarını bulmak.
[*]Bir SQL sorgusu içinde yürütüldüğünde zaman gecikmelerini tetiklemek için tasarlanmış yükleri gönderme ve yanıt için harcanan zamandaki farklılıkları aramak.
[*]Bir SQL sorgusu içinde yürütüldüğünde bant dışı bir ağ etkileşimini tetiklemek için tasarlanmış PAST yüklerini gönderme ve sonuçta ortaya çıkan etkileşimlerin izlenmesi.
 
Moderatör tarafında düzenlendi:
Ü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.