Merhaba değerli üyeler. Konu da Waf'lardan bahsedip nasıl atlatıldığı konusunda kısa bir yazı paylaşacağım.


WAF Nedir?


WAF'a güvenlik duvarı denebilir. Wf korumakla yükümlü olduğu yere gelen giden tüm request(istek)'leri kontrol eder ve bunları yapısına göre zararlı bağlantı veya güvenli bağlantı olarak ayırıp buna göre işlemini yapar. Zararlı bağlantıların işlem yapmasına izin vermez. Bu işlemler application üzerinde XSS Scriptleri çalıştırma veya Order By çekip Union select kullanımını engelleyebilir. Request'ler kontrol edildikten sonra temiz olması durumunda istek forward edilir. Waf'lar OSI Modelinde 7. katman olan Application'da çalışırlar. Waf'lar web güvenliği üzerinde çalışan herhangi bir kişinin kesin olarak bilmesi gereken bir durumdur. Bazı waf'lar sadece karakter engellemesi yaparken veya karakter filtrelemesi de denebilir, bazıları ise sadece bağlantıları kayıt altına alır zararlı olsa dahil içeri alır. Karakter filtreleyen waf'lar daha rahat bir şekilde atlatılmaktadır sebebini konu sonunda göreceksiniz. Waf'lar aynı zamanda gelen giden tüm istekleri kayıt altına alıp zararlı istekleri loglamaktadır. 3 tip Waf bulunur.


Beyaz Liste


İzin verilen bağlantılar dışındaki tüm bağlantıları kabul etmemekle yükümlüdür. Bu durum pek iyi değildir çünkü tam anlamıyla bir ayrım yapılamayacak ve zararsız olan bağlantılar dahil izin verilmemesi durumunda kabul edilemeyecektir.


Kara Liste


Zararlı bağlantıların yani izin verilmeyen bağlantıların tutulduğu bir listedir. Bu listede bulunan bağlantılar kabul edilmez. Tıpkı beyaz liste gibi yine dezavantajı bulunmaktadır, çünkü bu tip izin verilmeyenlerde olmayan bir zararlı bağlantıyı bünyesine katabilmektedir.


Karma Modeli


Kurumsal alanda bu tipin kullanımı fazladır, tercih edilir. Beyaz ve Kara listenin karması gibi ve daha düzenli uyumlu halidir.




Şimdi ise Waf yapılarına topology'lerine bakalım.


Port Mirroring Waf


Normalde Waf'lar Application ile User arasındaki bağlantılarda çalışıyor. Bu yapı öyle olmamakla gelen giden isteklere cevap vermekle yükümlüdür. Zararlı bir istek gelmesi durumunda bile ona cevap vermek ile yükümlüdür.


Cloud Waf


Bu yapı kendi güvenlik politikasını karşılamayan tüm bağlantıları bünyesine kabul etmemektedir. Esasi amacı saldırıları engellemektir. Web sitesinde scriptler çalıştırma, manuel zararlı işlemler yapılması durumunda hata verir. Bu hatalar 404 olabilir vey Not Allowed gibi izin verilmedi hataları olabilir. Kendisine gelen standart bir istekten farklı algıladığı istekleri kabul etmemekle kayıtlarını da tutmaktadır. Bu yapı tüm diğer yapılarla birlikte çalışabilir uyumludur.


Server Waf


Tercih edilmeyen bir Waf yapısı olmakla beraber Bypass edilmesi bir o kadar fazla durumdadır. Aynı zamanda bu yapı her kullanıcı ve sunucu arasında bağlantı kurduğu için maaliyeti de fazla olmaktadır.


Bir Web Sitesinde Waf Olduğunu Nasıl Anlarız


Çeşit çeşit yöntem bulunuyor bu konuda. Kullanılabilecek yöntemlerin bazıları Manuel bir şekilde tespit etmek, Shodan ile tespit etmek, Waf00f ile tespit etmektir. Manuel tespit etmekte örneğin web sitesinde bir xss script'i çalıştırdığımızda web sitenin bize vereceği mesaja göre waf olup olmadığını anlar hatta wafın yapısını bile görebiliriz. Waf00f aracı ile ise Linux sistemlerde Waf00f -a hedefsite.com şeklinde wafın tespiti yapılabilir.


Waf'lar Nasıl Atlatılıyor


Wafların atlatılmasının mantığı genel olarak aynı ama farklı uygulamalar farklı araçlar üzerinden yapılabiliyor. Waf'lar kendilerine gelen bazı scriptleri,karakterleri engeller ve bunların tespiti dahilinde hata verir ve hatta belki İP'nizi banlar. Bu karakterler örneğin union select işlemleri xss scriptleri, html kodları gibi olabilir. Wafları Bypass eden yani atlatan scriptlerin çoğunun mantığı buna dayanarak bu karakterleri karışık bir hale getirmektedir.


Örneğin union'u rastgele olarak harflerini büyük ve küçük yapar ve waf sistemini kandırmaya çalışabilir. XSS scriptlerinde ise kişi kendisi bunu yapmalıdır. Örneğin yerine önce scripti kapatıp tekrar açıp tekrar kapatabilir. Onerror işlemleri kullanabilir. Veya script kelimesini rastgele olarak büyü küçük yapabilir.


SQLmap'de Database çekilmeye çalışırken eğer waf varsa waf bizi engelleyecektir. Bunun için sqlmap'de Waf'ı bypass etmek için tamper bulunmaktadır. tamper içerisinde az önce bahsettiğim gibi karakterleri düzensiz bir hale getirip sistemi kandırmaktadır. Yapmanız gereken sadece database'i çekerken ki kodun yanına --tamper parametresini eklemektir. Eğer başarılı olursa koruyucu sistemi yani wafı atlatacak ve database'i çekecektir.


Bypass Scriptleri Örnekleri;


SQL Login bypass yönteminde de bazı örnekler vereyim. Onda da aynı şekilde girilen karakterlerin url hali kullanılabilir.


Normal hali :AND '1'='1

Bypass etmek için: AND %EF%BC%871%EF%BC%87=%EF%BC%871%EF%BC%87
Normal hali: AND '1'='1'
Bypass etmek için : AND %271%27=%271%27


Bu yöntem Percent Encoding olarak geçmektedir.

Sadece iki örnek. Bunun dışında 1=1 yerine 20=20 bile konulabilir. # işaretleri ile desteklenebilir bununda %ler ile yapılabilir. %27,%23,%EF vs. bunların ne olduğu konusunda Burp Suite üzerinden