ysoserial-URLDNS學習


簡述

ysoserial很強大,花時間好好研究研究其中的利用鏈對於了解java語言的一些特性很有幫助,也方便打好學習java安全的基礎,剛學反序列化時就分析過commoncollections,但是是跟着網上教程,自己理解也不夠充分,現在重新根據自己的調試進行理解,這篇文章先分析URLDNS

利用鏈分析:

 

調用鏈如上圖所示,由hashmap的key進行hash計算時,如果key為URL類的對象,則調用key.hashcode實際為調用了URL類對象的hashcode,從而觸發dns解析,這個手寫exp也比較容易,設置hashCode為1為了putval時候重新計算hash,否則直接返回hashCode就觸發不了dns解析了

 

工具介紹

IDEA

ysoserial jar : https://jitpack.io/com/github/frohoff/ysoserial/master-30099844c6-1/ysoserial-master-30099844c6-1.jar

ysoserial 源碼:https://codeload.github.com/frohoff/ysoserial/zip/master

使用:

ysoserial 是生成反序列化利用數據,就是序列化的數據,而我們的x.txt中就是就是我們的序列化數據

 

 

 

 接下來我們對x.txt進行反序列化操作:

package Reflect;
import java.io.*;
public class readobject {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        ObjectInputStream o = new ObjectInputStream(new FileInputStream("C:/users/kuaile/desktop/x.txt"));
        Object o1 = o.readObject();
        System.out.println(o1);
    }
}

 

 查看我們的dnslog

 

 倒着來分析,為什么能夠發起dns請求,來看urldns類文件

 

首先yso會調用getobjct方法,

URLStreamHandler,引用別人對這個類的理解。

      一般而言, URL 的格式是: protocol://[authority]hostname:port/resource?queryString 。 URL 類能夠解析出 protocol、 hostname 、 port 等信息。 Protocol 決定了交互規范,通用的協議,比如 HTTP 、 File 、 FTP 等協議, JDK 自帶了默認的通訊實現。當然,自定義實現是允許的。 Hostname 和 port 一般用於 Socket 或者基於 Socket 其他協議通訊方式。Resource 即資源上下文。可能讀者利用 URL ,通過指定協議( protocol )來獲取指定資源的讀寫,比如 JDK 內置了HTTP 、 File 、 FTP 等協議的處理方法。

      在成功地構造 URL 實例之后, URL API 中定義了一個 openConnection() 方法,返回一個 java.net.URLConnection 抽象類型的實例。不過,這里 URL 對象是代理對象,實際調用的是, java.net.URLStreamHandler 對象的 openConnection() 方法。

然后實例化了hashmap類,跟進去可以看到,有序列化接口,那就搜索readobject方法

 

 

 

看了一下他反序列化的代碼,

調用putVal方法,進行hash計算

先跟一下hash方法,參數為key, 如果key 是 null 就返回0 否則就返回 hashcode方法處理后的值和h右移再進行亦或

 

 

 

 因為key是java.net.URL對象,我們的key值就是我們的url,就可以跟進一下其中url類的hashcode方法

 

 

 

 判斷hashcode 不等於-1 就返回,如果等於-1 就handler.hashcode,跟一下

 

調用了我們URL對象,

繼續跟下getHostAddress方法:
 

其中InetAddress.getByName(host); 

含義就是相當於進行了一次dns請求

 

 DEBUG跟了一下,

最后是再ser就是我們反序列化的值

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM