9 月 19 日,騰訊云安全中心監測到 ?Apache Tomcat 修復了2個嚴重級別的漏洞, 分別為: 信息泄露漏洞(CVE-2017-12616)、遠程代碼執行漏洞(CVE-2017-12615

9 月 19 日,騰訊云安全中心監測到 ?Apache Tomcat 修復了2個嚴重級別的漏洞, 分別為: 信息泄露漏洞(CVE-2017-12616)、遠程代碼執行漏洞(CVE-2017-12615),在某些場景下,攻擊者將分別能通過這兩個漏洞,獲取用戶服務器上 JSP 文件的源代碼,或是通過精心構造的攻擊請求,向用戶服務器上傳惡意 JSP 文件,通過上傳的 JSP 文件 ,可在用戶服務器上執行任意代碼。 ? ??

?

云鼎實驗室通過對于漏洞描述,搭建漏洞環境,并對其進行復現。此漏洞為高危漏洞,即使是非默認配置,但是一旦存在漏洞,那么攻擊者可以成功上傳 webshell,并控制服務器。

?

復現

?

根據描述,在 Windows 服務器下,將 readonly 參數設置為 false 時,即可通過 PUT 方式創建一個 JSP 文件,并可以執行任意代碼。 ??

通過閱讀 conf/web.xml 文件,可以發現: ?

?

默認 readonly true,當 readonly 設置為 false 時,可以通過 PUT / DELETE 進行文件操控。 ?

配置 readonly false

?

啟動 Tomcat,利用 PUT 請求創建文件:

?

提示 404。通過描述中的 Windows 受影響,可以結合 Windows 的特性。其一是 NTFS 文件流,其二是文件名的相關限制(如 Windows 中文件名不能以空格結尾)來繞過限制:?

?

?

?

訪問發現可以正常輸出:?

?

?

分析

Tomcat Servlet 是在 conf/web.xml 配置的,通過配置文件可知,當后綴名為 .jsp .jspx 的時候,是通過JspServlet處理請求的: ?

?

可以得知,“1.jsp ”(末尾有一個和空格)并不能匹配到?JspServlet,而是會交由DefaultServlet去處理。當處理 PUT 請求時:

?

會調用resources.rebind

?

dirContext?FileDirContext

?

調用?rebind創建文件:

?

又由于 Windows 不允許“ ”作為文件名結尾,所以會創建一個?.jsp 文件,導致代碼執行。

?

Bypass 分析

?

然而,經過黑盒測試,當 PUT 地址為/1.jsp/時,仍然會創建 JSP,會影響 Linux Windows 服務器,并且 Bypass 了之前的補丁,分析如下。?

?

在進入 bind 函數時,會聲明一個 File 變量:

?

進入 File 后,會對 name 進行 normalize

?

最后得到的 path 就是沒有最后?/? path :

?

?

影響?

?

由于存在去掉最后的 / 的特性,那么這個漏洞自然影響 Linux 以及 Windows 版本。而且經過測試,這個漏洞影響全部的 Tomcat 版本,從 5.x 9.x 無不中槍。目前來說,最好的解決方式是將 conf/web.xml 中對于 DefaultServlet readonly 設置為 true,才能防止漏洞。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387489.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387489.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387489.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2.0 STL泛型編程

Standard Template Library 在命名空間std中定義了常用的數據結構和算法 三種類型的組件: 容器: ——vector、string ——set、multiset、map、multimap ——list ——bitset ——stack ——deque、queue、priority_queue 迭代器 算法&…

SQL聯合更新

update CCTDB..Area_Infoset ParentStrb.ParentStrfrom CCTDB..Area_Info a inner join TempArea bon a.AreaId b.AreaId轉載于:https://www.cnblogs.com/davidgu/archive/2012/08/10/2631289.html

集合之ArrayList(含JDK1.8源碼分析)

一、ArrayList的數據結構 ArrayList底層的數據結構就是數組,數組元素類型為Object類型,即可以存放所有類型數據。我們對ArrayList類的實例的所有的操作(增刪改查等),其底層都是基于數組的。 定義底層數據結構:Object[] elementDat…

2.2 string

字符數組的封裝 基本操作與vector很像&#xff0c;它們內部采用的都是數組結構 #include<string> 創建string對象&#xff1a; string s; 給string對象賦值&#xff1a; 方式一&#xff1a;s"i love coding"; 方式二&#xff1a; char a[256]; scanf(&qu…

Unity3D 自動打包整個項目(以AssetBundle實現)

需求&#xff1a; 在移動開發中&#xff0c;手動控制資源的加載、釋放和熱更新&#xff0c;是很有必要的。 而Unity通過AssetBundle可以實現該需求&#xff0c;但是如果項目資源多起來的話一個個手動打包成AssetBundle則很麻煩。 而本文正為此提供一套一鍵打包的方案。 資源分…

Android復制assets目錄下的圖片到內存

轉自&#xff1a;http://www.chenwg.com/android/android%E5%A4%8D%E5%88%B6assets%E7%9B%AE%E5%BD%95%E4%B8%8B%E7%9A%84%E5%9B%BE%E7%89%87%E5%88%B0%E5%86%85%E5%AD%98.html 有些Android應用需要一些初始化數據&#xff0c;但是考慮到國內這種龜速網絡和高昂的網絡流量費用&…

Python 2.7 cython cythonize py 編譯成 pyd 談談那些坑(轉載)

轉自&#xff1a;https://www.cnblogs.com/ibingshan/p/10334471.html Python 2.7 cython cythonize py 編譯成 pyd 談談那些坑 前言 基于 python27 的 pyc 很容易被反編譯&#xff0c;于是想到了pyd&#xff0c;加速運行&#xff0c;安全保護 必要準備 安裝cython&#xff1a;…

2.3 set

#include<set> 紅黑樹&#xff08;Red-Black Tree&#xff09;&#xff0c;一種平衡二叉檢索樹。 對于插入相同鍵值的情況忽略處理。 set主要用于快速檢索 高效的插入和刪除 multiset、map、multimap都是平衡二叉檢索樹。 創建set集合&#xff1a; set<int> s…

一、創建Assetbundle 在unity3d開發的游戲中,無論模型,音頻,還是圖片等,我們都做成Prefab,然后打包成Assetbundle,方便我們后面的使用,來達到資源的更新。

一、創建Assetbundle 在unity3d開發的游戲中&#xff0c;無論模型&#xff0c;音頻&#xff0c;還是圖片等&#xff0c;我們都做成Prefab&#xff0c;然后打包成Assetbundle&#xff0c;方便我們后面的使用&#xff0c;來達到資源的更新。 一個Assetbundle可以打包一個模型&…

【JS】我的JavaScript學習之路(2)

3.從JavaScript頁面解析過程看執行順序 代碼(test.html)&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.org/1999/x…

Codeforces 862D. Mahmoud and Ehab and the binary string 【二分】(交互)

<題目鏈接> 題目大意&#xff1a; 有一個長度為n(n<1000)的01串&#xff0c;該串中至少有一個0和一個1&#xff0c;現在由你構造出一些01串&#xff0c;進行詢問&#xff0c;然后系統會給出你構造的串與原串的 Hamming distance &#xff0c;現在要求你按照步驟進行…

王者榮耀提取攻略

1. 王者榮耀安裝后&#xff0c;就將模型等資源解壓到SD卡目錄里&#xff0c;我們需要找到這個目錄。模型資源存儲在SD卡中&#xff0c;路徑為&#xff1a;【/SDCard/Android/data/com.tencent.tmgp.sgame/files/Resources/AssetBundle/】 2. 2 所有英雄的資源包都在這個目…

2.4 multiset

#include<set> multiset與set的唯一不同&#xff1a;允許插入重復的元素。 在插入元素、刪除元素、查找元素上與set 有區別。 multiset元素的插入&#xff1a; multiset<int> ms; ms.insert(11); ms.insert(11); //插入兩個11&#xff0c;遍歷時同樣有兩個11。…

Exchange ActiveSyn身份驗證類型

http://www.exchangecn.com/html/exchange2010/20110125_316.html 配置 Exchange ActiveSync 身份驗證 時間:2011-01-25 11:01來源:Exchange中文站 作者:Exchange中文站 點擊:3045次ActiveSync 身份驗證是客戶端和服務器驗證其身份以進行數據傳輸的過程&#xff0c;本文以示例的…

HotSpot 虛擬機垃圾回收算法實現

作為使用范圍最廣的虛擬機之一HotSpot&#xff0c;必須對垃圾回收算法的執行效率有嚴格的考量&#xff0c;只有這樣才能保證虛擬機高效運行 枚舉根節點 從可達性分析中從 GC Roots 節點找引用鏈這個操作為例&#xff0c;可以作為 GC Roots 的節點主要在全局性的引用&#xff08…

Java NIO編寫Socket服務器的一個例子

最近一直在忙著JAVA NIO的知識&#xff0c;花了一下午的時間&#xff0c;總算寫出了一個可以運行的程序&#xff0c;廢話少說&#xff0c;上代碼&#xff01; Java代碼&#xff1a; import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerS…

2.5 map

#include<map> key/value對 采用紅黑樹實現&#xff0c;鍵值不允許重復 用法與set類似 創建map&#xff1a; map<string, float> m; m["haha"] 11.1; m["hehe"] 22.2; for (map<string, float>::iterator it m.begin(); it ! m.en…

在js傳遞參數中含加號(+)的處理方式

一般情況下&#xff0c;url中的參數應使用 url 編碼規則&#xff0c;即把參數字符串中除了 “ - "、" _ " 、" . "之外的所有非字母數字字符都將被替換成百分號&#xff08;%&#xff09;后跟兩位十六進制數&#xff0c;空格則編碼為加號&#xff08;…

二 SVN代碼沖突的解決

問題&#xff1a; A和B都是最新的代碼&#xff0c;A修改了代碼提交了&#xff0c;B也修改了代碼&#xff0c;但是B提交的時候出現沖突的問題。 解決方案&#xff1a;編輯沖突 解決沖突&#xff1a; 方法一&#xff1a;將文件里面沖突的描述去掉&#xff0c;重新提交 方法二&…

Android7.0反射類找不到的問題

Java中使用反射的地方較多&#xff0c;尤其是各種框架中。最近在Android7.0的項目中遇到個問題很奇怪&#xff0c;反射使用的類找不到了&#xff0c;但是編譯的時候沒問題啊。然后在代碼中使用非反射的方式調用代碼也是沒有問題的&#xff0c;這時奇怪的現象出現了&#xff0c;…