.. | ||
ret2lib | ||
pointer-redirecting.md | ||
README.md | ||
ret2csu.md | ||
ret2dlresolve.md | ||
ret2esp-ret2reg.md | ||
ret2ret.md | ||
ret2shellcode.md | ||
ret2win.md | ||
rop-return-oriented-programing.md | ||
rop-syscall-execv.md | ||
srop-sigreturn-oriented-programming.md | ||
stack-pivoting-ebp2ret-ebp-chaining.md | ||
stack-shellcode.md |
Stack Overflow
{% 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.
What is a Stack Overflow
рдПрдХ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рдХрдордЬреЛрд░реА рд╣реИ рдЬреЛ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрдЯреИрдХ рдореЗрдВ рдЙрд╕ рдбреЗрдЯрд╛ рд╕реЗ рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рд▓рд┐рдЦрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕реЗ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рд╕рдиреНрдирд┐рд╣рд┐рдд рдореЗрдореЛрд░реА рд╕реНрдерд╛рди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рд╡реИрдз рдбреЗрдЯрд╛ рдХрд╛ рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░, рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдореЗрдВ рд╡рд┐рдШрдЯрди, рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХреЛрдб рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЕрдХреНрд╕рд░ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ рдЬреЛ рдЗрдирдкреБрдЯ рдкрд░ рд╕реАрдорд╛ рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВред
рдЗрд╕ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХреА рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рдирд┐рд░реНрджреЗрд╢ рд╕реВрдЪрдХрд╛рдВрдХ (EIP/RIP) рдФрд░ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рдЖрдзрд╛рд░ рд╕реВрдЪрдХрд╛рдВрдХ (EBP/RBP) рдЬреЛ рдкрд┐рдЫрд▓реЗ рдХрд╛рд░реНрдп рдореЗрдВ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВ, рд╕реНрдЯреИрдХ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдЙрдиреНрд╣реЗрдВ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХреЗрдЧрд╛ред
рдпрд╣ рд╕реБрд░рдХреНрд╖рд╛ рдХрдордЬреЛрд░реА рдЖрдорддреМрд░ рдкрд░ рдЗрд╕рд▓рд┐рдП рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдХрд╛рд░реНрдп рд╕реНрдЯреИрдХ рдХреЗ рдЕрдВрджрд░ рдЖрд╡рдВрдЯрд┐рдд рдорд╛рддреНрд░рд╛ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рд╕реНрдЯреИрдХ рдХреЗ рдЕрдиреНрдп рднрд╛рдЧреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рд╣реИрдВ: strcpy
, strcat
, sprintf
, gets
... рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, fgets
рдпрд╛ read
рдЬреИрд╕реЗ рдХрд╛рд░реНрдп, рдЬреЛ рд▓рдВрдмрд╛рдИ рддрд░реНрдХ рд▓реЗрддреЗ рд╣реИрдВ, рдпрджрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд▓рдВрдмрд╛рдИ рдЖрд╡рдВрдЯрд┐рдд рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ рддреЛ рдХрдордЬреЛрд░ рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрдордЬреЛрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
void vulnerable() {
char buffer[128];
printf("Enter some text: ");
gets(buffer); // This is where the vulnerability lies
printf("You entered: %s\n", buffer);
}
Stack Overflows рдвреВрдВрдврдирд╛
Stack overflows рдвреВрдВрдврдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХрд╛ A
s рдХрд╛ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдЗрдирдкреБрдЯ рджреЗрдирд╛ рд╣реИ (рдЬреИрд╕реЗ python3 -c 'print("A"*1000)'
) рдФрд░ рдПрдХ Segmentation Fault
рдХреА рдЙрдореНрдореАрдж рдХрд░рдирд╛ рдЬреЛ рдпрд╣ рд╕рдВрдХреЗрдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкрддрд╛ 0x41414141
рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЧрдИ рдереАред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ Stack Overflow рдХреА рдХрдордЬреЛрд░реА рд╣реИ, рддреЛ рдЖрдкрдХреЛ return address рдХреЛ overwrite рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдлрд╕реЗрдЯ рдвреВрдВрдврдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдорддреМрд░ рдкрд░ De Bruijn sequence рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреЛ рдПрдХ рджрд┐рдП рдЧрдП рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХреЗ рдЖрдХрд╛рд░ k рдФрд░ рд▓рдВрдмрд╛рдИ n рдХреЗ рдЙрдкрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрдХреНрд░реАрдп рдЕрдиреБрдХреНрд░рдо рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд▓рдВрдмрд╛рдИ n рдХреЗ рд╣рд░ рд╕рдВрднрд╡ рдЙрдкрдХреНрд░рдо рдХреЛ рдареАрдХ рдПрдХ рдмрд╛рд░ рдПрдХ рд╕рдиреНрдирд┐рд╣рд┐рдд рдЙрдкрдХреНрд░рдо рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рддрд░рд╣, EIP рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдСрдлрд╕реЗрдЯ рдХреЛ рд╣рд╛рде рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЗрди рдЕрдиреБрдХреНрд░рдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдкреИрдбрд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдФрд░ рдлрд┐рд░ рдЙрди рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдСрдлрд╕реЗрдЯ рдвреВрдВрдврдирд╛ рдЬреЛ рдЗрд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдиреЗ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╣реИрдВред
рдЗрд╕рдХреЗ рд▓рд┐рдП pwntools рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ:
from pwn import *
# Generate a De Bruijn sequence of length 1000 with an alphabet size of 256 (byte values)
pattern = cyclic(1000)
# This is an example value that you'd have found in the EIP/IP register upon crash
eip_value = p32(0x6161616c)
offset = cyclic_find(eip_value) # Finds the offset of the sequence in the De Bruijn pattern
print(f"The offset is: {offset}")
рдпрд╛ GEF:
#Patterns
pattern create 200 #Generate length 200 pattern
pattern search "avaaawaa" #Search for the offset of that substring
pattern search $rsp #Search the offset given the content of $rsp
рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛрдЬрд╝ рдХрд╛ рд╢реЛрд╖рдг
рдПрдХ рдУрд╡рд░рдлреНрд▓реЛ рдХреЗ рджреМрд░рд╛рди (рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рдУрд╡рд░рдлреНрд▓реЛ рдХрд╛ рдЖрдХрд╛рд░ рдкрд░реНрдпрд╛рдкреНрдд рдмрдбрд╝рд╛ рд╣реИ) рдЖрдк рд╕реНрдЯреИрдХ рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рдорд╛рдиреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░ рд╕рдХреЗрдВрдЧреЗ рдЬрдм рддрдХ рдХрд┐ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ EBP/RBP рдФрд░ EIP/RIP рддрдХ рдирд╣реАрдВ рдкрд╣реБрдБрдЪ рдЬрд╛рддреЗ (рдпрд╛ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ)ред
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рднреЗрджреНрдпрддрд╛ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХрд╛ рд╣реИ рд░рд┐рдЯрд░реНрди рдкрддреЗ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рддрд╛рдХрд┐ рдЬрдм рдлрд╝рдВрдХреНрд╢рди рд╕рдорд╛рдкреНрдд рд╣реЛ, рддреЛ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдЙрд╕ рдкрддреЗ рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рд╣реЛ рдЬрд╛рдП рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдиреНрдп рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ рд╕реНрдЯреИрдХ рдореЗрдВ рдХреБрдЫ рдЪрд░ рдХреЗ рдорд╛рдиреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдирд╛ рд╢реЛрд╖рдг рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдЖрд╕рд╛рди CTF рдЪреБрдиреМрддрд┐рдпреЛрдВ рдореЗрдВ)ред
Ret2win
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА CTF рдЪреБрдиреМрддрд┐рдпреЛрдВ рдореЗрдВ, рдмрд╛рдЗрдирд░реА рдХреЗ рдЕрдВрджрд░ рдПрдХ рдлрдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдХрднреА рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рдФрд░ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдЬреАрддрдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЗрди рдЪреБрдиреМрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд░рд┐рдЯрд░реНрди рдкрддреЗ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдлрд╕реЗрдЯ рдвреВрдВрдврдирд╛ рд╣реИ рдФрд░ рдмреБрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдлрдВрдХреНрд╢рди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реИ (рдЖрдорддреМрд░ рдкрд░ ASLR рдЕрдХреНрд╖рдо рд╣реЛрдЧрд╛) рддрд╛рдХрд┐ рдЬрдм рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдлрд╝рдВрдХреНрд╢рди рд▓реМрдЯреЗ, рддреЛ рдЫрд┐рдкрд╛ рд╣реБрдЖ рдлрд╝рдВрдХреНрд╢рди рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдП:
{% content-ref url="ret2win.md" %} ret2win.md {% endcontent-ref %}
рд╕реНрдЯреИрдХ рд╢реЗрд▓рдХреЛрдб
рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рд╣рдорд▓рд╛рд╡рд░ рд╕реНрдЯреИрдХ рдореЗрдВ рдПрдХ рд╢реЗрд▓рдХреЛрдб рд░рдЦ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдирд┐рдпрдВрддреНрд░рд┐рдд EIP/RIP рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢реЗрд▓рдХреЛрдб рдкрд░ рдХреВрдж рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдордирдЪрд╛рд╣рд╛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
{% content-ref url="stack-shellcode.md" %} stack-shellcode.md {% endcontent-ref %}
ROP
рдпрд╣ рддрдХрдиреАрдХ рдкрд┐рдЫрд▓реЗ рддрдХрдиреАрдХ рдХреА рдореБрдЦреНрдп рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореМрд▓рд┐рдХ рдврд╛рдВрдЪрд╛ рд╣реИ: рдХреЛрдИ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╕реНрдЯреИрдХ рдирд╣реАрдВ (NX)ред рдФрд░ рдпрд╣ рдХрдИ рдЕрдиреНрдп рддрдХрдиреАрдХреЛрдВ (ret2lib, ret2syscall...) рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдмрд╛рдЗрдирд░реА рдореЗрдВ рдореМрдЬреВрджрд╛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ рдордирдЪрд╛рд╣реЗ рдЖрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВрдЧреЗ:
{% content-ref url="rop-return-oriented-programing.md" %} rop-return-oriented-programing.md {% endcontent-ref %}
рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдкреНрд░рдХрд╛рд░
рднреЗрджреНрдпрддрд╛рдУрдВ рдХреЗ рд╢реЛрд╖рдг рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрд╛рдп рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рджреЗрдЦреЗрдВ:
{% content-ref url="../common-binary-protections-and-bypasses/" %} common-binary-protections-and-bypasses {% endcontent-ref %}
{% hint style="success" %}
AWS рд╣реИрдХрд┐рдВрдЧ рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ:HackTricks Training AWS Red Team Expert (ARTE)
GCP рд╣реИрдХрд┐рдВрдЧ рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ
- рд╕рджрд╕реНрдпрддрд╛ рдпреЛрдЬрдирд╛рдПрдБ рджреЗрдЦреЗрдВ!
- ЁЯТм Discord рд╕рдореВрд╣ рдпрд╛ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рд╕рдореВрд╣ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ рдпрд╛ Twitter ЁЯРж @hacktricks_live рдкрд░ рд╣рдореЗрдВ рдлреЙрд▓реЛ рдХрд░реЗрдВред**
- рд╣реИрдХрд┐рдВрдЧ рдЯреНрд░рд┐рдХреНрд╕ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ рдФрд░ HackTricks рдФрд░ HackTricks Cloud рдЧрд┐рдЯрд╣рдм рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдореЗрдВ PR рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВред