<big id="9jpvf"><dfn id="9jpvf"><meter id="9jpvf"></meter></dfn></big><ol id="9jpvf"></ol>
<b id="9jpvf"><var id="9jpvf"></var></b>

      
      <ruby id="9jpvf"></ruby>
        <video id="9jpvf"><strike id="9jpvf"><th id="9jpvf"></th></strike></video>

          新聞中心

          Struts2高危漏洞S2-048動態分析

          作者 / 無憂主機 時間 2017-10-19 14:30:31

          綜述 2017年7月7日,Apache Struts發布最新的安全公告,Apache Structs2的strus1插件存在遠程代碼執行的高危漏洞,漏洞編號為CVE-2017-9791(S2-048)。攻擊者可以構造惡意的字段值通過Struts2的struts2-struts1-plugin的插件,遠程執行代碼 漏洞分析 (1) 漏洞簡介 Apache Struts2.3.x系列版本中struts2-struts1-plugin存在遠程代碼執行漏洞,進而導致任意代碼執行。 (2) 漏洞分析 官方的漏洞描述如下: 從官方的漏洞描述我們可以知道,這個漏洞本質上是在struts2-struts1-plugin這個jar包上。這個庫是用將struts1的action封裝成struts2的action以便在strut2上使用。本質原因還是在struts2-struts1-plugin包中Struts1Action.java中execute函數調用了getText函數,這個函數會執行ognl表達式,更可惡的是getText的輸入內容還是攻擊者可控的。以下分析基于struts2的官方示例struts2-showcase war包。首先Struts1Action的execute方法代碼如下,從紅框中信息可以看出其實質是調用SaveGangsterAction.execute方法,然后再調用getText(msg.getKey()….)。 1 在struts2-showcase的integration模塊下有SaveGangsterAction.java的execute方法的實現。具體如下: 2 在這個方法中就帶入有毒參數gforn.getName()放到了messages結構中,而gform.getName()的值是從客戶端獲取的。Gangsterform.getName()的實現如下: 3 我們這里傳入了${1+1}。有毒參數已經帶入,就差ognl表達式。繼續回到Struts1Action.java的execute方法下半部分,這里有getText()的入口,能清晰看到參數已經被污染,具體如下圖: 4 下面進入getText的實現函數:這個調用棧比較深,首先我們給出棧圖: 5 從Struts1action.execute函數開始,到ActionSupport的getText()方法,方法如下: 6 接著進入TextProviderSuppport.getText,接著調用其另一個重載類方法getText(),示例如下: 7 如圖所示,進入LocalizeTextUtil.findText,繼續分析其實現:從名字上也能看出其是根據用戶的配置做一些本地化的操作。代碼如下: 8 熟悉struts2的童鞋跟到這一步就能發現這就是一個很典型的ognl表達式入口,先是得到一個valueStack,再繼續遞歸得到ognl表達式的值。 這里不再描述,詳情可參考官方鏈接:https://struts.apache.org/maven/struts2-core/apidocs/com/opensymphony/xwork2/util/LocalizedTextUtil.html

          本文地址:http://www.mishkantour.com/safety/25463.html

          1
          1
          1
          1
          1
          1
          1

          客戶服務熱線

          0791-8623-3537

          在線客服
          国产无遮挡18禁网站免费

          <big id="9jpvf"><dfn id="9jpvf"><meter id="9jpvf"></meter></dfn></big><ol id="9jpvf"></ol>
          <b id="9jpvf"><var id="9jpvf"></var></b>

              
              <ruby id="9jpvf"></ruby>
                <video id="9jpvf"><strike id="9jpvf"><th id="9jpvf"></th></strike></video>