成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

頻頻闖禍的JNDI,到底是個什么垃圾玩意兒?

開發 后端
每次規模比較大的漏洞,JNDI好像都不會缺席。最近人盡皆知的Log4j2漏洞也和它有關,讓人不由得懷疑,是不是作者開的后門。

每次規模比較大的漏洞,JNDI好像都不會缺席。最近人盡皆知的Log4j2漏洞也和它有關,讓人不由得懷疑,是不是作者開的后門。

因為JNDI這個玩意,別說用過,很多人連聽都沒聽說過。這么冷門酸爽的東西,有什么理由把它放在一個日志框架里呢?恐怕只有作者想得通。

數據庫驅動

很多人接觸JNDI,是從數據庫的驅動開始的。當然,隨著SpringBoot單體發布模式的流行,現在用這種方式來獲取數據庫配置的古董公司,是越來越少了。

比如,我們可以在tomcat的server.xml里,配置一個叫做xjjdogDB的資源。

  1. <Resource name="jdbc/xjjdogDB" auth="Container" type="javax.sql.DataSource" 
  2. maxTotal="100" maxIdle="30" maxWaitMillis="10000" 
  3. username="xjjdog" password="123456" driverClassName="com.mysql.jdbc.Driver" 
  4. url="jdbc:mysql://localhost:3306/xjjdog_db"/> 

那么,我們只需要在SpringBoot中配置上JNDI這個名字,它就能加載正確的配置。前提是我們需要把SpringBoot服務打包成WAR包發布。像JBoss這樣的宣稱企業級服務器的軟件,就喜歡這么干。

  1. spring: 
  2.   datasource: 
  3.  jndi-name: jdbc/xjjdogDB 

從這里,我們可以看出。JNDI到底是個神馬玩意呢?你可以認為它是一個配置中心,也可以認為它是一個命名服務。其根本功能,就是讓你可以通過一個簡短的字符串,就能獲取一系列的復雜配置和初始化后的功能。

這樣,我們就可以避免將這些配置直接寫在項目里。程序啟動起來,到底加載的什么東西,要看運行的環境配置的什么東西。

具體實現的話,不就是一個可以根據key獲取value的HashMap嘛。

危險由此而來

關鍵是這個value,它不是String,它是一個Object。要從字符串變身為一個正常的類,還要做到通用,那就不得不依靠反射。

這張圖是Oracle官方的一張關于JNDI的介紹。上面的都不是關鍵,關鍵的地方在于,JNDI通過SPI機制,可以和LDAP、RMI等各種技術,產生聯動。

任何為了追求方便而不遵守常規的便捷通道,都會產生問題。SPI是為數不多的打破Java類加載機制的技術,和Unsafe類一樣,強大但并不那么推薦使用。

如上圖,就是NamingManager類里面的方法getObjectFactoryFromReference。當它從本地加載相應類的時候,如果加載不到,它干了一件不該干但又不得不干的事情,那就是從網絡上的代碼里面構造相應的對象!

這下,在炫肌肉的同時,可完犢子了。如上圖,我們只需要在8000端口啟動一個nginx。或者直接使用python啟動一個小小的web服務器。

  1. python -m http.server 8000 

能夠發起外網請求的服務器,將會乖乖的自動從我們指定的服務器上撈下非法的class文件進行加載。

制作這些攻擊性的playload也非常容易,有marshalsec這樣的工具,可以很方便的生成。

根據java的類加載機制,在static代碼塊里面,就可以干一些實際的代碼執行邏輯。我們只需要把編譯后的a.class放在該放的地方,JNDI這玩意就能夠加載它。

  1. public class a { 
  2.     static { 
  3.         try { 
  4.             String[] cmd = {"calc.exe"}; 
  5.    java.lang.Runtime.getRuntime().exec(cmd).waitFor(); 
  6.         } catch ( Exception e ) { 
  7.             e.printStackTrace(); 
  8.         } 
  9.     } 

上面的代碼將會在你部署的服務器上啟動一個calc計算器。當然,它還可以干更多事情。

END

從上面可以看出,Java的反射很強大,但是也很危險。SPI功能繼承了這個特性,勇猛的暴露了它的弱點。我覺得功能很好啊,但它為什么要存在于日志框架呢?

這可能是因為卷吧。畢竟一個日志框架,也是要有元宇宙的夢想的!

責任編輯:趙寧寧 來源: 小姐姐味道
相關推薦

2010-06-28 15:58:45

EclipseJavaIDE

2010-06-29 13:39:26

Eclipse什么玩意兒

2010-07-02 10:10:09

Eclipse

2010-07-05 15:56:01

EclipseRCPECF

2011-11-21 10:25:29

iCloud

2012-02-13 15:50:59

2018-05-04 15:57:42

AI智慧谷歌

2021-03-22 07:45:05

Sentinel微服務開源的項目

2022-07-08 15:13:21

DockerLinux命令

2019-10-25 09:50:03

網絡爬蟲蜘蛛Wi-Fi

2018-01-26 08:54:29

存儲SSDHDD

2021-07-29 06:56:36

分布式系統腦裂

2024-05-29 08:56:31

2022-03-14 17:56:15

云廠商系統阿里云

2021-05-17 18:27:20

Token驗證HTTP

2022-05-10 09:16:50

MQ內存消費者

2022-02-07 09:40:10

高可用高并發高性能

2021-07-14 18:21:50

負載均衡TCP網關

2020-10-29 07:03:56

Docker容器存儲

2021-01-29 12:24:22

電腦電子計算機
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品成人免费 | 中文在线a在线 | 日韩欧美三区 | 在线成人 | 国产成人一区二区三区久久久 | 激情欧美日韩一区二区 | 日本天天操 | 精品成人佐山爱一区二区 | 成人国产一区二区三区精品麻豆 | 国产精品亚洲精品 | 精品国产免费人成在线观看 | 午夜小视频在线播放 | 亚洲人成网站777色婷婷 | 久久手机视频 | 色婷婷亚洲 | 日韩欧美在线视频 | 国产成人精品综合 | 伊人一区 | 波多野结衣先锋影音 | 国产一二三视频在线观看 | 亚洲综合中文字幕在线观看 | 国产精品综合 | 日韩性在线 | www.av在线| 国产精品成人一区二区 | 国产色爽 | 中文字幕在线视频免费观看 | 成人午夜性成交 | 国产免费av在线 | 久久久成人免费一区二区 | 国产成人精品一区二区三区网站观看 | 日韩1区| 精品国产色| 大吊一区二区 | 国产亚洲网站 | 日韩在线视频免费观看 | 久久久久无码国产精品一区 | 日韩电影一区 | 成人高清视频在线观看 | 亚洲精品一区二区三区中文字幕 | 国产在线麻豆精品入口 |