AG¹«Ë¾

AG¹«Ë¾

AG¹«Ë¾¿Æ¼¼

  • »ù´¡ÉèÊ©Çå¾²

    »ù´¡ÉèÊ©Çå¾²
  • Êý¾ÝÇå¾²

    Êý¾ÝÇå¾²
  • ÔÆÅÌËãÇå¾²

    ÔÆÅÌËãÇå¾²
  • ¹¤Òµ»¥ÁªÍøÇå¾²

    ¹¤Òµ»¥ÁªÍøÇå¾²
  • ÎïÁªÍøÇå¾²

    ÎïÁªÍøÇå¾²
  • ÐÅÏ¢ÊÖÒÕÓ¦ÓÃÁ¢Òì

    ÐÅÏ¢ÊÖÒÕÓ¦ÓÃÁ¢Òì
  • ËùÓвúÆ·

    ËùÓвúÆ·
  • ËùÓнâ¾ö¼Æ»®

    ËùÓнâ¾ö¼Æ»®

»ù´¡ÉèÊ©Çå¾²


  • Õþ¸®

    Õþ¸®
  • ÔËÓªÉÌ

    ÔËÓªÉÌ
  • ½ðÈÚ

    ½ðÈÚ
  • ÄÜÔ´

    ÄÜÔ´
  • ½»Í¨

    ½»Í¨
  • ÆóÒµ

    ÆóÒµ
  • ¿Æ½ÌÎÄÎÀ

    ¿Æ½ÌÎÄÎÀ

  • AG¹«Ë¾ÔÆ AG¹«Ë¾ÔÆ
  • AG¹«Ë¾ÍþвÇ鱨ÖÐÐÄNTI AG¹«Ë¾ÍþвÇ鱨ÖÐÐÄNTI
  • TechWorldÊÖÒÕ¼ÎÄ껪 TechWorldÊÖÒÕ¼ÎÄ껪
  • ±±¾©AG¹«Ë¾¹«Òæ»ù½ð»á ±±¾©AG¹«Ë¾¹«Òæ»ù½ð»á
  • ÊÖÒÕ²©¿Í ÊÖÒÕ²©¿Í
  • Àֳɰ¸Àý Àֳɰ¸Àý

ÏàÖúͬ°éÉó²é¸ü¶à >

ÏàÖúͬ°é¶¯Ì¬

³ÉΪÏàÖúͬ°é

  • AG¹«Ë¾ÔÆ AG¹«Ë¾ÔÆ
  • AG¹«Ë¾ÍþвÇ鱨ÖÐÐÄNTI AG¹«Ë¾ÍþвÇ鱨ÖÐÐÄNTI
  • TechWorldÊÖÒÕ¼ÎÄ껪 TechWorldÊÖÒÕ¼ÎÄ껪
  • ±±¾©AG¹«Ë¾¹«Òæ»ù½ð»á ±±¾©AG¹«Ë¾¹«Òæ»ù½ð»á
  • ÊÖÒÕ²©¿Í ÊÖÒÕ²©¿Í
  • Àֳɰ¸Àý Àֳɰ¸Àý

ÊÖÒÕÖ§³ÖÉó²é¸ü¶à >

²úÆ·Ö§³Ö

  • AG¹«Ë¾ÔÆ AG¹«Ë¾ÔÆ
  • AG¹«Ë¾ÍþвÇ鱨ÖÐÐÄNTI AG¹«Ë¾ÍþвÇ鱨ÖÐÐÄNTI
  • TechWorldÊÖÒÕ¼ÎÄ껪 TechWorldÊÖÒÕ¼ÎÄ껪
  • ±±¾©AG¹«Ë¾¹«Òæ»ù½ð»á ±±¾©AG¹«Ë¾¹«Òæ»ù½ð»á
  • ÊÖÒÕ²©¿Í ÊÖÒÕ²©¿Í
  • Àֳɰ¸Àý Àֳɰ¸Àý

·µ»ØÁбí

ÆÊÎö·À»¤:Struts2 Ô¶³Ì´úÂëÖ´ÐÐÎó²î£¨S2-045£©

2017-03-08

Ðû²¼ÕߣºAG¹«Ë¾¿Æ¼¼

Îó²îÆÊÎö

