Blind Sql İnjection Nedir?

AKTUĞ1

Yazılım Ekibi Analist
23 Haz 2015
2,374
365
Blind SQL İnjection açığına değinmeden önce SQL ve SQL İnjection Nedir ?. Onları incelemeden geçmeyelim. Ne olduklarını bilirsek Blind SQL konusunu zorlanmadan öğrenebiliriz. Keyifli okumalar dilerim...

Ii8QD0.png


SQL Nedir ?

SQL aslında veritabanı yönetim sistemi dili anlamına gelmektedir. Türkçe adı ise "Yapılandırılmış Sorgu Dili" anlamına gelmektedir. Kesinlikle bir programlama dili değildir. Websitelerin veritabanı atası olarakda bilinir. İnternet üzerinden kayıt olduğumuz sitelerin veritabanı yoksa o veriler bilgisayarda ortamında saklanır ve biz bunlara işlenmemiş veri deriz. SQL sistemin çalışması aslında biraz basittir. Bilgilerin belirli yollarla işlemesini geçmesini sağlamak için yapılan işlemlere "sorgu" deriz. Bu sorgu işlemi sadece SQL kullanarak ile yapılabilir. SQL sayesinde birçok veri işlemi
gerçekleştirilir. SQL veritabanının kullanılması aslında bizlere büyük bir avantajdır. İstediğimiz veya istenilen verileri SQL sayesinde zorlanmadan bulabiliriz. Buda bize bir bakımaz arama işleminde zaman kazandırır. Hafızada bulunan bilgileri tek bir dosyada toplamamıza işe yarar. SQL veritabanları birçok yerde kullanılır. Hastahaneler, bankalar, kamu kuruluşları, kütüphaneler ve online ödeme sistemleri tarafından kullanılır. Başlangıçda iki farklı uygulamaya sahiptir. Düz-Dosya ve İlişkisel veritabanlarıdır. Düz-dosya diğer uygulamaya göre basit bir veritabanı uygulamasıdır. İşlenen veriler tek bir yerde toplanıp depolanmaktadır. İlişkisel veritabanı uygulamasında bu durum benzerlik içermeyen dosyalar arasında ilişki kurmaya başlar. Bu ilişki durumuna göre verileri gruplandırır ve depolandırır. İşte veritabanı ile SQL arasındaki bağlantı bu şekildedir.
Bu verileri sorgulama, çağırma, bulma aşamasında bir yönetim sistemi olması gerekmektedir. Bilgiler sorgulanıp geçilmesinde SQL devreye giriyor. İşlediğimiz dosyaları diğer dosyaların arasından bulmak için programlanmış bir dildir. SQL İnjection konumuza geçmeden önce MySQL ve MsSQL veritabanlarından kısaca bahsedelim.


IitbLy.jpg


Ii8QD0.png


MySQL Nedir ?

Açık kaynak modelini kullanan veritabanıdır. Hosting firmaları tarafın tercih edilen veritabanlarından bir tanesidir. MySQL, adında anlaşılacağı üzere websiteleri oluşumunda özel bir sunucu yazılımı ve internet uygulaması gerektiren bir veritabanıdır. Büyük verilerin şahsi araçlar ile depolanmasında hızlı bir şekilde verileri erişilmesini sağlıyor. Bu nedenden dolayı çoğu developer MySQL kullanarak veritabanlarını daha iyi kontrol edebiliyorlar.

IiFooA.jpg


Ii8QD0.png


MsSQL Nedir ?

MsSQL, diğer adıyla Microsoft SQL Server denilmektedir. Verilerin rahat bir şekilde depolandığı bir sistemdir. Ayrıntılı verilerin depolanması, birçok kullanıcının aynı zamanda kullanılmasını sağlayan bir ilişkisel veritabanı yönetim sistemidir. İnternet dünyasında gördüğümüz resimler, metinler, metinlere yönelik durumlar, üyelik bilgileri MsSQL verisi olarak depolanabiliyor. Verilerin işlenmesinde sistem sırası şeklinde kaydedilmesine olanak sağlar. Programalama dillerinde tercih edilmesinde sebebi budur.​

IiFTqe.jpg


Ii8QD0.png

SQL İnjection Nedir ?​

Veritabanlarına saldırmak amacıyla kullanan zararlı kod yerleştirme tekniğidir. Saldırgan sql injection açığı sayesinde websitelerinde bulunan kullanıcı bilgilerini ve mevcut bilgileri erişimde bulunabilir, yetki yükseltme yapabilir ve veritabanındaki tüm bilgileri sililebilir. Saldırganların bu saldırıyı yapmalarındaki amaç bilgi hırsızlığı yapmaktadır. Bu sayede kendilerine kısa yoldan kazanç sağlamaktadırlar. SQL İnjection saldırılarından korunmak için veritabanı güvenliğini kullandığımız yazılımları güncel tutmalıyız. Genel olarak SQL İnjection açık türüne baktığımızda 4 tane vardır. Ama bunlardan sadece ikisi aktif olarak kullanılmaktadır. 1. Hata mesajı vermeye yarayan açık, 2.cisi Blind SQL İnjectiondur. Hata tabanlı açık veren siteler genellikle URL sonuna '(tırnak)ibaresi eklenir ve açık kendini belli etmiş olur. Veritabanındaki bilgileri almak için SQLmap kullanılır. Blind SQL İnjectionu anlatmadan önce SQLMAP kullanımından bahsedelim. Bu araç veri çekme açısından etkili bir rol oynamaktadır.​

