您的位置:首頁>正文

Struts2升級版本至2.5.10,高危漏洞又來了

更多深度文章, 請關注雲計算頻道:https://yq.aliyun.com/cloud

前情概要

漏洞年年有, 最近特別多。 2017年3月6日, Apache Struts2被曝存在遠端命令執行漏洞, 漏洞編號:S2-045, CVE編號:CVE-2017-5638, 官方評級為高危, 該漏洞是由於在使用基於Jakarta外掛程式的檔上傳功能條件下, 惡意用戶可以通過修改HTTP請求頭中的Content-Type值來觸發該漏洞, 進而執行任意系統命令, 導致系統被駭客入侵。

漏洞分析請移步:https://yq.aliyun.com/articles/72008

建議

如果這個版本在Struts2.3.5 到 Struts2.3.31 以及 Struts2.5 到 Struts2.5.10之間則存在漏洞, 請升級到struts 2.3.32或2.5.10.1版本(畢了狗了, 公司還在用struts2)。

由於目前使用版本是struts2-core-2.3.28, 於是趕緊升了下級別, 略過2.3 直接升級到2.5版本。

升級說明

一、找不到類

java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

找不到那得多正常, 查看了一下源碼, 2.5版本已變更了包路徑。

二、配置好了居然找不到Action

是不是有點懷疑人生了, 趕緊去http://struts.apache.org/ struts2的官網扒拉扒拉。

由於版本跨度大, 2.5版本升級了很多特性, 在Struts 2.5中, 嚴格DMI被擴展, 它被稱為嚴格方法調用 又名SMI。 你可以想像DMI是一個“邊境員警”, SMI是一個“稅務員警”, 並注意內部。 使用此版本, SMI預設情況下啟用(strict-method-invocation屬性預設設置為 true在 struts-default包中), 您可以選擇禁用它每個包 - 沒有全域開關禁用整個應用程式的SMI。

SMI的工作原理如下:

也就是說你必須加入這個配置才可以, 最好全域設置:

regex:.*

三、package中元素順序的問題

元素類型為 "package" 的內容必須匹配 "(result-types?,interceptors?,default-interceptor-ref?,default-action-ref?

出現此報錯, 你就要注意了, 一定要檢查package中 global-allowed-methods 的位置, 然後按照報錯指定順序放置配置。

四、可能會出現的問題

如果你的項目中使用的是log4j而不是log4j2, 那麼問題就來了, 你還需要加入log4j-api-2.7.jar 和log4j-core-2.7.jar, 並且配置 log4j2.xml(暫且是個空的)。

否則會一直報以下錯誤, 至於為什麼, 還沒深入瞭解。

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.

好了, 如果啟動沒有其他問題, 應該就可以訪問到久違的Action了。

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示