Apache Struts2µÄJakarta Multipart parser²å¼þ±£´æÔ¶³Ì´úÂëÖ´ÐÐÎó²î £¬Îó²î±àºÅΪCNNVD-201703-152¡£¹¥»÷Õß¿ÉÒÔÔÚʹÓøòå¼þÉÏ´«Îļþʱ £¬ÐÞ¸ÄHTTPÇëÇóÍ·ÖеÄContent-TypeÖµÀ´´¥·¢¸ÃÎó²î £¬µ¼ÖÂÔ¶³ÌÖ´ÐдúÂë¡£

Ïà¹ØÁ´½ÓÈçÏ£º

https://cwiki.apache.org/confluence/display/WW/S2-045?from=timeline&isappinstalled=0


Ó°ÏìµÄ°æ±¾

  • Struts 2.3.5 - Struts 2.3.31
  • Struts 2.5 - Struts 2.5.10


²»ÊÜÓ°ÏìµÄ°æ±¾

  • Struts 2.3.32
  • Struts 2.5.10.1


AG¹«Ë¾ÍþвÇ鱨ÖÐÐÄNTI¹ØÓÚStruts2Îó²î¹æÄ£ÂþÑÜͼ

  1. È«ÇòÂþÑÜͼ

AG¹«Ë¾(Öйú¼¯ÍÅ)¡¤ÓÐÏÞ¹«Ë¾¹ÙÍø

  1. º£ÄÚÂþÑÜͼ

  1. È«ÇòÅÅÐÐ

  1. º£ÄÚÅÅÐÐ


Îó²îÆÊÎö

Apache Struts2±£´æÔ¶³Ì´úÂëÖ´ÐÐÎó²î £¬¹¥»÷Õß¿ÉÒÔ½«¶ñÒâ´úÂëͨ¹ýhttp±¨ÎÄÍ·²¿µÄContent-Type×Ö¶Îת´ï¸ø±£´æÎó²îµÄ·þÎñÆ÷ £¬µ¼ÖÂí§Òâ´úÂëÖ´ÐÐÎó²î¡£


  1. Îó²îPOC

AG¹«Ë¾(Öйú¼¯ÍÅ)¡¤ÓÐÏÞ¹«Ë¾¹ÙÍø


  1. Îó²îÑéÖ¤


  1. ϸ½ÚÆÊÎö

It is possible to perform a RCE attack with a malicious Content-Type value. If the Content-Type value isn't valid an exception is thrown which is then used to display an error message to a user.

´Ó¹Ù·½µÄÎó²îÐÎòÎÒÃÇ¿ÉÒÔÖªµÀ £¬Õâ¸öÎó²îÊÇÓÉÓÚStrus2¶Ô¹ýʧÐÂÎÅ´¦Öóͷ£·ºÆðÁËÎÊÌâ £¬Í¨¹ýContent-TypeÕâ¸öheaderÍ· £¬×¢ÈëOGNLÓïÑÔ £¬½ø¶øÖ´ÐÐÏÂÁî¡£

±¾ÎĵįÊÎöÊÇ»ùÓÚStruts 2.3.24°æ±¾¡£Ê×ÏÈ¿´Ò»ÏÂPOC £¬¹¥»÷Ö¸Áîͨ¹ý"Content-Type"ת´ï¸ø±£´æÎó²îµÄ·þÎñÆ÷ £¬ÈçÏÂͼËùʾ£º

AG¹«Ë¾(Öйú¼¯ÍÅ)¡¤ÓÐÏÞ¹«Ë¾¹ÙÍø

ÔÚ´«ÈëµÄ²ÎÊýÖÐ £¬Í¨¹ý#nike='multipart/form-data'Óï¾äʹµÃºǫ́ÅжÏÓï¾äcontent_type.contains("multipart/form-data")ÅжÏЧ¹ûΪtrue £¬ÒԱ㹥»÷´úÂëµÃÒÔ´«È롣ͬʱ½«¹¥»÷´úÂë'cat /etc/passwd'¸³Öµ¸ø#cmd²ÎÊý¡£½ÓÏÂÀ´Í¨¹ý(#cmds=(#iswin?{'cmd.exe''/c'#cmd}:{'/bin/bash''-c'#cmd})À´ÅжÏÄ¿µÄÖ÷»úµÄ²Ù×÷ϵͳÀàÐÍ £¬²¢Ñ¡ÔñÐԵľÙÐÐÖ¸Áֵ £¬×îÖÕ £¬Í¨¹ýÈçÏÂͼ´úÂë £¬½«¹¥»÷Ö¸ÁîÖ´ÐУº

