防火墙不是渗透墙,它是测试一组规则。你看到的绕过“拦截”,本质上是防火某个数据包在某个阶段匹配了某条策略,然后被丢进垃圾桶。渗透绕过它的测试第一步,是绕过搞清楚它到底在哪一层工作。
我见过太多人一上来就掏Nmap扫端口,防火结果被IPS封了IP还浑然不知。渗透真打起来,测试先得摸清楚对面是绕过什么设备。Cisco ASA、防火Palo Alto、渗透iptables、测试云WAF,绕过行为差异大了去了。比如云WAF通常只处理HTTP/HTTPS,你一个ICMP包过去它根本不理你。而iptables要是没放行ICMP,ping都不通。
有个客户,出口是FortiGate,策略写得挺细,但管理员忘了限制出站DNS。我把C2流量封装成DNS查询,txt记录里塞base64指令,防火墙日志里全是正常的域名解析。跑了三周没人发现。这就是典型的协议隧道——防火墙允许什么,你就往什么里面藏。
HTTP隧道更老套但依然有效。很多防火墙对80和443是放行的,你拿reGeorg或者Neo-reGeorg传个tunnel.jsp上去,本地起个socks代理,流量全走Web。防火墙看到的是正常的HTTP请求,URL里带点参数而已。除非它做深度包检测,否则根本分不清你是在传文件还是在刷网页。
分片攻击现在不太好使了。老式防火墙重组分片的能力差,你把TCP头拆到两个分片里,第一个分片只放8字节,第二个分片放剩下的,有些设备就直接放行了。但现代防火墙基本都能重组,这招只能碰运气。不过碰上那种老旧的嵌入式设备,还是能试试。
源端口欺骗是个偏门。有些防火墙规则写得粗,只允许源端口53的UDP出站,觉得那是DNS。你把C2的UDP包源端口改成53, destination端口随便写,它可能就放行了。我试过在某个工控环境里用这招,防火墙是某国产厂商的,规则里只写了“允许UDP 53”,没限制目标端口。结果我拿53源端口打到了外网的高位端口,数据直接出去了。
还有更简单的——找条不需要绕的路。防火墙再严,总得放行管理流量吧?SSH、RDP、VPN,这些端口通常开着。你要是能拿到一个低权限账户,直接连上去,后面的事就不用跟防火墙较劲了。我见过一个环境,防火墙把外网到内网的端口全封了,但内网到内网的3389没限制。我拿下一台跳板机之后,直接RDP横向到域控,防火墙全程没参与。
物理隔离也别忽略。有的客户觉得防火墙扛住了就万事大吉,结果无线网卡没关。我插个USB网卡,连上他们的访客WiFi,发现访客网络和办公网络之间只有ACL没有防火墙,直接二层打通。防火墙?它只管有线那一段。
说来说去,绕过防火墙的核心就一句话:找到它没管住的那条路。它管TCP,你就走UDP;它管UDP,你就走ICMP;它管ICMP,你就走DNS;它什么都管,你就找它信任的东西——管理通道、出站白名单、或者干脆一个没关的无线。
别把防火墙想得太神。它就是个过滤器,是人配的。人就会犯错。你的任务不是打败它,是找到配错的那一行。