PortBender源代码深度解读理解TCP数据包拦截与重定向的核心逻辑【免费下载链接】PortBenderTCP Port Redirection Utility项目地址: https://gitcode.com/gh_mirrors/po/PortBenderPortBender是一款功能强大的TCP端口重定向工具专为网络安全测试和红队操作设计。这款工具通过深度拦截和修改网络数据包实现了灵活的端口重定向功能让安全研究人员能够模拟复杂的攻击场景和测试网络防御机制。在本文中我们将深入剖析PortBender的源代码揭示其TCP数据包拦截与重定向的核心实现逻辑。 PortBender的基本架构设计PortBender的核心架构基于Windows Filtering Platform (WFP)和WinDivert库构建。整个项目采用模块化设计主要包含以下几个关键组件核心类结构在src/PortBender/PortBender/PortBender.h中我们可以看到PortBender类的核心定义class PortBender { public: PortBender(UINT16 FakeDstPort, UINT16 RedirectPort); PortBender(UINT16 FakeDstPort, UINT16 RedirectPort, std::string Password); void Start(); private: enum class OperatingMode { REDIRECTOR, BACKDOOR }; UINT16 FakeDstPort; OperatingMode Mode; std::string Password; UINT16 RedirectPort; PVOID ProcessPacket(Packet* packet, BOOL redirect); };PortBender支持两种操作模式重定向模式(REDIRECTOR)和后门模式(BACKDOOR)。重定向模式将所有目标端口的流量转发到另一个端口而后门模式则只在收到特定密码包时才激活重定向功能。️ WinDivert驱动层的拦截机制数据包拦截过滤器在src/PortBender/PortBender/PortBender.cpp的Start()方法中PortBender创建了一个精密的过滤器规则sprintf_s(filter, sizeof(filter), ((inbound and tcp.DstPort %d ) or (outbound and tcp.SrcPort %d )), this-FakeDstPort, this-RedirectPort);这个过滤器逻辑非常巧妙入站流量拦截目标端口为FakeDstPort的TCP数据包出站流量拦截源端口为RedirectPort的TCP数据包这样的设计确保了双向流量的完整拦截和重定向。WinDivert初始化在src/PortBender/PortBender/WinDivert.cpp中WinDivert类的构造函数负责初始化驱动连接WinDivert::WinDivert(char *filter) { this-handle WinDivertOpen(filter, WINDIVERT_LAYER_NETWORK, 0, 0); // 设置数据包队列参数 WinDivertSetParam(this-handle, WINDIVERT_PARAM_QUEUE_LEN, 8192); WinDivertSetParam(this-handle, WINDIVERT_PARAM_QUEUE_TIME, 2048); }这里设置了8192个数据包的队列长度和2048毫秒的队列时间确保在高流量环境下也能稳定运行。 数据包解析与处理Packet类的设计在src/PortBender/PortBender/Packet.h中Packet类封装了拦截到的网络数据包class Packet { public: unsigned char packet[MAXBUF]; UINT packet_len; WINDIVERT_ADDRESS addr; PWINDIVERT_IPHDR ip_header; PWINDIVERT_IPV6HDR ipv6_header; PWINDIVERT_ICMPHDR icmp_header; PWINDIVERT_ICMPV6HDR icmpv6_header; PWINDIVERT_TCPHDR tcp_header; PWINDIVERT_UDPHDR udp_header; PVOID payload; UINT payload_len; };这个结构体包含了完整的数据包信息从原始字节数据到各个协议层的头部指针为后续的数据包修改提供了便利。数据包接收与解析在WinDivert::Receive()方法中数据包的接收和解析过程如下Packet* WinDivert::Receive() { Packet *packet new Packet(); // 接收原始数据包 WinDivertRecv(this-handle, packet-packet, sizeof(packet-packet), packet-addr, packet-packet_len); // 解析协议头部 WinDivertHelperParsePacket(packet-packet, packet-packet_len, packet-ip_header, packet-ipv6_header, packet-icmp_header, packet-icmpv6_header, packet-tcp_header, packet-udp_header, packet-payload, packet-payload_len); return packet; } 端口重定向的核心算法数据包修改逻辑PortBender的核心重定向逻辑在ProcessPacket()方法中实现。当检测到需要重定向的连接时工具会修改数据包的端口信息入站数据包修改将目标端口从FakeDstPort改为RedirectPort更新TCP和IP校验和记录连接信息到连接管理器出站数据包修改将源端口从RedirectPort改回FakeDstPort确保响应数据包能够正确返回到原始客户端连接状态管理在src/PortBender/PortBender/ConnectionManager.h中ConnectionManager类负责跟踪所有被重定向的连接状态class ConnectionManager { public: BOOL IsRedirectedConnection(Packet* packet); BOOL IsBackdoorClient(Packet* packet); void AddBackdoorClient(std::string ip); void RemoveBackdoorClient(std::string ip); private: std::vectorConnection* connections; std::vectorstd::string backdoor_clients; };连接管理器维护了两个重要列表connections当前活跃的重定向连接backdoor_clients已认证的后门客户端IP地址 后门模式的智能认证机制密码包检测逻辑PortBender的后门模式实现了一种巧妙的隐蔽通信机制。在Start()方法中后门认证逻辑如下if (this-Mode OperatingMode::BACKDOOR) { std::string ip Utilities::AddressToString(packet-ip_header-SrcAddr); if (packet-tcp_header-Syn packet-tcp_header-Rst !packet-tcp_header-Ack) { if (packet-payload ! NULL) { if (this-Password.length() packet-payload_len) { if (memcmp(this-Password.c_str(), packet-payload, packet-payload_len) 0) { // 认证成功添加或移除客户端 } } } } }这个检测机制有几个精妙之处TCP标志位组合使用SYNRST且没有ACK的标志位组合这是一个非法的TCP状态正常通信中很少出现密码长度匹配要求密码长度与数据包载荷长度完全一致内存比较使用memcmp进行快速密码验证客户端管理后门客户端的管理采用白名单机制当收到正确的密码包时将客户端IP添加到backdoor_clients列表再次收到相同密码包时从列表中移除该客户端只有白名单中的客户端流量才会被重定向 实用工具函数地址转换工具在src/PortBender/PortBender/Utilities.cpp中Utilities类提供了网络地址转换功能std::string Utilities::AddressToString(UINT32 addr) { struct in_addr ip_addr; ip_addr.S_un.S_addr addr; return std::string(inet_ntoa(ip_addr)); }这个函数将32位IP地址转换为点分十进制字符串表示便于日志输出和客户端管理。 性能优化与错误处理数据包队列优化PortBender通过合理设置WinDivert参数来优化性能队列长度8192避免在高流量下丢失数据包队列时间2048ms平衡延迟和吞吐量健壮的错误处理在整个代码中PortBender实现了完善的错误处理机制if (this-handle INVALID_HANDLE_VALUE) { if (GetLastError() ERROR_INVALID_PARAMETER) { std::cout Error invalid filter syntax was used std::endl; ExitProcess(0); } // 其他错误处理... }每个关键操作都有相应的错误检查和清理逻辑确保工具在异常情况下也能优雅退出。 实际应用场景分析SMB中继攻击模拟PortBender最常见的应用场景是模拟SMB中继攻击。通过将445端口的流量重定向到攻击者的8445端口安全团队可以测试网络中的SMB签名配置验证中继攻击的可行性评估防御机制的响应能力隐蔽后门模拟后门模式模拟了高级威胁行为者的持久化技术特别适合红队演练中的隐蔽访问维持安全产品的检测能力测试网络监控系统的告警验证️ 安全考虑与最佳实践使用注意事项权限要求PortBender需要管理员权限运行因为WinDivert驱动需要加载到内核网络影响重定向操作会影响正常的网络通信应在测试环境中使用兼容性确保使用正确架构的WinDivert驱动32位或64位部署建议测试环境验证先在隔离环境中测试配置流量监控部署期间监控网络流量变化清理操作测试完成后及时停止工具恢复网络正常状态 技术亮点总结PortBender的实现展示了几个重要的网络安全编程技术内核级数据包拦截通过WinDivert实现高性能的数据包捕获和修改状态ful连接跟踪准确管理TCP连接状态避免数据包混乱隐蔽通信机制创新的密码包设计实现隐蔽的后门激活双向流量处理完整处理入站和出站流量确保通信完整性 扩展与定制可能性基于PortBender的架构安全研究人员可以进行多种扩展协议扩展支持UDP或其他协议的重定向条件重定向基于数据包内容或流量的智能重定向日志增强更详细的数据包分析和审计日志分布式部署多节点协同的重定向网络通过深入理解PortBender的源代码我们不仅掌握了TCP数据包拦截与重定向的核心技术还能更好地应用这些技术于实际的网络安全测试和防御工作中。这款工具的设计思想和实现细节为网络安全工具开发提供了宝贵的参考价值。【免费下载链接】PortBenderTCP Port Redirection Utility项目地址: https://gitcode.com/gh_mirrors/po/PortBender创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
PortBender源代码深度解读:理解TCP数据包拦截与重定向的核心逻辑
PortBender源代码深度解读理解TCP数据包拦截与重定向的核心逻辑【免费下载链接】PortBenderTCP Port Redirection Utility项目地址: https://gitcode.com/gh_mirrors/po/PortBenderPortBender是一款功能强大的TCP端口重定向工具专为网络安全测试和红队操作设计。这款工具通过深度拦截和修改网络数据包实现了灵活的端口重定向功能让安全研究人员能够模拟复杂的攻击场景和测试网络防御机制。在本文中我们将深入剖析PortBender的源代码揭示其TCP数据包拦截与重定向的核心实现逻辑。 PortBender的基本架构设计PortBender的核心架构基于Windows Filtering Platform (WFP)和WinDivert库构建。整个项目采用模块化设计主要包含以下几个关键组件核心类结构在src/PortBender/PortBender/PortBender.h中我们可以看到PortBender类的核心定义class PortBender { public: PortBender(UINT16 FakeDstPort, UINT16 RedirectPort); PortBender(UINT16 FakeDstPort, UINT16 RedirectPort, std::string Password); void Start(); private: enum class OperatingMode { REDIRECTOR, BACKDOOR }; UINT16 FakeDstPort; OperatingMode Mode; std::string Password; UINT16 RedirectPort; PVOID ProcessPacket(Packet* packet, BOOL redirect); };PortBender支持两种操作模式重定向模式(REDIRECTOR)和后门模式(BACKDOOR)。重定向模式将所有目标端口的流量转发到另一个端口而后门模式则只在收到特定密码包时才激活重定向功能。️ WinDivert驱动层的拦截机制数据包拦截过滤器在src/PortBender/PortBender/PortBender.cpp的Start()方法中PortBender创建了一个精密的过滤器规则sprintf_s(filter, sizeof(filter), ((inbound and tcp.DstPort %d ) or (outbound and tcp.SrcPort %d )), this-FakeDstPort, this-RedirectPort);这个过滤器逻辑非常巧妙入站流量拦截目标端口为FakeDstPort的TCP数据包出站流量拦截源端口为RedirectPort的TCP数据包这样的设计确保了双向流量的完整拦截和重定向。WinDivert初始化在src/PortBender/PortBender/WinDivert.cpp中WinDivert类的构造函数负责初始化驱动连接WinDivert::WinDivert(char *filter) { this-handle WinDivertOpen(filter, WINDIVERT_LAYER_NETWORK, 0, 0); // 设置数据包队列参数 WinDivertSetParam(this-handle, WINDIVERT_PARAM_QUEUE_LEN, 8192); WinDivertSetParam(this-handle, WINDIVERT_PARAM_QUEUE_TIME, 2048); }这里设置了8192个数据包的队列长度和2048毫秒的队列时间确保在高流量环境下也能稳定运行。 数据包解析与处理Packet类的设计在src/PortBender/PortBender/Packet.h中Packet类封装了拦截到的网络数据包class Packet { public: unsigned char packet[MAXBUF]; UINT packet_len; WINDIVERT_ADDRESS addr; PWINDIVERT_IPHDR ip_header; PWINDIVERT_IPV6HDR ipv6_header; PWINDIVERT_ICMPHDR icmp_header; PWINDIVERT_ICMPV6HDR icmpv6_header; PWINDIVERT_TCPHDR tcp_header; PWINDIVERT_UDPHDR udp_header; PVOID payload; UINT payload_len; };这个结构体包含了完整的数据包信息从原始字节数据到各个协议层的头部指针为后续的数据包修改提供了便利。数据包接收与解析在WinDivert::Receive()方法中数据包的接收和解析过程如下Packet* WinDivert::Receive() { Packet *packet new Packet(); // 接收原始数据包 WinDivertRecv(this-handle, packet-packet, sizeof(packet-packet), packet-addr, packet-packet_len); // 解析协议头部 WinDivertHelperParsePacket(packet-packet, packet-packet_len, packet-ip_header, packet-ipv6_header, packet-icmp_header, packet-icmpv6_header, packet-tcp_header, packet-udp_header, packet-payload, packet-payload_len); return packet; } 端口重定向的核心算法数据包修改逻辑PortBender的核心重定向逻辑在ProcessPacket()方法中实现。当检测到需要重定向的连接时工具会修改数据包的端口信息入站数据包修改将目标端口从FakeDstPort改为RedirectPort更新TCP和IP校验和记录连接信息到连接管理器出站数据包修改将源端口从RedirectPort改回FakeDstPort确保响应数据包能够正确返回到原始客户端连接状态管理在src/PortBender/PortBender/ConnectionManager.h中ConnectionManager类负责跟踪所有被重定向的连接状态class ConnectionManager { public: BOOL IsRedirectedConnection(Packet* packet); BOOL IsBackdoorClient(Packet* packet); void AddBackdoorClient(std::string ip); void RemoveBackdoorClient(std::string ip); private: std::vectorConnection* connections; std::vectorstd::string backdoor_clients; };连接管理器维护了两个重要列表connections当前活跃的重定向连接backdoor_clients已认证的后门客户端IP地址 后门模式的智能认证机制密码包检测逻辑PortBender的后门模式实现了一种巧妙的隐蔽通信机制。在Start()方法中后门认证逻辑如下if (this-Mode OperatingMode::BACKDOOR) { std::string ip Utilities::AddressToString(packet-ip_header-SrcAddr); if (packet-tcp_header-Syn packet-tcp_header-Rst !packet-tcp_header-Ack) { if (packet-payload ! NULL) { if (this-Password.length() packet-payload_len) { if (memcmp(this-Password.c_str(), packet-payload, packet-payload_len) 0) { // 认证成功添加或移除客户端 } } } } }这个检测机制有几个精妙之处TCP标志位组合使用SYNRST且没有ACK的标志位组合这是一个非法的TCP状态正常通信中很少出现密码长度匹配要求密码长度与数据包载荷长度完全一致内存比较使用memcmp进行快速密码验证客户端管理后门客户端的管理采用白名单机制当收到正确的密码包时将客户端IP添加到backdoor_clients列表再次收到相同密码包时从列表中移除该客户端只有白名单中的客户端流量才会被重定向 实用工具函数地址转换工具在src/PortBender/PortBender/Utilities.cpp中Utilities类提供了网络地址转换功能std::string Utilities::AddressToString(UINT32 addr) { struct in_addr ip_addr; ip_addr.S_un.S_addr addr; return std::string(inet_ntoa(ip_addr)); }这个函数将32位IP地址转换为点分十进制字符串表示便于日志输出和客户端管理。 性能优化与错误处理数据包队列优化PortBender通过合理设置WinDivert参数来优化性能队列长度8192避免在高流量下丢失数据包队列时间2048ms平衡延迟和吞吐量健壮的错误处理在整个代码中PortBender实现了完善的错误处理机制if (this-handle INVALID_HANDLE_VALUE) { if (GetLastError() ERROR_INVALID_PARAMETER) { std::cout Error invalid filter syntax was used std::endl; ExitProcess(0); } // 其他错误处理... }每个关键操作都有相应的错误检查和清理逻辑确保工具在异常情况下也能优雅退出。 实际应用场景分析SMB中继攻击模拟PortBender最常见的应用场景是模拟SMB中继攻击。通过将445端口的流量重定向到攻击者的8445端口安全团队可以测试网络中的SMB签名配置验证中继攻击的可行性评估防御机制的响应能力隐蔽后门模拟后门模式模拟了高级威胁行为者的持久化技术特别适合红队演练中的隐蔽访问维持安全产品的检测能力测试网络监控系统的告警验证️ 安全考虑与最佳实践使用注意事项权限要求PortBender需要管理员权限运行因为WinDivert驱动需要加载到内核网络影响重定向操作会影响正常的网络通信应在测试环境中使用兼容性确保使用正确架构的WinDivert驱动32位或64位部署建议测试环境验证先在隔离环境中测试配置流量监控部署期间监控网络流量变化清理操作测试完成后及时停止工具恢复网络正常状态 技术亮点总结PortBender的实现展示了几个重要的网络安全编程技术内核级数据包拦截通过WinDivert实现高性能的数据包捕获和修改状态ful连接跟踪准确管理TCP连接状态避免数据包混乱隐蔽通信机制创新的密码包设计实现隐蔽的后门激活双向流量处理完整处理入站和出站流量确保通信完整性 扩展与定制可能性基于PortBender的架构安全研究人员可以进行多种扩展协议扩展支持UDP或其他协议的重定向条件重定向基于数据包内容或流量的智能重定向日志增强更详细的数据包分析和审计日志分布式部署多节点协同的重定向网络通过深入理解PortBender的源代码我们不仅掌握了TCP数据包拦截与重定向的核心技术还能更好地应用这些技术于实际的网络安全测试和防御工作中。这款工具的设计思想和实现细节为网络安全工具开发提供了宝贵的参考价值。【免费下载链接】PortBenderTCP Port Redirection Utility项目地址: https://gitcode.com/gh_mirrors/po/PortBender创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考