Merhaba arkadaşlar bu konumuzda portswiggerin sql injection lablerinin ilk 3'ünü çözüp anlatacağım.
Lab 1 - gizlenmiş bilgileri bulmak
Lab 2 - login bypass
Lab 3 - veri çekme
ilk özgün konum olucak.
Bazı İngilizce Terimler ve Anlamları başlığını konunun son kısımlarında yazdım isterseniz ilk önce orayıda okuyabilirsiniz.
Hadi başlayalım.
LAB: SQL injection vulnerability in WHERE clause allowing retrieval of hidden data
Bir websitemiz var ve farklı farklı kategorilerde ürün satıyorlar. Örneğin biz gifts kategorisine gireceğiz.
Ve bize şöyle bir URL verecektir:
.https://acikli-site.com/products?category=Gifts
ve RELEASED olanları gösterecektir.
Yani Gifts'e tıkladığımızda sorgu şu şekilde olacak:
Biz de bir query yaparak hem tüm kategorileri göreceğiz hem de released olan ve olmayanları bir arada göreceğiz.
bizim istediğimiz sorgumuzda "category" sütünumuzda "sadece gifts değerlerinde olanlar" gösterilmesin, (hepsi gösterilsin) bu sorgunun çalışması için bir çok yöntem var ben;
1' OR 1=1--
örneğini çalıştırıcam. Sorgumuz şu şekilde görünecek:
Not: -- den sonra yazılan kod çalıştırılmayacaktır serverda
anlamı:
products tablosundan category sütünunda gifts'e eşit olan değerleri veya 54=54 eşit ise değerleri göster
54, 54 e eşit olacağından dolayı tüm değerleri görücez.
bunu URL de çalıştırdığımız zaman tüm ürünleri görmüş olucaz. ( biraz emoji ekliyim kuru kuru olmaz )
vee başarılı.
LAB: SQL injection vulnerability allowing login bypass
Bu sitemizde sql açığının olduğunu biliyoruz biz de bu açık sayesinde login olucaz. Kullanıcı adını bildiğimizi farz edicez amacımız parolayı bypasslemek.
login sayfasına giriyoruz..
ve girdik.
Kullanıcı adı "administrator" ama parola ??
bizim yapacağımız login bypass örneği istediğimiz kullanıcıyla giriş yapmak
bu yüzden:
username: administrator'--
password: 123456
passworda ne yazacağımız önemsiz, "123456" yazmamızın sebebi maksat password inputu dolu olsun. yoksa hata verebilir.
sorgu şu şekilde çalışacak:
ben bilerek siz görün diye html kodlarından password inputundaki yazı türünü passworddan kaldırıp text yaptım.
Kaldırmasaydım göremeyecektiniz ne yazdığımı, yani normal şartlarda görünmez bu tür yerler bildiğiniz üzere.
log in dedik vee...
başarılı.
Not: bu bypasse izin veren bir SQL açığı çok tehlikelidir.
LAB: SQL injection with filter bypass via XML encoding
Şimdiye kadar tüm laboratuvarlarda, kötü amaçlı SQL yükümüzü enjekte etmek için sorgu dizesini kullandık. Ancak, uygulama tarafından SQL sorgusu olarak işlenen herhangi bir kontrol edilebilir girişi kullanarak SQL enjeksiyon saldırıları gerçekleştirebileceğinizi belirtmek önemlidir. Örneğin, bazı web siteleri JSON veya XML biçiminde girdi alır ve veritabanını sorgulamak için bunu kullanır.
Bu farklı formatlar sizin için alternatif yollar bile sağlayabilir obfuscate attacks aksi takdirde WAF'lar ve diğer savunma mekanizmaları nedeniyle engellenir. Zayıf uygulamalar genellikle istek içinde yaygın SQL enjeksiyon anahtar kelimelerini arar, bu nedenle yasaklanmış anahtar kelimelerdeki karakterleri kodlayarak veya kaçarak bu filtreleri atlayabilirsiniz. Örneğin, aşağıdaki XML tabanlı SQL enjeksiyonu, XML kaçış sırası kullanır S karakteri encode edilir SELECT kelimesinden:
Bu, SQL interpretere iletilmeden önce server-side'da çözülür.
şimdik SQL açığı ile admin giriş bilgilerini serverdan çekicez.
ilk önce BurpSuite'imizden Intercept'i ve BurpProxy'imizi açalım.
tamamdır.. şimdi anasayfaya dönelim. ve herhangi bir içeriğe tıklayalım.
örneğin şu limon yiyen adam içeriğine girelim. ve stoklara bakalım. Tabi BurpSuite ile intercept ettiğimizden dolayı bu paketleri yakalayacağız.
normalde buraya bastığımızda kaç stok var onu görürüz. Şimdi bu butona basalım.
bu paketi repeater'a atıp burdan forwardlayalım burda işimiz bitti çünkü.
ben burada storeid kısmıyla oynayacağım isterseniz ORDER BY vs. yazabilirsiniz ama ona gerek yok elimizde mükemmel bir komut var. order by sayısı umursanılmadan union select ile istediğimiz kadar veri çekeceğiz yani verileri çekmek için silip yazmamıza gerek yok ikide bir.
örneğin ben union select ile users tablosundan username çekeceğim bakalım ne olacak.
vee "Attack Detected" dedi gördüğünüz gibi
şimdi Hackvertor aracıyla bunu bypassliyeceğiz.
Öncelikle aracı indirelim. Extensions>BApp Store>Hackvertor>Install
bende Install yerine Reinstall yazıyor çünkü ben daha önce indirmiştim.
şimdi paketimize dönelim sağ click extensionstan hackvertor deyip hex_entities kullanacağız ve bu etiket içinde union select kodumuzu çalıştıracağız.
gördüğünüz gibi oldu username leri çektik db den
şimdi username-password şeklinde çekeceğiz.
evet password böyle geldi büyük ihtimal hashlidir. Genelde bu tür parolalar hashli olur arkadaşlar bilginiz olsun.
Ben ilk önce parola olarak deniyeceğim bu şifreyi,
eğer yanlış derse hashi kıracağım ve öyle deneyeceğim.
Not: kodumuz şu:
şimdi log in paneline girelim.
girdik.
username ve password yazarken ben yine html kodlarıyla oynayıp siz parolayı görün diye type ı değiştirdim.
log in olmaya çalışalım.
evet girdi.
bu da başarılı.
umarım beğenmişsinizdir konumu ilk özgün konum olucak.
Biraz yanlışlarım olabilir bu yüzden.
Lütfen yorumlarda (varsa) önerilerinizi ve şikayetlerinizi belirtin.
Konumu okuduğunuz için teşekkür ederim.
Kaynaklar:
Port Swigger
Bazı İngilizce Terimler ve Anlamları:
Released: Piyasaya Sürülmüş
query: Sorgu
log in: Giriş yapma
input: Girdi
repeater: BurpSuite'in paketlerdeyken bazı değişkenlerlerle oynayarak ve bu istekleri tekrar tekrar yollayarak gelen cevapları kontrol etmemizi sağlayan bir özelliği
forward: BurpSuite'in Intercept özelliğini açtıktan sonra gelen paketleri yollama butonudur.
interpreter: Yorumlayıcı
server-side: Sunucu Tarafı
Lab 1 - gizlenmiş bilgileri bulmak
Lab 2 - login bypass
Lab 3 - veri çekme
ilk özgün konum olucak.
Bazı İngilizce Terimler ve Anlamları başlığını konunun son kısımlarında yazdım isterseniz ilk önce orayıda okuyabilirsiniz.
Hadi başlayalım.
LAB: SQL injection vulnerability in WHERE clause allowing retrieval of hidden data
Bir websitemiz var ve farklı farklı kategorilerde ürün satıyorlar. Örneğin biz gifts kategorisine gireceğiz.
Ve bize şöyle bir URL verecektir:
.https://acikli-site.com/products?category=Gifts
ve RELEASED olanları gösterecektir.
Yani Gifts'e tıkladığımızda sorgu şu şekilde olacak:
SQL:
SELECT * FROM products WHERE category = 'Gifts' AND released = 1
Biz de bir query yaparak hem tüm kategorileri göreceğiz hem de released olan ve olmayanları bir arada göreceğiz.
bizim istediğimiz sorgumuzda "category" sütünumuzda "sadece gifts değerlerinde olanlar" gösterilmesin, (hepsi gösterilsin) bu sorgunun çalışması için bir çok yöntem var ben;
1' OR 1=1--
örneğini çalıştırıcam. Sorgumuz şu şekilde görünecek:
SQL:
SELECT * FROM products WHERE category = 'Gifts' OR 54=54--' AND released = 1
Not: -- den sonra yazılan kod çalıştırılmayacaktır serverda
anlamı:
products tablosundan category sütünunda gifts'e eşit olan değerleri veya 54=54 eşit ise değerleri göster
54, 54 e eşit olacağından dolayı tüm değerleri görücez.
bunu URL de çalıştırdığımız zaman tüm ürünleri görmüş olucaz. ( biraz emoji ekliyim kuru kuru olmaz )
vee başarılı.
LAB: SQL injection vulnerability allowing login bypass
Bu sitemizde sql açığının olduğunu biliyoruz biz de bu açık sayesinde login olucaz. Kullanıcı adını bildiğimizi farz edicez amacımız parolayı bypasslemek.
login sayfasına giriyoruz..
ve girdik.
Kullanıcı adı "administrator" ama parola ??
bizim yapacağımız login bypass örneği istediğimiz kullanıcıyla giriş yapmak
bu yüzden:
username: administrator'--
password: 123456
passworda ne yazacağımız önemsiz, "123456" yazmamızın sebebi maksat password inputu dolu olsun. yoksa hata verebilir.
sorgu şu şekilde çalışacak:
SQL:
SELECT * FROM users WHERE username = 'administrator'--' AND password = '123456'
ben bilerek siz görün diye html kodlarından password inputundaki yazı türünü passworddan kaldırıp text yaptım.
Kaldırmasaydım göremeyecektiniz ne yazdığımı, yani normal şartlarda görünmez bu tür yerler bildiğiniz üzere.
log in dedik vee...
başarılı.
Not: bu bypasse izin veren bir SQL açığı çok tehlikelidir.
LAB: SQL injection with filter bypass via XML encoding
Şimdiye kadar tüm laboratuvarlarda, kötü amaçlı SQL yükümüzü enjekte etmek için sorgu dizesini kullandık. Ancak, uygulama tarafından SQL sorgusu olarak işlenen herhangi bir kontrol edilebilir girişi kullanarak SQL enjeksiyon saldırıları gerçekleştirebileceğinizi belirtmek önemlidir. Örneğin, bazı web siteleri JSON veya XML biçiminde girdi alır ve veritabanını sorgulamak için bunu kullanır.
Bu farklı formatlar sizin için alternatif yollar bile sağlayabilir obfuscate attacks aksi takdirde WAF'lar ve diğer savunma mekanizmaları nedeniyle engellenir. Zayıf uygulamalar genellikle istek içinde yaygın SQL enjeksiyon anahtar kelimelerini arar, bu nedenle yasaklanmış anahtar kelimelerdeki karakterleri kodlayarak veya kaçarak bu filtreleri atlayabilirsiniz. Örneğin, aşağıdaki XML tabanlı SQL enjeksiyonu, XML kaçış sırası kullanır S karakteri encode edilir SELECT kelimesinden:
XML:
<stockCheck>
<productId>
123
</productId>
<storeId>
999 SELECT * FROM information_schema.tables
</storeId>
</stockCheck>
Bu, SQL interpretere iletilmeden önce server-side'da çözülür.
şimdik SQL açığı ile admin giriş bilgilerini serverdan çekicez.
ilk önce BurpSuite'imizden Intercept'i ve BurpProxy'imizi açalım.
tamamdır.. şimdi anasayfaya dönelim. ve herhangi bir içeriğe tıklayalım.
örneğin şu limon yiyen adam içeriğine girelim. ve stoklara bakalım. Tabi BurpSuite ile intercept ettiğimizden dolayı bu paketleri yakalayacağız.
normalde buraya bastığımızda kaç stok var onu görürüz. Şimdi bu butona basalım.
bu paketi repeater'a atıp burdan forwardlayalım burda işimiz bitti çünkü.
ben burada storeid kısmıyla oynayacağım isterseniz ORDER BY vs. yazabilirsiniz ama ona gerek yok elimizde mükemmel bir komut var. order by sayısı umursanılmadan union select ile istediğimiz kadar veri çekeceğiz yani verileri çekmek için silip yazmamıza gerek yok ikide bir.
örneğin ben union select ile users tablosundan username çekeceğim bakalım ne olacak.
vee "Attack Detected" dedi gördüğünüz gibi
şimdi Hackvertor aracıyla bunu bypassliyeceğiz.
Öncelikle aracı indirelim. Extensions>BApp Store>Hackvertor>Install
bende Install yerine Reinstall yazıyor çünkü ben daha önce indirmiştim.
şimdi paketimize dönelim sağ click extensionstan hackvertor deyip hex_entities kullanacağız ve bu etiket içinde union select kodumuzu çalıştıracağız.
gördüğünüz gibi oldu username leri çektik db den
şimdi username-password şeklinde çekeceğiz.
evet password böyle geldi büyük ihtimal hashlidir. Genelde bu tür parolalar hashli olur arkadaşlar bilginiz olsun.
Ben ilk önce parola olarak deniyeceğim bu şifreyi,
eğer yanlış derse hashi kıracağım ve öyle deneyeceğim.
Not: kodumuz şu:
SQL:
UNION SELECT username || '-' || password FROM users
şimdi log in paneline girelim.
girdik.
username ve password yazarken ben yine html kodlarıyla oynayıp siz parolayı görün diye type ı değiştirdim.
log in olmaya çalışalım.
evet girdi.
bu da başarılı.
umarım beğenmişsinizdir konumu ilk özgün konum olucak.
Biraz yanlışlarım olabilir bu yüzden.
Lütfen yorumlarda (varsa) önerilerinizi ve şikayetlerinizi belirtin.
Konumu okuduğunuz için teşekkür ederim.
Kaynaklar:
Port Swigger
Bazı İngilizce Terimler ve Anlamları:
Released: Piyasaya Sürülmüş
query: Sorgu
log in: Giriş yapma
input: Girdi
repeater: BurpSuite'in paketlerdeyken bazı değişkenlerlerle oynayarak ve bu istekleri tekrar tekrar yollayarak gelen cevapları kontrol etmemizi sağlayan bir özelliği
forward: BurpSuite'in Intercept özelliğini açtıktan sonra gelen paketleri yollama butonudur.
interpreter: Yorumlayıcı
server-side: Sunucu Tarafı
Son düzenleme: