Wordpress 5.0.0Ô¶³Ì´úÂëÖ´ÐÐÎó²îÆÊÎöÓ븴ÏÖ

Ðû²¼Ê±¼ä 2019-02-23
1¡¢Îó²îÏÈÈÝ

2ÔÂ19ÈÕ£¬£¬£¬£¬RipsÔÚ²©¿ÍÉÏÅû¶ÁËÒ»¸ö¹ØÓÚWordpress 5.0.0Ô¶³Ì´úÂëÖ´ÐÐÎó²î¡£¡£¡£¡£¡£¡£¸ÃÎó²îΪCVE-2019-8942ºÍ CVE-2019-8943×éºÏÎó²î£¬£¬£¬£¬Îó²î´úÂëÔÚWordpress½¹µãÖÐÒѱ£´æÁË6Äê¡£¡£¡£¡£¡£¡£


£¨https://blog.ripstech.com/2019/wordpress-image-remote-code-execution/£©

Îó²îÓÉÈý²¿·Ö×é³É£º


£¨½¹µãÎÊÌ⣩PostMeta¿ÉÒÔ±»ÁýÕÖ¡£¡£¡£¡£¡£¡£¹¥»÷Õß¿ÉÒÔ¿ØÖÆPOSTÖÐmeta_input×ֶεÄÖµ£¬£¬£¬£¬´Ó¶ø×ÔÓɸü¸Äwp_postmeta±íÖеÄmeta_keyÓëmeta_valueµÄÖµ¡£¡£¡£¡£¡£¡£


¸üи½¼þʱ£¬£¬£¬£¬¹¥»÷Õß¿É×ÔÓÉÉèÖöÔÓ¦¸½¼þµÄ_wp_attached_fileµÄÖµ£¬£¬£¬£¬²¢Á¬Ïµ²Ã¼ô¹¦Ð§ÊµÏÖĿ¼´©Ô½£¬£¬£¬£¬´Ó¶ø½«¶ñÒâͼƬÉúÑĵ½í§ÒâĿ¼¡£¡£¡£¡£¡£¡£


¸üÐÂÎÄÕÂʱ£¬£¬£¬£¬¹¥»÷Õß¿ÉÒÔ×ÔÓÉÉèÖÃÎÄÕµÄ_wp_page_templateµÄÖµ£¬£¬£¬£¬²¢Á¬ÏµÄ£°å¹¦Ð§ÊµÏÖÍâµØÎļþ°üÀ¨£¬£¬£¬£¬´Ó¶ø×îÖÕÔì³É´úÂëÖ´ÐС£¡£¡£¡£¡£¡£


2¡¢Îó²îÆÊÎö

2.1 Post MetaÁýÕÖ£¨½¹µãÎÊÌ⣩

µ±±à¼­Ò»¸öPOSTʱ»áŲÓÃedit_postÒªÁ죬£¬£¬£¬wp-admin/includes/post.php:208


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


´Ëʱ»á½«$_POST¸³Öµ¸ø$post_data¡£¡£¡£¡£¡£¡£È»ºó$post_dataµÄÖµÓֻᱻ´øÈëµ½wp_update_postº¯ÊýÖС£¡£¡£¡£¡£¡£


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


¸ú×Ùwp_update_postº¯Êý£¬£¬£¬£¬wp-includes/post.php:3969


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


Ôڸú¯Êýĩ⣬£¬£¬£¬¶¼»áŲÓÃwp_insert_postº¯Êý£¬£¬£¬£¬²¢½«$postarr´«Èëµ½¸Ãº¯ÊýÖУ¬£¬£¬£¬wp_insert_postº¯ÊýÂÔ³¤£¬£¬£¬£¬Ôڸú¯ÊýÖÐÓÐÕâÑùÒ»¶Î´úÂ룬£¬£¬£¬wp-includes/post.php:3779 ¡£¡£¡£¡£¡£¡£


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


