Netcat是一款非常出名的网络工具,简称“NC”,有渗透测试中的“瑞士军刀”之称。它可以用作端口监听、端口扫描、远程文件传输、还可以实现远程shell等功能,一句话描述:“你的想象力是局限NC的瓶颈”。
语法:nc [-hlnruz][-g<网关…>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>][-s<来源位址>][-v…][-w<超时秒数>][主机名称][通信端口…]
参数:
命令:nc -nv Targert_IP Targert_Port
扫描指定主机的单一端口是否开放
命令:nc -v Target_IP target_Port
扫描指定主机的某个端口段的端口开放信息
命令:nc -v -z Target_IP Target_Port_Start - Target_Port_End
扫描指定主机的某个UDP端口段,并且返回端口信息
命令:nc -v -z -u Target_IP Targer_Port_Start - Target_Port_End
扫描指定主机的端口段信息,并且设置超时时间为3秒
命令:nc -vv(v) -z -w time Targer_IP Target_Port_Start - Target_Port_End
注:先设置监听(不能出现端口冲突),之后如果有外来访问则输出该详细信息到命令行
监听本地端口,并且将监听到的信息保存到指定的文件中
命令:nc -l -p Local_Port > Target_File
命令:nc Target_IP Target_Port
之后可以运行HTTP请求
在pop3中,USER使用base64编码,可以使用base64转换编码
user 识别OK
EHLO 由客户端发送,指示 ESMTP 会话开始。服务器可以在它对 EHLO 的响应中表明自己支持 ESMTP 命令。
输入自己的邮箱地址格式连接到服务器就可以发邮件了
远程电子取证信息收集
或者
A:
B:使用管道将ls内容输出
可以将内容保存在ps.txt文件中
A:tar -cvf - music/ | nc -lp 333 -q 1
B:nc -nv 172.21.148.7 333 | tar -xvf -
nc本身不具有加密功能
A:nc -lp 333 | mcrypt --flush -Fbqd -a rijndael-256 -m ecb > a.mp4
B:mcrypt --flush -Fbq -a rijndael-256 -m ecb < a.mp4 | nc -nv 172.21.148.7 333 -q 1
注:加密传输文件需要使用 mcrypt 库,linux 系统默认是没有安装的,需要手动安装。随后和传输文件类似,只需要在传输文件时使用 mcrypt 加密即可。
–flush:清空,不会在本地保存
mcrypt:加密
rijndael-256-m:算法
ecb:加密方法
-F:输出数据
-b:不保留算法信息
-q:关闭一些非严重的警告
-d:解密
直播的功能类似于流媒体
A:cat a.mp4 | nc -lp 333
B:nc -nv 172.21.148.7 333 | mplayer -vo x11 -cache 3000 -
B就会播放a.mp4文件
远程电子取证,可以将目标服务器硬盘远程复制,或者内存。
使用方法需要借助 dd 命令,首先通过 nc 监听一个端口,然后通过 dd 指定要克隆的分区,dd 的 of 参数相当于一个复制功能,然后再另一台机器通过 nc 连接此端口,dd 的 if 参数相当于粘贴的命令。格式如下:
A:nc -lp 333 | dd of = /dev/sda
B:dd if = /dev/sda | nc -nv 172.21.148.7 333 -q 1
通常情况下,一般的服务器都会有防火墙,很少会允许其他外在的机器来连接自己的某一个端口,只有某些指定端口可能会允许访问,例如 web 服务的 80 端口。这时正向的 shell 就不不起作用了,而防火墙一般都会禁止外在机器来连接自己机器的其他端口,但自己的机器访问外面的端口一般不会做限制,这时候就可以使用反向 shell,也就是攻击者指定一个端口和 bash,让目标服务器来连接自己,这样就可以写一个脚本放到目标服务器的开机启动中,只要目标服务器运行就会连接自己。当然,有些管理员安全意思比较好的话,也会限制自己的服务器访问外在的一些端口,这种情况很少见,但也有,这时可以指定常用的端口,例如服务器要使用 dns 服务的 53 端口,这时候自己就可以监听 53 让目标服务器来连接自己
正向
Nc缺乏加密和身份验证的能力
1. 明文传输,可能会被嗅探
2. 对于反向 shell,如果其他人通过网络扫描发现了这个端口,也就意味着任何人都可以去监听这个端口进行连接,缺乏身份验证功能。
Ncat包含与nmap工具包中
ncat 不是 linux 系统自带的命令,而是 nmap 中的。ncat 中很多参数和 nc 一样,其中可以通过 --alow 参数来指定允许连接的机器,通过 --ssl 进行数据的加密
A:ncat ncat -c bash --allow 172.21.148.7 -vnl 333 --ssl
B:ncat -nv 172.21.148.5 333 --ssl
通过 allow 参数即可指定允许连接的机器,这时如果其他人即使扫描到了这个端口也无法进行连接。
A:ncat -c bash --allow 172.21.148.12 -vnl 333 --ssl
B:ncat -nv 172.21.148.7 333 --ssl
客户端 ip 是5,当服务器只允许12时,再连接就会提示失败。
nc 小巧功能强大,所以被成为瑞士军刀,不足之处是明文传输,也没有相关的身份验证,而 ncat 在 nc 基础上弥补了其不足,nc 可以做的 ncat 也可以做到,所以 ncat 被成为 21 世纪的瑞士军刀。