Off by one overflow

AWS рд╣реИрдХрд┐рдВрдЧ рд╕реАрдЦреЗрдВ рдФрд░ рдкреНрд░реИрдХреНрдЯрд┐рд╕ рдХрд░реЗрдВ:HackTricks рдкреНрд░рд╢рд┐рдХреНрд╖рдг AWS рд░реЗрдб рдЯреАрдо рдПрдХреНрд╕рдкрд░реНрдЯ (ARTE) GCP рд╣реИрдХрд┐рдВрдЧ рд╕реАрдЦреЗрдВ рдФрд░ рдкреНрд░реИрдХреНрдЯрд┐рд╕ рдХрд░реЗрдВ: HackTricks рдкреНрд░рд╢рд┐рдХреНрд╖рдг GCP рд░реЗрдб рдЯреАрдо рдПрдХреНрд╕рдкрд░реНрдЯ (GRTE)

рд╣реИрдХрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ

рдореВрд▓ рдЬрд╛рдирдХрд╛рд░реА

рдХреЗрд╡рд▓ 1B рдУрд╡рд░рдлреНрд▓реЛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рдЕрдЧрд▓реЗ рдЪрдВрдХ рдХреЗ size рдлрд╝реАрд▓реНрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реЛрддреА рд╣реИред рдЗрд╕рд╕реЗ рдпрд╣ рд╕рдВрднрд╡ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдЪрдВрдХ рдореБрдХреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдПрдХ рдЪрдВрдХ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдФрд░ рд╡реИрдз рдЪрдВрдХ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИред рдЙрддреНрдкрд╛рджрди рдбрдмрд▓ рдлреНрд░реА рдпрд╛ рдУрд╡рд░рд▓реИрдкрд┐рдВрдЧ рдЪрдВрдХ рдХреЗ рд╕рдорд╛рди рд╣реИред

рджреЛ рдкреНрд░рдХрд╛рд░ рдХреА рдСрдл рдмрд╛рдИ рд╡рди рд╡рдВрд╢рдЧрддрд╛рдПрдБ рд╣реИрдВ:

  • рдЕрд░реНрдмрд┐рдЯреНрд░реЗрд░реА рдмрд╛рдЗрдЯ: рдпрд╣ рдкреНрд░рдХрд╛рд░ рдХрд┐рд╕реА рднреА рдорд╛рди рдХреЗ рд╕рд╛рде рдЙрд╕ рдмрд╛рдЗрдЯ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ

  • рдирд▓ рдмрд╛рдЗрдЯ (рдСрдл-рдмрд╛рдИ-рдирд▓): рдпрд╣ рдкреНрд░рдХрд╛рд░ рдХреЗрд╡рд▓ 0x00 рдХреЗ рд╕рд╛рде рдЙрд╕ рдмрд╛рдЗрдЯ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ

  • рдЗрд╕ рдЬреЛрдЦрд┐рдо рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрджрд╛рд╣рд░рдг рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдБ strlen рдФрд░ strcpy рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрд╕рдВрдЧрдд рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЕрдЧрд▓реЗ рдЪрдВрдХ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ 0x00 рдмрд╛рдЗрдЯ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

  • рдЗрд╕реЗ House of Einherjar рдХреЗ рд╕рд╛рде рдЙрддреНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

  • Tcache рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЗрд╕реЗ рдбрдмрд▓ рдлреНрд░реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЙрдиреНрдирдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдСрдл-рдмрд╛рдИ-рдирд▓

```c // From https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/off_by_one/ int main(void) { char buffer[40]=""; void *chunk1; chunk1 = malloc(24); puts("Get Input"); gets(buffer); if(strlen(buffer)==24) { strcpy(chunk1,buffer); } return 0; } ```

рдордзреНрдп рдЕрдиреНрдп рдЬрд╛рдВрдЪреЛрдВ рдХреЗ рдмреАрдЪ, рдЕрдм рдЬрдм рднреА рдПрдХ рдЪрдВрдХ рдореБрдХреНрдд рд╣реЛрддрд╛ рд╣реИ, рдкрд┐рдЫрд▓рд╛ рдЖрдХрд╛рд░ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рдЪрдВрдХ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рд╣рдорд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг 2.28 рд╕реЗ рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рдмрди рдЬрд╛рддрд╛ рд╣реИред

