2017-01-05 14:53:34
来源:pentest.blog 作者:pwn_361
阅读:1177次
点赞(0)
收藏

翻译:pwn_361
预估稿费:260RMB(不服你也来投稿啊!)
投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿
根据纵深防御的概念,一个保护重要服务的多层安全架构,在信息技术领域具有重要地位。基于此,在建设企业网络时,关键系统不能与其他系统在同一网络中。在这篇文章中,我们将结合实例,分析通过使用双网卡的跳板主机,攻击者如何无障碍的访问内部其他网络。
什么是路由?
确定不同网络中的设备如何相互通信的过程称为路由。通常由路由器来执行具体操作。路由器通过路由表将不同的数据包发送到各自的目的地。当然,路由功能不仅可以在设备中实现,比如路由器,也可以安装在操作系统中,在电脑中实现。

根据上图中的例子,为了在192.168.1.0/24和192.168.10.0/24两个网络之间进行通信,就需要一个路由表。根据路由器里面定义好的规则,数据需要从192.168.1.0/24源网络发到192.168.10.0/24目的网络中去。
网络数据包会经历如下过程:
1.这个IP地址是否在本地网络中?
如果在,直接发过去,如果不在,将数据包发送到网关。
2.当路由器收到数据包,首先查看自己的路由表
我有目的IP地址或目的网络的路由规则吗?如果有,将这个数据包路由到目的地址。如果没有,发送到下一网关。
3.其它的路由器重复同样的过程
4.数据包最后到达的路由器负责数据包退出互联网机制。
什么是双网卡中转跳板主机?

通常,在正常访问网络的过程中,通过已经被攻破的计算机,有些网络我们也不容易进去。如果已经控制的计算机连接着多个网络,那么网络隔离就没有什么用,因为如果控制了这个主机,把这个主机做为跳板,就可以横跨多个网络,只要有这个中转跳板,各种防护方法,都形同虚设。通过这种双网卡中转跳板方式,攻击者在受影响的系统上执行路由,就可以访问到隐藏的网络。对新发现的网络的每一个请求都通过这个数据中转跳板来传输,这就像是一个隧道。

如上图,有一个设备有两个网卡,能同时访问到192.168.1.0/24和192.168.10.0/24两个网络。在正常情况下,这两个网络之间没有访问权限,除非定义了路由规则。根据这种结构,这个双网卡的用户,能访问到在DMZ区的一些服务。
攻破第一个数据中转跳板主机(双网卡主机)
根据我们的攻击方案,我们首先攻破了RD系统,并返回了meterpreter SHELL ,同时RD能连接到DMZ区。

然后,我们通过信息收集,确定了RD系统有两个网卡。如下图所示:

攻击者已经获得了RD系统的权限,下一步用第二个网卡,攻击7.7.7.0/24网络。当然,对于攻击者,首先需要在RD上定义路由规则。
在Metasploit里,这非常简单。通过当前的meterpreter会话,输入下面的命令,就可以创建路由规则。

根据定义的路由规则,只要ID是2的meterpreter会话一直在运行,攻击者在Metasploit 框架中,就可以访问到7.7.7.0/24网络。
然后,用一些后渗透模块,如arp_scanner,扫描7.7.7.0/24网络中的存活主机,发现了7.7.7.0/24网络中存在多个存活主机。

如上图,发现名为JC的系统主机。

通常,到这一步,会想到下面的问题;像arp_scanner这样的后渗透扫描模块,功能还不够用,能用nmap这样的扫描工具吗?
通过中转跳板,用nmap扫描远程主机
为了实现这个目的,Metasploit中的路由配置必须是存活的,同时这个配置在socks4代理下也要发挥作用。这需要用到另一个metasploit模块。
使用metasploit中的socks4代理模块,如下图:

在ProxyChains 工具的帮助下,通过TOR、SOCKS4、SOCKS5、HTTP或HTTPS传输的任何TCP数据都可以路由到目的地。这个隧道技术可以使用多个代理服务器。

在/etc/proxychains.conf文件的最后一行,在这里要设置socks4 代理服务器信息。

在ProxyChains下执行nmap扫描是一个简单的过程,通过定义的代理,网络数据包会被传输到目的地。

根据扫描结果,目标系统中运行着SSH和HTTP服务,在对目标进行攻击前,我们介绍另一种数据路由技术--“端口转发”。
端口转发
端口转发是建立数据跳板的基本步骤。此时,攻击者跨网段,还没法直接访问到隐藏网络中的服务,因为还没有建立双向路由。我们知道如何到达目标系统,并发送一个请求,但是我们的请求包得不到回应,因为目标系统不知道怎么返回给我们。

基于这个原因,我们需要在本地开启一个端口,通过meterpreter会话,我们可以将本地的数据包发送到目的地,建立完整的连接。只要我们的meterpreter会话是存活的,这个路由就会一直存在。
有一点需要说明一下,我们用“run autoroute”建立的路由只对Metasploit框架本身起作用。如果我们想用kali下的其他工具,就需要使用端口转发或proxychains工具,而我们在这篇文章中建立的多跳板,大数据时候是为kali下的其他工具准备的。
我们可以使用portfwd模块来建立端口转发,这是Metasploit下的一个后渗透模块。

前面已经讲到,在ProxyChains和Nmap的帮助下,我们知道7.7.7.20主机上存在HTTP服务,80端口是打开的,下面我们通过,建立端口转发,访问7.7.7.2主机的80端口。

如上图,输入上面的命令后,我们访问本地的2323端口,实际上就是在访问7.7.7.2主机的80端口。
通过“portfwd list”命令可以查看当前存活的转发规则:

