·À»¤¼Æ»®£ºPHPÔ¶³ÌDoSÎó²îÉîÈëÆÊÎö
2015-05-14
5ÔÂ14ÈÕ£¬º£ÄÚ±¬³öphpÔ¶³ÌDoSÎó²î£¬¹Ù·½±àºÅ69364¡£Ê¹ÓøÃÎó²î½á¹¹pocÌᳫÁ´½Ó£¬ºÜÈÝÒ×µ¼ÖÂÄ¿µÄÖ÷»úcpuµÄÕ¼ÓÃÂÊ100%£¬Éæ¼°PHP¶à¸ö°æ±¾¡£¾ÅÓÎÀÏ¸ç¿Æ¼¼ÍþвÏìÓ¦ÖÐÐÄËæ¼´Æô¶¯Ó¦¼±»úÖÆ£¬ Ó¦¼±ÏìÓ¦ÊÂÇéËæ¼´Æô¶¯¡£
1 15ÈÕÒ¹£¬Æô¶¯Îó²îÆÊÎöÊÂÇ飬ͬ²½½«ÆÊÎöЧ¹û·¢ËͲúÆ·ÍŶӣ»
2 16ÈÕ£¬Ðû²¼²úÆ·¹æÔòÉý¼¶Í¨¸æ£¬¾ÅÓÎÀÏ¸ç¿Æ¼¼RSAS²úÆ·Éý¼¶Ïà¼ÌÍ£µ±£¬¿Í»§Í¨¹ýÔÚÏß¼°ÀëÏßÉý¼¶µÄÒªÁ죬¼´¿É»ñµÃÎó²îµÄ¼ì²âÄÜÁ¦£»Í¬Ê±£¬ÔÚÏßÎó²î¼ì²âÒýÇæÍ£µ±£»
3 17ÈÕ£¬Îó²îÉîÈëÆÊÎö¾ÙÐÐÖС£¾ÅÓÎÀÏ¸ç¿Æ¼¼NIPS²úÆ·Éý¼¶Í£µ±£¬¿Í»§Í¨¹ýÔÚÏß¼°ÀëÏßÉý¼¶µÄÒªÁ죬¼´¿É»ñµÃÎó²îµÄ·À»¤ÄÜÁ¦£»
4 18ÈÕ£¬ÎÒÃÇ»ØÊ×´Ë´ÎPHPÎó²îµÄÐÅÏ¢Òªµã£¬´ÓPHPÎó²î·À»¤µÄ½Ç¶È¾ÙÐÐ×ܽᣬΪ¸÷ÈËÖÆ¶©·ÀÓù¼Æ»®ÌṩÔö²¹ÐÅÏ¢¡£
PHPÔ¶³ÌDoSÎó²î
4ÔÂ3ÈÕ£¬ÓÐÈËÔÚPHP¹ÙÍøÌá½»PHP Ô¶³ÌDoSÎó²î£¨PHP Multipart/form-data remote dos Vulnerability£©£¬´úºÅ69364[1]¡£ÓÉÓÚ¸ÃÎó²îÉæ¼°PHPµÄËùÓа汾£¬¹ÊÆäÓ°ÏìÃæ½Ï´ó£¬Ò»¾Ðû²¼Ñ¸ËÙÒý·¢¶à·½Ãæ¹Ø×¢¡£14ÈÕ£¬ÖÖÖÖPoCÒѾÔÚÍøÂçÉÏÈö²¥¡£´Ë´ÎÎó²î¾ß±¸ÈçÏÂÌØÕ÷£º
1. Ò»µ©±»Ê¹ÓÃÀֳɣ¬¿ÉÒÔÔÚѸËÙÏûºÄ±»¹¥»÷Ö÷»úµÄCPU×ÊÔ´£¬´Ó¶øµÖ´ïDoSµÄÄ¿µÄ£»
2. PHPÔÚÈ«ÇòµÄ°²ÅÅÁ¿Ï൱´ó£¬Îª¹¥»÷ÕßÌṩÁËÏ൱¶à¿ÉÒÔ¹¥»÷µÄÄ¿µÄ£»
3. PHP¹Ù·½ÏÖÔÚ½ö¸ø³öÁË5.4¼°5.5°æ±¾µÄ²¹¶¡
ÊÜ´ËÎó²îÓ°ÏìµÄÈí¼þ¼°ÏµÍ³°üÀ¨PHPµÄÈçϰ汾¡£
? PHP 5.0.0 - 5.0.5
? PHP 5.1.0 - 5.1.6
? PHP 5.2.0 - 5.2.17
? PHP 5.3.0 - 5.3.29
? PHP 5.4.0 - 5.4.40
? PHP 5.5.0 - 5.5.24
? PHP 5.6.0 - 5.6.8
¾ÅÓÎÀÏ¸ç¿Æ¼¼ÖÕÄêÇ×½ü¹Ø×¢PHPµÄÇå¾²ÎÊÌâ¡£¾ÅÓÎÀÏ¸ç¿Æ¼¼ÍþвÏìÓ¦ÖÐÐÄÔÚ»ñÖªÏà¹ØÐÅÏ¢ºó£¬Ëæ¼´Æô¶¯Ó¦¼±»úÖÆ£¬Ïà¹ØÊÂÇéËæ¼´Æô¶¯¡£±¾ÎÄÕ½«»áÉîÈëÆÊÎö¸ÃÎó²î£¬²¢¸ø³öÓ¦¶Ô¼Æ»®¡£
PHPÔ¶³ÌDoSÎó²îÆÊÎö
2015Äê5ÔÂ15ÈÕÒ¹£¬¾ÅÓÎÀÏ¸ç¿Æ¼¼ÍþвÏìÓ¦ÖÐÐÄÔÚ»ñÈ¡PHPÎó²îÈö²¥ÇéÐεÄͬʱ£¬Ò²ÔÚ¾ÙÐÐÎó²îµÄÆÊÎöÊÂÇ飬ͨ¹ýÖØÏÖÎó²îµÄ¹¥»÷Àú³Ì£¬ÆÊÎöÆäÊÂÇéÔÀí£¬µÃÒÔÇåÎúʶ±ð¼°¼ì²â¸ÃÎó²îÒªÁì¡£
BoundaryÖеļüÖµ¶ÔÍÑÀë
PHPÊÇÒ»ÖÖÊ¢ÐеÄWeb·þÎñÆ÷¶Ë±à³ÌÓïÑÔ£¬Ëü¹¦Ð§Ç¿Ê¢£¬¼òÆÓÒ×Óã¬Ê¹ÓÃËü±àÐ´ÍøÂçÓ¦ÓóÌÐò£¬¿ÉÒÔÓ¦¶Ô´ó¹æÄ£µÄHttpÇëÇó£¬ÒÔÊÇÐí¶àÓªÒµÇéÐÎÖж¼°²ÅÅÁËPHP¡£Ë¼Á¿¹æ·¶ÐÔ£¬PHPÔÚÉè¼ÆÖ®³õ¾Í×ñÕÕrfc¹æ·¶£¬¾ÙÐи÷¸öÐÒéÄ£¿éµÄ·â×°¼°Àú³Ì´¦Öóͷ£¡£PHPÓëÆäËûͬÑù×ñÕÕrfc¹æ·¶µÄÓïÑÔ¼°ÇéÐÎÏà±È£¬²»¹ýÊÇ´¦Öóͷ£·½·¨²î±ð¡£
¶ø´Órfc1867[2]×îÏÈ£¬httpÐÒé×îÏÈÖ§³Ö"multipart/form-data"ÇëÇó£¬ÒÔ±ã½ÓÊܶàÖÖÊý¾ÝÃûÌ㬰üÀ¨¶àÖÖ±äÁ¿ÉõÖÁÊÇÎļþÉÏ´«¡£multipart/form-dataÖпÉÒÔ°üÀ¨¶à¸ö±¨ÎÄ£¬Ã¿Ò»¸ö±¨ÎÄboundary£¨ÍÑÀë·û£©ÍÑÀ뿪À´£¬¶øÃ¿¸ö±¨ÎÄÖж¼°üÀ¨Á˶àÐмüÖµ¶Ô£¬¼üÖµ¶ÔÓÃðºÅÍÑÀ룬ÕâÑùµÄÉè¼ÆÊÇΪÁËÈóÌÐò¿ÉÒÔÇåÎúµÄÇø·ÖÕâЩÊý¾Ý¡£
|
Boundary |
|||
|
¼ü1 |
£º |
Öµ1 |
|
|
Boundary |
|||
|
¼ü2 |
£º |
Öµ2 |
|
µ«ÈôÊÇÓÉÓÚijÖÖÔµ¹ÊÔÓÉ£¬¼üÖµÖÐÐÄȱÉÙÁËËÈËðºÅ£¬PHPº¯Êý»á½«ÏÂÒ»¶Ô¼üÖµºÏ²¢µ½ÁËÉÏÒ»ÐУ¬ÐγÉÕâÑùµÄ¼üÖµ¶Ô£¬¡°¼ü1£ºÖµ1¼ü2Öµ2¡±¡£ÓÉÓÚPHP¾ÙÐмüÖµºÏ²¢µÄËã·¨²»·óÓÅ»¯£¬ÕâÑùµÄÊÂÇ鱬·¢Ò»ÔÙ»¹Ã»Ê²Ã´£¬ÈôÊÇÊýÒÔ°ÙÍò¼Ç£¬¾ÍÄð³ÉÁËÒ»ÖÖÔÖÄÑ¡£
ÔÚÏÂÃæµÄÀý×ÓÖУ¬µ±aµÄ²¿·ÖµÖ´ïÒ»¶¨ÃüÄ¿µÄʱ¼ä£¨¼¸Ê®ÍòÐÐorÉϰÙÍòÐУ©£¬ÓÉÓÚÿÐмüÓëÖµÖ®¼ä²¢Ã»ÓÐðºÅÍÑÀ룬º¯Êý¾Í×Ô¶¯½«ÏÂÒ»ÐеļüÖµ¶ÔºÏ²¢£¬ÕâÑùÊý¾ÝÔ½À´Ô½´ó£¬Ô½À´Ô½³¤£¬º¯ÊýÕë¶ÔÕâЩÊý¾ÝÒ»Ö±Ö´ÐÐÄÚ´æµÄ·ÖÅɺÍÊÍ·Å£¬×îÖÕ±»¹¥»÷Ä¿µÄÖ÷»úµÄCPU×ÊÔ´±»ºÄ¾¡¡£
1 ------WebKitFormBoundarypE33TmSNWwsMphqz
2 Content-Disposition: form-data; name="file"; filename="s
3 a
4 a
5 a
6 a"
7 Content-Type: application/octet-stream
8
9
10 ------WebKitFormBoundarypE33TmSNWwsMphqz*
*×¢£ºPHPÖУ¬BoundaryÊÇ¿ÉÒÔ×Ô½ç˵µÄ£¬ºÃ±È¡°-----WebKitFormBoundarypE33TmSNWwsMphqz¡±
ÕâÑùµÄ´úÂ룬ÔÚ×¥°üʱÏÔʾÇéÐÎÈçÏ£º

