### 正向 Shell 和反向 Shell 的区别 **正向 Shell (Bind Shell)** **工作原理** 1. 攻击者在目标主机上执行恶意代码,该代码会开启一个端口并监听,等待连接 2. 攻击者随后从自己的机器上,向目标主机的这个监听端口发起连接 3. 一旦连接建立,攻击者就可以通过这个连接发送命令,并在自己的终端上接收目标主机的输出 ``` A[攻击者] --主动发起连接--> B[目标主机: 监听端口] B --命令输出--> A ``` **优点** - **简单**:一旦端口在目标主机上打开,攻击者就可以直接连接。 **缺点** - **防火墙限制**:这是正向 Shell 最大的问题。许多企业和家庭网络都部署了防火墙,会阻止来自外部的入站连接。目标主机的端口通常是关闭的,或者被严格限制 - **IP 地址不确定**:如果目标主机的 IP 是动态的,攻击者很难持续连接 **反向 Shell (Reverse Shell)** **工作原理** 1. 攻击者首先在自己的机器上,开启一个端口并监听,等待连接 2. 攻击者在目标主机上执行恶意代码,该代码会主动连接攻击者的监听端口 3. 一旦连接建立,攻击者就可以通过这个连接向目标主机发送命令,并接收命令输出 ``` A[攻击者: 监听端口] --等待连接--> B[目标主机] B --主动发起连接--> A A --命令--> B B --命令输出--> A ``` **优点** - **绕过防火墙**:这是反向 Shell 最大的优势。防火墙通常只阻止入站连接,但允许内部主机向外部发起出站连接。这使得反向 Shell 能够轻松穿透大多数防火墙 - **IP 地址不确定**:即使目标主机的 IP 是动态的,只要它能主动连接到攻击者的固定 IP 地址,连接就可以成功建立 **缺点** - **复杂性**:攻击者需要有一个公网 IP 或能够通过端口转发,才能在自己的机器上成功监听