рдХреЛрдб рдЙрджрд╛рд╣рд░рдг:

  • рдпрд╣ рд╣рдорд▓рд╛ Tcaches рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рдЕрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред

  • рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдпрджрд┐ рдЖрдк рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдмрдбрд╝реЗ рдЪрдВрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ (рддрд╛рдХрд┐ tcaches рд╢рд╛рдорд┐рд▓ рди рд╣реЛрдВ), рддреЛ рдЖрдкрдХреЛ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреА: malloc(): invalid next size (unsorted)

рд▓рдХреНрд╖реНрдп

  • рдПрдХ рдЪрдВрдХ рдХреЛ рджреВрд╕рд░реЗ рдЪрдВрдХ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рддрд╛рдХрд┐ рджреВрд╕рд░реЗ рдЪрдВрдХ рдкрд░ рд▓реЗрдЦрди рдкрд╣реБрдВрдЪ рджреЗрдВ рдЬрд┐рд╕рд╕реЗ рд╢рд╛рдорд┐рд▓ рдПрдХ рдХреЛ рдЕрдзрд┐рдХ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реЛ

рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ

  • рдЖрдХрд╛рд░ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╕реВрдЪрдирд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдл рдмрд╛рдИ рд╡рди рдУрд╡рд░рдлреНрд▓реЛ

рд╕рд╛рдорд╛рдиреНрдп рдСрдл-рдмрд╛рдИ-рд╡рди рд╣рдорд▓рд╛

  • рддреАрди рдЪрдВрдХ A, B рдФрд░ C (рдХрд╣реЗрдВ рдЖрдХрд╛рд░ 0x20) рдХрд╛ рдЖрд╡рдВрдЯрди рдХрд░реЗрдВ, рдФрд░ рдКрдкрд░реА рдЪрдВрдХ рдХреЗ рд╕рд╛рде рд╕рдореЗрдХрди рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЪрдВрдХред

  • C рдХреЛ рдореБрдХреНрдд рдХрд░реЗрдВ (0x20 Tcache рдореБрдХреНрдд-рд╕реВрдЪреА рдореЗрдВ рдбрд╛рд▓рд╛ рдЧрдпрд╛)ред

  • рдЪрдВрдХ A рдХрд╛ рдЙрдкрдпреЛрдЧ B рдкрд░ рдУрд╡рд░рдлреНрд▓реЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВред B рдХреЗ size рдлрд╝реАрд▓реНрдб рдХреЛ 0x21 рд╕реЗ 0x41 рдореЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдл-рдмрд╛рдИ-рд╡рди рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░реЗрдВред

  • рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ B рдореЗрдВ рдореБрдХреНрдд рдЪрдВрдХ C рд╣реИ

  • B рдХреЛ рдореБрдХреНрдд рдХрд░реЗрдВ рдФрд░ рдПрдХ 0x40 рдЪрдВрдХ рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВ (рдпрд╣ рдпрд╣рд╛рдБ рдлрд┐рд░ рд╕реЗ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛)

  • рд╣рдо C рдХреЗ fd рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЕрдм рднреА рдореБрдХреНрдд рд╣реИ (Tcache poisoning)

