SQLi İle Birçok Güvenlik Açığını Sömürdük

Agent-47

Katılımcı Üye
23 Mar 2023
411
257
HACKERİSTAN
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.

b54muvt.jpg


Ve bize şöyle bir URL verecektir:

8zito7j.jpg


.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.
oskxwvq.jpg


bunu URL de çalıştırdığımız zaman tüm ürünleri görmüş olucaz. :) ( biraz emoji ekliyim kuru kuru olmaz :D )
lgpmq6h.jpg


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..


21ysqrr.jpg



ve girdik.

107jodk.jpg



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.


ng8ados.jpg


log in dedik vee...

nsjertd.jpg

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 &#x53;ELECT * 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.

e6bqmye.jpg


tamamdır.. şimdi anasayfaya dönelim. ve herhangi bir içeriğe tıklayalım.

7rck9rg.jpg


ö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.

ncenbub.jpg


normalde buraya bastığımızda kaç stok var onu görürüz. Şimdi bu butona basalım.

36przhd.jpg


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.

fz2uefo.jpg


vee "Attack Detected" dedi gördüğünüz gibi :D
şimdi
Hackvertor aracıyla bunu bypassliyeceğiz.
Öncelikle aracı indirelim.
Extensions>BApp Store>Hackvertor>Install

lw5bpz7.jpg


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.

9fvq39q.jpg


gördüğünüz gibi oldu username leri çektik db den :)

şimdi
username-password şeklinde çekeceğiz.

fei9d55.jpg


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.

qh2nxim.jpg


girdik.

username ve password yazarken ben yine html kodlarıyla oynayıp siz parolayı görün diye type ı değiştirdim.


kx6cehb.jpg


log in olmaya çalışalım.

m1lcd9k.jpg


evet girdi. :)

lxy4onl.jpg


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ı

4xf38dg.jpg
 
Son düzenleme:

Leynthor

Yeni üye
24 Nis 2023
7
2
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.

b54muvt.jpg


Ve bize şöyle bir URL verecektir:

8zito7j.jpg


.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.
oskxwvq.jpg


bunu URL de çalıştırdığımız zaman tüm ürünleri görmüş olucaz. :) ( biraz emoji ekliyim kuru kuru olmaz :D )
lgpmq6h.jpg


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..


21ysqrr.jpg



ve girdik.

107jodk.jpg



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.


ng8ados.jpg


log in dedik vee...

nsjertd.jpg

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 &#x53;ELECT * 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.

e6bqmye.jpg


tamamdır.. şimdi anasayfaya dönelim. ve herhangi bir içeriğe tıklayalım.

7rck9rg.jpg


ö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.

ncenbub.jpg


normalde buraya bastığımızda kaç stok var onu görürüz. Şimdi bu butona basalım.

36przhd.jpg


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.

fz2uefo.jpg


vee "Attack Detected" dedi gördüğünüz gibi :D
şimdi
Hackvertor aracıyla bunu bypassliyeceğiz.
Öncelikle aracı indirelim.
Extensions>BApp Store>Hackvertor>Install

lw5bpz7.jpg


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.

9fvq39q.jpg


gördüğünüz gibi oldu username leri çektik db den :)

şimdi
username-password şeklinde çekeceğiz.

fei9d55.jpg


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.

qh2nxim.jpg


girdik.

username ve password yazarken ben yine html kodlarıyla oynayıp siz parolayı görün diye type ı değiştirdim.


kx6cehb.jpg


log in olmaya çalışalım.

m1lcd9k.jpg


evet girdi. :)

lxy4onl.jpg


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ı
Eline sağlık kulüp arkadaşım
 
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.

b54muvt.jpg


Ve bize şöyle bir URL verecektir:

8zito7j.jpg


.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.
oskxwvq.jpg


bunu URL de çalıştırdığımız zaman tüm ürünleri görmüş olucaz. :) ( biraz emoji ekliyim kuru kuru olmaz :D )
lgpmq6h.jpg


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..


21ysqrr.jpg



ve girdik.

107jodk.jpg



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.


ng8ados.jpg


log in dedik vee...

nsjertd.jpg

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 &#x53;ELECT * 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.

e6bqmye.jpg


tamamdır.. şimdi anasayfaya dönelim. ve herhangi bir içeriğe tıklayalım.

7rck9rg.jpg


ö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.

ncenbub.jpg


normalde buraya bastığımızda kaç stok var onu görürüz. Şimdi bu butona basalım.

36przhd.jpg


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.

fz2uefo.jpg


vee "Attack Detected" dedi gördüğünüz gibi :D
şimdi
Hackvertor aracıyla bunu bypassliyeceğiz.
Öncelikle aracı indirelim.
Extensions>BApp Store>Hackvertor>Install

lw5bpz7.jpg


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.

9fvq39q.jpg


gördüğünüz gibi oldu username leri çektik db den :)

şimdi
username-password şeklinde çekeceğiz.

fei9d55.jpg


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.

qh2nxim.jpg


girdik.

username ve password yazarken ben yine html kodlarıyla oynayıp siz parolayı görün diye type ı değiştirdim.


kx6cehb.jpg


