日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java asm jndi_GitHub - Q1ngShan/JNDI: JNDI 注入利用工具

發布時間:2025/3/11 编程问答 67 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java asm jndi_GitHub - Q1ngShan/JNDI: JNDI 注入利用工具 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JNDI 注入利用工具

介紹

本項目為 JNDI 注入利用工具,生成 JNDI 連接并啟動后端相關服務,可用于 Fastjson、Jackson 等相關漏洞的驗證。

本項目是基于 welk1n 的 JNDI-Injection-Exploit,在此項目的基礎服務框架上,重新編寫了攻擊利用代碼,支持更多更強大的功能,并加入了多種方式進行回顯的支持。

本項目為學習性項目,目前本人 Java 水平依然處于 hello world 的水平,建議各位師傅報著批判的眼光觀看,不吝指導。QAQ

功能

本工具支持了利用 JNDI 注入構造多種惡意 payload,其中包括:

名稱

功能

簡介

BasicInfo

獲取服務器基礎信息

打印出 System.getProperties() 中的信息

Command

命令執行

反射調用 forkandexec 執行命令

DataSourceHack

獲取Spring DataSource 明文

獲取緩存在上下文中的 DataSource

DirList

目錄遍歷

使用 File 對象列目錄

FileDelete

文件刪除

使用 File 對象刪除文件

FileRead

文件讀取

使用 FileInputStream 讀取文件

FileWrite

文件寫入

使用 FileOutputStream 寫文件

SQL Query

執行SQL語句

使用 JDBC 發出查詢

SSRF

訪問內網應用

發送 HTTP 請求,并將結果返回

對于具體功能的構建比較簡單,幾乎就是正常的功能性編程,只不過部分功能使用了反射,可能不易于閱讀。

對這部分功能實現有疑問的同學可以在 Javasec 上找到相關的文章。

對于各項參數的配置使用了配置文件的方式,由于是在調用時會讀取文件,并未將值進行緩存,所以可以隨時修改配置文件中 payload 的值,無需重啟服務。

除去基本功能,本工具加入了多種回顯方式,使 JNDI 注入的結果能夠返回,這樣在研究或測試中可以更方便的看到結果,本攻擊支持了如下回顯方式:

名稱

功能

簡介

ExceptionEcho

報錯回顯

throw 一個異常,message 是我們執行的結果

OOBEcho

帶外回顯

向 dnslog 平臺發送數據包攜帶執行結果

TomcatEcho

Tomcat 回顯

通過 Tomcat 獲取 response 將結果寫入

WebLogicEcho

WebLogic 回顯

通過 WebLogic 獲取 response 將結果寫入

有了這些功能,我們就可以把 JNDI 注入活活玩成 webshell。

使用

使用源代碼執行:

下載項目源代碼:

git clone git@github.com:JosephTribbianni/JNDI.git

執行 org.su18.server.ServerStart 的 main() 方法,可以在控制臺中看到啟動消息。

使用 jar 文件執行:

在 release 下載打包好的文件,解壓壓縮包,確保配置文件與 jar 文件位于同一目錄下,請根據自定義需求修改端口號及其他配置項,運行 jar 文件:

java -jar JNDI-1.0-all.jar

查看生成的惡意類

可以使用 org.su18.asm.frame.Frame 類的 main() 方法生成 .class 文件進行查看。

執行后,會在項目根目錄生成文件,使用任意手段 decompile 后可查看邏輯。

使用展示

這里利用 fastjson 結合 jndi 來進行部分功能使用展示:

命令執行 id :

基礎信息:

獲取 Spring 數據源信息:

對我電腦上的 /Users/phoebe/PycharmProjects 進行目錄遍歷:

文件讀取 /etc/passwd

等等,剩余的就不展示了,自測吧。

上面使用了 TomcatEcho 進行回顯,其他回顯展示:

報錯回顯:

OOB 回顯:

技術細節

服務端

服務器端完全基于原項目,未進行大改動,將服務監聽端口加入了配置文件中,方便修改。

payload 細節

由于原項目僅執行了命令執行,并且是使用 Runtime.getRuntime.exec() 這種非常表面的接口調用,功能較為單一,且容易被防護阻斷,因此這里我增加了多個功能模塊,并對于多數模塊,直接使用反射調用 native 方法執行功能,這可以在某種情況下完全繞過流量層或應用層的安全防護。對于其他功能則是正常的邏輯代碼調用,基本不會觸發任何規則。

回顯細節

回顯主要分為幾類:

報錯回顯:直接拋出異常,這種方式能否回顯完全取決于服務端對異常的處理情況。

OOB回顯:這里使用了 ceye.io,由于這個域名可能會被各大安全防護產品拉入黑名單,所以可以尋找小眾的 dnslog 平臺或自行搭建。

response 回顯:這里支持了 Tomcat 和 Weblogic 的回顯,獲取當前訪問的 response 對象,并寫回結果。

字節碼拼接

在惡意類的字節碼生成上,原項目使用編譯好的 jdk7、jdk8 的 class 文件,使用 asm 加載并加入執行命令代碼;本項目則直接使用 asm 完全生成類字節碼。由于要實現模塊化,這里設計了一個簡單的代碼結構:

public class Template {

private String result;

public Template() throw Exception{

// insert payload here

this.echo();

}

public void echo() throw Exception{

// how would you like to echo the result

}

}

由于 JNDI 注入的特性是會執行類的構造方法或 static 語句塊,因此將惡意 payload 織入構造方法中,在執行完 payload 后,構造出響應的返回結果,放在 this.result 中,在構造方法的最后一行執行 this.echo() 方法,進行回顯的邏輯。

未完成

由于時間有限,ASM 生成的代碼十分簡陋,后期會改為使用 AdviceAdapter 的 onMethodEnter、onMethodExit更優雅的生成代碼。

由于 JNDI 注入本身需要出網,所以一些漏洞利用方式和回顯方式顯得有些雞肋,后期會繼續優化,添加新功能。

僅使用了 jdk 1.8 進行測試,部分利用代碼“可能”使用了 1.8 之后的新特性,在低版本上可能失效。

加入 linux 文件描述符回顯:本來想加的,根據幾位師傅給出的思路經過了一下午的調試,還是沒有做到通用有效的尋找文件描述符 id 的方法,后續有時間再弄吧。

參考文章

交流

Java 安全技術交流微信群:javasec,請前往網站添加管理員微信邀請您入群。

Javasec 項目是由 安百科技-凌天實驗室 發起,是一個免費、開源的 Java Web 安全相關知識歸納總結、培訓的項目,相關問題可以在交流群內提出討論或 Github 上提出 issues。

總結

以上是生活随笔為你收集整理的java asm jndi_GitHub - Q1ngShan/JNDI: JNDI 注入利用工具的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。