Added very, very basic C2 capability
This commit is contained in:
@@ -104,8 +104,12 @@ pub fn spawn_connection_handler(
|
||||
use packets::*;
|
||||
let packet = connection_packet.pkt();
|
||||
|
||||
let Layer3Pkt::IPv4Pkt(ip_pkt) = packet.get_layer3_pkt()?;
|
||||
let Layer4Pkt::UDP(udp_pkt) = ip_pkt.get_layer4_packet()?;
|
||||
let Layer3Pkt::IPv4Pkt(ip_pkt) = packet.get_layer3_pkt()? else {
|
||||
todo!()
|
||||
};
|
||||
let Layer4Pkt::UDP(udp_pkt) = ip_pkt.get_layer4_packet()? else {
|
||||
todo!()
|
||||
};
|
||||
|
||||
let data = udp_pkt.get_data();
|
||||
|
||||
@@ -197,8 +201,12 @@ fn authenticate<F: Fn()>(
|
||||
Ok(p) => {
|
||||
use packets::*;
|
||||
let p = p.pkt();
|
||||
let Layer3Pkt::IPv4Pkt(ip_pkt) = p.get_layer3_pkt()?;
|
||||
let Layer4Pkt::UDP(udp_pkt) = ip_pkt.get_layer4_packet()?;
|
||||
let Layer3Pkt::IPv4Pkt(ip_pkt) = p.get_layer3_pkt()? else {
|
||||
todo!()
|
||||
};
|
||||
let Layer4Pkt::UDP(udp_pkt) = ip_pkt.get_layer4_packet()? else {
|
||||
todo!()
|
||||
};
|
||||
|
||||
let Ok(data) = conninfo.try_decrypt_and_verify(udp_pkt.get_data()) else {
|
||||
counter += 1;
|
||||
@@ -245,8 +253,12 @@ where
|
||||
let msg = packet_handler.recv()?;
|
||||
let pkt = msg.pkt();
|
||||
|
||||
let Layer3Pkt::IPv4Pkt(ip_pkt) = pkt.get_layer3_pkt()?;
|
||||
let Layer4Pkt::UDP(udp_pkt) = ip_pkt.get_layer4_packet()?;
|
||||
let Layer3Pkt::IPv4Pkt(ip_pkt) = pkt.get_layer3_pkt()? else {
|
||||
todo!()
|
||||
};
|
||||
let Layer4Pkt::UDP(udp_pkt) = ip_pkt.get_layer4_packet()? else {
|
||||
todo!()
|
||||
};
|
||||
|
||||
if ip_pkt.source_ip() != conninfo.srcip || udp_pkt.srcport() != conninfo.srcport {
|
||||
continue;
|
||||
|
||||
@@ -110,8 +110,12 @@ impl InterfaceSender {
|
||||
Self::RawUdp(interf) => Ok(interf.sendpacket(packet)?),
|
||||
Self::Udp(interf) => {
|
||||
use packets::*;
|
||||
let Layer3Pkt::IPv4Pkt(ip_pkt) = packet.get_layer3_pkt()?;
|
||||
let Layer4Pkt::UDP(udp_pkt) = ip_pkt.get_layer4_packet()?;
|
||||
let Layer3Pkt::IPv4Pkt(ip_pkt) = packet.get_layer3_pkt()? else {
|
||||
todo!()
|
||||
};
|
||||
let Layer4Pkt::UDP(udp_pkt) = ip_pkt.get_layer4_packet()? else {
|
||||
todo!()
|
||||
};
|
||||
|
||||
let addr = SocketAddrV4::new(ip_pkt.dest_ip(), udp_pkt.dstport());
|
||||
|
||||
|
||||
@@ -49,7 +49,9 @@ fn main() -> anyhow::Result<()> {
|
||||
let (kill_connection, kill_connection_recv) = channel::<(Ipv4Addr, u16)>();
|
||||
|
||||
thread::spawn(move || loop {
|
||||
let Ok(packet) = recv_eth_packet.recv() else { continue };
|
||||
let Ok(packet) = recv_eth_packet.recv() else {
|
||||
continue;
|
||||
};
|
||||
if let Err(_) = interface_sender.sendpacket(packet.pkt()) {}
|
||||
});
|
||||
|
||||
@@ -57,7 +59,9 @@ fn main() -> anyhow::Result<()> {
|
||||
s.spawn({
|
||||
let connections = &connections;
|
||||
move || loop {
|
||||
let Ok(connection) = kill_connection_recv.recv() else { continue };
|
||||
let Ok(connection) = kill_connection_recv.recv() else {
|
||||
continue;
|
||||
};
|
||||
if let Ok(mut e) = connections.lock() {
|
||||
e.remove(&connection);
|
||||
}
|
||||
@@ -70,8 +74,12 @@ fn main() -> anyhow::Result<()> {
|
||||
|
||||
let pkt = pkt.pkt();
|
||||
|
||||
let Layer3Pkt::IPv4Pkt(ip_pkt) = pkt.get_layer3_pkt()?;
|
||||
let Layer4Pkt::UDP(udp_pkt) = ip_pkt.get_layer4_packet()?;
|
||||
let Layer3Pkt::IPv4Pkt(ip_pkt) = pkt.get_layer3_pkt()? else {
|
||||
todo!()
|
||||
};
|
||||
let Layer4Pkt::UDP(udp_pkt) = ip_pkt.get_layer4_packet()? else {
|
||||
todo!()
|
||||
};
|
||||
|
||||
let connection_handle = &(ip_pkt.dest_ip(), udp_pkt.srcport());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user