AG¹«Ë¾(Öйú¼¯ÍÅ)¡¤ÓÐÏÞ¹«Ë¾¹ÙÍø

ÏÂÃæÏÈ¿´Ò»ÏÂÏÂÁîÖ´ÐÐ×¢Èëµã£º

ÔÚJakartaMultiPartRequest.java µÄbuildErrorMessageº¯ÊýÖÐ £¬Õâ¸öº¯ÊýÀïµÄlocalizedTextUtil.findText»áÖ´ÐÐOGNL±í´ïʽ £¬´Ó¶øµ¼ÖÂÏÂÁîÖ´ÐÐ £¬ÎÒÃÇÏÈ¿´ÏÂfindtextµÄ½ç˵£º

https://struts.apache.org/maven/struts2-core/apidocs/com/opensymphony/xwork2/util/LocalizedTextUtil.html

AG¹«Ë¾(Öйú¼¯ÍÅ)¡¤ÓÐÏÞ¹«Ë¾¹ÙÍø

½ÓÏÂÀ´Ëü±»JakartaMultiPartRequest.javaÖеÄparseŲÓá£Struts2µÄÈë¿ÚFilterDispatcher.java½ÓÏÂÀ´Ö´ÐÐdoFilterº¯Êý £¬Ö´ÐÐÍêһЩ¹ýÂ˺ó½øÈëprepareDispatcherAndWrapRequestº¯Êý £¬ÔÙÖ´ÐÐdispatcher.wrapRequest½øÈërequest´¦Öóͷ£·ÖÖ§ £¬ÏÂͼ¾ÍÊÇprepareDispatcherAndWrapRequestµÄʵÏÖ £¬¸Ãº¯Êý¶ÔÒªÁì¾ÙÐÐÁË´¦Öóͷ££º

½Ó×ÅÎÒÃÇ¿´dispatcher.wrapRequest £¬µ±Content-TypeΪmultipart/form-dataµÄʱ¼ä»áŲÓÃMultiPartRequestWrapperÕâ¸öÊÇÒ»¸ö¶ÔÖݪֲî±ðÉÏ´«·½·¨µÄ·â×° £¬ÆäÖоͰüÀ¨JakartaµÈ´«Êä·½·¨£º

MultiPartRequestWrapper.java·â×°ÁËparseº¯Êý£º

ÎÒÃÇÀ´¿´ÏÂparseº¯Êý £¬ÈçÏÂͼËùʾ£º

ÔÚparseº¯ÊýÖÐ £¬µ±Content-TypeÃûÌò»±»Ê¶±ðʱ £¬·ºÆðÒì³£ £¬µ¼ÖÂOGNL±í´ïʽ±»Ö´ÐÐ £¬Õâ¾ÍÊÇÎÒÃÇÆÊÎöµÄ×î³õµÄ×¢Èëµã¡£


²¹¶¡ÆÊÎö

  • 2.5.10.1°æ±¾µÄÐÞ¸´¼Æ»®£º

https://github.com/apache/struts/commit/b06dd50af2a3319dd896bf5c2f4972d2b772cf2b

AG¹«Ë¾(Öйú¼¯ÍÅ)¡¤ÓÐÏÞ¹«Ë¾¹ÙÍø

  • 2.3.32°æ±¾µÄÐÞ¸´¼Æ»®£º

https://github.com/apache/struts/commit/352306493971e7d5a756d61780d57a76eb1f519a

AG¹«Ë¾(Öйú¼¯ÍÅ)¡¤ÓÐÏÞ¹«Ë¾¹ÙÍø


¹Ù·½½â¾ö¼Æ»®

  • ¹Ù·½ÒѾ­Ðû²¼Á˰汾¸üР£¬½¨ÒéÓû§Éý¼¶µ½²»ÊÜÓ°ÏìµÄ×îа汾(Struts2 2.3.32»òStruts 2.5.10.1) £¬ÏÂÔØÁ´½ÓÈçÏÂËùʾ£º

Struts 2.3.32:

https://github.com/apache/struts/releases/tag/STRUTS_2_3_32

Struts 2.5.10.1:

https://github.com/apache/struts/releases/tag/STRUTS_2_5_10_1


ÔÝʱÐÞ¸´¼Æ»®

