1. Sorgu içeriğini kesin
Sorgudaki komut dosyalarını yoksaymak istemeniz durumunda. Örneğin, aşağıdaki işlem için sorgu active=1 koşulunu gerektirir ancak yorum yapabiliriz (--, -- -, -+, #, /*, /**/, // , ;%00…) ve boşver. Madencilik yaparken çoğu zaman sorgunun geri kalan içeriğinin ne işe yaradığını bilmiyoruz, dolayısıyla bu durumda yorumları kullanmak çok etkilidir.

Yorum yaptıktan sonra sorgumuz şu şekilde olur:
![Web5: SQL enjeksiyonu - Filtreleme mekanizmalarını atlamak için bazı teknikler Web5: SQL enjeksiyonu - Filtreleme mekanizmalarını atlamak için bazı teknikler]()
2. Anahtar kelime filtrelemeyi atlayın
A. Satır İçi Yorumlar
Satır içi yorumlar, beyaz alan filtrelemesini atlamak için çok etkili bir şekilde kullanılır. Boşluk filtrelemesini atlamak için şu karakterleri kullanabilirsiniz: /**/, %20, %09, %0a, %0b, %0c, %0d, %a0). Örneğin:
![Web5: SQL enjeksiyonu - Filtreleme mekanizmalarını atlamak için bazı teknikler Web5: SQL enjeksiyonu - Filtreleme mekanizmalarını atlamak için bazı teknikler]()
Veya anahtar kelime filtrelemeyi atlayın (MySql'de mevcuttur). Aşağıdaki örnekte, birleşim ve şifre anahtar kelimeleri kara listede olduğundan engellenmiştir. Bunu şu şekilde atlayabiliriz:
![Web5: SQL enjeksiyonu - Filtreleme mekanizmalarını atlamak için bazı teknikler Web5: SQL enjeksiyonu - Filtreleme mekanizmalarını atlamak için bazı teknikler]()
B. Anahtar kelimeleri değiştirin
SQL enjeksiyonunu kullanırken sıklıkla şu anahtar sözcükleri kullanırız: union, select, information_schema... Çoğu durumda, programcılar yalnızca bu anahtar sözcükleri değiştirirler:
![Web5: SQL enjeksiyonu - Filtreleme mekanizmalarını atlamak için bazı teknikler Web5: SQL enjeksiyonu - Filtreleme mekanizmalarını atlamak için bazı teknikler]()
Yukarıdaki işlem kodunun eksik olduğunu rahatlıkla görebiliriz. Eğer mesele yalnızca desen eşleştirmeyse, bypass son derece basittir. Büyük ve küçük harflerin farklı şekilde yorumlandığı büyük/küçük harf duyarlılığını uygulayalım.
Şimdi anahtar kelimeyi kullanmak yerine:
select, union…
Kullanacağız:
SeLEcT, UniOn…
Bu atlamanın temeli, veritabanı yönetim sistemlerinin vaka ve vaka anahtar kelimeleri arasında ayrım yapmamasıdır.
Bazı durumlarda, web uygulaması belirli anahtar kelimelerin tamamını veya bir kısmını filtreleyecektir (birleşim, seçim...). Aşağıdaki gibi atlayacağız:
id=1+uniunionon+SeLselectecT+1,2,3-- -
Birleştirme ve seçme işlemleri web uygulaması tarafından filtrelendikten sonra elimizde aşağıdaki gibi doğru sorgu kalacak:
id=1+union+SeLecT+1,2,3-- -
C. Karakter kodlaması
WAF (Web Uygulama Güvenlik Duvarı) anahtar kelimeleri kodlayarak engellediğinde bypass edebiliriz. Birçok WAF uygulaması sorgunun kodunu yalnızca bir kez çözer ve kara listedeki anahtar kelimeleri filtreler, ardından isteği iki kez kodlayalım, böylece bu durumda atlanabilir.
![Web5: SQL enjeksiyonu - Filtreleme mekanizmalarını atlamak için bazı teknikler Web5: SQL enjeksiyonu - Filtreleme mekanizmalarını atlamak için bazı teknikler]()
3. Tek ve çift tırnak işaretlerini engelleyin
- Bu bypass hakkında özel olarak bilgi edinmeden önce bir örneğe bakalım.
![Web5: SQL enjeksiyonu - Filtreleme mekanizmalarını atlamak için bazı teknikler Web5: SQL enjeksiyonu - Filtreleme mekanizmalarını atlamak için bazı teknikler]()
Bu senaryoda veritabanımızda kullanıcılar isimli bir tablomuz var. Bir sonraki iş, bilgisini almak için tablodaki sütun adını bilmektir. Yukarıdaki sorguda olduğu gibi şu koşulu kullanıyoruz: table_name='users'. Ancak hem tek tırnak (') hem de çift tırnak (") WAF tarafından engellenmişse, artık 'kullanıcılar' veya 'kullanıcılar' kullanamayız. Peki bu sorunu nasıl çözebiliriz? Yerleşik veritabanı sistemi bize şu işlevi verir: CHAR( ) işlevi bu sorunu çok iyi çözer (Oracle için CHR()'dir). Örneğin, yukarıdaki sorguda onu şu şekilde atlayacağız:
![Web5: SQL enjeksiyonu - Filtreleme mekanizmalarını atlamak için bazı teknikler Web5: SQL enjeksiyonu - Filtreleme mekanizmalarını atlamak için bazı teknikler]()
![Web5: SQL enjeksiyonu - Filtreleme mekanizmalarını atlamak için bazı teknikler Web5: SQL enjeksiyonu - Filtreleme mekanizmalarını atlamak için bazı teknikler]()
PHP programcıları addlashes() fonksiyonuna oldukça aşinadır. Addslashes() fonksiyonu, veritabanı yönetim sistemine yardımcı olmak için tek tırnak ('), çift tırnak ("), ters eğik çizgi (\), NUL (boş bayt) karakteri "\" gibi özel karakterlerin önüne ekleme etkisine sahiptir. Bu karakterleri içeren dizeleri işlerken herhangi bir zorluk veya karışıklık olmuyor mu? Böylece, sorguya komut dosyasına göre enjekte etmek istediğimizde: name='someName' veya '1'='1'-- Sonuçlar artık beklediğimiz gibi değil.
Ancak, tek tırnak karakterlerini (') eklemek için addslashes() işlevini atlamanın bir tekniği vardır. Bu teknik oldukça uzun zamandır halka açıktır ve bu tekniğin uygulanması, web sitesine uygulanan kodlama stiline bağlı olduğundan oldukça zordur.
4. "UNION işlemi için yasadışı harmanlama karışımı" hatasını atlayın
Bazı yönetim sistemlerinde (genellikle MySql'de bulunur), veritabanları ve tablolar harmanlamaya ayarlandığında, UNION anahtar kelimesi kullanıldığında, "UNION işlemi için yasa dışı harmanlama karışımı" hatası bildirilecektir. Harmanlamanın ayarlanması, veritabanı tasarımcısının amacı veya MySql'in varsayılan ayarı nedeniyle olabilir. Birleşim kullanılması durumunda, her alandaki değer seçme koşulunun karşılık gelen kod tipinin tanımlanmış olmasını sağlamalıyız. Bana göre bu hata oldukça yaygındır, özellikle Apache MySql çalıştıran CMS'ler için. İnsanlar şu adresten daha fazla bilgi edinebilir: http://bugs.mysql.com/bug.php?id=57926.
Bu durumda uygun kodlama türüne dönüştürmenin yollarını kullanabiliriz.
Örneğin aşağıdaki durumda:
![Web5: SQL enjeksiyonu - Filtreleme mekanizmalarını atlamak için bazı teknikler Web5: SQL enjeksiyonu - Filtreleme mekanizmalarını atlamak için bazı teknikler]()
Yukarıdaki sorguda, örneğin sütun1'de harmanlama Unicode-UTF8 veya _latin1 olarak ayarlanmışsa, sütun2'den seçilenin ilgili koda dönüştürülmesi gerekecektir. Stili şu şekilde zorlayabiliriz:
![Web5: SQL enjeksiyonu - Filtreleme mekanizmalarını atlamak için bazı teknikler Web5: SQL enjeksiyonu - Filtreleme mekanizmalarını atlamak için bazı teknikler]()
Bu bypass yönteminde bir dezavantaj görüyoruz: harmanlanan kodun _latin1 olduğunu bilmemiz gerekiyor. Bana göre bunu atlamanın daha iyi bir yolu, hex ve unhex kodlama ve kod çözme işlevlerini kullanmaktır.
![Web5: SQL enjeksiyonu - Filtreleme mekanizmalarını atlamak için bazı teknikler Web5: SQL enjeksiyonu - Filtreleme mekanizmalarını atlamak için bazı teknikler]()
Hex ve unhex yerine kullanılabilecek birçok başka işlev vardır.