рдСрдл-рдмрд╛рдИ-рдирд▓ рд╣рдорд▓рд╛

  • рдореЗрдореЛрд░реА рдХреЗ 3 рдЪрдВрдХ (a, b, c) рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдЖрд░рдХреНрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдлрд┐рд░ рдордзреНрдп рд╡рд╛рд▓рд╛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рдПрдХ рдСрдл рдмрд╛рдИ рд╡рди рдУрд╡рд░рдлреНрд▓реЛ рд╡рдВрд╢рд╡рд╛рдж рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╣рдорд▓рд╡рд╛рд░ рдЗрд╕реЗ 0x00 рдХреЗ рд╕рд╛рде рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдпрджрд┐ рдкрд┐рдЫрд▓рд╛ рдмрд╛рдЗрдЯ 0x10 рдерд╛ рддреЛ рдордзреНрдп рдЪрдВрдХ рдХреЛ рдЗрд╕рд╕реЗ 0x10 рдЫреЛрдЯрд╛ рдмрддрд╛рдПрдЧрд╛)ред

  • рдлрд┐рд░, рдордзреНрдп рдореБрдХреНрдд рдЪрдВрдХ (b) рдореЗрдВ 2 рдФрд░ рдЫреЛрдЯреЗ рдЪрдВрдХ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ (b1), рд╣рд╛рд▓рд╛рдВрдХрд┐, b + b->size рдХрднреА рднреА c рдЪрдВрдХ рдХреЛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдкреЙрдЗрдВрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкрддрд╛ рдЗрд╕рд╕реЗ рдЫреЛрдЯрд╛ рд╣реИ рдЬрд┐рддрдирд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

  • рдлрд┐рд░, b1 рдФрд░ c рдореБрдХреНрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдХреНрдпреЛрдВрдХрд┐ c - c->prev_size рдЕрдм рднреА b (рдЕрдм b1) рдХреЛ рдкреЙрдЗрдВрдЯ рдХрд░рддрд╛ рд╣реИ, рдЗрди рджреЛрдиреЛрдВ рдХреЛ рдПрдХ рдЪрдВрдХ рдореЗрдВ рд╕рдореЗрдХрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, b2 рдЕрдм рднреА b1 рдФрд░ c рдХреЗ рдмреАрдЪ рдореЗрдВ рд╣реИред

  • рдЕрдВрддрддрдГ, рдПрдХ рдирдпрд╛ рдореИрд▓реЛрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЗрд╕ рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ b2 рд╣реЛрдЧрд╛, рдЬреЛ рдирдП рдореИрд▓реЛрдХ рдХреЗ рдорд╛рд▓рд┐рдХ рдХреЛ b2 рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдпрд╣ рдЫрд╡рд┐ рд╣рдорд▓рд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭрд╛рддреА рд╣реИ:

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

  • strlen рдХреЗ рдХрд╛рд░рдг рдСрдл-рдмрд╛рдИ-рд╡рди рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдЕрдм рдПрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд▓реЗрдЦрди рддрдХрдиреАрдХ рдХрд╛рдо рдХрд░рддреА рд╣реИред

  • Tcache рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдСрдл-рдмрд╛рдИ-рд╡рди рд╣рдорд▓реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ Tcache poisoning рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд░реНрдмрд┐рдЯреНрд░реЗ рд░рд╛рдЗрдЯ рдкреНрд░рд╛рдЗрдорд┐рдЯрд┐рд╡ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

  • рдПрдХ рдСрдл-рдмрд╛рдИ-рд╡рди рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рддрд╛рдХрд┐ рд╣реАрдк рд╕реЗ рдПрдХ рдкрддрд╛ рд▓реАрдХ рд╣реЛ рд╕рдХреЗ рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд▓реЗ рдЪрдВрдХ рдХрд╛ size рдлрд╝реАрд▓реНрдб 0x00 рджреНрд╡рд╛рд░рд╛ рдЕрдзрд┐рд▓рд┐рдЦрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

  • рдЕрд░реНрдмрд┐рдЯреНрд░реЗ рд░рд╛рдЗрдЯ рдЗрд╕рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдСрдл-рдмрд╛рдИ-рд╡рди рд▓реЗрдЦрди рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреЙрдЗрдВрдЯрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрдерд╛рди рдкрд░ рдкреЙрдЗрдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЭреВрдард╛ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдИ рдЬрд╛ рд╕рдХреЗред рдлрд┐рд░, рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЕрд░реНрдмрд┐рдЯреНрд░реЗ рд░рд╛рдЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

  • рд▓рд┐рдмреНрд╕ рдкрддрд╛ рд▓реАрдХ рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рд╣реАрдк рдХреЛ mmap рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ mmap рджреНрд╡рд╛рд░рд╛ рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдХрд╛ рд▓рд┐рдмреНрд╕ рд╕реЗ рдПрдХ рд╕реНрдерд┐рд░ рдСрдлрд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИред

  • рдЕрдВрддрддрдГ, рдЕрд░реНрдмрд┐рдЯреНрд░реЗ рд░рд╛рдЗрдЯ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ __free_hook рдХреЗ рдкрддреЗ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдПрдХ рд╡рди рдЧреИрдЬреЗрдЯ рдХреЗ рд╕рд╛рдеред

  • getline рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рдирд▓ рдСрдл-рдмрд╛рдИ-рд╡рди рд╡рдВрд╢рд╡рд╛рдж рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рд▓рд╛рдЗрдиреЗрдВ рдкрдврд╝рддрд╛ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╕рд╛рдордЧреНрд░реА рдХреА "рдХреБрдВрдЬреА" рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдирд╣реАрдВред

  • рд╣реИрдХрд┐рдВрдЧ рдЯреНрд░рд┐рдХреНрд╕ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ PR рдЬрдорд╛ рдХрд░рдХреЗ HackTricks рдФрд░ HackTricks Cloud github рд░реЗрдкреЛ рдореЗрдВред

Last updated