ÔÚÓû§Î´±ã¾ÙÐÐÉý¼¶µÄÇéÐÎÏ £¬×÷ΪÔÝʱµÄ½â¾ö¼Æ»® £¬Óû§¿ÉÒÔ¾ÙÐÐÒÔϲÙ×÷À´¹æ±ÜΣº¦£º

  • ÐÞ¸ÄWeb-INF/classesĿ¼ÏµÄstruts.xmlÖеÄÉèÖÃ

ÔÚWeb-INF/classesĿ¼ÏµÄstruts.xml ÖеÄstruts ±êÇ©ÏÂÌí¼Ó£»

ÔÚWEB-INF/classes/ Ŀ¼ÏÂÌí¼Ó global.properties £¬ÎļþÄÚÈÝÈçÏÂ

struts.messages.upload.error.InvalidContentTypeException=1

  • ÉèÖùýÂËÆ÷¹ýÂËContent-TypeµÄÄÚÈÝ

ÔÚwebÓ¦ÓõÄweb.xmlÖÐÉèÖùýÂËÆ÷ £¬ÔÚ¹ýÂËÆ÷ÖжÔContent-TypeÄÚÈݵÄÕýµ±ÐÔ¾ÙÐмì²â£º

public void doFilter(ServletRequest request ServletResponse response FilterChain chain) throws java.io.IOException ServletException {

String contentType = request.getContentType().toLowerCase(Locale.ENGLISH);

if (contentType != null && contentType.contains("multipart/form-data") && !contentType.startsWith("multipart/form-data"))

{ response.getWriter().write("Reject!"); }

else { chain.doFilter(request response); }

}


ÊÖÒÕ·À»¤¼Æ»®

  • ÈôÊÇÄú²»ÇåÎúÊÇ·ñÊÜ´ËÎó²îÓ°Ï죺

¹«Íø×ʲú ¿ÉʹÓÃAG¹«Ë¾ÔÆ ½ôÆÈÎó²îÔÚÏß¼ì²â £¬¼ì²âµØµãÈçÏ£º

http://t.cn/RipBq1c

ÄÚÍø×ʲú ¿ÉÒÔʹÓÃAG¹«Ë¾¿Æ¼¼µÄÔ¶³ÌÇå¾²ÆÀ¹Àϵͳ(RSAS V5¡¢V6)»ò WebÓ¦ÓÃÎó²îɨÃèϵͳ£¨WVSS£© ¾ÙÐмì²â¡£

          Ô¶³ÌÇå¾²ÆÀ¹Àϵͳ£¨RSAS V5£©

http://update.nsfocus.com/update/listAurora/v/5

          Ô¶³ÌÇå¾²ÆÀ¹Àϵͳ£¨RSAS V6£©

http://update.nsfocus.com/update/listRsasDetail/v/vulweb

          WebÓ¦ÓÃÎó²îɨÃèϵͳ£¨WVSS£©

http://update.nsfocus.com/update/listWvss

        Í¨¹ýÉÏÊöÁ´½Ó £¬Éý¼¶ÖÁ×îа汾¼´¿É¾ÙÐмì²â£¡


  • ʹÓÃAG¹«Ë¾¿Æ¼¼·À»¤Àà²úÆ·£¨NIPS/NIDS/NF/WAF£©¾ÙÐзÀ»¤£º

          ÈëÇÖ·À»¤ÏµÍ³£¨NIPS£©

http://update.nsfocus.com/update/listIps

          ÈëÇÖ¼ì²âϵͳ£¨NIDS£©

http://update.nsfocus.com/update/listIds

          ÏÂÒ»´ú·À»ðǽϵͳ£¨NF£©

http://update.nsfocus.com/update/listNf

          WebÓ¦Ó÷À»¤ÏµÍ³£¨WAF£©

http://update.nsfocus.com/update/wafIndex

          ͨ¹ýÉÏÊöÁ´½Ó £¬Éý¼¶ÖÁ×îа汾¼´¿É¾ÙÐзÀ»¤£¡

AG¹«Ë¾¿Æ¼¼ÉùÃ÷