在浏览器中访问7.7.7.20的80端口时,发现是一个“Eash File Sharing Web Server”服务。

通过数据中转跳板进行SSH暴力破解
从扫描结果,我们已经知道在7.7.7.20上运行着SSH服务,对SSH进行暴力破解是比较容易实现的。
使用SSH_enumusers模块就可以实现:

除了Metasploit框架中的SSH_enumusers模块,我们同样可以用kali下的Hydra工具,需要在ProxyChains下运行Hydra,所有通信数据都会经过数据中转跳板(被控的双网卡主机)。

如上图所示,破解出的SSH帐号是admin,密码是123456。同样,通过代理服务,用ProxyChains工具可以连接到远程的SSH服务。如下图:

攻破第二个数据中转跳板主机(双网卡主机)
根据上面nmap的扫描结果,7.7.7.20主机上存在两个漏洞,分别是MS08_067漏洞和“Easy File Share”应用程序的BOF漏洞,两种方法都可以攻破目标主机,当然也可以通过上面的SSH。
通过MS08_067 + bind_tcp方式:
针对MS08_067漏洞,在Metasploit中有成熟的工具模块,该模块是“ms08_067_netapi”。要注意,在这里我们只能用bind_tcp载荷,因为我们没有定义双向路由,目标系统没法找到我们。但是我们可以找到目标主机,只要它开启一个端口能让我们连接就行,因此我们使用bind_tcp载荷。
bind_tcp和reverse_tcp的区别可以从下面的图中理解到:

如下,我们配置好参数,进行攻击:

通过“Easy File Share”BOF漏洞方式:
同样,需要设置为bind_tcp,Metasploit中有现成的漏洞利用模块,如下:

在这里,我们的攻击数据流如下图所示:

当我们攻破了7.7.7.20主机时,需要收集主机信息,发现该主机也是一个双网卡主机,就像RD主机一样,因此我们发现了第二个隐藏网络(8.8.8.0/24)。

继续收集信息,用arp_scanner扫描存活主机:

如上图,在8.8.8.0/24网络中发现4台主机。
同样,我们需要在JC系统上添加路由规则(至此,两个跳板主机上都分别添加了不同路由)。

数据跳两次(双网卡主机)
在第一波攻击中,我们已经建立了172.16.0.0/24网络到7.7.7.0/24网络的路由,而现在,我们在JC上收集信息时,又发现了一个网络(8.8.8.0/24)。
在当前的情况下,数据包从攻击者(172.16.0.20)发到JC主机(第二波攻破的主机),数据首先要发到RD主机(第一波攻破的主机),然后RD主机再将数据传送到JC主机。
如果攻击者(172.16.0.20)想将数据发送到8.8.8.0/24网络(第二个隐藏网络)的任何一个主机时,就必须建立一个新的路由规则。这主要是为了使用Metasploit框架以外的其他工具,我们必须新建一个socks4代理服务,用于连接两个跳板主机,并重新定义proxychains工具的配置文件。
例如,如果攻击者(172.16.0.20)要给8.8.8.9地址发送数据包,要经过以下两点:
RD:我不知道怎么访问到8.8.8.9,但我知道哪个系统能访问到它,我可以将数据发给它。
JC:我知道怎么将数据从7.7.7.0/24网络发送到8.8.8.0/24网络。
数据流如下图所示:

牛逼的Proxychains工具
Proxychains工具能连接代理服务,并可以将数据从攻击者发送到第二个隐藏网络中。当然,还需要设置一下,为了能访问到8.8.8.0/24网络,在攻击端,我们还需要创建一个新的socks4代理服务(第一波攻击时已经建立了一个),不同的是,这次需要改一下端口(运行在不同端口上),在这里我们改成1081,第一次建的端口是1080。

同时,在/etc/proxychains.conf中添加新的代理配置信息。通过激活动态链配置,确保能正确切换不同的代理服务。

通过一系列的配置,现在,用Proxychains工具通过多个跳板,就可以访问到8.8.8.0/24网络了,下面我们用nmap扫描一下8.8.8.9目标信息,如下图:

正如上图你所看到的,数据包穿过第一次代理服务,又经过了第二次代理服务,最终,到达了目的地。查看扫描结果,发现8.8.8.9上vsftpd对应的版本存在漏洞。
首先在Metasploit框架中设置好相关攻击参数,如下图,开始攻击:

综述
攻击者通过以下步骤,发现了2个不同的内部核心隐秘网络:
1.首先,攻击者攻破了RD主机,该主机和攻击机在同一个网络中。
2.然后,他了解到RD主机有2个网卡。
3.通过使用autoroute后渗透模块,在172.16.0.11上定义了一个路由规则。
4.攻击者对7.7.7.0/24网络执行ARP和NMAP扫描,发现了JC主机。
5.JC有两个不同的漏洞,分别是MS08_067和“Easy File Share”漏洞。
6.成功执行了MS08_067漏洞,得到了7.7.7.20的控制权。
7.收集JC主机信息,发现JC有2个网卡。
8.在7.7.7.20上添加了第二个路由。
9.对8.8.8.0/24网络执行ARP和NMAP扫描。
10.在名称为SK的8.8.8.9主机上发现vsftp漏洞。
11.结束。

正常情况下,虽然攻击者的系统只能访问他所在的网络,但是通过攻击,结果是他最终又成功访问了2个隐藏的网络。
演示视频
为了帮助大家更好学习、理解,我按照步骤做了下面的视频:
防御措施
1.包含多个网卡,并提供DMZ访问权限的系统,应该从现有网络架构中清除。
2.DMZ区的系统最好只能访问DMZ区。


本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:https://pentest.blog/explore-hidden-networks-with-double-pivoting/