¶Ô$postarr['meta_input']×öÒ»¸ö±éÀú£¬£¬£¬£¬²¢½«¼üÖµ¶¼´øÈëµ½update_post_metaº¯ÊýÖУ¬£¬£¬£¬¸Ãº¯ÊýÄÚÈÝÈçÏ£º


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


ŲÓÃÁËupdate_metadataº¯Êý£¬£¬£¬£¬¶ÔÓ¦µÄ$meta_keyºÍ$meta_value¶¼Êǹ¥»÷Õ߿ɿصÄ¡£¡£¡£¡£¡£¡£¸Ãº¯ÊýÖ÷Òª¹¦Ð§¾ÍÊÇwp_postmeta±í¾ÙÐиüкͲåÈë¡£¡£¡£¡£¡£¡£


wp_postmeta±í½á¹¹ÈçÏÂ:


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾

ͨ¹ý¸Ãº¯Êý£¬£¬£¬£¬¹¥»÷Õß¿ÉÒÔ×ÔÓÉÔöÌíºÍÐ޸ĶÔÓ¦post_idµÄmeta_keyºÍmeta_valueµÄÖµ¡£¡£¡£¡£¡£¡£


2.2 Ŀ¼´©Ô½ÎÊÌâ

Ŀ¼´©Ô½ÎÊÌâÊÇÒÔPost MetaÁýÕÖΪÆÌµæµÄ¡£¡£¡£¡£¡£¡£ÔÚwp-admin/includes/ajax-actions.php:3520


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


ÔÚwp_ajax_crop_imageº¯ÊýÖУ¬£¬£¬£¬µÚÒ»Ðоʹ«ÈëÁËÒ»¸ö$_POST['id']²ÎÊý¡£¡£¡£¡£¡£¡£È»ºó»¹´«ÈëÁË$_POST['cropDetails']²ÎÊý¡£¡£¡£¡£¡£¡£¶¼Êǹ¥»÷Õ߿ɿصÄ¡£¡£¡£¡£¡£¡£²¢½«ÕâЩֵ´øÈëµ½ÁËwp_crop_imageº¯ÊýÖУ¬£¬£¬£¬º¯ÊýÌåÈçÏ£º


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


ÔÚ28ÐУ¬£¬£¬£¬»á½øÈë¸Ãif£¬£¬£¬£¬´«ÈëµÄ$srcÊǹ¥»÷Õ߿ɿص쬣¬£¬£¬´øÈëµ½get_attached_fileº¯ÊýÖУ¬£¬£¬£¬º¯ÊýÌåÈçÏ£º


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


ŲÓÃget_post_metaº¯Êý£¬£¬£¬£¬½«wp_postmetaÄÚÍâ¶ÔÓ¦µÄpost_id×Ö¶Îmeta_keyֵΪ_wp_attached_fileµÄmeta_valueÖµÅÌÎʳöÀ´²¢·µ»Ø¡£¡£¡£¡£¡£¡£ÓÉÉÏÎÄ¿ÉÖª£¬£¬£¬£¬¸ÃÖµÊǹ¥»÷Õß¿ÉÒÔ×Ô¼ºÁýÕֵ쬣¬£¬£¬ÊǿɿصÄ¡£¡£¡£¡£¡£¡£


»Øµ½wp_crop_imageº¯Êý£¬£¬£¬£¬·µ»ØºóµÄÖµ¸³Öµ¸ø$src_file²¢ÅжϸÃÎļþ±£´æÓë·ñ¡£¡£¡£¡£¡£¡£Èô²»±£´æÔòŲÓÃ_load_image_edit_pathº¯Êý£¬£¬£¬£¬¸ú×ٸú¯Êý£º


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


½øÈëµÚ¶þ¸öif·ÖÖ§ÖУ¬£¬£¬£¬Å²ÓÃwp_get_attachment_urlº¯Êý£¬£¬£¬£¬Éó²é¸Ãº¯Êý£º


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


