### 正向 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 或能够通过端口转发，才能在自己的机器上成功监听