Boundary±¨ÎÄÆÊÎöÀú³Ì
PHPÔÚmain/rfc1867.cÖУ¬ÓÐÁ½¸öº¯Êý¶¼Éæ¼°boundaryµÄÆÊÎö£¬°üÀ¨SAPI_API SAPI_POST_HANDLER_FUNC¼°multipart_buffer_headersº¯Êý¡£DoSÎó²î·ºÆðÔÚmain/rfc46675pxultipart_buffer_headersº¯Êý¡£
PHPÏÈÆÊÎöÆÊÎömultipart/form-data httpÇëÇó£¬ httpÇëÇóÌåµÄÈë¿Úº¯ÊýÔÚSAPI_POST_HANDLER_FUNC£¨rfc1867.cÖеĺ¯Êý£©£¬SAPI_POST_HANDLER_FUNCº¯ÊýÊ×ÏÈÆÊÎöÇëÇóµÄboundary£¬Ò²¾ÍÊÇPOSTÇëÇóÖеÚÒ»´Î½ç˵ʱµÄboundary£»²¢ÇÒÔÚÆäÄÚ²¿Å²ÓÃÁËmultipart_buffer_headers£¬¸Ãº¯ÊýÏÈÕÒµ½boundary£¨Ò²¾ÍÊÇÒ»´ÎÒýÓõÄboundary£©£¬»áºÍ½ç˵ʱµÄboundary½ÏÁ¿¡£ÈôÊÇÏàµÈ¼´ÕÒµ½µÚÒ»´ÎÒýÓõÄboundary£¬½ÓÏÂÀ´»áÖðÐжÁÈ¡ÇëÇóµÄÊäÈëÒÔÆÊÎöbody port header£¨Ò²¾ÍÊÇÆÊÎöµÚÒ»´ÎÒýÓÃboundaryºóÃæµÄÄÚÈÝ£©¡£
SAPI_API SAPI_POST_HANDLER_FUNC
1 /* Get the boundary */
2 /* ×îÏÈÆÊÎöboundary
*/
3 boundary = strstr(content_type_dup
"boundary");
4 if (!boundary) {
5 int content_type_len =
strlen(content_type_dup);
6 char *content_type_lcase =
estrndup(content_type_dup content_type_len);
7
8 php_strtolower(content_type_lcase
content_type_len);
9 boundary = strstr(content_type_lcase
"boundary");
10 if (boundary)
{
11 boundary =
content_type_dup + (boundary - content_type_lcase);
12 }
13 efree(content_type_lcase);
14 }
15
16 if (!boundary ||
!(boundary = strchr(boundary '='))) {
17 sapi_module.sapi_error(E_WARNING
"Missing boundary in multipart/form-data POST data");
18 return;
19 }
20
21 boundary++;
22 boundary_len =
strlen(boundary);
23
24 /* ¶Ôbondary¾ÙÐÐÕýµ±Ð£Ñé */
25 if (boundary[0] ==
'"') {
26 boundary++;
27 boundary_end =
strchr(boundary '"');
28 if
(!boundary_end) {
29 sapi_module.sapi_error(E_WARNING
"Invalid boundary in multipart/form-data POST data");
30 return;
31 }
32 } else {
33 /* search for
the end of the boundary */
34 boundary_end =
strpbrk(boundary ";");
35 }
36 if (boundary_end) {
37 boundary_end[0]
= '
ÄúµÄÁªÏµ·½·¨
? 2026 NSFOCUS ¾ÅÓÎÀÏ¸ç¿Æ¼¼ www.nsfocus.com All Rights Reserved . ¾©¹«Íø°²±¸ 11010802021605ºÅ ¾©ICP±¸14004349ºÅ ¾©ICPÖ¤110355ºÅ

¾ÅÓÎÀϸçÔÆ