ÈçÉÏͼ±ê×¢µÄËùʾ£¬£¬£¬£¬×îºóÐγɵÄÊÇÒ»¸öurlÁ´½Ó¡£¡£¡£¡£¡£¡£


ÈôÊÇ£¬£¬£¬£¬¹¥»÷Õß½«meta_value¸ü¸ÄΪ2019/02/evil.jpg#/../../../../../theme-compat/evil.jpg¡£¡£¡£¡£¡£¡£


×îºó£¬£¬£¬£¬ÐγɵÄurl¾ÍÊÇÕâÑùhttp://localhost/wp-content/uploads/2019/02/evil.jpg#/../../../../../theme-compat/evil.jpg¡£¡£¡£¡£¡£¡£


²¢½«Õâ¸öurl²ã²ã·µ»Øµ½wp_crop_imageº¯Êý£¬£¬£¬£¬²¢´øÈëµ½ÁËwp_get_image_editorº¯Êý£º


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


¸ú×ٸú¯Êý£º


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


ÆäÖÐÓÐÒ»²½Ï¸½ÚµÄ²Ù×÷ÊÇÔÚ_wp_image_editor_chooseÕâ¸öº¯ÊýÖÐ:


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


WordpressÌṩÁËÁ½ÖÖ·½·¨À´´¦Öóͷ£Í¼Æ¬£¬£¬£¬£¬ImagickÊÇÓÅÏȼ¶×î¸ßµÄ£¬£¬£¬£¬GDÆä´Î¡£¡£¡£¡£¡£¡£Õâ¸ö˳Ðò»áÓ°Ïì×îÖÕÇéÐεÄʹÓᣡ£¡£¡£¡£¡£


¶øImagickºÍGD¶ÔͼƬҲÓвî±ðµÄ´¦Öóͷ££º


Imagick²»»áÈ¥³ýµôͼƬÖеÄexif²¿·Ö£¬£¬£¬£¬ÒÔÊÇÎÒÃÇ¿ÉÒÔ½«´ýÖ´ÐÐpayload´úÂë¼ÓÈëµ½exif²¿·Ö¡£¡£¡£¡£¡£¡£


GD»áÈ¥³ýͼƬµÄexif²¿·Ö£¬£¬£¬£¬²¢ÇÒÆäÖеÄphpcodeºÜÄÑ´æ»î¡£¡£¡£¡£¡£¡£³ý·Çͨ¹ýÈ«ÐĽṹһÕÅͼƬ²Å¿ÉÒÔ¡£¡£¡£¡£¡£¡£


ÔÚÕâÀïÎÒÃÇÑ¡ÔñImagick¿â£¬£¬£¬£¬Ñ¡ÔñºÃͼƬ´¦Öóͷ£¿âÖ®ºó¾Í·µ»Ø¸Ã¿â²¢Å²ÓÃloadÒªÁì¼ÓÔØurl£º


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


ÕâÀïÓÐÒ»¸ö¿Óµã£¬£¬£¬£¬¾ÍÊÇImagick´¦Öóͷ£ÀàµÄloadº¯ÊýÖÐŲÓõÄÊÇreadImageº¯Êý£¬£¬£¬£¬µ«Ôڸ߰汾µÄImagickÉϸú¯Êý²»Ö§³ÖÔ¶³ÌͼƬÁ´½Ó£¬£¬£¬£¬Òò´ËÎÒ½ÓÄÉImagick-6.9.7À´¸´ÏÖ£¬£¬£¬£¬ÇéÐÎÈçÏÂͼ£º


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


ŲÓÃÍêloadº¯Êýºó£¬£¬£¬£¬¾ÍÊǶԻñÈ¡µ½µÄͼƬÄÚÈݾÙÐвüô´¦Öóͷ££¬£¬£¬£¬È»ºó°ÑÐÂÌìÉúµÄͼƬ¾ÙÐÐÉúÑÄ£¬£¬£¬£¬Éó²éÉúÑÄÐÂÎļþµÄ²Ù×÷£¨Ôì³ÉĿ¼´©Ô½µÄÖյ㣩£º


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