log in olmaya çalışalım.

m1lcd9k.jpg


evet girdi. :)

lxy4onl.jpg


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ı
Eline sağlık
 

Agent-47

Katılımcı Üye
23 Mar 2023
411
257
HACKERİSTAN
ellerinize sağlık
Eline emeğine sağlık dostum ❤️
çok teşekkür ederim. 💙 :)
Eline sağlık kulüp arkadaşım
sağol kulüp arkadaşım :D
teşekkür ederim hocam :)
Eline emeğine sağlık
hepinize tek tek teşekkür ederim 💚
 

memu.exe

Üye
24 Mar 2023
70
63
lol
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.

b54muvt.jpg


Ve bize şöyle bir URL verecektir:

8zito7j.jpg


.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.
oskxwvq.jpg


bunu URL de çalıştırdığımız zaman tüm ürünleri görmüş olucaz. :) ( biraz emoji ekliyim kuru kuru olmaz :D )
lgpmq6h.jpg


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..


21ysqrr.jpg



ve girdik.

107jodk.jpg



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.


ng8ados.jpg


log in dedik vee...

nsjertd.jpg

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 &#x53;ELECT * 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.

e6bqmye.jpg


tamamdır.. şimdi anasayfaya dönelim. ve herhangi bir içeriğe tıklayalım.

7rck9rg.jpg


ö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.

ncenbub.jpg


normalde buraya bastığımızda kaç stok var onu görürüz. Şimdi bu butona basalım.

36przhd.jpg


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.

fz2uefo.jpg


vee "Attack Detected" dedi gördüğünüz gibi :D
şimdi
Hackvertor aracıyla bunu bypassliyeceğiz.
Öncelikle aracı indirelim.
Extensions>BApp Store>Hackvertor>Install

lw5bpz7.jpg


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.

9fvq39q.jpg


gördüğünüz gibi oldu username leri çektik db den :)

şimdi
username-password şeklinde çekeceğiz.

fei9d55.jpg


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.

qh2nxim.jpg


girdik.

username ve password yazarken ben yine html kodlarıyla oynayıp siz parolayı görün diye type ı değiştirdim.


kx6cehb.jpg


log in olmaya çalışalım.

m1lcd9k.jpg


evet girdi. :)

lxy4onl.jpg


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ı

4xf38dg.jpg
eline sağlık dostum benimkinden daha detaylı ve daha hoş olmuş
 

ashpelia

Üye
26 Nis 2023
65
20
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.

b54muvt.jpg


Ve bize şöyle bir URL verecektir:

8zito7j.jpg


.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.
oskxwvq.jpg


bunu URL de çalıştırdığımız zaman tüm ürünleri görmüş olucaz. :) ( biraz emoji ekliyim kuru kuru olmaz :D )
lgpmq6h.jpg


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..


21ysqrr.jpg



ve girdik.

107jodk.jpg



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.


ng8ados.jpg


log in dedik vee...

nsjertd.jpg

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 &#x53;ELECT * 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.

e6bqmye.jpg


tamamdır.. şimdi anasayfaya dönelim. ve herhangi bir içeriğe tıklayalım.

7rck9rg.jpg


ö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.

ncenbub.jpg


normalde buraya bastığımızda kaç stok var onu görürüz. Şimdi bu butona basalım.

36przhd.jpg


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.

fz2uefo.jpg


vee "Attack Detected" dedi gördüğünüz gibi :D
şimdi
Hackvertor aracıyla bunu bypassliyeceğiz.
Öncelikle aracı indirelim.
Extensions>BApp Store>Hackvertor>Install

lw5bpz7.jpg


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.

9fvq39q.jpg


gördüğünüz gibi oldu username leri çektik db den :)

şimdi
username-password şeklinde çekeceğiz.

fei9d55.jpg


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.

qh2nxim.jpg


girdik.

username ve password yazarken ben yine html kodlarıyla oynayıp siz parolayı görün diye type ı değiştirdim.


kx6cehb.jpg


log in olmaya çalışalım.

m1lcd9k.jpg


evet girdi. :)

lxy4onl.jpg


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ı

4xf38dg.jpg
elinize sağlık
 

Agent-47

Katılımcı Üye
23 Mar 2023
411
257
HACKERİSTAN
sağolun hocam
Eline koluna sağlık🤍
teşekkürler hocam
teşekkürler :)
Eline sağlık, güzel olmuş, yararlı.
teşekkür ederim hocam ❤️
sağolun hocam :D
eline sağlık dostum benimkinden daha detaylı ve daha hoş olmuş
sağ ol, senin attığına bakıcaktım grupta da bulamadım. Link atar mısın
teşekkürler :)
 

P4$A

Anka Emektar
13 Tem 2021
1,486
2,804
23
";-alert(1)-//
real de yaptığımız şeyler lab da gösterilmiş, yararı var ama waf bypass gelirse görürsünüz o 'or 1=1-- ciler far tutulmuş tavşan gibi kalıyor
 

Grimner

Adanmış Üye
28 Mar 2020
6,309
4,719
Yeni başlayacaklar için yararlı bir içeriğe benziyor. Eline sağlık.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.