±¾Ç徲ͨ¸æ½öÓÃÀ´ÐÎò¿ÉÄܱ£´æµÄÇå¾²ÎÊÌâ £¬AG¹«Ë¾¿Æ¼¼²»Îª´ËÇ徲ͨ¸æÌṩÈκΰü¹Ü»òÔÊÐí¡£ÓÉÓÚÈö²¥¡¢Ê¹ÓôËÇ徲ͨ¸æËùÌṩµÄÐÅÏ¢¶øÔì³ÉµÄÈκÎÖ±½Ó»òÕß¼ä½ÓµÄЧ¹û¼°Ëðʧ £¬¾ùÓÉʹÓÃÕß×Ô¼ºÈÏÕæ £¬AG¹«Ë¾¿Æ¼¼ÒÔ¼°Ç徲ͨ¸æ×÷Õß²»Îª´Ë¼ç¸ºÈκÎÔðÈΡ£AG¹«Ë¾¿Æ¼¼ÓµÓжԴËÇ徲ͨ¸æµÄÐÞ¸ÄÏ¢ÕùÊÍȨ¡£ÈçÓû×ªÔØ»òÈö²¥´ËÇ徲ͨ¸æ £¬±ØÐè°ü¹Ü´ËÇ徲ͨ¸æµÄÍêÕûÐÔ £¬°üÀ¨°æÈ¨ÉùÃ÷µÈËùÓÐÄÚÈÝ¡£Î´¾­AG¹«Ë¾¿Æ¼¼ÔÊÐí £¬²»µÃí§ÒâÐ޸ĻòÕßÔö¼õ´ËÇ徲ͨ¸æÄÚÈÝ £¬²»µÃÒÔÈκη½·¨½«ÆäÓÃÓÚÉÌҵĿµÄ¡£


?

ÄúµÄÁªÏµ·½·¨

*ÐÕÃû
*µ¥Î»Ãû³Æ
*ÁªÏµ·½·¨
*ÑéÖ¤Âë AG¹«Ë¾(Öйú¼¯ÍÅ)¡¤ÓÐÏÞ¹«Ë¾¹ÙÍø
Ìá½»µ½ÓÊÏä

¹ºÖÃÈÈÏß

  • ¹ºÖÃ×Éѯ:

    400-818-6868-1

Ìá½»ÏîÄ¿ÐèÇó

½Ó´ý¼ÓÈëAG¹«Ë¾¿Æ¼¼ £¬³ÉΪÎÒÃǵÄÏàÖúͬ°é£¡
  • *ÇëÐÎòÄúµÄÐèÇó
  • *×îÖÕ¿Í»§Ãû³Æ
  • *ÏîÄ¿Ãû³Æ
  • Äú¸ÐÐËȤµÄ²úÆ·
  • ÏîĿԤËã
ÄúµÄÁªÏµ·½·¨
  • *ÐÕÃû
  • *ÁªÏµµç»°
  • *ÓÊÏä
  • *Ö°Îñ
  • *¹«Ë¾
  • *¶¼»á
  • *ÐÐÒµ
  • *ÑéÖ¤Âë AG¹«Ë¾(Öйú¼¯ÍÅ)¡¤ÓÐÏÞ¹«Ë¾¹ÙÍø
  • Ìá½»µ½ÓÊÏä
AG¹«Ë¾(Öйú¼¯ÍÅ)¡¤ÓÐÏÞ¹«Ë¾¹ÙÍø
AG¹«Ë¾(Öйú¼¯ÍÅ)¡¤ÓÐÏÞ¹«Ë¾¹ÙÍø

·þÎñÖ§³Ö

ÖÇÄܿͷþ
ÖÇÄܿͷþ
¹ºÖÃ/ÊÛºóÊÖÒÕÎÊÌâ
Ã˹ܼÒ-ÊÛºó·þÎñϵͳ
Ã˹ܼÒ-ÊÛºó·þÎñϵͳ
ÔÚÏßÌáµ¥|ÖÇÄÜÎÊ´ð|֪ʶ¿â
Ö§³ÖÈÈÏß
Ö§³ÖÈÈÏß
400-818-6868
AG¹«Ë¾¿Æ¼¼ÉçÇø
AG¹«Ë¾¿Æ¼¼ÉçÇø
×ÊÁÏÏÂÔØ|ÔÚÏßÎÊ´ð|ÊÖÒÕ½»Á÷

? 2025 NSFOCUS AG¹«Ë¾¿Æ¼¼ www.nsfocus.com All Rights Reserved . ¾©¹«Íø°²±¸ 11010802021605ºÅ ¾©ICP±¸14004349ºÅ ¾©ICPÖ¤110355ºÅ

ÍøÕ¾µØÍ¼