$dst_fileÊÇÉúÑĵÄÎļþÃû£¬£¬£¬£¬ÉúªϰÔòÈçÉÏͼ±ê×¢Ëùʾ¡£¡£¡£¡£¡£¡£Òò½ñÌìÉú×îÖÕÎļþ·¾¶Îª£ºuploaddir/2019/02/cropped-evil.jpg#/../../../../../theme-compat/cropped-evil.jpg¡£¡£¡£¡£¡£¡£


ÕâÀïÓÐÒ»¸ö×¢ÖØµã£¬£¬£¬£¬¾ÍÊÇ»áÏÈŲÓÃwp_mkdir_pº¯ÊýÀ´½¨ÉèĿ¼£¬£¬£¬£¬È»ºóÔÙŲÓÃsaveº¯ÊýÉúÑÄÎļþ¡£¡£¡£¡£¡£¡£


saveº¯Êý½¹µãÈçÏÂͼ£º


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾

ÕâÀïŲÓÃÁËmake_imageº¯Êý£¬£¬£¬£¬º¯ÊýÌåÈçÏ£º


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


ÕâÀïÓÖÓÐÒ»¸ö¿Óµã£¬£¬£¬£¬ÕâÀï»áÓÃcall_user_func_arrayº¯ÊýÀ´Å²ÓÃImagickµÄwriteImageº¯Êý£¬£¬£¬£¬²¢½«$filenameת´ï½øÈ¥£¬£¬£¬£¬ÖµµÃ×¢ÖØµÄÒ»µãÊǸú¯ÊýÔÚLinuxϲ»Ö§³Ö²»±£´æµÄÄ¿Â¼Ìø×ª¡£¡£¡£¡£¡£¡£


¿ÉÊÇΪÁ˵ִïĿ¼´©Ô½µÄÄ¿µÄ£¬£¬£¬£¬ÎÒÃÇÕâÀï´«ÈëµÄ$filename¾ÍÊÇuploaddir/2019/02/cropped-evil.jpg#/../../../../../theme-compat/cropped-evil.jpg ¡£¡£¡£¡£¡£¡£


ÓÉÓÚcropped-evil.jpg#ÊǸö²»±£´æµÄĿ¼£¬£¬£¬£¬Òò´Ë¸Ãº¯Êý»áŲÓÃʧ°ÜÅ×ÍÉ»¯ÎóÖÕÖ¹Á÷³Ì£¬£¬£¬£¬×ÔȻҲÎÞ·¨Å²ÓÃfopenºÍfwrite¾ÙÐÐдÎļþµÄ²Ù×÷¡£¡£¡£¡£¡£¡£


½èÖú¶à´ÎÉÏ´«²Ã¼ô¾Í¿ÉÒÔÈÆ¹ýÕâ¸ö¿Óµã£¬£¬£¬£¬¿ÉÊÇÌìÉúµÄÐÂͼƬÓÖÓÐʲôÓÃÄØ £¿£¿£¿£¿£¿£¿


2.3 ÍâµØÎļþ°üÀ¨

ÔÚwp-includes/template-loader.php:55


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


ÕâÀïŲÓÃÁËget_single_templateº¯Êý£º


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


µÚÒ»ÐлñÈ¡ÇëÇóµÄ¹¤¾ß¡£¡£¡£¡£¡£¡£µ±ÎÒÃÇͨ¹ý·ÓÉä¯ÀÀÎÄÕÂʱÕâÀï»á·µ»ØWP_Post¹¤¾ß£¬£¬£¬£¬ÆäÖаüÀ¨ÎÄÕµÄһЩÊôÐÔ¡£¡£¡£¡£¡£¡£
È»ºó½«¸Ã¹¤¾ß´øÈëµ½ÁËget_page_template_slugº¯ÊýÖУ¬£¬£¬£¬º¯ÊýÌåÈçÏ£º


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