IiFB7M.jpg


Ii8QD0.png

1-Hata Tabanlı SQL İnjection​

Başlangıçta amaç uygulamayı hata yapmaya zorlamaktır. Bu açıkta 2 faktör vardır. Union ve Double Olarak ikiye ayrılır. Union, hata tabanlı açıklarda iki ya da daha fazla select ifadesini birleştirmek için kullanılır. Double ise yine aynı hata tabanlı açıkda iki sorguyu tek bir sorgu ifadesinde birleştirmek amacıyla hata aldırmaya çalışmaktadır. Hata verirse eğer SQL injection açığı belirlenmiş olur. Login Bypass üzerinden örnek verelim.​

Kod:
Kullanıcı Adı:frn1
Şifre:admin1

SQL sorgu sisteminde böyle çıkmaktadır.

Kod:
[CENTER]SELECT * FROM Users WHERE Username = ‘frn1’ and Password = ‘admin1’[/CENTER]

Saldırgan bu durumda birçok işlem yapabilir.​

Kod:
Kullanıcı Adı:frn1
Şifre:'OR 1=1--

Kod:
SELECT * FROM Users WHERE Username = ‘ahmet’ and Password = ‘’ OR 1=1--

Ii8QD0.png

2- Blind SQL İnjection​

Türkçe anlamına çevirecek olursak KÖR atış saldırıları denilmektedir. Veritabanı sistemine direkt olarak tablolara ya da kolonlara ait bilgilere veya veritabanına ait teknik bilgilere ulaşılamaz ancak istenilen bilgiler harf harf denediğimiz taktirde doğru sonuçlara ulaşılacaktır. Bu nedenden dolayı manuel ile yapılması zorlaştırıcı olup bu açık tespit edildiği taktirde otomatik programlar ile açıklık su istimal edilmektedir. Blind SQL injection, Boolean ve Zaman türü olarak ikiye ayrılır. Boolean, mantık(True-False) ifadesine göre çalışan sql injection sorgularıdır. Zaman, sorgu sonuçlarından gözükmeyen çalışıp çalışmadığını anlamak için kullanılır. Bu açık deneme-yanılma yöntemidir. Örnek URL vericek olursak,​

Kod:
[url]https://teknomen.com/index.php?id=74'and[/url] 2=4

URL baktığımızda 2=4 eşitlik ifadesi yanlış olduğundan hata verir ya da sayfadaki değişiklik gözlemlenir. Sayfa hata verirse eğer o link ile kullanıcı bilgilerine erişebiliriz.

Ii8QD0.png


SQLMAP Nedir ? Nasıl Kullanılır ?

SQLmap python dilinde yazılmış açık kaynak kodlu bir araçdır. SQL İnjection açıklı sitelerin veritabanındaki bilgileri web uygulamasının kullandığı veritabanı sistemine gönderdiği çeşitli sorgular/komutlar ile sistem üzerindeki sql injection tipini tespit eder yine kendisine sağlanan parametrelere göre çeşitli bilgileri hedef veritabanından alır. Yapısında barındırdığı hususlar sayesinde veri tabanı sunucularının yönetimini ele geçirmekten hedef sunucunun işletim sisteminde komut çalıştırmaya kadar pek çok işlevi yerine getirebilmektedir.​

Kullanımı​

SQLmap'ı kullanmadan önce parametleri bilmek sizin istediğiniz bilgilere ulaşmanız açısından daha iyi olur. Kısaca parametrelere göz atalım.​

Kod:
[CENTER]D: Bu parametre ile veri tabanı adını belirtir.
--tables: Belirttilen veri tabanındaki tablo isimlerini getirmek için bu parametre kullanılır.
-T: Tablo isimleri alındıktan sonra kolonlarına ulaşılması istenen tablo adı bu parametre ile birlikte yazılır.
--columns: Adı belirtilen tablodaki kolonlar getirilir.
-C: İstenilen kolon adı yazılır.
--dump: Kolonlarda yer alan veriler ekrana yansıtılır.[/CENTER]

Veritabanının ismini çekmek için yazacağımız komut,

Kod:
sqlmap.py -u https://www.deneme.com/news.php?id=7 --dbs

Çektikten sonra Veritabanındaki tablolaları çekmek için yazacağımız komut,

Kod:
sqlmap.py -u https://www.deneme.com/news.php?id=7 veritabanismi --tables

Veritabanı tablosunun kolon bilgileri çekmek için yazacağımız komut,

Kod:
 sqlmap.py -u [url]https://www.deneme.com/news.php?id=7[/url] -D veritabanismi -T tabloismi --columns

Kolonun içindeki veriler çekmek için yazacağımız komut,

Kod:
sqlmap.py -u https://www.deneme.com/news.php?id=7 -D veritabani ismi -T tabloismi -C kolonismi --dump

Veritabanındaki bilgiler bu şekilde çekilmektedir.

Ii4hBn.jpg
 
Son düzenleme:
Ü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.