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


OG¶«·½Ìü¡¤(Öйú´ó½)


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


OG¶«·½Ìü¡¤(Öйú´ó½)


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


OG¶«·½Ìü¡¤(Öйú´ó½)


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


OG¶«·½Ìü¡¤(Öйú´ó½)


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


OG¶«·½Ìü¡¤(Öйú´ó½)


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


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


OG¶«·½Ìü¡¤(Öйú´ó½)

ͨ¹ý¸Ãº¯Êý£¬£¬£¬¹¥»÷ÕßÄܹ»×ÔÓÉÔö³¤ºÍÅú¸Ä¶ÔÓ¦post_idµÄmeta_keyºÍmeta_valueµÄÖµ¡£¡£


2.2 Ŀ¼´©Ô½ÎÊÌâ

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


OG¶«·½Ìü¡¤(Öйú´ó½)


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


OG¶«·½Ìü¡¤(Öйú´ó½)


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


OG¶«·½Ìü¡¤(Öйú´ó½)


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


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


OG¶«·½Ìü¡¤(Öйú´ó½)


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


OG¶«·½Ìü¡¤(Öйú´ó½)


ÈçÉÏͼ±ê×¢µÄËùʾ£¬£¬£¬×îºóÐγɵÄÊÇÒ»¸ö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º¯Êý£º


OG¶«·½Ìü¡¤(Öйú´ó½)


¸ú×ٸú¯Êý£º


OG¶«·½Ìü¡¤(Öйú´ó½)


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


OG¶«·½Ìü¡¤(Öйú´ó½)


WordpressÌṩÁËÁ½ÖÖ·½Ê½À´´¦ÖÃͼƬ£¬£¬£¬ImagickÊÇÓÅÏȼ¶×î¸ßµÄ£¬£¬£¬GDÆä´Î¡£¡£Õâ¸ö°¤´Î»áÓ°Ïì×îÖÕ»·¾³µÄÀûÓᣡ£


¶øImagickºÍGD¶ÔͼƬҲÓÐ·ÖÆçµÄ´¦Öãº


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


GD»áÈ¥³ýͼƬµÄexif²¿ÃÅ£¬£¬£¬²¢ÇÒÆäÖеÄphpcodeºÜÄÑ´æ»î¡£¡£³ý·Çͨ¹ý¾«ÐÄ»ú¹ØÒ»ÕÅͼƬÄÜÁ¦¹»¡£¡£


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


OG¶«·½Ìü¡¤(Öйú´ó½)


OG¶«·½Ìü¡¤(Öйú´ó½)


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


OG¶«·½Ìü¡¤(Öйú´ó½)


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


OG¶«·½Ìü¡¤(Öйú´ó½)


$dst_fileÊDZ£ÁôµÄÎļþÃû£¬£¬£¬ÌìÉú¹æ¶¨ÈçÉÏͼ±ê×¢Ëùʾ¡£¡£Òò¶øÌìÉú×îÖÕÎļþõ辶Ϊ£ºuploaddir/2019/02/cropped-evil.jpg#/../../../../../theme-compat/cropped-evil.jpg¡£¡£


ÕâÀïÓÐÒ»¸ö°ÑÎȵ㣬£¬£¬¾ÍÊÇ»áÏÈŲÓÃwp_mkdir_pº¯ÊýÀ´´´½¨Ä¿Â¼£¬£¬£¬¶øºóÔÙŲÓÃsaveº¯Êý±£ÁôÎļþ¡£¡£


saveº¯ÊýÖ÷ÌâÈçÏÂͼ£º


OG¶«·½Ìü¡¤(Öйú´ó½)

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


OG¶«·½Ìü¡¤(Öйú´ó½)


ÕâÀïÓÖÓÐÒ»¸ö¿Óµã£¬£¬£¬ÕâÀï»áÓÃ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


OG¶«·½Ìü¡¤(Öйú´ó½)


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


OG¶«·½Ìü¡¤(Öйú´ó½)


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


OG¶«·½Ìü¡¤(Öйú´ó½)


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


´ÓÖ÷ÌâÎÊÌâ¿ÉÖª£¬£¬£¬ÕâÀï·µ»ØµÄmeta_valueµÄֵͬÑùÊÇÄܹ»±»¹¥»÷Õß×ÔÓɸ²¸ÇµÄ£¬£¬£¬Òò¶ø¸ÃÖµÊǹ¥»÷Õ߿ɿصÄ¡£¡£


¶øºó½«¸ÃÖµÔö³¤µ½$templatesÊý×éÖв¢´«µÝ¸øget_query_templateº¯Êý¡£¡£º¯ÊýÌåÈçÏ£º


OG¶«·½Ìü¡¤(Öйú´ó½)


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


OG¶«·½Ìü¡¤(Öйú´ó½)


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


¶øºó·µ»Ø¸Ãõè¾¶£¬£¬£¬»Øµ½×îÆðÍ·µÄ´¦Ëù£º


OG¶«·½Ìü¡¤(Öйú´ó½)


ŲÓÃinclude½«Í¼Æ¬Ô̺¬£¬£¬£¬Ö´ÐдúÂë¡£¡£

3¡¢¡¢¡¢·ì϶¸´ÏÖ

ÕâÀ£¬£¬ÎÒÃÇѡȡmac os+php7.1+wordpress4.9.8+imagick6.9.7½øÐи´ÏÖ¡£¡£


Ê×ÏÈ£¬£¬£¬¹¥»÷Õß±ØÒªµÇ¼һ¸öAuthorȨÏÞµÄÕË»§¡£¡£µÇ¼ºóÔö³¤Ò»¸öÃûΪcreatedir.jpgµÄͼƬ£º


OG¶«·½Ìü¡¤(Öйú´ó½)


¶øºó¸üиÃͼƬÐÅÏ¢£º


OG¶«·½Ìü¡¤(Öйú´ó½)


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


OG¶«·½Ìü¡¤(Öйú´ó½)


¶øºóÆðÍ·²Ã¼ôͼƬ£¬£¬£¬µã»÷edit Image²¢×¥°üµÃµ½nonce²¢»ú¹Ø±¨ÎÄ¡£¡£

OG¶«·½Ìü¡¤(Öйú´ó½)


³ÖÐøÉÏ´«²¢²Ã¼ôÒ»ÕÅÃûΪfinally.jpgµÄͼƬ£¬£¬£¬³É¹¦´´½¨Îļþ£º


OG¶«·½Ìü¡¤(Öйú´ó½)


¶øºóÐÂÔö³¤Ò»ÆªÎÄÕ£¬£¬£¬ÔÚupdateʱ³ÖÐø×¥°ü¸ü¸ÄÈçÏÂͼËùʾ£º


OG¶«·½Ìü¡¤(Öйú´ó½)


½áÊøºó¡£¡£²é¿´¸ÃÎÄÕ£¬£¬£¬³É¹¦´¥·¢phpinfo!

OG¶«·½Ìü¡¤(Öйú´ó½)

4¡¢¡¢¡¢²¹¶¡·ÖÎö

OG¶«·½Ìü¡¤(Öйú´ó½)

Ôö³¤ÁË_wp_get_allowed_postdata²½Ö裬£¬£¬½«meta_input×ֶδÓPOST±¨ÎÄÖÐÈ¥µôÁË¡£¡£