ƾ֤post_id´Ówp_postmeta±íÖÐÈ¡³ömeta_key×Ö¶ÎֵΪ_wp_page_templateµÄmeta_valueµÄÖµ²¢·µ»Ø¡£¡£¡£¡£¡£¡£


´Ó½¹µãÎÊÌâ¿ÉÖª£¬£¬£¬£¬ÕâÀï·µ»ØµÄmeta_valueµÄֵͬÑùÊÇ¿ÉÒÔ±»¹¥»÷Õß×ÔÓÉÁýÕֵ쬣¬£¬£¬Òò´Ë¸ÃÖµÊǹ¥»÷Õ߿ɿصÄ¡£¡£¡£¡£¡£¡£


È»ºó½«¸ÃÖµÌí¼Óµ½$templatesÊý×éÖв¢×ª´ï¸øget_query_templateº¯Êý¡£¡£¡£¡£¡£¡£º¯ÊýÌåÈçÏ£º


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


ŲÓÃlocate_templateº¯Êý£¬£¬£¬£¬º¯ÊýÌåÈçÏ£º


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


ÕâÀï×ö·¾¶µÄÆ´½ÓºÍÅжÏ¡£¡£¡£¡£¡£¡£$template_nameÊǿɿص쬣¬£¬£¬Òò´ËÁ¬ÏµÉÏÎĵÄĿ¼´©Ô½£¬£¬£¬£¬½«ÐÂÌìÉúµÄͼƬ·Åµ½theme-compatĿ¼Ï¼´¿É¡£¡£¡£¡£¡£¡£


È»ºó·µ»Ø¸Ã·¾¶£¬£¬£¬£¬»Øµ½×î×îÏȵĵط½£º


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


ŲÓÃinclude½«Í¼Æ¬°üÀ¨£¬£¬£¬£¬Ö´ÐдúÂë¡£¡£¡£¡£¡£¡£

3¡¢Îó²î¸´ÏÖ

ÕâÀ£¬£¬£¬ÎÒÃǽÓÄÉmac os+php7.1+wordpress4.9.8+imagick6.9.7¾ÙÐи´ÏÖ¡£¡£¡£¡£¡£¡£


Ê×ÏÈ£¬£¬£¬£¬¹¥»÷ÕßÐèÒªµÇ¼һ¸öAuthorȨÏÞµÄÕË»§¡£¡£¡£¡£¡£¡£µÇ¼ºóÌí¼ÓÒ»¸öÃûΪcreatedir.jpgµÄͼƬ£º


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


È»ºó¸üиÃͼƬÐÅÏ¢£º


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


²¢Ê¹ÓÃburp×¥°ü£¬£¬£¬£¬¸ü¸ÄÈçͼËùʾ£º


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


È»ºó×îÏȲüôͼƬ£¬£¬£¬£¬µã»÷edit Image²¢×¥°ü»ñµÃnonce²¢½á¹¹±¨ÎÄ¡£¡£¡£¡£¡£¡£

¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


¼ÌÐøÉÏ´«²¢²Ã¼ôÒ»ÕÅÃûΪfinally.jpgµÄͼƬ£¬£¬£¬£¬Àֳɽ¨ÉèÎļþ£º


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


È»ºóÐÂÔöÌíһƪÎÄÕ£¬£¬£¬£¬ÔÚupdateʱ¼ÌÐø×¥°ü¸ü¸ÄÈçÏÂͼËùʾ£º


¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾


Íê±Ïºó¡£¡£¡£¡£¡£¡£Éó²é¸ÃÎÄÕ£¬£¬£¬£¬Àֳɴ¥·¢phpinfo!

¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾

4¡¢²¹¶¡ÆÊÎö

¿­Ðý¹ú¼ÊÓÎÏ·(Öйú)¹Ù·½ÍøÕ¾

Ìí¼ÓÁË_wp_get_allowed_postdataÒªÁ죬£¬£¬£¬½«meta_input×ֶδÓPOST±¨ÎÄÖÐÈ¥µôÁË¡£¡£¡£¡£¡£¡£