更多深度文章, 請關注雲計算頻道: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版本。
升級說明
一、找不到類
找不到那得多正常, 查看了一下源碼, 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了。